如何在nftables中为源nat规则设置硬条件?

如何在nftables中为源nat规则设置硬条件?

服务器上只有一张表 - “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从未匹配。

相关内容