Está en: » Artículos »

Reenvío de puertos a través de SSH

Reenvío de puertos a través de SSH

Hay veces que nos encontramos con tener que acceder a un puerto específico de equipo de una red remota pero no tenemos acceso directo al mismo. Creo que lo entenderemos mejor con esta ilustración:

ssh_reenvio_puertos

En este ejemplo tenemos un equipo de una red remota (remoto_lan) que tiene un servicio escuchando en el puerto 88 sólo para la red interna. En esta misma red tenemos un equipo al cual sí que podemos acceder externamente a través de ssh (sshd_remoto).

El proceso sería sencillo (en el equipo de trabajo):

ssh -4 -L localhost:8888:remoto_lan:88 usuario@sshd_remoto

Explicando la línea anterior:

  • -4 => Esto obliga a que use IPv4.
  • -L => hace la redirección
    • El primer parámetro es la ip de escucha. Por defecto lo podemos omitir y por defecto lo establece a localhost. Aunque podemos definir la ip a escuchar ó 0.0.0.0 para permitir conexión desde cualquier ip/interface.
    • El segundo es el puerto de la ip de escucha (el puerto que vamos a utilizar en nuestra máquina).
      Importante! En caso de utilizar un puerto inferior al 1024, habrá que lanzar el comando como root.
    • El tercero la IP de la máquina remoto_lan a la que va a reenviar las conexiones el servidor ssh.
    • El cuarto el puerto de la máquina remoto_lan a la que reenviar las conexiones (puerto 88 en este ejemplo).

Osease y resumiendo, cuando te conectas a localhost:8888, el equipo hace una redirección de toda la información a sshd_remoto que a su vez reenvía dicha información a remoto_lan al puerto 88.

Si le pasamos el parámetro -v (que nos tire un log de todo lo que hace), después de pedir la contraseña debe decir:

debug1: Local connections to localhost:8888 forwarded to remote address 172.26.0.112:88
debug1: Local forwarding listening on 127.0.0.1 port 8888.

Ya sólo habría que apuntar la aplicación que queramos a localhost:8888 para acceder a remoto_lan:88

Pongamos esta vez un ejemplo más tangible y con ips:

ssh_reenvio_puertos-ejemplo2

Imaginemos esta configuración de red (una red muy normal en ámbitios domésticos o empresas pequeñas).

En nuestra red interna, tendríamos un equipo (ip 192.168.1.123) el cual es accesible desde internet al servicio ssh en el puerto 222 (hemos configurado una redirección NAT en el router para permitir y reenviar el puerto externo 222 al puerto interno 22 de la ip 192.168.1.123). He puesto otro puerto para hacer más completo el ejemplo pero no hay ningún problema por usar el puerto por defecto de ssh (TCP 22). Indiscutiblemente lo que si es necesario es que podamos acceder a la máquina interna desde internet!

Ahora se nos presenta el caso de que tenemos que modificar cierta configuración en nuestro router desde donde estamos (fuera de nuestra red interna) pero nuestro router no nos permite acceder desde fuera. Pues bien, podemos hacer esto:

ssh -4 -L localhost:8888:192.168.1.1:80 -p222 [email protected]

Con esto estamos creando una redirección desde nuestro puerto 8888 local al puerto 80 del router (ip interna 192.168.1.1) a través del equipo ssh (192.168.1.123)

Ya sólo nos quedaría abrir un navegador y acceder a: http://localhost:8888

Comentarios

Deje su comentario

Previsualización de comentario
  1. Anónimo dice: