Com crear tunnels ssh inversos?

Un tunnel ssh invers significa crear un tunnel de destí a origen.

Imaginem que treballem en local fent una apliació web i tenim un apache corrent al nostre ordinador però volem ensenyar-ho a algú.

Doncs mitjançant un tunnel d’aquests podem obrir un flux de xarxa per tal de per exemple mostrar la pàgina sense necessitat d’obrir ports al nat de nostre router i senzillament donant una l’adreça i port d’algun servidor que tinguem.

Per fer això necessitem un servidor amb sistema tipu unix amb un servidor openssh i un ordinador amb client ssh(mac o linux per exemple, amb windows i putty segurament també es pot fer)

Exemple:

Tenim un apache corrent al port 8080 del nostre ordinador.

Tenim un servidor diguem-li servidor.com i volem obrir el flux al port 10000.

Doncs és tant simple com obrir un terminal en el nostre ordinador Mac o *nix:

mbp$ ssh servidor.com -R servidor.com:10000:localhost:8080 -N

Amb aquesta senzilla ordre crearem un tunnel de manera que quan algú posi al seu navegador, http://servidor.com:10000, podrà veure la web en aquest cas que estiguem preparant des del nostre portatil.

Un cop executada la ordre no ha de passar res, el tunnel queda obert fins que el tanquem fent control+c.

El parametre -R significa exactament el que s’ha descrit enviar el flux de xarxa que entri pel servidor remot cap a la màquina origen del tunnel. El -N fa que no s’inicii una sessió de consola.

Nota: si volem obrir el tunnel  fent servir un usuari en concret(ex ricard) i especificar un port diferent(ex 4422) al per defecte:

Nota: si no et funciona mira al servidor on vols obrir el tunnel fent un netstat -ln que l’adreça contra la que obre el port no sigui 127.0.0.1. Si és així llavors vol dir que el /etc/ssh/sshd_config et falta activar la opció “GatewayPorts yes“. Afegeix aquesta línia i reinicia el dimoni sshd “/etc/init.d/ssh restart”.

mbp$ ssh -p4422 ricard@servidor.com -R servidor.com:10000:localhost:8080 -N