您将如何设置 iptables 来将某些端口(比如 tcp 端口 80)的数据包发送到正确的机器(这些机器并不都在同一个子网中)?
例如:
iptables -t nat -A PREROUTING -s 0.0.0.0//0 -p tcp -d $NATIP -j DNAT --to-destination $machineIP
iptables -t nat -A POSTROUTING -s $machineIP -p tcp -d 0.0.0.0//0 -j SNAT --to-source $NATIP
上述方法可以正确地将数据包发送到一台机器或从一台机器发送数据包,但对于 n 台机器,该如何操作呢?我不认为像 192.168.1.0/25 这样的通用目的地可以正常工作。
您是否以某种方式标记了数据包,以便当它们返回时,您可以将它们发送到正确的 IP?
这是通过其他命令完成的吗?
答案1
首先要考虑一些事项。如果您0.0.0.0/0
有源或目标,则不必在规则中指定它。
现在考虑一下你的问题,如果你NATIP
为每台机器都设置了一条规则,那么就只需要为每台机器设置一对规则即可。如果你想NATIP
对多台机器使用相同的规则,你需要一些东西来区分,如果不是端口,那么就是源 IP。否则 iptables 本身就无法选择将包发送到哪里。(稍后会回到这个问题)
为了制作输出 NAT,您可以为每台机器制定一条规则,或者创建一个表并在其中设置您想要转换的所有 IP 和子网。
iptables -t nat -N addrTranslate
iptables -t nat -A OUTPUT -s x.x.x.x -j addrTranslate
iptables -t nat -A OUTPUT -s y.y.y.y/24 -j addrTranslate
iptables -t nat -A addrTranslate -j SNAT --to z.z.z.z
对于具有单个 IP 地址的多台机器 NAT 来说,一种替代方法是使用 apache 设置代理。