我有一台运行 Centos7 的 Linux 服务器,它使用 VPN 路由到远程网络中的公共 IP。我想通过使用 PPP 设备的 VPN 连接,从该远程网络上的 IP 地址 NAT 到本地子网。当我的隧道启动时,我可以从公共互联网 ping 203.0.113.5 IP 地址,但我似乎无法使 NAT 语句正常工作。
地图:
203.0.113.1 ROUTER TO INTERNET
|
|eth0 VPN Server Public Interface
-----------------------
|VPN Server |
-----------------------
203.0.113.2 VPN Public IP
||ppp0 Tunnel Virtual Device
||10.0.0.1/24 Tunnel Gateway IP
||
||
||10.0.0.10/24 Tunnel Client IP
||ppp0 Tunnel Client Device
198.51.100.129 Broadband Public IP
|eth0 Public Interface
-----------------------
|THIS SERVER |
-----------------------
eth1| |eth2
203.0.113.5/32 192.168.1.1/24
203.0.113.5 是公共 IP。192.168.1.1/24 是私有网络。VPN 带有 10.0.0.0/24 网络,通过隧道客户端 IP 路由 203.0.113.5(通过 10.0.0.1 路由 203.0.113.0/30,默认通过 203.0.113.1)让我可以从公共互联网 ping 10.0.1.5。这是有效的,我已确认是此服务器在响应。我想使用公共 IP 203.0.113.5 来 nat VPN。这似乎不起作用。我尝试了以下 NAT 语句:
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o ppp0 -j MASQUERADE --to-source 203.0.113.5
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -o ppp0 -j SNAT --to-source 203.0.113.5
我看不到通信,无法执行名称查找,也无法从 192.168.1.1 网络中的机器执行 ping 操作。
任何意见,将不胜感激
答案1
MASQUERADE
通常不需要--to-source
,因为它通常用于接口地址可能发生变化的动态环境中。
您的源地址应该是 VPN 接口的地址 10.0.0.10,或者换句话说,参数接口的地址-o
,这里ppp0
。由于该地址不是公开的,您还需要在 VPN 服务器上进行 NAT。您也可以只在 VPN 服务器上进行 NAT,而忽略“此服务器”上的 NAT。
203.0.113.5/32
eth1 上的 有什么用?/32
以太网接口上的地址不适用于此卡,您至少需要/30
。该地址是否应该可从互联网直接访问,或者该地址是否可通过 203.0.113.1 处的路由器和 VPN 隧道访问?如果是这样,将此地址添加到 ppp0 接口会更有意义。