在 iptables 规则中使用“本地计算机的 IP”?

在 iptables 规则中使用“本地计算机的 IP”?

我写了端口转发iptables规则,我计划使用这些规则以自动方式将其推广到多台计算机安西布尔。然而,POSTROUTING链式规则要求将源地址修改为本地机器的地址,以便接收转发的数据包的机器知道在哪里响应。该规则如下所示:

iptables -t nat -A POSTROUTING -d 192.168.11.2 -o eth1 -p tcp --dport 22 -j SNAT --to-source 192.168.11.1

也就是说,在使用 DNAT 将PREROUTING目标地址更改为 192.168.11.2(并ACCEPT对其进行 ing)后,我必须在SNAT将数据包发送到网络之前使用更改网络标头中的源地址。

这个规则可以写成这样象征性地指定--to-source应该是“本地机器的IP”吗?我通过将必要的命令编译成一系列管道命令来实现这一点:

iptables -t nat -A POSTROUTING -d 192.168.11.2 -o eth1 -p tcp --dport 22 -j SNAT --to-source $(ifconfig eth1 | grep -i "inet " | awk '{print $2}')

但是,我的目的是生成一个iptables配置文件,并在可能的情况下将其推广到每台计算机。

答案1

iptables 配置脚本只是 shell 脚本。您可以以“正常”方式将本地 IP 地址添加到变量中:

LOCALIP=`hostname -i`

然后将任何硬编码的 IP 地址实例替换为

$LOCALIP

答案2

您可以使用 MASQUERADE 目标而不是 SNAT。

您可能想阅读SNAT 和 Masquerade 之间的区别然而,MASQUERADE 是有开销的。

相关内容