Reverse tunnel via SSH

A volte ci si imbatte nel problema di dover accedere ad una macchina che non è esposta in rete pubblica ma vi può approdare attraverso un NAT. È il tipico esempio di rete domestica o di piccola azienda o - più in generale - delle normali ADSL.

Avendo a disposizione un'altra macchina raggiungibile in SSH ed esposta in rete pubblica, è possibile "proiettare" su questa una porta TCP del computer interno. Ad esempio questo tipo di configurazione può servire per accedere da remoto ad un calcolatore che altrimenti non sarebbe raggiungibile.

Il procedimento è piuttosto semplice.

Seguendo il l'ipotetico caso:

  • Il computer A può uscire in internet attraverso internet e collegarsi al "Server" SSH esposto in rete pubblica
  • Il computer A non è però raggiungibile dall'esterno per farci assistenza remota
  • Ma devo poterci accedere "rimbalzando" sul server...

Potrò quindi utilizzare la seguente riga di comando:

ssh -Ntg -R *:8022:localhost:22 username@server

In questo caso il comando ssh parte in modalità di reverse tunnel collegandosi al server in SSH (è necessario - chiaramente - avere uno username) e gli fa esporre sulla porta 8022 la propria 22.

Facciamo un altro esempio. Voglio poter accedere a una macchina che espone solo internamente servizi web, ed ecco che potrò esporla usando lo stesso principio:

ssh -Ntg -R *:8080:localhost:80 username@server

In questo caso digitando su un qualunque browser http://server:8080 accederò al server web della macchina interna perché la sua porta 80 è stata inoltrata all'ascolto sulla macchina pubblica.