如何在nftables中跨表引用集合?
如何在nftables中跨表引用集合?
我完全懂你现在的困扰——你在ip filter表里创建了几个IP集合,想在ip nat表的规则里直接复用它们,结果nftables报错说找不到集合,还提示你是不是要找filter表里的那个,对吧?
其实问题很简单:nftables的集合默认是和所属的表绑定的。当你在nat表的规则里写@nat-group-1时,它会默认在ip nat表里找这个集合,可你的集合明明在ip filter表,这不就找不到了嘛。
不过别担心,nftables确实支持跨表引用集合,你只需要在引用的时候完整指定集合所属的表名就行,语法是@<表名>.<集合名>(在同一个协议族下的情况)。
把你的规则修改成下面这样就可以正常工作了:
#!/usr/sbin/nft -f add table ip filter add chain ip filter input { type filter hook input priority 0; } add set ip filter nat-group-1 { type ipv4_addr; } add set ip filter nat-group-2 { type ipv4_addr; } add set ip filter nat-group-3 { type ipv4_addr; } add set ip filter nat-group-4 { type ipv4_addr; } add set ip filter nat-group-5 { type ipv4_addr; } add rule ip filter input ip saddr @nat-group-1 tcp dport 22 drop add table ip nat add chain ip nat postrouting {type nat hook postrouting priority srcnat; policy accept; } # 这里给集合加上了所属表名的前缀,明确告诉nftables去哪找集合 add rule ip nat postrouting ip saddr @filter.nat-group-1 snat to 192.168.1.0/24 persistent add rule ip nat postrouting ip saddr @filter.nat-group-2 snat to 192.168.2.0/24 persistent
这样修改后,nftables就知道要去ip filter表里找对应的集合了,完全不需要重复创建集合,刚好满足你要在两个表里复用集合的需求~
备注:内容来源于stack exchange,提问作者Christopher Causer
相关产品推荐
相关产品推荐

