El otro dÃa estaba trabajando en casa (esto del teletrabajo puede llegar a ser esclavizante 🙂 cuando necesitaba acceder a un servicio de una máquina del trabajo a la cual no tenÃa acceso directo desde internet.
Entonces se me ocurrio que tenÃa 2 caminos:
- El camino fácil: redireecionar el el firewall un puerto al servicio de esa máquina
- El camino desconocido: Crear un tunel SSH a través de una máquina (de la red del trabajo) que tiene SSH accesible desde Internet.
Adivinar cual elegà 😛
Vamos al grano. Ya he descrito el escenario: una máquina con ssh accesible desde internet tiene que hacer de puente a otra máquina que no es accesible desde internet.
Vamos a ver una manera de lograrlo. Accedemos a esa máquina con SSH y dentro de ella lazamos:
ssh -R 8080:192.168.1.254:443 -f -N etxea.net
Donde etxea.net es la maquina donde nos encontramos trabajando (y que tiene SSH accesible desde internet) y la maquina 192.168.1.254 es a la que queremos acceder (concretamente a su puerto HTTPS). Con este comando lograremos que el puerto 8080 de etxea.net sea redirigido a través de SSH al puerto 443 de la máquina 192.168.1.254 a traves de la maquina desde donde hemos lanzado el comando.
Las opciones -f (background) y -N (no lanzar comando en el otro extremo) son utiles cuando solo queremos lanzar un tunel SSH.
Menudo lio 😛 a ver si un dibujito aclara como funcionará todo despues de lanzar el comando:
Tambien se puede utiliar este comando para establecer una redireccion de la maquina en internet a la maquina donde estamos trabajando. En teoria esto se puede hacer con -L, pero me encuentro mas comodo haciendolo con -R. Por ejemplo, tenemos nuestra maquina en internet que tiene un servicio corriendo en el puerto 5000, al cual queremos acceder desde etxea.net por un tunel ssh. Accedemos por SSH a esa maquina en Internet y lanzamos:
ssh -R 5000:localhost:5000 etxea.net
Con ello, desde etxea.net accediendo a localhost:5000 seremos redirigidos por el tunel SSH al puerto 5000 de la maquina remota.
Más info: