Tabla de Contenidos

Túnel Reverso SSH

En algunos de los servidores provistos por Helpcom se implementa un puente SSH reverso, es decir un túnel como el descrito en túnel ssh excepto que la conexión se abre desde el destino hacia el equipo de origen.

La sintaxis general de un puente reverso es:

ssh -R puertoremoto:hostlocal:puertolocal user@hostremoto

Por ejemplo, abrir el siguiente puente reverso desde el servidor de un cliente, y conectarlo al puerto 3456 en el servidor de desarrollo de Helpcom, permite al servidor de desarrollo acceder a las bases de datos del equipo cliente.

# en el servidor del cliente
ssh -R 3456:127.0.0.1:3306 miusuario@190.13.136.235

Mientras esa conexión remota esté activa, conectar al puerto 3456 desde localhost en el servidor de desarrollo accederá a la base de datos del cliente remoto.

Implementaciones

Este tipo de puente reverso está implementado en servidores como los de Yomi, para poder dar acceso a los clientes a las otras sucursales desde una sucursal con IP pública.

La estructura del script que ejecuta el puente es como sigue:

ssh -TN -gR 13301:127.0.0.1:3306 -p 22022 puente@${yomi_public_ip} &

Una estructura de comando como ésta se encuentra en bin/puente.sh en las sucursales que necesitan abrir el puente.

En el servidor de bodega de Yomi, se habilita el usuario puente, sin privilegios, solamente para que pueda tomar las conexiones remotas de las sucursales que necesitan abrir los puentes reversos.

El argumento -g es necesario para que el puente, una vez abierto, pueda recibir conexiones desde su red local en el lado remoto. Sin embargo la implementación de esto sólo funciona correctamente con el apoyo adecuado del servidor central (que debe soportar GatewayPorts) y del ISP (que debe soportar Nat Forwarding y Multicast Port Fallback).

Un crontab en los servidores remotos inicia la conexión junto con el sistema:

@reboot           bin/puente.sh

Limitaciones

Para que el puente reverso funcione correctamente:

Para que el puente reverso se pueda abrir a la red local del punto remoto:

La estabilidad de la conexión del puente depende especialmente de dos factores:

Notas de Implementación

Las siguientes notas son específicas a la implementación en Yomi:

El punto de conexión central (“endpoint”) es el servidor de Bodega (“sucursal 4”).

Los puertos abiertos son 13301 13302 y 13303 para las tres sucursales.

Una vez conectado a un servidor, es posible determinar si el puente está activado buscando el comando de ssh en la tabla de procesos:

# tomar nota del doble guión en el siguiente comando:
ps -ef | grep -- '-gR'
 
adminis+ 31697 ... pts/3 ... ssh -TN -gR 13303:127.0.0.1:3306 -p 22022 puente@...

Si el comando entrega una salida como la que se ve arriba, esto quiere decir que el puente está activado.

Si el puente no se encuentra activado, es posible ejecutarlo de varias maneras, la más sencilla es:

nohup bin/puente.sh &

(Notar el & al final)