Cómo hacer Port Forwarding con SSH

Cómo hacer Port Forwarding con SSH

lun. 19 ene 2026
5 minutos

Índice Link to Índice

Introducción Link to Introducción

El Port Forwarding es el mecanismo por el cual un puerto de un dispositivo puede actuar como uno o varios puertos de otro dispositivo en otra red. Esto es útil para acceder a servicios que se encuentran en una red distinta a la nuestra y tenemos acceso a un dispositivo que podemos usar como un puente entre las dos redes.

Uno de los diversos métodos disponibles para hacer Port Forwarding es usar SSH. Para ello, los dos dispositivos deben de tener instalado SSH y en escucha por algún puerto el cual suele ser el 22.

Scenario 1

Como se puede observar en la imagen, hay 3 dispositivos: A,B y C. A se encuentra exclusivamente en la Red 1 y C a la Red 2, en cambio, B se encuentra entre ambas. Queremos llegar desde la máquina A al servicio web de la máquina C. Podemos usar a B como puente para llegar a C, ya que está conectado a ambas redes con un Port Forwarding.

Scenario 1 solved

En este caso, se ha decidido usar el puerto 80 de la máquina B como el puerto 80 (servicio web) de la máquina C con Port Forwarding. Ahora A, puede consultar al puerto 80 de la máquina B y esta redirigirá el tráfico a C, al igual que cuando C devuelva la respuesta a B este lo hará a su vez a A.

Gracias al Port Forwarding, A puede acceder al servicio web de C que estaba aislado en otra red.

Reverse vs Local port forwarding Link to Reverse vs Local port forwarding

El Port Forwarding puede ser Reverse o Local dependiendo de la direccionalidad de la conexión. Se podría resumir en:

  • Local Port Forwarding (-L): Traes un servicio remoto a tu máquina local.

  • Remote/Reverse Port Forwarding (-R): Envías un servicio local a una máquina remota.

Scenario 2

En este caso, B tiene un servicio web que escucha en localhost (solo es accesible por el propio dispositivo) y A quiere acceder a él.

Usando Local (A -> B) Link to Usando Local (A -> B)

A puede crear un Port Forwarding a B usando SSH de la siguiente manera:

BASH
1
2
# Comando ejecutado desde la máquina A
ssh -L 80:localhost:80 bob@IP_HOST_B -N -f

-L [puerto_local]:[host_remoto]:[puerto_remoto] — Redirige un puerto local al puerto remoto (ej. 80:localhost:80).
bob@IP_HOST_B — Usuario y host SSH en B.
-N — No ejecutar comandos remotos. -f — Pasar a segundo plano (no bloquear la consola).

Scenario 2 solved con Local

Usando Reverse (A <- B) Link to Usando Reverse (A <- B)

De esta forma, B es la que se debe de conectar a A para establecer la conexión.

BASH
1
2
# Comando ejecutado desde la máquina B
ssh -R 80:localhost:80 alice@IP_HOST_A -N -f
Scenario 2 solved con Reverse

Static vs Dynamic port forwarding Link to Static vs Dynamic port forwarding

Hasta el momento, solo se han mostrado ejemplos donde se realiza Port Forwarding con un solo puerto. Esto se denomina Static Port Forwarding.

Hay determinados casos en los que se quiere acceder a varios servicios de diferentes puertos en una máquina. En vez de realizar un Static Port Forwarding a cada servicio que se quiere acceder, existe la posibilidad de realizar un Dynamic Port Forwarding y redirigir tu tráfico a cualquier servicio que esté al alcance de la otra máquina.

Scenario 3

En este escenario tenemos algo parecido al anterior pero esta vez, la máquina B tiene varios servicios locales a los que A quiere acceder.

Existen varias formas de realizar Dynamic Port Forwarding. Explicaré la que considero más sencilla de entender.

Primero es necesario de crear un puerto de Dynamic Port Forwarding en la máquina B que en nuestro caso será local:

BASH
1
2
# Comando ejecutado desde la máquina B (crea un proxy SOCKS local en B)
ssh -D 3333 -N -f localhost

Ahora es necesario para A acceder a este puerto desde su máquina para poder usarlo. Para ello, usamos un Reverse Port Forwarding (ejecutado desde B para exponer el SOCKS en A):

BASH
1
ssh -R 3333:localhost:3333 alice@IP_HOST_A -N -f

Ahora, en la máquina es necesario modificar el archivo /etc/proxychains4.conf (a veces es /etc/proxychains.conf) y añadir:

PLAINTEXT
1
socks5 127.0.0.1 3333

Gracias a esto, A puede acceder a los servicios internos de B usando el comando proxychains:

BASH
1
proxychains curl http://localhost:80
Scenario 3 solved

Conclusión Link to Conclusión

El port forwarding con SSH es una herramienta flexible para exponer o consumir servicios a través de redes distintas: usa -L para traer servicios remotos a tu máquina, -R para exponer servicios locales en una máquina remota y -D para crear proxys dinámicos (SOCKS).