在Linux上使用多个上行链路进行NAT

目前,我在服务器上有3个网卡,1个连接到adsl调制解调器(eth0),另一个连接到光纤(ppp0),另一个连接到LAN(eth2)。

我已经build立了所有的接口,路由和规则( http://www.linux.org/PRIVOXY-FORCE/docs/ldp/howto/Adv-Routing-HOWTO/lartc.rpdb.multiple-links。 HTML ),它完美的作品。 我可以外部连接到两个主机没有任何问题,但我现在面临另一个问题…

我只能将主机上的NAT设置为主表的默认路由。 例如,如果我使用这些规则:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:8080 iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2:8080 

它的工作取决于默认的路线。 如果默认路由是通过eth0,则来自ppp0的传入连接不会被redirect到LAN机器。 而且,如果默认路由是通过ppp0,那么来自eth0的连接将不会被redirect。 我有一个网关configuration为默认路由的每个提供商的表,但它似乎不工作的NAT。

有没有人有一个想法来解决这个问题?

如果你已经正确设置了你的路由,“默认路由”是没有意义的。 困难来自eth0和ppp0都可能由DHCP设置的事实,这将覆盖你设置的任何东西。

你应该为所有你设置的表格提供“ip route show”的输出,以及“ip rule show”和你在安装过程中做的任何事情。

顺便说一句,你张贴的链接不适合我, 这个

我使用CONNMARK ,防火墙标记和多个路由表完成了这个工作。

即使对于PPP和DHCP接口也很好。