我正在寻找一种方法如何将2个或更多的内部IP地址(在我的情况下是xen dom)转换为一个外部IP地址。
我试图使用
iptables -t nat -A PREROUTING -d 123.123.123.123 -j DNAT – 到1.2.3.4 – 到1.2.3.7
iptables -t nat -A POSTROUTING -s 1.2.3.4 -j SNAT – 到123.123.123.123
iptables -t nat -A POSTROUTING -s 1.2.3.7 -j SNAT – 到123.123.123.123
并得到一个错误:
iptables v1.4.14:DNAT:不支持多个目的地
试试`iptables -h'或'iptables –help'以获取更多信息。
我在手册中find了这个:
后来的内核(> = 2.6.11-rc1)不具备对多个范围进行NAT的能力。
所以我的问题是:为什么不可能了,是否有解决方法? 也许我应该使用其他我还不知道的方法?
编辑:
这个想法是使用像路由器一样的系统,所以我有一个地址,但有多个用户在后面。 问题是我不知道哪个连接受到用户的影响(例如1.2.3.4 )。 但是我知道,他们都有不同的端口可以打开stream量。
所以我的解决scheme(对于DNAT)将是所有到所有用户的传入连接,并过滤所有未使用的端口,所以连接到一个单一的用户。 对于传出stream量,我会使用
iptables -A FORWARD -i eth0 -d 1.2.3.4 -m state –state ESTABLISHED,RELATED -j ACCEPT
当您使用2个内部主机时,您不能仅使用1个外部IP地址进行1对1 NAT。 原因是因为防火墙永远不会有一个真正的外部源连接目标,除非内部主机之一closures。 在这种情况下,您需要2个iptables规则来提供循环function:
$ipt -t nat -A PREROUTING -s $srcip -d $wanip -j DNAT --to 192.168.1.2 $ipt -t nat -A PREROUTING -s $srcip -d $wanip -j DNAT --to 192.168.1.3
此外,您的“DNAT:Multiple To-Destination不受支持”错误来自指定从正在运行的版本(v1.4.14)中删除多个DNAT目的地的function。 此function已被删除,有利于循环function。
如果要允许多个主机连接到Internet,则必须使用NAT表的POSTROUTING链,如下所示:
$ipt -t nat -A POSTROUTING -o $wanif -s $lan_network -j MASQUERADE
MASQUERADE与dynamicIPconfiguration一起使用。 对于静态IP,请使用SNAT代替MASQUERADE:
$ipt -t nat -A POSTROUTING -o $wanif -s $lan_network -j SNAT --to $wanip
但是,这不会使内部主机上的开放端口可用于外部世界。 DNAT用于外部 – >内部,SNAT用于内部 – >外部,用于像您这样的基本场景。
你可以尝试玩TEE的目标,可通过xtables-addons – http://xtables-addons.sourceforge.net/modules.php
将所有来往和来自本地ECHO服务器的stream量复制(复制)到第二个盒子(非最终目标)
# iptables -A PREROUTING -t mangle -p tcp --dport 7 -j TEE --gateway 1.2.3.4 --tee # iptables -A POSTROUTING -t mangle -p tcp --sport 7 -j TEE --gateway 1.2.3.4 --tee