![(v)map에서 컬렉션을 키로 사용하는 방법은 무엇입니까?](https://linux55.com/image/193244/(v)map%EC%97%90%EC%84%9C%20%EC%BB%AC%EB%A0%89%EC%85%98%EC%9D%84%20%ED%82%A4%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
예를 들어 사람들은 다음을 수행할 수 있습니다.
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
가능성이 높아짐에 따라 작동합니다.