我的大学有一个特殊的无线网络,需要使用 VPN 才能接入互联网。因此,我编写了一个小脚本,一旦我接入无线网络,它就会将我连接到 VPN:
/etc/NetworkManager/dispatcher.d/99bonnet
:
if [[ "$1" != "wlan0" ]]
then
return
fi
# Kill vpnc if it is still active
if pgrep vpnc
then
vpnc-disconnect
fi
# Exit if we are not connected to bonnet
if ! iwconfig wlan0 | grep bonnet
then
return 0
fi
# Handle the action
if [[ "$2" == up ]]
then
vpnc "$vpn_config_file"
else
vpnc-disconnect
fi
这很管用,可以连接和断开 VPN 与 wifi。问题是 vpnc 很容易死机。如果 vpnc 死机了,有没有什么方法可以重生它?有关于流程管理的很好的 wiki但是看起来我在这里无法真正使用 inittab 来达到我的目的,或者至少不能直接使用。
如果我在连接到某个无线网时 vpnc 死机了,有什么非黑客方式可以重新生成 vpnc?
答案1
如果您注意到 vpnc 在连接大约相同的时间后死亡,您可能需要尝试禁用 DPD:
--dpd-idle <0,10-86400> Send DPD packet after not receiving anything for <idle> seconds. Use 0 to disable DPD completely (both ways). Default: 300 conf-variable: DPD idle timeout (our side) <0,10-86400>
(摘自 vpnc 手册页)
上述参数 (--dpd-idle 0) 将禁用死对等检测,并避免在数据包未及时到达时连接停止。您也可以按照上述说明在配置文件中设置它。
我想我还会稍微编辑一下你的启动脚本,以避免“如果 vpnc 仍处于活动状态”就无条件停止它。你可能会遇到不同于“启动”和“关闭”的状态变化(例如,你有“主机名”);例如,当由于信号电平变化而从一个接入点漫游到另一个接入点时,你可能会得到一个新的“启动”。换句话说:
# Exit if we are not connected to bonnet
if ! iwconfig wlan0 | grep bonnet then
# Kill vpnc if it is still active
if pgrep vpnc then
vpnc-disconnect
fi
return 0
fi
而不是进行两次单独的检查。(虽然我没有测试过)