OpenSSH tunneling (Layer2 VPN)
by admin on Sep.29, 2011, under Linux, Networking
Come anticipato, oltre che il reale tunneling di livello-3 (IP sopra SSH) visto (in precedenza), OpenSSH mette a disposizione la funzionalità di tunneling per il bridging ethernet ovvero una VPN basata su un tunneling di Livello-2.
Per metterlo in pratica occorre avere installato, come prerequisito, il package bridge-utils e procedere esattamente come gia visto nel post precedente, ma invocare l’iniziale comando ssh lato client in questa maniera:
# ssh -o Tunnel=ethernet -f -w 0:0
Con lo switch -o viene specificato il tipo di tunnel come ethernet (bridge) anziché point-to-point, mentre lo switch -f invia ssh in background in modo da ritornare , dopo l’autenticazione, immediatamente alla linea di comando locale e non a quella remota, e prima dell’esecuzione del comando finale (true). questo switch si aspetta un comando remoto di qualche tipo, motivo per cui va bene specificare “true”, che effettivamente non fa niente se non restituire 0 (success). Lo switch -w 0:0 serve a fare in modo che vengano generati i devices tap in entrambi i nodi come tap0. Se specificassimo -w 0:1, ad esempio, otterremmo tap0 localmente e tap1 in remoto, ecc.
Consideriamo di voler attuare questo bridging tra una lan locale ed una lan remota, entrambe affacciate su Internet, ciascuna tramite un router Linux avente due interfacce, una (eth0) collegata ad Internet con indirizzo IP pubblico e l’altra (eth1) collegata fisicamente alla propria LAN. Per comodità ipotizziamo che gli indirizzamenti IP delle due LAN siano 172.16.1.0/16 il primo e 172.16.2.0/16 (in pratica due sottoinsiemi facilmente distinguibili della stessa sottorete).
Su entrambi i router dovrebbe essere a questo punto possibile (via ifconfig -a) sia eth0 che eth1 che tap0. Ora che entrambi sono connessi l’uno con l’altro tramite Internet via SSH, occorre infine impostare l’interfaccia bridge. Qui tornano necessarie le bridge-utils per creare una bridge interface br0, impartendo i comandi (su entrambi i nodi!):
brctl addbr br0
brctl addif br0 eth1
brctl addif br0 tap0
quindi attivarle, se già non lo fossero:
ifconfig tap0 up
ifconfig br0 up
Ciò ha generato la interfaccia br0, quindi messo in bridge eth1 con tap0.

