我尝试在 VPS 上运行 OpenVPN 作为客户端,但由于流量被路由,我无法再通过 SSH 连接到 VPS。我尝试了以下方法,但没有成功
ip rule add table 128 from 50.1.2.3
ip route add table 128 to 50.1.2.0/24 dev tun0
ip route add table 128 default via 10.10.10.5
我从
root@server:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.10.1 10.10.10.5 255.255.255.255 UGH 0 0 0 tun0
10.10.10.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
0.0.0.0 10.10.10.5 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.10.10.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 venet0
我哪部分做错了?
答案1
问题是默认网关被 OpenVPN 更改,这会中断您当前的 SSH 连接,除非您在启动 OpenVPN 之前设置了适当的路由。
对于使用 iptables 和 ip (iproute2) 的解决方案,假设 OpenVPN 启动前的默认网关接口是“eth0”。这个想法是为了确保当连接到 eth0 时,即使 eth0 不再是默认网关接口,连接的响应数据包也会再次回到 eth0。
为了清楚起见,使用以下不同的数字,尽管可以对所有内容使用相同的数字:
# set "connection" mark of connection from eth0 when first packet of connection arrives
sudo iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
# set "firewall" mark for response packets in connection with our connection mark
sudo iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 table 3412
# route packets with our firewall mark using our routing table
sudo ip rule add fwmark 4321 table 3412
某些 Linux 版本需要在路由表条目中添加“via”:
# our routing table with eth0 as gateway interface
sudo ip route add default dev eth0 via 12.345.67.89 table 3412
其中“12.345.67.89”是原始非VPN网关。