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:

  • El servidor remoto debe tener una IP - idealmente persistente - en una red alcanzable desde el servidor de inicio.
  • El servidor remoto debe tener servicio de SSH abierto.

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

  • El router de la red local debe soportar NAT Forwarding.
  • Cada router o modem en el camino de “bajada” desde la red visible común (p.ej.: internet) hacia el servidor remoto debe soportar Multicast Fallback.
  • Los puertos necesarios deben estar abiertos en cada servidor en la ruta de “bajada” hacia el servidor remoto.
  • El servidor remoto debe tener una versión de OpenSSH Server com GatewayPorts habilitado.

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

  • La estabilidad y la velocidad de subida desde el servidor remoto.
  • La traslación de puertos y conexiones de Multicast Fallback en el camino de bajada hacia la red remota.

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)

f1/tunel_reverso_ssh.txt · Última modificación: 2020/09/30 14:23 por lmachuca
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0