Respawning vpnc do NetworkManager

2

Minha universidade tem uma rede sem fio especial que exige que você use uma VPN para acessar a Internet. Então eu tenho um pequeno script que me conecta à VPN assim que eu entro na rede sem fio:

/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

Isso funciona como um encanto e conecta e desconecta a VPN com o wifi. O problema é que o vpnc tem uma tendência a morrer em mim. Existe alguma maneira de reaparecer o vpnc se ele morrer? Há um simpático wiki sobre o gerenciamento de processos , mas Parece que eu não posso realmente usar inittab para o meu propósito aqui, ou pelo menos não para frente.

O que seria uma maneira não-hacker de reaparecer a vpnc se ela morrer enquanto eu estiver conectado a determinada rede sem fio?

    
por Martin Ueding 26.10.2011 / 21:19

1 resposta

1

Se você notou que o vpnc morre após aproximadamente o mesmo tempo que está sendo conectado, você pode tentar desativar o 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>

(extraído da página man do vpnc)

O parâmetro acima (--dpd-idle 0) desativará a detecção de peer morto e evitará que a conexão pare se os pacotes não chegarem a tempo. Você pode configurá-lo em seu arquivo de configuração conforme descrito acima.

Acho que também editei um pouco o seu script de inicialização para evitar que o vpnc pare incondicionalmente "se ainda estiver ativo". Você pode estar passando por mudanças de estado diferentes de "up" e "down" (por exemplo, você tem "hostname"); por exemplo, quando em roaming do ponto de acesso ao ponto de acesso devido a alterações de nível de sinal ou caso contrário você pode obter um novo "up". Em outras palavras:

# 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

Em vez de fazer duas verificações separadas. (embora eu não tenha testado isso)

    
por Mathieu Trudel-Lapierre 02.11.2011 / 15:34