Возобновление 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, если он умирает, когда я подключен к определенной беспроводной сети?

2
задан 26 October 2011 в 23:19

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 man page)

Приведенный выше параметр (--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

Вместо двух отдельных проверок. (хотя я этого не проверял)

0
ответ дан 26 October 2011 в 23:19

Другие вопросы по тегам:

Похожие вопросы: