我必须在我的VPS上使用外部IPv4-IP。 我想路由一个VPN客户端,OpenVPN(tun)。 只有一个VPN客户端应该使用VPN,并且我想要将所有的stream量路由到我的第二个外部IP到这个VPN – 为一些服务,比如邮件服务器,获得一个静态地址。 所以我做了以下事情:
OpenVPN服务器上的iptables是:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT # Allow forwarding for VPN iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # Enable NAT for VPN iptables -t nat -A PREROUTING -d 109.230.XXX.6 -j DNAT --to-destination 10.8.0.6 # route 109.230.XXX.6 to my server.home'
如果我尝试ping 109.230.XXX.6,tcpdump显示:
$ tcpdump -ni tun0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes 17:03:07.883564 IP 217.235.XXX.32 > 10.8.0.6: ICMP echo request, id 8969, seq 13, length 64 17:03:08.884923 IP 217.235.XXX.32 > 10.8.0.6: ICMP echo request, id 8969, seq 14, length 64 17:03:09.886750 IP 217.235.XXX.32 > 10.8.0.6: ICMP echo request, id 8969, seq 15, length 64 17:03:10.889176 IP 217.235.XXX.32 > 10.8.0.6: ICMP echo request, id 8969, seq 16, length 64 17:03:11.888974 IP 217.235.XXX.32 > 10.8.0.6: ICMP echo request, id 8969, seq 17, length 64
答复是离开eth0 – 连接到我的家庭路由器的端口。 它看起来像下面这样:
$ tcpdump -ni eth0 | grep reply tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 17:07:49.304936 IP 10.8.0.6 > 217.235.XXX.32: ICMP echo reply, id 8989, seq 1, length 64 17:07:50.302311 IP 10.8.0.6 > 217.235.XXX.32: ICMP echo reply, id 8989, seq 2, length 64 17:07:51.305998 IP 10.8.0.6 > 217.235.XXX.32: ICMP echo reply, id 8989, seq 3, length 64 17:07:52.302204 IP 10.8.0.6 > 217.235.XXX.32: ICMP echo reply, id 8989, seq 4, length 64
当然,我家的路由器会丢弃数据包 – 它不在NAT表中。 那么如何configuration服务器和客户端( – 我的家庭服务器),将地址路由到我的homeserver? 我用我的VPS获得了两个IP地址,并希望为此使用一个IP地址 – 不要浪费IP地址,也不要使用IP地址。
非常感谢提前!
处理这种情况的一种方法是更改VPN客户端上的默认路由,以便使用VPN连接作为其默认网关,而不是使用路由器。 如果这是你做的唯一的事情,那么封装的数据包本身就会被路由回到VPN中,这将会非常糟糕。 因此,在您replace默认路由之前,您需要使用路由器作为网关创build一个仅用于VPN服务器地址的路由。
另一个需要考虑的改进是当使用这个特定的公共IP地址时,消除VPS上的NAT。 VPN客户端本身可以知道它的公共IP地址是什么,而不是依赖于NAT。 实现这一目标的技巧是,不要将该IP地址分配给VPS上的“物理”接口,而只是将其显示为VPN接口上的PtP地址。 然后你必须在“物理”接口上启用proxy_arp。