Cómo abrir puertos usando SSH (Forwarding explicado fácil)
SSH no solo sirve para conectarte a servidores, también puedes abrir puertos, crear túneles (como ngrok) y proteger conexiones entre tu máquina y servidores remotos.
Hoy aprenderás cómo redireccionar puertos usando SSH, paso a paso y con ejemplos.
Contents
- 1 ¿Qué es el “port forwarding” en SSH? (Explicado fácil)
- 2 ¿Qué tipos de port forwarding existen?
- 3 Local Port Forwarding: Acceder a un servicio remoto localmente
- 4 Remote Port Forwarding: Permitir acceso a tu máquina a través del servidor
- 5 Dynamic Port Forwarding (avanzado)
- 6 Tips útiles con port forwarding
- 7 Caso real: Abrir MySQL de tu Raspberry Pi (192.168.1.103) y exponerlo en un servidor AWS EC2
¿Qué es el “port forwarding” en SSH? (Explicado fácil)
Imagina que tu servidor tiene un servicio (por ejemplo, una base de datos o una página web) que NO está abierto al mundo.
Pero tú quieres acceder a él de forma segura como si estuviera en tu computadora.
SSH Forwarding crea un túnel secreto entre tu computadora y el servidor, pasando por SSH.
Es como si abrieras un portal entre dos puntos.
¿Qué tipos de port forwarding existen?
Hay tres tipos principales:
- Local Forwarding → Accedes a un puerto remoto desde tu máquina.
- Remote Forwarding → Permites que alguien desde el servidor acceda a tu máquina.
- Dynamic Forwarding → Creas un proxy (tipo VPN ligera).
Hoy vamos a enfocarnos en Local Forwarding (el más usado).
Local Port Forwarding: Acceder a un servicio remoto localmente
Ejemplo práctico
Supongamos:
- Tu servidor tiene una base de datos MySQL corriendo en
localhost:3306
. - Pero el firewall NO permite conexiones externas a MySQL (solo dentro del servidor).
Y tú quieres conectarte a esa base de datos desde tu laptop.
¿Cómo hacerlo?
Con este comando:
ssh -L 3307:localhost:3306 usuario@ip_del_servidor
Significado:
-L
→ Local forwarding3307
→ El puerto que se abrirá en tu máquina.localhost:3306
→ El destino dentro del servidor.usuario@ip_del_servidor
→ Tus datos de acceso al servidor.
¿Qué pasa después?
- En tu laptop, te conectas a localhost:3307.
- SSH se encarga de redireccionarlo al servidor y al puerto 3306.
- ¡Como si la base de datos estuviera corriendo en tu propia máquina!
Por ejemplo, podrías conectar tu cliente MySQL:
mysql -h 127.0.0.1 -P 3307 -u tu_usuario -p
Remote Port Forwarding: Permitir acceso a tu máquina a través del servidor
(Para cuando quieres abrir un puerto de tu computadora a través del servidor).
Por ejemplo:
ssh -R 8080:localhost:80 usuario@ip_del_servidor
Significado:
-R
→ Remote forwarding8080
→ Puerto abierto en el servidorlocalhost:80
→ Tu máquina local (por ejemplo, un servidor web local)
Así alguien podría entrar al puerto 8080 del servidor, y ver tu puerto 80 local.
Dynamic Port Forwarding (avanzado)
Crea un proxy SOCKS5 para navegar todo el tráfico de internet a través del servidor.
ssh -D 1080 usuario@ip_del_servidor
Luego configuras tu navegador para usar un proxy SOCKS5 en localhost:1080
.
¡Navegas por internet como si estuvieras en el servidor!
Ideal para:
- Navegar de forma privada.
- Saltarte firewalls.
- Simular estar en otro país.
Tips útiles con port forwarding
- Mantener vivo el túnel (evitar desconexiones):
ssh -o ServerAliveInterval=60 -L 3307:localhost:3306 usuario@ip
- Túnel en segundo plano (sin bloquear la terminal):
ssh -f -N -L 3307:localhost:3306 usuario@ip
Significado:
-f
→ Corre en background.-N
→ No ejecutar comandos remotos (solo crear el túnel).
Caso real: Abrir MySQL de tu Raspberry Pi (192.168.1.103) y exponerlo en un servidor AWS EC2
Objetivo:
Quiero conectarme desde cualquier lugar del mundo a la base de datos MySQL que tengo en mi Raspberry Pi, usando como “puente” mi servidor en AWS.
Vamos a usar SSH Remote Port Forwarding para hacerlo.
¿Qué necesitamos?
- Tu Raspberry Pi o cualquier servidor/pc (donde corre MySQL) – IP local:
192.168.1.103
. - Una instancia EC2 en AWS – IP pública o DNS: (ej:
ec2-34-203-10-10.compute-1.amazonaws.com
). - Tener acceso SSH a tu Raspberry Pi y tu AWS EC2.
Crear el túnel SSH para exponer MySQL
Ahora en tu Raspberry Pi, ejecuta este comando:
ssh -R 3307:localhost:3306 [email protected]
Explicación:
-R
→ Remote forwarding: abrir un puerto en el servidor EC2.3307
→ El puerto que se abrirá en la EC2 (puedes elegir otro si quieres).localhost:3306
→ Se conectará a la Raspberry Pi en su MySQL local.ubuntu@ec2...
→ Usuario y dirección de tu instancia AWS.
Este comando:
Abre el puerto 3307 en la EC2.
Cada conexión que llegue a ese puerto será redirigida al MySQL de tu Raspberry Pi.
Importante:
Puede que tengas que usar el usuario correcto de tu EC2 (ubuntu
, ec2-user
, etc.) o agregar tu archivo .pem con -i.