我正在寻找一种在我的 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 表。
有什么线索吗?另外 - 你有什么想法我在这个配置中还缺少什么吗?
谢谢