Cómo configurar túneles SSH y reenvío de puertos

Introducción

Los túneles SSH (también llamados reenvío de puertos SSH) permiten reenviar tráfico de red de forma segura a través de una conexión SSH cifrada. Esto es útil para acceder a servicios remotos de forma segura, evadir firewalls o cifrar conexiones que de otro modo no estarían cifradas.

Reenvío de puerto local

Reenvía un puerto en su máquina local a un puerto en un servidor remoto. Úselo para acceder a un servicio remoto como si estuviera ejecutándose localmente.

Sintaxis

ssh -L puerto_local:host_destino:puerto_destino usuario@servidor_ssh

Ejemplo: Acceder a una base de datos MySQL remota

Su servidor de base de datos (10.0.0.5) solo acepta conexiones desde el servidor de aplicaciones (10.0.0.1). Usted tiene acceso SSH a 10.0.0.1.

ssh -L 3306:10.0.0.5:3306 usuario@10.0.0.1

Ahora conecte su cliente MySQL a localhost:3306, y el tráfico se tuneliza de forma segura hacia 10.0.0.5:3306 a través de 10.0.0.1.

Ejemplo: Acceder a un panel web remoto

ssh -L 8080:localhost:8006 usuario@servidor-proxmox

Abra http://localhost:8080 en su navegador para acceder a la interfaz web de Proxmox.

Ejecutar en segundo plano

ssh -fNL 3306:10.0.0.5:3306 usuario@10.0.0.1

Opciones: -f (segundo plano), -N (sin comando remoto).

Reenvío de puerto remoto

Reenvía un puerto en el servidor remoto a un puerto en su máquina local. Úselo para hacer accesible un servicio local desde el servidor remoto.

Sintaxis

ssh -R puerto_remoto:host_destino:puerto_destino usuario@servidor_ssh

Ejemplo: Exponer un servidor web local

Tiene un servidor de desarrollo ejecutándose en localhost:3000 y quiere acceder a él desde un servidor remoto.

ssh -R 8080:localhost:3000 usuario@servidor-remoto

En el servidor remoto, http://localhost:8080 ahora llega a su servidor de desarrollo local.

Reenvío de puerto dinámico (proxy SOCKS)

Crea un proxy SOCKS en su máquina local que tuneliza todo el tráfico a través del servidor SSH. Útil para navegar por internet a través de un servidor remoto.

Sintaxis

ssh -D puerto_local usuario@servidor_ssh

Ejemplo

ssh -D 1080 usuario@servidor-remoto

Luego configure su navegador o aplicación para usar un proxy SOCKS5 en localhost:1080. Todo el tráfico será enrutado a través del servidor SSH.

Hacer los túneles persistentes

Los túneles SSH se cierran cuando se pierde la conexión. Para túneles persistentes, use autossh:

sudo apt install autossh
autossh -M 0 -fNL 3306:10.0.0.5:3306 usuario@10.0.0.1

autossh se reconecta automáticamente si la sesión SSH se interrumpe.

Referencia rápida

Tipo Opción Dirección Caso de uso
Local -L Local → Remoto Acceder a servicios remotos localmente
Remoto -R Remoto → Local Exponer servicios locales remotamente
Dinámico -D Proxy SOCKS Enrutar todo el tráfico por SSH

Opciones comunes

Opción Descripción
-f Ejecutar SSH en segundo plano
-N No ejecutar un comando remoto (solo túnel)
-p 7722 Conectar a SSH en un puerto no estándar
-i ~/.ssh/key Usar una llave privada específica