OpenSSH client tra le tante funzionalità utili presenta la possibilità di creare un tunnel tra due macchine e farci passare qualsiasi servizio. Ma vediamo di provare a spiegare di cosa si tratta
Definizione di uno schema di rete
Supponiamo che la nostra rete sia sviluppata in questo modo:
Esempio tunnel left-to-right
Supponiamo di dover raggiungere un servizio http attivo su 192.168.2.2/24 sulla porta 80 che non è visibile all’esterno della rete; inoltre supponiamo che sulla macchina 192.168.2.1/24 sia attivo un server SSH sulla porta 22 che viene traslata da un nat sull’interfaccia con ip pubblico (nell’esempio 10.20.30.40/32) sulla porta 1234. Localmente useremo la porta 54321 per la connessione al tunnel. I procedimenti sono molto semplici, prima li scriviamo e poi li spieghiamo:
user_a@192.168.1.2:~$ ssh 10.20.30.40 -p 1234 -L 54321:192.168.2.2:80
user_a@192.168.1.2:~$ browser localhost:54321
Con il primo comando ci connettiamo normalmente via ssh all’host 192.168.2.1 passando dal suo ip pubblico che con una traslazione gira il traffico da 10.20.30.40:1234 a 192.168.2.1:22. Il primo comando inoltre prepara un tunnel utilizzabile da 192.168.1.2 sulla porta 54321 che, passando per la nostra connessione ssh, proseguirà verso l’host 192.168.2.2 della LAN2 contattando la sua porta 80.
Esempio tunnel right-to-left
Supponiamo ora che la connessione ssh venga instaurata sempre da 192.168.1.2 in LAN1 ma che il tunnel debba essere fruibile da 192.168.2.1 (nel caso precedente fruito da 192.168.1.2) o da qualcuno nella sua rete che possa collegarsi a lui, quindi con un ipotetico servizio htto sulla porta 80 di 192.168.1.2. Per fare questo si usa l’opzione -R. Nel esempio seguente faremo in modo che il tunnel venga utilizzato da 192.168.2.2.
user_a@192.168.1.2:~$ ssh 10.20.30.40 -p 1234 -R 54321:192.168.1.2:80
user_b@192.168.2.2:~$ browser 192.168.2.1:54321
Con il primo comando ci connettiamo allo stesso modo e rendiamo il tunnel fruibile da LAN2 mentre con il secondo lo chiamiamo e ci colleghiamo.
Conclusioni
All’inizio sarà un po’ complicato, sia capire bene come funziona, sia capire quello che ho scritto ma, provando e rileggendo, dovreste riuscire dopo un po’ a prendere dimestichezza con le due funzionalità. Ovviamente possiamo rendere ancor più complicate le cose concatenando tunnels e utilizzando altre funzionalità ma il resto spetta a voi.