Desde hace tiempo estoy utilizando para conectarme a internet desde casa un AP/switch/router NEXXT. Aunque a primera vista esto parece muy práctico, este tipo de hardware está orientado a un usuario doméstico, más bien común, que usa internet solo para navegar y bajar correos.
Por el contrario, yo no me considero un usuario común. Una de las razones, es que utilizo ssh para administrar diferentes servidores.
El problema con esto es que el firewall integrado en este router cierra todas las conexiones que han estado inactivas durante 60 segundos. Esto puede ser un verdadero dolor de cabeza si trabajan a menudo con ssh.
Hasta el momento lo había soportado, pero hoy tuve que administrar en el trabajo un servidor, que se encuentra detrás de un firewall con la misma funcionalidad. Cansado de esta situación, decidí buscar la solución definitiva.
Luego de googlear por 30 segundos, encontré que la misma puede venir por dos lados: el cliente o el servidor.
El secreto es agregar en el archivo /etc/ssh/ssh_config (del lado del cliente):
ServerAliveInterval 10
o del lado del servidor (/etc/ssh/sshd_config) agregar:
ClientAliveInterval 10
Esta solución lo que hace es enviar un pequeño paquete KeepAlive cada determinado tiempo configurable, en este caso 10 segundos.
Un excelente complemento a esto, es utilizar el programa GNU screen del lado del servidor a donde nos conectamos. Esto permite dejar cosas abiertas, como sesiones de vi, o incluso otros ssh, y luego retomarlos cuando nos conectemos nuevamente. Si nos desconectamos de forma súbita, siempre podemos volver a la terminal que teníamos con screen -r.