Argomento assai delicato e al tempo stesso molto affascinante! La soluzione che vi propongo vi permette di collegare ad un server centrale sia altre macchine sfruttando il bridging di rete (TAP), sia dispositivi mobili utilizzando il routing di rete (TUN).
Presupposto principale è quello di conoscere il concetto di Virtual Private Network (VPN) e di conseguenza buona parte del mondo che vi è dietro. Una lettura iniziale e interessante su cos’è una VPN la trovate seguendo il relativo link su wikipedia.
Riassumendo molto il concetto credo si possa affermare che:
“…una VPN è l’estensione di una rete locale privata che collega tra loro server e client variamente dislocati su un ampio territorio sfruttando una connessione pubblica ad Internet per realizzare di fatto una rete LAN, detta appunto virtuale e privata, del tutto equivalente a un’infrastruttura fisica di rete (ossia con collegamenti fisici) appositamente dedicata.”
A dire il vero non poche sono state le difficoltà che ho incontrato nel realizzare la mia personale VPN. Sulla rete prolificano decine di migliaia di guide. Se non trovate qualcosa che vi server in questa non vi resta che cercare.
Disclaimer: Fate attenzione a quanto stiamo per realizzare. Eventuali errori possono esporre la vostra rete interna a qualche malintenzionato, quindi procedete con cautela! Una VPN ha nella sicurezza della trasmissione dei dati la sua ragione di esistere, ma ricordate che il primo baluardo in fatto di sicurezza siete voi!
Vi dico subito che l’autenticazione verso la nostra VPN avverrà attraverso l’emissione di certificati digitali. Se qualche certificato dovessero andare perso o rubato vi basterà revocarlo per impedire l’accesso alla rete. Si possono facilmente implementare altre tipologie di autenticazione ma non saranno oggetto di questa guida.
CREATE A BRIDGE
OpenVPN sarà il software che ci permetterà di creare la nostra rete privata. Prima occupiamoci di creare un bridge di rete (br0).
apt-get install uml-utilities bridge-utils
Attiviamo il relativo modulo nel kernel
modprobe tun
Il seguente comando serve a rendere permanente la creazione dello speciale device di loopback tap0 assegnandolo ad uno specifico utente: ad esempio all’utente nobody
/usr/sbin/tunctl -t tap0 -u nobody
Adesso è arrivato ill momento di eliminare ogni pregressa configurazione delle interfacce di rete che entreranno a far parte del bridge di rete
ifconfig eth0 0.0.0.0 promisc up ifconfig tap0 0.0.0.0 promisc up
Creiamo il nostro bridge e aggiungiamoci i device di rete
brctl addbr br0 brctl addif br0 tap0 brctl addif br0 eth0
Verificate con il comando brctl show
che tutto sia in ordine
bridge name bridge id STP enabled interfaces br0 8000.1c6f653460a7 no eth0 tap0
È arrivato il momento di tirare su lo speciale device assegnando un IP
ifconfig br0 up ifconfig br0 10.105.1.150/24 route add default gw 10.105.1.1
se il route è impostato correttamente il comando /sbin/route -n
dovrebbe restituire qualcosa del genere
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.105.1.1 0.0.0.0 UG 0 0 0 br0 10.105.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
Ora dovremmo avere connettività di rete su entrambe le interfacce di rete. Per rendere permanente quanto fatto sino ad ora sarà necessario modificare opportunamente il file /etc/network/interfaces
. Segue un esempio basta sul mio. L’indirizzo IP del bridge e di conseguenza dell’interfaccia di rete dovrà essere corretto in base alla vostra subnet.
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback auto br0 #iface br0 inet dhcp iface br0 inet static bridge-ports eth0 tap0 bridge_stp on bridge_hello 2 bridge_maxage 12 bridge_prio 1000 bridge_maxwait 0 address 10.105.1.150 netmask 255.255.255.0 gateway 10.105.1.1 # The primary network interface auto eth0 iface eth0 inet manual up ip link set $IFACE up down ip link set $IFACE down up ip link set $IFACE promisc on down ip link set $IFACE promisc off up brctl addif br0 $IFACE || true down brctl delif br0 $IFACE || true auto tap0 iface tap0 inet manual pre-up /usr/bin/tunctl -t tap0 -u nobody up ip link set $IFACE up up ip link set $IFACE promisc on down ip link set $IFACE promisc off down ip link set $IFACE down up brctl addif br0 $IFACE || true down brctl delif br0 $IFACE || true