服务器上只有一张表 - “nat”,它只包含两个链:“prerouting”和“postrouting”。 IP 转发已启用。我正在尝试为源 nat 规则设置更具体的条件。当我设定经典规则时:
nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4
一切正常。但我还想指定网络“saddr 192.168.1.0/24”所在的接口。
nft add rule nat postrouting **iif eth1** ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4
当我输入此命令时,程序接受它并且规则出现在表中。但交通不通。有谁知道为什么吗?
答案1
此功能还需要内核 >= 5.5 才能获得足够的 netfilter 支持。描述在kernelnewbies.org:
Linux 5.5被释放2020年1月26日
[...]
网络过滤器
- POSTROUTING 中支持 iif 匹配犯罪
来自提交:
netfilter:支持 POSTROUTING 中的 iif 匹配
通常不要将 NULL 传递给 NF_HOOK_COND() 作为输入设备,而是传递包含路由 skb 的输入设备的 skb->dev 。
请注意,iptables(旧版和 nft)拒绝将输入接口匹配的规则添加到 POSTROUTING 链,但 nftables 允许这样做。
从描述来看,在这次提交之前,netfilter没有提供输入接口,并且表达式iif
从未匹配。