Creación de un Tunel Inverso

Supongamos que en una red interna de una institución se permiten las conexiones ssh hacia fuera pero no las conexiones directas de entrada. Las conexiones de entrada deben ocurrir pasando por una máquina bastión. Es posible usar un tunel inverso para poder acceder a una máquina concreta de la red sin pasar por el bastión.

Estando en la máquina de la institución (máquina escuela) establecemos la siguiente conexión con la máquina fuera de la red (micasa):

usuario@escuela:~$ ssh -R 2048:localhost:22 micasa
Password:
Linux micasa 2.4.20-perfctr #6 SMP vie abr 2 18:36:12 WEST 2004 i686
You have mail.
Last login: Fri Mar 23 12:25:08 2007 from escuela
micasa:~>

Ahora establecemos en micasa una conexión por el puerto 2048 a micasa:

usuario@micasa:~$ ssh -p 2048 localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 1b:8f:55:d1:ea:7c:fb:0c:84:ec:fa:33:9a:54:f8:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
usuario@localhost's password:
Linux escuela 2.6.15-1-686-smp #2 SMP Mon Mar 6 15:34:50 UTC 2006 i686
......
Last login: Fri Mar 23 12:36:54 2007 from micasa
usuario@escuela:~$
La conexión es redirigida hacia la máquina en la intranet en forma segura.

La sintáxis general de esta forma de uso de ssh es:

ssh -R [bind_address:]port:host:hostport machine
La opción -R especifica que el puerto port del servidor remoto debe ser redirigido al puerto hostport del servidor host via el lado local.

Esto funciona porque el servidor SSH pone un proceso que escucha el puerto en el lado remoto (el 2048 en el ejemplo) y cuando ocurre una conexión a ese puerto la redirige al canal seguro hasta el cliente SSH, el cual conecta con la máquina host por el puerto hostport.

Figura: ssh -R [bind_address:]port:host:hostport machine

Puede usar cualquier número de puerto mayor que 1024 y menor que 32768.

Ejercicio 2.1.21   Pruebe a cerrar la conexión ssh iniciada en escuela. ¿Que ocurre? ¿Se cierra la conexión inversa?

Ejercicio 2.1.22   ¿Existe límite al número de conexiones inversas que puede recibir sobre un tunel dado?

Ejercicio 2.1.23   ¿Puedo usar la conexión inversa para una conexión sftp, scp, etc? Pruebe:

Ejercicio 2.1.24   ¿Puede usarse un tunel inverso con aplicaciones X? Pruebe a hacer algo como esto:

usuario@millo:~$ ssh -N -X -R 2048:localhost:22 micasa
y después:
usuario@micasa~$ ssh -X -p 2048 localhost
Last login: Wed May 20 17:47:46 2009 from XXXXXXXXXXXXXXXXXXXXX
usuario@millo:~$ xclock &
[1] 6895
¿Funciona?

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19