He comenzado mi autossh con un tiempo de sondeo de 30 s:
AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1
Y está funcionando bien:
Sep 5 12:26:44 serverA autossh[20935]: check on child 23084
Sep 5 12:26:44 serverA autossh[20935]: set alarm for 30 secs
Pero si elimino físicamente el cable de red, lo que significa que el túnel ya no puede funcionar, autossh no mata al demonio ssh. ¿Por qué? Entiendo que autossh no puede hacer nada si el enlace está inactivo, pero en mi opinión debería intentar hacer lo siguiente:
- Verificar el proceso ssh secundario (
check on child ...
) - Verifique el extremo lejano !!! (una operación similar a un ping a través del túnel)
- Darse cuenta de que el túnel está abajo
- Detener el proceso de ssh
- Intenta crear el túnel nuevamente
- Tenga en cuenta que no funciona, y configure un temporizador (¿exponencialmente creciente?) Para verificar nuevamente pronto
Es por eso que estoy ejecutando autossh: si algo le sucede al túnel (ya sea un problema de software o hardware), debería intentar reiniciarlo. En cambio, solo está esperando que el proceso ssh muera. ¿No debería estar tratando de reiniciarlo, incluso si no hay esperanza de restablecer la conexión?
¿Qué tipo de verificación está haciendo autossh? ¿Solo verifica que el ssh esté funcionando? ¿No está haciendo ningún tipo de control remoto?
Editar
Según lo solicitado, agrego la parte relevante de la configuración ssh:
# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
# that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
# be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
# be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
# specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60
TCPKeepAlive yes
dev tun
ambas y configurando remote
la configuración del cliente. El único bit molesto es administrar los certificados. Utilizamos la CA 'easy-rsa' que viene con OpenVPN. Una vez que tenga los certificados, el resto es fácil.