Tabla de Contenidos

Túnel de Conexión SSH

Escenario:

“Quiero conectarme al equipo de Facturación Electrónica de Montana, para ver la base de datos. Pero no tenemos acceso directo a ese equipo dentro de la red y justo hoy el Supremo cayó a nivel mundial, todo el primer piso de Prat está en reunión tomando café, y los indígenas se tomaron Luis Durand y Pedro de Valdivia así que tampoco podemos ir físicamente al local”

Pero por suerte:

Esquema

Esquema de red de la conexión entre Helpcom y Dacsa Prat. El servidor “PRAT” tiene acceso abierto a internet, pero no así el equipo de servidor de Montana ni otros equipos del local

Procedimiento

Prat tiene IP fija, la cual se puede obtener desde la carpeta de Documentación de Helpcom. Si es posible, es conveniente agregarla como atajo a nuestro archivo de Hosts (ej.: LMHOSTS o %WINDOWSDIR%\SYSTEM32\DRIVERS\ETC\hosts en Windows; /etc/hosts en Linux) para tenerlo siempre al alcance, por medio de la creación de un .tld local:

190.121.105.243  dacsa-central.local
Tomar nota que si se crea este atajo el tld debe ser .local.

Teniendo en cuenta el diagrama de red superior podemos ver lo siguiente:

Sólo con estos datos, podemos construir nuestro túnel. Abriremos el túnel en el puerto local 25000 y nos llevará al puerto remoto 3306 del equipo de Montana. La estructura general para un túnel de este tipo en SSH es:

ssh -L puertolocal:destino:puertodestino  usuario@servidorremoto

Linux / SSH

ssh -g -L 25000:192.168.1.252:3306 administrador@190.121.105.243
# o, si grabamos la IP de Prat en nuestros hosts:
ssh -g -L 25000:192.168.1.252:3306 administrador@dacsa-central.local

El resultado del túnel es la conexión que muestra el diagrama en rojo:

  1. Nuestro equipo se conectará al servidor de Prat directamente, por medio del puerto abierto en el gateway, al puerto 22 del servidor (SSH).
  2. Al recibir la conexión, nuestro equipo requerirá abrir un segundo puerto local (para él) 25000. Al recibir la conexión de este puerto el servidor lo enlazará a la conexión local (para él) 192.168.1.252:3306.
  3. La opción -g en nuestro túnel permite que el puente permanezca abierto y se puedan conectar aplicaciones locales (para nosotros) a este túnel, por ejemplo Query Browser / SQLYog.
  4. Para el servidor de Montana, la conexión parece venir directo del servidor de Prat.

Ahora que la conexión está activa, podemos conectarnos con un cliente de MySQL a nuestro puerto local, y esto nos dará acceso a la conexión en el servidor remoto. Simplemente en nuestro cliente, o en otra sesión/ventana de terminal si queremos conectar con el cliente de consola:

mysql -h 127.0.0.1 --port 25000 -u helpcom_db -p db_dte_montana

Windows / KiTTY

Configuración del túnel en la pantalla de KiTTY

Para este proceso es conveniente (si no necesario) que tengamos un perfil grabado en KiTTY para el servidor de Prat (o el que vayamos a usar). Cargamos este perfil con Load, lo cual nos pasa los parámetros (servidor, puerto, VT100, etc) a las pantallas de configuración.

En el árbol de configuración de KiTTY vamos a Connection → SSH → Tunnel. Aquí es donde agregamos el túnel como aparece en la imagen con los siguientes parámetros:

Una vez seteado el túnel iniciamos nuestra conexión. Nos pedirá las credenciales del servidor de puente (en este caso Prat). Una vez que queda la ventana de terminal abierta el túnel queda establecido.

Ya con el puente configurado, podemos conectarnos a la base de datos con nuestro cliente de MySQL, por ejemplo Yog / Query Browser:

Accesos Clientes

En la carpeta compartida de Documentación el archivo Accesos Clientes BD.ods tiene un registro de los equipos clientes a los cuales se puede acceder vía túnel Para configurar una conexión de este tipo se puede tomar los datos del archivo y adaptar los puertos y direcciones remotas según sea necesario. Por ejemplo, si quisiéramos conectarnos al equipo de Facturación Electrónica de ByK para ver su base de datos:

Conexiones de una empresa en el archivo de Accesos Clientes
  1. Vemos que la tabla indica que el equipo “Byk”, “Cliente Facturación” dice en la columna de Host “Túnel”, indicando que es posible entrar por un túnel usando el Host con la IP pública.
  2. Vemos que la IP pública está arriba, como Host del equipo “Byk”, “Servidor Central”. Esta IP es la que usamos como servidorremoto.
  3. Dentro de la red local vemos que el equipo cliente de FE tiene IP “.2.252” en el segmento. Agregando el puerto para MySQL, tenemos el destino:puerto final para el túnel.
  4. Escogemos un puerto local para establecer nuestro puente, en este caso escogeremos el 3333.

Ya con estos datos podemos estructurar nuestra conexión túnel:

ssh -g -L 3333:192.168.2.252:3306 administrador@190.82.117.106

Notar como siempre el -g es importante si queremos conectar otro programa, como el Query Browser, a través de este puerto.

El resultado final es un puente que podemos usar como se ve aquí: