Возобновление vpnc из NetworkManager
В моем университете есть специальная беспроводная сеть, которая требует использования 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 с Wi-Fi. Проблема в том, что vpnc имеет тенденцию умирать от меня. Есть ли способ возродить vpnc, если он умрет? Есть хорошая вики об управлении процессами, но, похоже, я не могу использовать inittab для своих целей или, по крайней мере, не прямо.
Что может быть не взломать способ возрождения 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
Вместо того, чтобы делать две отдельные проверки. (хотя я этого не проверял)