En algunas ocasiones necesitamos conectarnos a un servidor el cual esta detras de un Firewall o de otro equipo, al cual no tenemos acceso para hacer la respectiva redireccion de puertos y lograr conectarnos por la ip publica con la que dicho equipo sale a internet. En otras palabras, necesitamos acceder a un servidor el cual esta detras de algun tipo de NAT que nos impide realizar la conexion directa al servidor.
Para solucionar esta problema, se pueden emplear diversas tecnicas, sin embargo en el dia de hoy quiero mostrar una forma muy sencilla de poder conectarnos via SSH a un equipo que esta detras de un FW o NAT, implementando los muy conocidos tuneles inversos.
¿CóMO FUNCIONA UN TUNEL SSH INVERSO?
Generalmente, una conexión SSH se realiza haciendo que el cliente se conecte hacia el servidor, sin embargo si no tenemos forma de hacer la conexión SSH de esta forma(por lo que ya hemos hablado del NAT y FW), es posible hacer que esta maquina a la cual queremos acceder, se conecte por SSH a una tercera maquina a la cual si tiene acceso (ya que el fw no restringe la conexión de LAN y WAN) de esta forma, conectaríamos la maquina destino (la cual esta detrás del FW o NAT) a una tercera maquina, y nosotros desde nuetro PC nos conectaríamos a esta tercera maquina y de alli entraríamos al tunel el cual se estableció previamente entre la maquina destino(si, la que esta detras del fw y nat ) y la tercera maquina. Un esquema para aclarar un poco mas la idea:
La idea es basicamente esta: - De A nos conectamos a B - De C nos conectamos a B - Por ultimo, de C nos conectamos a A, usando el tunel establecido con el B
A continuación se indicaran los pasos a seguir ya en la practica para realizar la conexion: Iniciamos el tunel desde A hasta B de la siguiente forma:
9999: sera el puerto que quedara a la escucha 22: Es el puerto donde escucha el SSH localmente test: Usuario de SSH local 200.207.23.45: Direccion IP de la maquina que servira para hacer el tunel
Una vez hecho esto, pasamos a conectarnos por SSH normalmente a la maquina B
ssh user@200.207.23.45
Ahora por ultimo, estando alli en la maquina B nos conectamos al puerto donde se establecio el tunel, para efectos de nuestro ejemplo fue el puerto 9999
ssh test@localhost -p 9999
De esta forma estaremos dentro de aquella maquina la cual esta detras de un FW o de un NAT, gracias al uso del tunel inverso SSH, una medida muy sencilla para evitar este tipo de problemas.
Como ven es una de las tantas funcionalidades que nos ofrece SSH para lograr gestionar equipos los cuales no esten directamente conectados a internet o esten en otra subred detras de un equipo de seguridad, sin necesidad de modificar las reglas de firewall para crear port forward o habilitar puertos, es decir, una tecnica muy util cuando no tengamos acceso al equipo de borde.