我无法从本地网络访问我的公共 IP

我无法从本地网络访问我的公共 IP

我使用一台具有两个不同互联网连接的 Linux 机器作为本地网络的默认网关。每个互联网连接都有自己的公共 IP 地址。我使用带有“ip rule”命令的源路由来平衡这两个互联网连接之间的传出流量。

eth0是本地网络,eth1和ppp0连接互联网,linux机器本身使用eth1连接互联网。

一切工作正常,除了我无法从本地网络访问 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 x.x.x.x 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 x.x.x.x dev ppp0  proto kernel  scope host  src x.x.x.x 
...

其中 xxxx 是 ppp0 公共 IP 地址。我在这里做错了什么?为什么我无法从本地网络 ping ppp0 公共 IP 地址,但我可以从外部网络 ping 它?

更新:我使用两个 iptables 命令来设置 NAT。我不确定这是否是正确的方法,但它对我有用:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

更新 2:当我从本地网络上的一台机器 ping ppp0 公共 IP 地址时,网关上的 tcpdump 输出表明数据包从本地网络正确到达,但似乎内核没有将它们传送到应用程序层。

答案1

你需要使用发夹型NAT在这种情况下。请注意,PCI-DSS 不允许这种类型的 NAT 规则。

相关内容