(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가능성이 높아짐에 따라 작동합니다.

관련 정보