我正在为我的网络设置一个网关,其中包括同一台计算机上的反向代理 (HAProxy) 和 openvpn 服务器。
我想使用 openvpn 连接到 VPN 提供商,以便对来自我的网络的所有流量进行加密。
现在的问题是,一旦我打开与 VPN 提供商的连接,它就会将新路由推送到我的路由表。这些路由与我的 HAProxy 冲突,无法访问我的内部服务器。
不连接 VPN 提供商的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 203 0 0 eth1
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 203 0 0 eth1
连接到 VPN 提供商后的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.3.1 128.0.0.0 UG 0 0 0 tun1
default 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 203 0 0 eth1
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
10.8.3.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
123.243.152.126 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.8.3.1 128.0.0.0 UG 0 0 0 tun1
192.168.100.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.100.0 0.0.0.0 255.255.255.0 U 203 0 0 eth1
我按照以下指南设置路由和 nat 规则:https://gist.github.com/superjamie/ac55b6d2c080582a3e64
我想通过 tun1 路由到达 eth1 的所有流量,tun1 是与 VPN 提供商的连接。
sudo iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
sudo iptables -A FORWARD -i tun1 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o tun1 -j ACCEPT
eth0 上的所有请求都不应该通过该隧道。相反,它们要么访问我的内部服务器,要么响应来自网络外部的客户端的请求。