Reverse SSH
Vi siete mai trovati a dover fare una teleassistenza o un lavoro su una macchina linux che è dietro ad un NAT e quindi non raggiungibile? Si potrebbe ovviamente usare una VPN (la cui connessione ovviamente deve iniziare dalla macchina dietro il NAT ed essere diretta verso una macchina pubblica) ma se si tratta di un qualcosa di rapido, e non avete tempo / voglia / modo di usare una VPN, potete usare un tunnel SSH in reverse.
Per fare funzionare questo sistema è però NECESSARIO che abbiate una macchina con un ip pubblico che vi faccia da appoggio.
Preparazione della macchina con ip pubblico
Sulla nostra macchina pubblica, dove ovviamente dobbiamo poter entrare in shell, possiamo eventualmente creare un utente apposito per fare questi tunnel, un utente limitato che possa essere usato allo scopo ed eventualmente comunicato ad altre persone. Non è obbligatorio farlo, possiamo anche usare root o qualsiasi altro utente, alla bisogna. Ma diciamo che vogliamo fare una cosa fatta bene, quindi creiamo un utente allo scopo. Lo chiamiamo "sshtunnel" (oppure quello che volete voi) e gli diamo gruppo "nogroup" e come shell usiamo "/bin/false". Ovviamente gli daremo una password.
adduser --ingroup nogroup --shell /bin/false sshtunnel
Lanciare il tunnel dalla macchina dietro il NAT
Ora dobbiamo in qualche modo dire a chi ha accesso alla macchina dietro il NAT che deve lanciare un comando per noi... questo comando servirà a consentire poi il nostro accesso via ssh tunnel. Possiamo per esempio mandare l'informazione per email, oppure sfruttare altri metodi, purché riusciamo a fare eseguire il comando che crea il tunnel.
ssh -f -N -T -R 2222:localhost:22 sshtunnel@public.server.address
Questo comando lancia ssh e lo mette in background, dicendogli di non fare nulla se non lanciare il tunnel (nessuna shell remota o comando remoto vengono eseguiti, non c'e` interattività). Se il comando è stato eseguito con successo, torna il prompt dopo aver chiesto la password. Usate un "ps ax" per verificare che il comando sia in esecuzione.
Connettersi da fuori
Ora è possibile, dalla macchina con ip pubblico, fare ssh alla macchina che si trova dietro il NAT sfruttando il tunnel, in questo modo:
ssh -p 2222 root@localhost
Chiudere il tunnel
Il tunnel rimarrà disponibile fino a che non verrà killato il comando che l'ha generato, o fino a che non cade la connessione internet per abbastanza tempo da fare andare in timeout la connessione. Questo meccanismo non è una VPN vera e propria e manca di un meccanismo di riconnessione automatica in caso di problemi di linea.