Keepalive en SSH

Durante mucho tiempo, he tenido algunos problemas con ciertos ISP en aplicaciones que requieren conexiones permanentes para funcionar, pues después de un tiempo de inactividad simplemente las cierra. Esto puede pasar también con ciertos firewalls.

Mi problema particular es el siguiente: para mí es necesario tener más de una sesión SSH para poder administrar servidores rápidamente. El problema viene cuando después de algunos minutos de inactividad, la conexión SSH muere por la razón anterior.

Esto tiene varias soluciones:

En clientes Linux, es posible añadir una opción al archivo /etc/ssh/ssh_config:

ServerAliveInterval 1000

En ocasiones no tenemos acceso a ese archivo, porque la cuenta con que operamos no tiene permisos administrativos. Entonces, podemos añadir lo siguiente al archivo /home/user/.ssh/config

Host *
ServerAliveInterval 1000

Y esa sería una buena solución para cualquier caso. Lamentablemente, yo no siempre uso Linux 😀

Así que en Windows, entre los clientes SSH que existen, mi favorito es PuTTY. Dicho programa permite activar una opción similar. La desventaja es que hay que hacerlo para cada vez que se haga una conexión.

Bueno, pues en mi caso, tengo una máquina Linux que me sirve como intermediario para rutear conexiones a una red local. Y este es el caso común que va desde un pequeño ciber café hasta grandes redes en empresas. Entonces, ¿por qué no buscar una solución para toda la red local?

La solución es la siguiente:

echo 1000 > /proc/sys/net/ipv4/tcp_keepalive_time

Esto nos permite mandar un keep-alive para cualquier conexión TCP. Con esto, solucionamos el problema de SSH y de cualquier otro protocolo que utilice el stack TCP, así como lo soluciona para toda la red local.

Un valor que funciona para mí es 200, es decir, poco más de 3 minutos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *