我通过校园网络连接到互联网:IP 范围是,10.42.0.0/16
一切都必须通过代理服务器10.42.0.42
。
我有时通过无线接入点连接到该网络,在本地 IP 范围内192.168.0.0/24
,该无线路由器连接到校园网络。
我还使用基于 OpenVPN 的个人 VPN。我的 VPN IP 范围是10.8.0.0/24
。
当我连接到这个无线网络时,我的路由表是:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 304 0 0 wlan0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
192.168.1.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0
当我在此无线网络上启动 VPN 时:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.41 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 304 0 0 wlan0
10.8.0.0 10.8.0.41 255.255.255.0 UG 0 0 0 tun0
10.8.0.41 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
128.0.0.0 10.8.0.41 128.0.0.0 UG 0 0 0 tun0
10.42.0.0 192.168.1.1 255.255.0.0 UG 0 0 0 wlan0
10.42.0.42 192.168.1.1 255.255.255.255 UGH 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 304 0 0 wlan0
如您所见,我已经配置了我的 VPN,以便校园网络不会重定向到tun0
,以便该私有区域中的服务器仍然可用。
但问题来了:无线网络不稳定(我对此无能为力),我经常断线又重新连接。在这个过程中,路由表中的所有条目都wlan0
将被刷新,我的表格之后如下所示:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.41 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 304 0 0 wlan0
10.8.0.0 10.8.0.41 255.255.255.0 UG 0 0 0 tun0
10.8.0.41 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
128.0.0.0 10.8.0.41 128.0.0.0 UG 0 0 0 tun0
什么都不起作用了:所有流量都重定向到 tun0,它不再存在,并且 openVPN 无法重新连接到我的服务器 ( No route to host.
)。我发现的唯一解决方法是手动重启我的 OpenVPN 客户端。
是否有可能稳定这一点?如何稳定?
我在 Gentoo Linux 上运行,并使用 Wicd 管理我的网络。
答案1
您可以尝试以下方法。将这两行添加到您的客户端配置文件中:
route-delay 2
route-up "/path/to/shell/script.sh"
文件脚本(必须可执行)由单个命令组成:
#!/bin/bash
ip route add 10.42.0.0/24 via 192.168.1.1 dev wlan0
命令 route-delay 强制在设置所有路由后 2 秒内执行以下命令(您可以根据需要更改此时间);以下命令在每次启动路由时执行一个 shell 脚本,该脚本的唯一目的是重新添加特别指定您创建的路线。
答案2
可以使用 Wicd 脚本在重新建立无线连接时重新启动 OpenVPN。
只需创建一个可执行脚本来/etc/wicd/scripts/postconnect/restart-openvpn.sh
检查 OpenVPN PID 文件是否存在,如果它已经启动,则重新启动它:
#!/bin/bash
[ -f /var/run/openvpn.pid ] && /etc/init.d/openvpn restart