从 NetworkManager 重新生成 vpnc

从 NetworkManager 重新生成 vpnc

我的大学有一个特殊的无线网络,需要使用 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

而不是进行两次单独的检查。(虽然我没有测试过)

相关内容