![如何通过 VPN 本身路由所有流量(甚至是到 openvpn-server 本身的流量)](https://linux22.com/image/1414745/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20VPN%20%E6%9C%AC%E8%BA%AB%E8%B7%AF%E7%94%B1%E6%89%80%E6%9C%89%E6%B5%81%E9%87%8F%EF%BC%88%E7%94%9A%E8%87%B3%E6%98%AF%E5%88%B0%20openvpn-server%20%E6%9C%AC%E8%BA%AB%E7%9A%84%E6%B5%81%E9%87%8F%EF%BC%89.png)
所以我有一台公网 IP 地址为 101.102.103.104 的服务器(例如)。该服务器运行 OpenVPN 服务器,以及一堆其他正在监听公网 IP 网络设备端口的东西。
我想要做的是,一旦连接到 101.102.103.104,就通过 VPN 将所有未来的流量路由到该 IP。
例如如果我curl
101.102.103.104:8080,它将通过 VPN 连接进行。
我尝试将push route
以下内容添加到我的 server.conf 中:
push "route 101.102.103.104 255.255.255.255"
我甚至尝试添加排除路线:
push "route 101.102.103.104 255.255.255.255 net_gateway"
但它似乎不起作用。运行sudo route -n
仍然显示通过我的家用路由器的路线:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
101.102.103.104 192.168.1.1 255.255.255.255 UGH 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 9 0 0 wlan0
关于如何实现这一点,您有什么想法吗?我认为问题可能是我试图通过 VPN 服务器将流量路由到 VPN 服务器本身,从而形成某种无限循环,但这只是猜测。
答案1
您显示的路由表显然不会将所有流量路由到 VPN,如第一行所示。在当前配置中,它所做的只是允许客户端访问 LAN。
通过 OpenVPN 路由所有客户端流量的命令,包括所有到第三方的流量(IE(而非 VPN 服务器的 LAN)是
push "redirect-gateway def1"
这将被添加到服务器配置文件中(您需要重新启动 OpenVPN 程序,才能使更改生效)。
此外,由于您设置了路由 OpenVPN,而不是桥接 OpenVPN,因此您需要在服务器上激活 NATting:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
假设互联网上的 OpenVPN 服务器接口(IEIP 地址为 101.102.103.104 的那个被称为eth0。请相应调整。
要检查您的配置,一旦建立与 OpenVPN 服务器的连接,请发出以下命令:
wget 216.146.39.70:80 -O - -o /dev/null
这将输出您的 IP 地址。如果输出包含 101.102.103.104,则说明您已完成。