Introduzione a OpenVPN
19 Agosto 2014In questa strana estate la nostra voglia di imparare qualche cosa di nuovo non si esaurisce mai.
Questa volta parleremo di VPN, ovvero le Virtual Private Network: il modo più semplice per mettere in comunicazione computer distanti, come se stessero nella stessa rete locale.
Un paio di giovedì fa infatti, Federico ha buttato lì l’idea di raccontarci la sua esperienza con OpenVPN.
Non ci siamo fatti scappare l’occasione di capire un po’ meglio come funziona questa soluzione open source, quindi tutti in sala corsi per seguire la sua esposizione:
E’ partito alla grande, andando “a braccio”, visto che non ha avuto il tempo di preparare una documentazione.
Come spesso capita nelle presentazioni, l’inciampamento è dietro l’angolo. Abbiamo così chiesto a Federico di prepararci una guida, per avere chiari tutti i passaggi e per poter far fronte alle difficoltà, qualora si verificassero.
Ecco quindi il frutto del suo lavoro:
OpenVPN è una VPN open source capace di attraversare firewall e NAT.
Prima di tutto, installiamola con:
# apt-get update
# apt-get install openvpn
Useremo una autenticazione a certificati, ovvero saranno abilitati ad accedere tutti i client con un certificato firmato dalla nostra autorità di certificazione.
Essendo anche il certificato del server, all’atto della connessione, i client certificano l’autenticità del server e viceversa.
Per generare i certificati sono già disponibili degli script per semplificare il processo.
# cd /etc/openvpn
# mkdir easy-rsa
# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* easy-rsa/
Modifichiamo il file /etc/openvpn/easy-rsa/vars con dati più appropriati:
export KEY_COUNTRY=”IT”
export KEY_PROVINCE=”PV”
export KEY_CITY=”SanMartinoSiccomario”
export KEY_ORG=”comPVter” export KEY_EMAIL=”dino@compvter.it”
export KEY_EMAIL=dino@compvter.it
Poi eseguiamo:
# cd easy-rsa/
# touch keys/index.txt
# echo 01 > keys/serial
# . ./vars
# set environment variables
# ./clean-all
Generiamo la coppia chiave/certificato dell’Autorità di Certificazione:
# ./build-ca
Generiamo la coppia chiave/certificato del server:
# ./build-key-server server
Generiamo i parametri DIFFIE-HELLMAN:
./build-dh
E una coppia chiave/certificato per ogni client
./build-key client name
E ripetiamo il comando precedente per ogni client che vogliamo far connettere alla nostra rete.
Abbiamo così generato tutti i certificati di cui abbiamo bisogno.
Ora bisogna fare la configurazione del server.
Creiamo il file /etc/openvpn/server.conf come segue:
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt # generated keys
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key # keep secret
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 10.9.8.0 255.255.255.0 # internal tun0 connection IP
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo # Compression – must be turned on at both end
persist-key
persist-tun
verb 3 # verbose mode
client-to-client
Se riceviamo un bell’OK verde, abbiamo il nostro server funzionante.
A questo punto basta aprire la porta 1194 UDP sul firewall e se siamo nattati dietro modem ADSL, inoltrare la porta al nostro server.
Lato client la configurazione è la seguente:
client
dev tun
port 1194
proto udp
remote VPNSERVER_IP 1194 # VPN server IP : PORT
nobind
ca ca.crt
cert clientname.crt
key clientname.key
comp-lzo
persist-key
persist-tun
Assieme al file, che funziona su tutte le piattaforme con I relativi client OpenVPN, dobbiamo copiare dalla cartella /etc/openvpn/easy-rsa i file
Ca.crt
Clientname.crt
Clientname.key
Dove “clientname” è ovviamente il nome del client.
Vanno modificate le relative righe nel file di configurazione.
Ora il nostro client dovrebbe connettersi, ma non avremo accesso alla nostra LAN.
Questo perché al client manca la rotta statica, il server non instrada pacchetti e il nostro router di casa non ha la rotta di ritorno per il segmento della nostra VPN.
Andiamo un passo alla volta.
Apriamo il file /etc/sysctl.conf. Modifichiamo o aggiungiamo la riga:
net.ipv4.ip_forward = 1
Questo avrà effetto solo dal prossimo riavvio. Per accelerare i tempi, eseguiamo
#echo 1 > /proc/sys/net/ipv4/ip_forward
Ora dobbiamo aggiungere una riga sul fondo del file /etc/openvpn/server.conf
push “route 192.168.0.0 255.255.255.0”
Dove 192.168.0.0 è la nostra subnet casalinga. Per alcuni è 192.168.1.0
Riavviamo il server openvpn con
# /etc/init.d/openvpn restart
In ultimo, eseguiamo:
#iptables -A FORWARD -i eth0 -o tun0 -m state –state ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -s 10.9.8.0/24 -o eth0 -j ACCEPT
#iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -o eth0 -j MASQUERADE
Ora il nostro server OpenVPN dovrebbe funzionare, e dovremmo essere in grado di accedere alla nostra rete di casa da dovunque ci troviamo, su qualunque piattaforma.
Tutto chiaro ? Beh, ora avete un vostro tunnel privato che attraversa internet. Contenti ?