我目前正在尝试解决以下问题,但是我的 google/SO 搜索到目前为止尚未找到匹配的场景:
从我的 Linux 主机,我必须到达目标主机 172.19.28.152。但是,由于公司网络的复杂性,我必须为该目标使用不同的 IP 地址:10.187.19.132。
我必须在 IP 层解决问题,因为应用程序不允许更改目标(它将始终使用 172... IP 地址,并且在我的场景中我无法更改该行为)。此外,应用程序不允许我指定 DNS 名称。
因此,我想配置 nftables 来执行以下操作:
如果数据包离开我自己的主机,目的地是 172.19.28.152,则将目标 IP 替换为 10.187.19.132。当目标回复时,将 10.187.19.132 重写为原始的 172.19.28.152 (NAT) 我的问题是我无法弄清楚这种规则的语法。
让我用另一种方式来表述:您希望某个远程主机看起来好像位于与您实际需要访问的 IP 地址不同的 IP 地址下。
这是标准
DNAT
类型的翻译,在 nftables 中它看起来像下面这样你可能
OUTPUT
需要使用之前创建的链;nftables 不提供默认链。可以使用类似下面的命令创建如果您只需要从您这边与该系统建立通信,则不需要任何其他规则。连接跟踪器将添加预期记录,因此回复将被捕获并正确翻译回来。
另一方面,如果遥控器也应该能够与您的机器启动通信,则相反,您需要一条类似
SNAT
以下的规则:POSTROUTING
再次,必须用你之前创建的相应函数链替换,如下所示: