Openvpn 的 route-nopull 问题

Openvpn 的 route-nopull 问题

情况是这样的,我有:

  • 有公网 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 就足够了。

希望这会有所帮助。

相关内容