Un tunneling pppd e netcat


Abbiamo una macchina M1 ed una macchina M2 sulla rete Internet separate da switch, router, firewall e così via.

La comunicazione fra queste due macchine può avvenire solo attraverso una porta specifica, la porta 80 (httpd) ad esempio o la porta 8080. In altre parole, il client (poniamo M2), può instaurare una connessione tcp/ip con il server (poniamo M1) solo con un protocollo specifico. Si tratta quindi di una connessione dedicata che consente solo un certo tipo di operatività.

E’ il caso classico del dipendente in azienda che lavora su M2 il quale vuole collegarsi al server di casa M1. Lo può fare limitatamente al protocollo che gira sulla porta di M1 alla quale M2 può accedere.

M1 a casa ed M2 in azienda, però, sono due macchine linux e per entrambe disponiamo dei diritti di amministratore. E qui entra in gioco il programma “netcat” anche conosciuto come il “coltellino svizzero” degli hacker e il sempre-verde pppd (point to point protocol daemon).

L’uso più classico di netcat è quello di porsi in ascolto su una porta in attesa di una connessione.


/usr/local/bin/nc -l -p 8080


Con il suddetto comando si apre in “listen” (-l) la porta 8080 sulla macchina corrente. Si noti che il path può differire da implementazione ad implementazione. Anche il nome dell’eseguibile spesso può essere “netcat” per esteso.

Adesso potrò collegarmi in telnet, ad esempio, su quella porta digitando da una macchina client:


telnet <Indirizzo della macchina su cui gira netcat> 8080


oppure con netcat stesso


/usr/local/bin/nc <Indirizzo della macchina su cui gira netcat> 8080


Come dice il nome stesso, pppd consente di creare una connessione point to point fra un host e un altro. Veniva utilizzato con i modem analogici per mettere in comunicazione client e server (in questo caso l’Internet provider). La device usata da pppd in questo caso era quella del modem ma, grazie all’opzione “pty”, si può specificare non solo una device ma anche uno script/programma.

Lanciamo allora sulla macchina M1 il seguente comando:


pppd pty "/usr/local/bin/nc -l -p 8080" silent 192.168.100.150:192.168.100.200 local


In questo modo imponiamo a pppd:

  • di usare il programma netcat come device di comunicazione (lato server) il quale starà in ascolto in attesa di una connessione sulla porta 8080,

  • di non trasmettere il pacchetto di controllo LCP (Link Control Protocol), non necessario perché non stiamo usando un modem (opzione “silent”),

  • di creare una scheda di rete virtuale (si chiamerà ppp0, tipicamente) con indirizzo locale 192.168.100.150 in grado di comunicare con l’indirizzo remoto 192.168.100.200,

  • di non usare le linee di controllo del modem (opzione “local”).


Sulla macchina M2, invece, lanceremo il comando:


pppd pty "/usr/local/bin/nc <indirizzo del server> 8080" 192.168.100.200:192.168.100.150 local


In questo modo imponiamo a pppd:

  • di usare il programma netcat come device di comunicazione (lato client) il quale si connetterà sulla porta 8080, della macchina dove gira il server,

  • di creare una scheda di rete virtuale (si chiamerà ppp0, tipicamente) con indirizzo locale 192.168.100.200 in grado di comunicare con l’indirizzo remoto 192.168.100.150,

  • di non usare le linee di controllo del modem (opzione “local”).


Quando la connessione fra i due pppd sarà stabilita, saremo in grado, dal client, di utilizzare qualsiasi servizio del server utilizzando l’indirizzo virtuale 192.168.100.150.

Ad esempio, per accedere via ssh ad M1 basterà digitare:


ssh <user>@192.168.100.150


Il sistema operativo del client, M2, utilizzerà la scheda di rete virtuale creata da pppd per connettersi alla corrispondente scheda virtuale del server. Questo vale per qualsiasi protocollo, http, ftp, smnp ecc.

E’ un semplice ma efficace tunneling casalingo per aggirare le restrizioni imposte da provider e aziende; un piccolo trucco per navigare meglio e, spesso, essere più produttivi.




© Mialan 2001 - 2018