Ir al contenido

SSH: Túneles

Los túneles SSH son una herramienta poderosa para la comunicación segura, eludir restricciones de red y proporcionar acceso remoto a recursos locales.

La redirección de puertos local te permite redirigir un puerto en tu máquina local a una dirección y puerto remotos. Imagina que tienes una aplicación web ejecutándose en un servidor remoto con la dirección 127.0.0.1:8000. Para acceder a esta aplicación web desde tu máquina local, puedes usar la redirección de puertos con SSH:

Ventana de terminal
ssh -L 8080:127.0.0.1:8000 example.com

Ahora, en el navegador web de la máquina local, ve a http://localhost:8080 y deberías obtener los datos (o ver la página web) desde tu servidor remoto.

  • 8080 - el número de puerto en la computadora local con el cliente ssh
  • 127.0.0.1:8000 - la dirección IP y el número de puerto en la computadora remota
  • -fNT - opciones adicionales para ejecutar el cliente SSH en segundo plano

La redirección de puertos inversa te permite redirigir un puerto en el servidor remoto hacia un servicio local. Por ejemplo, para redirigir el puerto remoto 9090 al puerto 3000 de tu máquina local:

Ventana de terminal
ssh -R 9090:localhost:3000 example.com

Ahora todas las solicitudes en el servidor remoto al puerto 9090 serán redirigidas al puerto 3000 de tu máquina local.

ProxyJump es otro mecanismo útil. Permite conectarte a un servidor remoto a través de un servidor SSH intermedio, también conocido como “jump host”.

Para conectarte a server2 a través de server1:

Ventana de terminal
ssh -J user@server1 server2

Alternativamente, puedes habilitarlo de forma permanente para un host específico en tu archivo de configuración SSH ~/.ssh/config:

Host server2
ProxyJump user@server1

Ahora simplemente puedes usar:

Ventana de terminal
ssh server2

Escenario: Tienes una base de datos MySQL ejecutándose en un servidor remoto y quieres acceder a ella desde tu máquina local. Crea un túnel SSH para redirigir el puerto MySQL remoto a tu máquina local:

Ventana de terminal
ssh -L 3306:localhost:3306 example.com

Después de ejecutar este comando, puedes conectarte a la base de datos MySQL remota usando un cliente MySQL local así:

Ventana de terminal
mysql -h 127.0.0.1 -P 3306 -u db_user -p

Escenario: Necesitas acceder a una base de datos remota en el puerto 5432 y a una aplicación web en el puerto 8080 en el servidor remoto.

Ventana de terminal
ssh -L 8080:localhost:8080 -L 5432:localhost:5432 example.com

Después de ejecutar este comando, puedes acceder a la aplicación web remota en http://localhost:8080 y a la base de datos remota en localhost:5432.

Túneles con un Archivo de Configuración SSH

Sección titulada «Túneles con un Archivo de Configuración SSH»

Para configuraciones frecuentes de túneles SSH, puedes configurar tu cliente SSH para simplificar el proceso usando el archivo de configuración SSH ~/.ssh/config.

Host example.com
LocalForward 5432 localhost:5432
LocalForward 8080 localhost:8080

Esta configuración te permite establecer túneles SSH rápidamente con configuraciones predefinidas usando simplemente los alias.

Escenario: Tienes una cámara IP en una red privada que transmite video por RTSP en rtsp://192.168.1.10:554/stream1. Necesitas acceder a este flujo RTSP desde tu máquina local.

Ventana de terminal
ssh -L 8554:192.168.1.10:554 example.com

Después de ejecutar este comando, puedes acceder al flujo RTSP desde tu máquina local usando un cliente RTSP (por ejemplo, VLC media player) conectándote a rtsp://localhost:8554/stream1.

  1. Abre VLC Media Player
  2. Ve a “Medio” y haz clic en “Abrir ubicación de red”.
  3. Ingresa la URL rtsp://localhost:8554/stream1.
  4. Haz clic en “Reproducir”.

VLC ahora se conectará al flujo RTSP a través del túnel SSH, permitiéndote ver la transmisión de la cámara como si estuvieras en la misma red privada que la cámara.