你将如何设置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?
这是用其他命令完成的吗?
首先考虑一下。 如果您有0.0.0.0/0作为源或目标,则不必在规则中指定它。
现在考虑你的问题,如果每台机器都有一个NATIP ,那么这只是为每台机器制定一对规则的问题。 如果你想使用相同的NATIP到多台机器,你需要一些区别,如果不是端口,那么源IP。 否则,iptables本身不能select发送包的位置。 (会回到这个事情)
要制作输出NAT,您可以为每台机器制定一个规则,或者创build一个表并在其中设置您希望翻译的所有IP和子网。
iptables -t nat -N addrTranslate iptables -t nat -A OUTPUT -s xxxx -j addrTranslate iptables -t nat -A OUTPUT -s yyyy/24 -j addrTranslate iptables -t nat -A addrTranslate -j SNAT --to zzzz
多台机器NAT一个IP地址的替代scheme是使用apache设置代理。