在 VPS 上运行 OpenVPN 客户端

在 VPS 上运行 OpenVPN 客户端

我尝试在 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网关。

相关内容