You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:49:36