Linux 中的 VPS、VPN 和策略路由

Linux 中的 VPS、VPN 和策略路由

我正在寻找一种在我的 VPS 上配置 VPN 的方法,使我的 SSH 连接将通过常规网络,但从该 VPS 发出的所有其他流量将通过 VPN。

我决定为此使用策略路由。

我已将名为 VPN 的新路由表添加到 /etc/iptables2/rt_tables 文件

然后我标记了所有非 SSH 的数据包

iptables -t mangle -A PREROUTING -p tcp ! --dport 22 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING ! -p tcp -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp ! --sport 22 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT ! -p tcp -j MARK --set-mark 4

并将它们分配给新创建的策略:

ip rule add fwmark 1 table VPN
ip rule add fwmark 2 table VPN
ip rule add fwmark 3 table VPN
ip rule add fwmark 4 table VPN

现在,由于 OpenVPN 默认情况下会将所有路由添加到主路由表中,因此我使用 --route-noexec 来防止这种情况发生,并创建了一个脚本,该脚本将使用环境变量将默认路由添加到 VPN 路由表中:

openvpn --config [config file] --script-security 2 --route-noexec --route-up /home/user/script.sh 

脚本本身只是:

#cat script.sh

#!/bin/bash
ip route add default via $route_vpn_gateway table VPN

执行此命令后,我仍然登录到 VPS,但与外界没有连接。

这是我在路由表中可以看到的内容:

# ip route show table VPN

default via 10.7.7.1 dev tun0

# ip route show table main

default via [VPS Gateway] dev eth0 
10.7.7.0/24 dev tun0 proto kernel scope link src 10.7.7.210 
[VPS Gateway] dev ens3 scope link 

现在我的理解是主路由表中的第二行不应该在那里,但我不确定如何将其移动到 VPN 表。

有什么线索吗?另外 - 你有什么想法我在这个配置中还缺少什么吗?

谢谢

相关内容