我已经在这里问了一个相关的问题 – 无法路由回从VPS的IPsec隧道 – 但我已经回答了,并稍微移动了一下。
我试图达到的最终目标是:
我们有一堆4G路由器,就像英国的标准一样,它们坐落在几层运营商级NAT之后,因此不能公开寻址。 我们需要能够从AWS上的服务器与这些路由器进行交谈。 我的想法是build立一个具有静态IP地址的VPS,并build立从4G路由器到VPS的VPN。 然后,我们可以通过VPS上的公共IP与4G路由器进行通信,这些IP将被设置为将通信量转发回VPN隧道。
我在哪里:
我已经在Digital Ocean上build立了一个VPS,并使用这个脚本build立了一个libreSwan IPSec VPN – https://github.com/philplckthun/setup-simple-ipsec-l2tp-vpn – 并从路由器获得了成功build立的VPN到VPS。 我可以从VPS ping路由器和连接到路由器的其他设备(这是我最初的问题)。 路由器被设置为使用VPN隧道作为默认路由,当我从路由器ping VPS时,我可以看到从路由器本地地址到达的数据包(与连接到路由器的设备相同),但现在我遇到了问题,如果我从路由器ping一个networking地址(例如8.8.8.8),我可以看到数据包打到VPS,但是他们没有被转发到互联网(通过在互联网上ping另一台计算机并观察TCPdump)。 我已经在/etc/sysctl.conf(net.ipv4.ip_forward net.ipv4.ip_forward = 1 )中设置了转发,并在iptables中启用了MASQUERADE( -A POSTROUTING -o eth0 -j MASQUERADE )。 我也尝试了几个我在网上find的其他iptables规则,但没有任何帮助。
networking图:
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
我做错了什么(除了起床和工作)?
谢谢。
回答我自己的问题; 在我们left=<server's subnet>的服务器上的ipsec.conf中left=<server's subnet> 。 将其更改为left=0.0.0.0/0 ,转发工作正常。