![运行 VPN 服务器的 Ubuntu VPS 不转发数据包](https://linux22.com/image/647332/%E8%BF%90%E8%A1%8C%20VPN%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%20Ubuntu%20VPS%20%E4%B8%8D%E8%BD%AC%E5%8F%91%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我在这里问了一个相关的问题 -无法从 VPS 路由回 ipsec 隧道- 但我已经回答了这个问题并且继续了下去。
我想要实现的最终目标是:
我们有一堆 4G 路由器,按照英国的标准,它们位于几层运营商级 NAT 后面,因此无法公开寻址。我们需要能够从 AWS 上的服务器与这些路由器进行通信。我的想法是设置一个具有静态 IP 地址的 VPS,并从 4G 路由器到 VPS 建立 VPN。然后,我们可以通过 VPS 上的公共 IP 与 4G 路由器通信,该 IP 将被设置为将流量转发回 VPN 隧道。
我所在的位置:
我在 Digital Ocean 上设置了一个 VPS,并使用此脚本设置了一个 libreSwan IPSec VPN -https://github.com/philplckthun/setup-simple-ipsec-l2tp-vpn- 并成功从路由器到 VPS 建立了 VPN。我可以从 VPS ping 到路由器以及连接到路由器的其他设备(这是我最初遇到的问题)。路由器设置为使用 VPN 隧道作为默认路由,当我从路由器 ping VPS 时,我可以看到数据包从路由器的本地地址到达(与连接到路由器的设备相同),但现在我遇到一个问题,如果我从路由器 ping 互联网地址(例如 8.8.8.8),我可以看到数据包到达 VPS,但它们没有被转发到互联网(通过在互联网上 ping 另一台机器并观察 TCPdump 来证明)。我已经在 /etc/sysctl.conf ( net.ipv4.ip_forward = 1
) 中设置了转发并在 iptables () 中启用了 MASQUERADE -A POSTROUTING -o eth0 -j MASQUERADE
。我还尝试了在网上找到的其他几个 iptables 规则,但都无济于事。
网络图:
laptop (used for testing) --- 4G router --- Internet/VPN tunnel --- DO VPS
192.168.0.159 192.168.0.1 public IP
如果我从笔记本电脑 ping 8.8.8.8,VPS 上的 TCPdump 会看到以下内容:
14:24:58.713759 IP 192.168.0.159 > google-public-dns-a.google.com: ICMP echo request, id 1, seq 714, length 40
但是笔记本电脑没有收到回复,正如我所说,我已经确认数据包没有得到进一步传输。
VPS 的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 178.62.64.1 0.0.0.0 UG 0 0 0 eth0
178.62.64.0 * 255.255.192.0 U 0 0 0 eth0
我做错了什么(除了起床和上班)?
谢谢。
答案1
回答我自己的问题;在服务器上的 ipsec.conf 中,我们有left=<server's subnet>
。更改它以left=0.0.0.0/0
使转发按预期工作。