我有一台远程机器,同时托管一个 OpenVPN 服务器和一个 HTTP/S 服务器,但是当 OpenVPN 客户端连接并向 HTTP/S 服务器(远程机器的公共 IP)发送请求时,它不会通过隧道进行路由。
OpenVPN服务器(相关配置部分):
proto udp
dev tun
server 10.8.0.0 255.255.255.0
topology subnet
push "redirect-gateway def1 bypass-dhcp"
以及路由表:
$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
从客户端开始,流量通过隧道路由到远程服务器(网关=10.8.0.1):
$ traceroute ifconfig.co
traceroute to ifconfig.co (104.28.18.94), 64 hops max, 52 byte packets
1 10.8.0.1 (10.8.0.1) 91.043 ms 92.079 ms 95.904 ms
2 x.x.compute.amazonaws.com (x.x.x.x) 106.990 ms 108.148 ms
3 100.64.2.12 (100.64.2.12) 112.189 ms
100.64.3.12 (100.64.3.12) 103.892 ms
100.64.3.204 (100.64.3.204) 114.123 ms
...
但是,当客户端将流量发送到 VPN 服务器的地址时,它会通过客户端的 LAN(网关=192.168.100.1)进行路由:
$ traceroute $SERVER_DNS
traceroute to $SERVER_DNS ($SERVER_IP), 64 hops max, 52 byte packets
1 192.168.100.1 (192.168.100.1) 4.974 ms 8.735 ms 5.612 ms
2 * * *
3 x.x.x.x (x.x.x.x) 15.093 ms 15.998 ms 31.362 ms
4 x.oc.oc.cox.net (x.x.x.x) 54.835 ms 20.958 ms 21.883 ms