Então, eu criei essa solução.
enable lqr
set lqrperiod 5
Eu corro a caixa FreeBsd com o pppd sobre Ethernet. Tudo funciona muito bem com apenas uma exceção. Às vezes, não com muita frequência, a conexão se torna obsoleta. Tudo parece estar ok: ifconfig mostra que está ativo, o ppp diz que o link está ok, mas o tráfego não aparece. O que eu faço é executar killall pppd
e depois reiniciar o ppp manualmente. Ele se reconecta e as coisas estão ótimas novamente.
Minha pergunta é: existe uma configuração no pppd (ou mpd5, ou em qualquer outro lugar) que, se definida, faz o ppp detectar que o link é obsoleto e reconectar automaticamente?
Se não houver essa configuração, talvez haja outra solução?
Você configurou as seguintes opções do pppd Protocolo de Controle de Link ? Eles controlam se e com que freqüência o pppd envia ecos do LCP para verificar se o link ainda está ativo ou não, e como ele responde se não estiver.
lcp-echo-failure n
lcp-echo-interval n
lcp-echo-adaptive
Eles combinam bem com as seguintes opções, que controlam se o pppd tentará reiniciar uma conexão após o término, quanto tempo atrasar antes de se reconectar e quantas vezes ele será reiniciado após falhas:
persist
holdoff n
maxfail n
Se maxfail for diferente de zero, você também pode querer que um script wrapper ou job-cron reinicie o pppd se ele tiver saído completamente (ou seja, configuração de falhas > maxfail). Um motivo comum para ter maxfail > 0 é que um script de wrapper pode ser escrito para ter respostas mais inteligentes (do que tentar novamente várias vezes) para, por exemplo, uma indisponibilidade prolongada.
Veja a página do manual do pppd para mais detalhes sobre estas e outras opções de configuração.
Eu adicionaria um script de shell simples ao crontab, que faria ping periodicamente em um host conhecido e reiniciaria o serviço se o host não pudesse ser alcançado.
Algo parecido com isto:
#!/bin/sh
ping -q -c3 google.com &> /dev/null
if [[ $? != "0" ]]
then
ppp_restart_command
fi
Nomeie-o, por exemplo, conn_check.sh
, adicione-o ao crontab e deixe-o rodar a cada 60 s.