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 |