我使用两台不同的互联网连接的Linux机器作为本地networking的默认网关。 每个互联网连接都有自己的公共IP地址。 我用“ip rule”命令使用源路由来平衡这两个互联网连接之间的输出stream量。
eth0是本地networking。 eth1和ppp0连接到互联网。 linux机器本身使用eth1连接到互联网。
一切工作正常,但我不能从本地networking访问ppp0公共IP:
ping PPP0-PUBLIC-IP #works fine from the linux machine ping PPP0-PUBLIC-IP #works fine from outside network ping PPP0-PUBLIC-IP #**fails** from other machines on local network
也:
$ip rule ls 0: from all lookup local 32763: from xxxx lookup Home 32765: from 192.168.0.208/28 lookup Home 32766: from all lookup main 32767: from all lookup default $ip route show table local ... local xxxx dev ppp0 proto kernel scope host src xxxx ...
其中xxxx是ppp0公共IP地址。 我在这里做错了什么? 为什么我不能从本地networkingping ppp0 pulic IP地址,但我可以从外部networkingping它?
更新 :我使用两个iptables命令来设置NAT。 我不知道这是否是正确的方式,但它适用于我:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
更新2 :当我从本地networking上的一台机器上ping ppp0公共IP地址时,网关上的tcpdump输出指示数据包从本地networking正确到达,但似乎内核没有将它们传送到应用层。
在这种情况下,您需要使用发夹NAT 。 请注意,PCI-DSS不允许使用这种types的NAT规则。