情况是这样的,我有:
- 有公网 IP 的 VPS
- VPN 服务
- 拥有公网 IP 的路由器
如果我连接没有 route-nopull 的 vpn(接口名称为 tunVPN),vps 会断开所有连接(如 ssh),因为它通过 vpn 提供商有新的默认网关。如果我在连接上使用 route-nopull,它会连接但只是停在那里,我无法使用它(例如,如果我尝试 ping -I tunVPN xxx.xxx 或将某些服务绑定到它)。
所以我的问题是我应该添加什么路由才能使这个 vpn 正常工作。
我甚至尝试使用带有池过滤器的 openvpn 2.4,但效果不好。
这是使用 route-nopull 的路线:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 eth0
10.114.0.0 0.0.0.0 255.255.0.0 U 0 0 0 tunvpn
62.x.x.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
62.x.x.254 gateway 255.255.255.255 UGH 100 0 0 eth0
没有 route-nopull 也一样
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.114.0.1 128.0.0.0 UG 0 0 0 tunvpn
default gateway 0.0.0.0 UG 100 0 0 eth0
10.114.0.0 0.0.0.0 255.255.0.0 U 0 0 0 tunvpn
62.x.x.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
62.x.x.254 gateway 255.255.255.255 UGH 100 0 0 eth0
128.0.0.0 10.114.0.1 128.0.0.1 UG 0 0 0 tunvpn
185.x.x.68 gateway 255.255.255.255 UGH 0 0 0 eth0
有什么建议吗?我不想只为一些流量使用 vpn :)
答案1
经过一段时间我终于解决了这个问题:两个路由表
添加到 /etc/iproute2/rt_tables
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2
然后通过 openvpn 在连接时调用 up.sh 脚本配置 rt2(路由表 2)
/usr/sbin/ip route add 0.0.0.0/0 dev tunvpn src $VPNADDR table rt2
/usr/sbin/ip rule add from $VPNADDR table rt2
/usr/sbin/ip rule add to $VPNADDR table rt2
其中 $VPNADDR 是来自 vpn 服务器的 ip,通常 $4 就足够了。
希望这会有所帮助。