Può essere necessario dover accedere ad un server che sia collegato ad Internet ma che non disponga di un indirizzo IP pubblico e statico. Potrebbe avere un indirizzo IP dinamico oppure potrebbe capitare di dover utilizzare un router per telefonia mobile che spesso usa il protocollo NAT, condividendo quindi lo stesso indirizzo IP con altri router.
Se abbiamo a disposizione un secondo server con indirizzo IP pubblico e statico lo possiamo usare come ponte per collegarci al primo server.
Per prima cosa dobbiamo aprire un tunnel SSH dal server interno verso il server esterno. Essendo una connessione che parte dall’interno della rete verso l’esterno non avremo problemi con il protocollo NAT né, presumibilmente, con il firewall.
Il comando da eseguire è:
$ ssh -R <porta_server_esterno>:localhost:<porta_server_interno> utente_server_esterno@indirizzo_server_esterno
ad esempio:
$ ssh -R 80:localhost:8000 [email protected]
aprirà un tunnel tra la porta 80 del server esterno (il cui IP è nell’esempio 123.456.789.000) e la porta 8000 del server locale, quindi quello interno.
A questo punto qualsiasi connessione alla porta 80 del server esterno verrà reindirizzata alla porta 8000 del server interno.
Se, ad esempio, sulla porta 8000 rispondesse un web-server questo sarebbe accessibile anche da tutta Internet.
Se non si dispone di un server con IP pubblico e statico ci si può appoggiare a servizi che mettono a disposizione la possibilità di creare un tunnel come ho descritto sopra. Uno di questi è ad esempio ngrok.