Qualche giorno fa, a lavoro ho configurato il mio primo server vpn. Avevamo la necessità di accedere alla rete dell’ufficio anche dall’esterno. Insomma ci avrebbe fatto comodo essere “virtualmente” in ufficio quando fisicamente non è possibile. Avevo ricevuto consigli in merito a queste necessità, e mi era stato detto che come OpenVPN non ce n’erano molti. Ovviamente Open VPN è un software gratuito e multipiattaforma, aveva quindi tutti i prerequisiti necessari per piacermi.
Diciamo che prima di intraprendere il lavoro ho perso qualche minuto a cercare la documentazione necessaria, che mi avrebbe accompagnato durante il cammino.
Inizialmente avevo preso un pc davvero modesto (con processore AMD Duron, qualcosa di simile al Sempron ma un po’ più vecchio ;-) ) con 40 ghiga di disco e 512 Mb di ram SO DIMM, credendo di usarlo come test per la macchina vera. Ovviamente ho installato Ubuntu server come sistema operativo, scaricando l’ultima versione (10.04) siccome è un LTS. Nell’installazione del S.O. non c’è stato alcun inghippo, oramai queste ultime versioni sono una pacchia, filano dritte dritte in pochi minuti verso il traguardo ;-).
Una volta installato Ubuntu ho seguito il wiki in inglese per la corretta installazione di open vpn. Come prima passo, la guida consiglia di configurare un bridge sulla scheda ethernet per consentire al segmento LAN di essere connesso al segmento WAN, consentendo (se si vuole) di filtrare i pacchetti che li attraversano con un firewall. Per fare ciò basta installare un pacchetto chiamato bridge-utils con il comando:
sudo apt-get install bridge-utils
Fatto ciò si deve editare il file di configurazione della rete con il comando:
sudo vim /etc/network/interfaces
modificarlo come segue:
auto lo iface lo inet loopback auto br0 iface br0 inet static address 192.168.0.10 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
Così facendo si assegna il bridge all’interfaccia eth0 con l’ip 192.168.0.10.
Adesso potete riavviare il servizio networking:
sudo /etc/init.d/networking restart
(per evitare di dover digitare sempre il comando sudo davanti ad ogni comando vi consiglio di digitare sudo su una volta per tutte)
Ora possiamo passare all’installazione vera e propria di OpenVPN:
apt-get install openvpn
Finita l’installazione del pacchetto creiamo una cartella che conterrà i programmi per generare le chiavi e le chiavi stesse:
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/ mv /etc/openvpn/2.0 /etc/openvpn/easy-rsa
Dopodichè editiamo il file vars in modo da modificare le seguenti linee con le informazioni che ci riguardano:
export KEY_COUNTRY="US" export KEY_PROVINCE="NC" export KEY_CITY="Winston-Salem" export KEY_ORG="Example Company" export KEY_EMAIL="steve@example.com"
Salvate il file e chiudetelo. Accertandovi di essere loggati come utente di root, iniziate la procedura di generazione delle chiavi:
cd /etc/openvpn/easy-rsa/ source ./vars ./clean-all ./build-dh ./pkitool --initca ./pkitool --server server cd keys openvpn --genkey --secret ta.key cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/
Ora che abbiamo generato le chiavi e i certificati per il server procediamo a generare quelli per il client (basterà ripetere la prossima procedura modificando l’identificativo del client per generare altre chiavi/certificati):
cd /etc/openvpn/easy-rsa/ source vars ./pkitool client1
Copiate ora sul client i file:
- /etc/openvpn/ca.crt
- /etc/openvpn/easy-rsa/keys/client1.crt
- /etc/openvpn/easy-rsa/keys/client1.key
- /etc/openvpn/ta.key
Ora non ci resta che editare i file di configurazione per server e client (partiamo da una configurazione di esempio):
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ gzip -d /etc/openvpn/server.conf.gz vim /etc/openvpn/server.conf
Accertatevi di correggere le seguenti linee con i vostri dati:
local 192.168.0.10 dev tap0 script-security 3 up "/etc/openvpn/up.sh br0" down "/etc/openvpn/down.sh br0" proto tcp ;server 10.8.0.0 255.255.255.0 server-bridge 192.168.0.10 255.255.255.0 192.168.0.100 192.168.0.110 push "route 192.168.0.1 255.255.255.0" tls-auth ta.key 0 # This file is secret user nobody group nogroup cipher AES-256-CBC
La voce local sarà quella corrispondente all’indirizzo del vostro bridge, come la prima voce accanto a server-bridge. La seconda voce di server-bridge sarà la subnet mask mentre la terza e la quarta sarà il range di ip che openvpn assegnerà ai client che si connetteranno alla rete.
Il comando push “route… servirà per creare una rotta sugli indirizzi della LAN.
Fatto ciò, creiamo i due script per l’avvio e la chiusura dell’interfaccia virtuale (la tap0 che vedete nel file di configurazione). Creiamo il file up.sh come segue:
vim /etc/openvpn/up.sh
#!/bin/sh BR=$1 DEV=$2 MTU=$3 /sbin/ifconfig $DEV mtu $MTU promisc up /usr/sbin/brctl addif $BR $DEV
e il file down.sh così:
vim /etc/openvpn/down.sh
#!/bin/sh BR=$1 DEV=$2 /usr/sbin/brctl delif $BR $DEV /sbin/ifconfig $DEV down
Rendiamoli eseguibili:
chmod 755 /etc/openvpn/down.sh chmod 755 /etc/openvpn/up.sh
Ora che il server è correttamente configurato, possiamo dare una riavviata al servizion openvpn:
/etc/init.d/openvpn/restart
Adesso passiamo al file di configurazione del client:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn
Il quale dovrà contenere:
dev tap proto tcp remote 192.168.0.10 1194 cert client1.crt key client1.key tls-auth ta.key 1 cipher AES-256-CBC
Ora copiate nella cartella di configurazione del client il file appena editato (chiamatelo client1.conf o client1.ovpn). Ovviamente si presuppone che i file delle chiavi e dei certificati siano nella stessa cartella di quest’ultimo file (sul client). Riavviate anche qui openvpn e il gioco è quasi fatto. Dico quasi perchè per potervi connettere al server dall’esterno dovrete dire al vostro router di aprirvi la porta 1194 e reindirizzare il traffico proveniente dall’esterno verso l’ip 192.168.0.10 (quello del bridge).
Ora siete davvero pronti per collegarvi dall’esterno alla vostra LAN (così com’è stato configurato openvpn non è possibile accedere da dentro la LAN alla vpn appena creata).
Spero di non aver dimenticato niente! ;-)
Che ve ne pare?