![在 Linux 上使用多个上行链路进行 NAT](https://linux22.com/image/532849/%E5%9C%A8%20Linux%20%E4%B8%8A%E4%BD%BF%E7%94%A8%E5%A4%9A%E4%B8%AA%E4%B8%8A%E8%A1%8C%E9%93%BE%E8%B7%AF%E8%BF%9B%E8%A1%8C%20NAT.png)
目前,我在服务器上有 3 个 NIC,1 个连接到 adsl 调制解调器(eth0),另一个连接到光纤(ppp0),另一个连接到 LAN(eth2)。
我已经按照这里所述设置了所有接口、路由和规则(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 的传入连接不会重定向到 LAN 计算机。此外,如果默认路由是通过 ppp0,则来自 eth0 的连接将不会被重定向。我为每个提供商都准备了一个表,其中将网关配置为默认路由,但它似乎不适用于 NAT。
有人有办法解决这个问题吗?
答案1
如果您已使用“ip route”正确设置了路由,则“默认路由”毫无意义。困难在于 eth0 和 ppp0 都可能由 DHCP 设置,这将覆盖您已设置的任何内容。
您应该为所有已设置的表提供“ip route show”的输出,以及“ip rule show”和您在设置期间所做的任何其他操作。
顺便说一句,你发布的链接对我来说不起作用,这个
答案2
我已经这样做了使用CONNMARK、防火墙标记和多个路由表。
即使对于 PPP 和 DHCP 接口也能很好地工作。