(v)mapでコレクションをキーとして使用するには?

(v)mapでコレクションをキーとして使用するには?

たとえば、人々は次のことを行うことができます。

ip saddr vmap { 192.168.1.2: goto chain_a, 192.168.1.6: goto chain_b }

しかし、明らかにそうではありません。

ip saddr vmap { { 192.168.1.2, 192.168.1.4 }: goto chain_a,
                { 192.168.1.6, 192.168.1.8 }: goto chain_b }

私は次のことができる人を知っています。

ip saddr vmap { 192.168.1.2: goto chain_a, 192.168.1.4: goto chain_a,
                192.168.1.6: goto chain_b, 192.168.1.8: goto chain_b }

または単に:

ip saddr { 192.168.1.2, 192.168.1.4 } goto chain_a
ip saddr { 192.168.1.6, 192.168.1.8 } goto chain_b

しかし、コレクション(または同様のもの)を(v)マップのキーとして使用する方法があるかどうか疑問に思います。

ベストアンサー1

存在するnftables 1.0.0(2021年8月リリース)次のことができます。

コレクションを含む変数を複数のマップに拡張

define interfaces = { eth0, eth1 }

 table ip x {
       chain y {
               type filter hook input priority 0; policy accept;
               iifname vmap { lo : accept, $interfaces : drop }
       }
}
# nft -f x.nft
# nft list ruleset
table ip x {
      chain y {
               type filter hook input priority 0; policy accept;
               iifname vmap { "lo" : accept, "eth0" : drop, "eth1" : drop }
       }
}

変数の内部ではなくコレクションを使用しても機能するかどうかはわかりませんが、今は新しいバージョンが出るたびにnftables可能性が高くなるにつれて動作します。

おすすめ記事