VPN tunneling con openssh
by admin on Sep.24, 2011, under Linux, Networking
Una relativamente poco conosciuta feature da tempo presente in openssh è la sua capacità di creare un tunnel VPN.
In questo contesto, con tunneling si vuole intendere un reale tunneling di livello-3 (IP sopra SSH), e non l’ SSH forwarding cui spesso ci si riferisce impropriamente come SSH tunneling.
In questo caso viene creata una nuova interfaccia di rete virtuale, utilizzabile al pari di qualsiasi altra.
Questo meccanismo è decisamente più potente e flessible del semplice forwarding e può venire sfruttato oltre che per TCP, anche per UDP e ICMP.
Una volta stabilita, tale VPN permette l’i inoltro di traffico tra due network remote, o quantomeno distinte, tramite una connessione SSH.
Impostarla è realmente molto semplice:
Sulla macchina server occorre abilitare il tunneling e permettere l’accesso come root, modificando /etc/ssh/sshd_config:
PermitTunnel yes
PermitRootlogin yes
quindi riavviare il server:
# /etc/init.d/sshd restart
Sulla macchina client, e già come utente root (altrimenti non sarebbe possibile la creazione dei necessari network devices) si può quindi effettuare il login al server.
# ssh -w any:any server
In seguito a cio, sia sul server che sul client, sarà presente un nuovo tun device:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
POINTOPOINT NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Per configurarli, dato che si tratta di devices di tipo point-to-point, su ciascuno dei due andrà impostato il corrispondente peer.
Rispettivamente, sul client:
# ifconfig tun0 172.16.0.1 pointopoint 172.16.0.2
e sul server:
# ifconfig tun0 172.16.0.2 pointopoint 172.16.0.1
Da ultimo, ovviamente, sarà necessario impostare un routing coerente tra le due reti appena aggregate.
Vi è modo, pure, di impostare il tunneling a layer 2, con devices ethernet virtuali. Tutto ciò che occorre fare in tal caso è impostare il device type nel file di configurazione del client (/etc/ssh/ssh_config) con la direttiva:
TunnelDevice ethernet
dopodiche i nuovi network devices saranno di tipo tap anziché tun.

