OpenVPN
routing
mini howto
Introduzione
Una VPN (Virtual Private Network) si usa quando si ha la necessita di
creare un collegamento tra 2 o piu reti private attraverso una rete
pubblica (come internet). Una volta stabilita la connessione tra le 2
reti private, gli utenti vedranno la rete opposta in modo del tutto
trasparente come se fossero collegate fisicamente tra di loro. Bisogna
tenere pero conto che la velocita di connessione massima tra le 2 reti
è definita dalla rete pubblica: se usassimo una connessione
adsl
normale con banda in upload di 256kbs ad esempio, la velocita massima
di trasferimento dei file sara circa 32kbyte al secondo, e non i
classici 10/100mbit della LAN. Altra cosa molto importante dell uso di
OpenVPN
è
quello di creare un sistema di comunicazione protetto: potete stare
quindi tranquilli anche nel caso dobbiate trasferire dati confidenziali
e riservati.
Questa guida vuole solo essere una sorta di QuickStart per configurare
velocemente una VPN in modalita routing.
La guida si basa sulla configurazione di OpenVPN 2.X su una macchina
slackware (kernel 2.6) con installazione da sorgenti, e non sostituisce
assolutamente la documentazione ufficiale che è molto
esauriente
e ben
scritta (la trovate qui).
Quali
sono le differenze tra modalita bridging e routing?
Bridging e routing sono 2 sistemi per collegare sistemi con VPN.
Vantaggi Bridging
- I Broadcasts viaggiano
sulla VPN -- Questo permette ai software
che fanno uso di broadcast di funzionare, come ad esempio la
condivisione dei file di windows o i giochi in lan, di funzionare.
- Non sono necessarie
configurazioni di routing.
- Funziona con tutti i
protocolli che viaggiano su ethernet incluso
IPv4, IPv6, Netware IPX, AppleTalk, etc.
- Relativamente facile
da configurare per soluzioni roadwarriors
(molteplici sedi distaccate, utenti che si collegano da posti diversi)
Svantaggi Bridging
- Meno efficiente
rispetto la modalita routing, e poca scalabilita.
Vantaggi Routing
- Efficienza e
scalabilita
- Permette un miglior
runing dell MTU per una maggiore efficienza.
Svantaggi Routing
- I client devono usare
un WINS server (come samba) per poter usare
la condivisione di file su VPN.
- Ogni instradamento
deve essere configurato in modo da collegarsi
alla subnet.
- I software che
dipendono dai broadcast non vedono le altre
macchine in lan sulla VPN.
- Funziona solo con
IPv4, e IPv6 nel caso che i dispositivi che
entrambi le parti lo supportino.
Primo
passo.
Installazione di openvpn.
Requisiti
per OpenVPN: libreria LZO, pacchetto
iproute2 moduli tap/tun compilati nel kernel.
Installazione di LZO
#
wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
#
tar xvfz lzo-1.08.tar.gz
#
cd lzo-1.08
#
./configure --prefix=/usr
--sysconfdir=/etc
#
make && make install
Installazione del pacchetto iproute2:
#
wget
ftp://ftp.slackware.at/slackware-current/slackware/n/iproute2-2.6.9_ss040831-i486-1.tgz
#
installpkg
iproute2-2.6.9_ss040831-i486-1.tgz
Andiamo a scaricare i sorgenti di OpenVPN ed effetuiamo
l'installazione.
Verificate che sul vostro sistema abbiate il modulo tun compiltato nel
kernel (se il comando # modprobe tun
non da errori
è correttamente installato)
#
wget http://openvpn.net/release/openvpn-2.0_rc21.tar.gz
#
tar xvfz
openvpn-2.0_rc21.tar.gz
#
cd openvpn-2.0_rc21
#
mkdir /etc/openvpn
#
mkdir /etc/openvpn/keys
#
./configure --prefix=/usr
--sysconfdir=/etc/openvpn
--enable-iproute2
#
make && make install
A questo punto ci servono gli script di esempio che andremo a
modificare e gli script per la creazione dei certificati.
Copiamo il contennuto delle dir easy-rsa e sample-config-files in
/etc/openvpn/
#
cd easy-rsa/
#
cp -R * /etc/openvpn/
#
cd ..
#
cd sample-config-files/
#
cp -R * /etc/openvpn/
Ora siamo pronti per creare i certificati e modificare i file di
configurazione.
#
cd /etc/openvpn/
editiamo il file vars in modo che la riga che esporta la variabile D
sia cosi scritta cosi: export
D=/etc/openvpn
Configurazione
del server
Creiamo i certificati e modifichiamo i file di
configurazione:
#
cd /etc/openvpn/
#
. ./vars
#
./clean-all
# ./build-ca
A questo punto vi verra
chiesto di inserire le informazioni della VPN
per la creazione dei certificati.
L' unico parametro che va per forza esplicitato è Common
Name (eg, your name or your server's hostname) []:
in cui dovete inserire l' identificativo della vostra VPN (ad esempio
VPN-test).
E' il momento adesso di creare i certificati e le chiavi:
#
./build-key-server server
Vi verranno chieste nuovamente i parametri. In questo caso al punto Common
Name: dovete scrivere
server e confermare con y le richieste successive.
La configurazione dei certificati per il server è adesso
completa.
Bisogna pero creare i certificati per i client che si dovranno
collegare al server:
#
./build-key client1
e cosi via per tutti i
client che dovete collegare al server.
Fate attenzione quando inserite il Common Name per i vari client, che
ogni client abbia un nome univoco!
Se volete proteggere le chiavi con una password potete usare lo script build-key-pass.
Generiamo ora i parametri Diffie Hellman
#
./build-dh
La configurazione dei
certificati per server e client è
terminata.
Per sapere quali file servono sul server e quali sul client
è
molto utile fare riferiemento alla seguente tabella:
Filename |
Necessario
per
|
Utilitzzo
|
Secret |
ca.crt |
server + tutti i
clients |
Root CA certificate |
NO |
ca.key |
key signing
machine only |
Root CA key |
YES |
dh{n}.pem |
solo server
|
Diffie Hellman
parameters |
NO |
server.crt |
solo server
|
Server Certificate |
NO |
server.key |
solo server
|
Server Key |
YES |
client1.crt |
solo client1
|
Client1 Certificate |
NO |
client1.key |
solo client1
|
Client1 Key |
YES |
Nel nostro caso i file che saranno necessari sul client1 sono: ca.crt
client1.crt client1.key
Per mettere questi file sul client, usate un canale sicuro!
La configurazione del server si trova nel file server.conf
Se non modificate nulla, verra creata una VPN usando come device
virtuale TUN (usato nel caso di routing) che stara in ascolto per i
client sualla porta 1194 UDP e verranno assegnati ai client
degli
ip con subnet 10.8.0.0/24.
Per una soluzione di easy setup, queste impostazioni sono sufficienti.
Per una configurazione ad hoc invece, vi rimando alla documentazione
ufficiale.
Per quello che ho potuto constatare, la configurazione cosi
comè, funziona solo se si lancia openvpn dalla directory in
cui
sono presenti i certificati cioe da /etc/openvpn/keys .Questo accade
perche nel file di configurazione, i certificati hanno il percorso
relativo e non assoluto.Per fare in modo che openvpn sia avviabile
anche da altre directory, è necessario inserire i percorsi
assoluti (nel file server.conf) modificando in questo modo le righe
relative:
ca
/etc/openvpn/keys/ca.crt
cert
/etc/openvpn/keys/server.crt
key
/etc/openvpn/keys/server.key
dh
/etc/openvpn/keys/dh1024.pem
Nota: per caricare il dispositivo virtuale di routing per la VPN con
kernel 2.6 è necessario caricare il modulo tun:
#
modprobe tun
a questo punto possiamo effetivamente lanciare il server:
#
openvpn /etc/openvpn/server.conf
Se tutto andra correttamente vedrete una cosa del tipo:
Wed
Apr 13 15:49:02 2005 OpenVPN
2.0_rc21 i686-pc-linux [SSL] [LZO]
built on Apr 13 2005
Wed
Apr 13 15:49:02 2005
Diffie-Hellman initialized with 1024 bit key
Wed
Apr 13 15:49:02 2005
TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0
ET:0 EL:0 ]
Wed
Apr 13 15:49:02 2005 TUN/TAP
device tun0 opened
Wed
Apr 13 15:49:02 2005
/sbin/ip link set dev tun0 up mtu 1500
Wed
Apr 13 15:49:02 2005
/sbin/ip addr add dev tun0 local 10.8.0.1 peer
10.8.0.2
Wed
Apr 13 15:49:02 2005
/sbin/ip route add 10.8.0.0/24 via 10.8.0.2
Wed
Apr 13 15:49:02 2005 Data
Channel MTU parms [ L:1542 D:1450 EF:42
EB:23 ET:0 EL:0 AF:3/1 ]
Wed
Apr 13 15:49:02 2005 GID set
to nobody
Wed
Apr 13 15:49:02 2005 UID set
to nobody
Wed
Apr 13 15:49:02 2005 UDPv4
link local (bound): [undef]:1194
Wed
Apr 13 15:49:02 2005 UDPv4
link remote: [undef]
Wed
Apr 13 15:49:02 2005 MULTI:
multi_init called, r=256 v=256
Wed
Apr 13 15:49:02 2005
IFCONFIG POOL: base=10.8.0.4 size=62
Wed
Apr 13 15:49:02 2005
IFCONFIG POOL LIST
Wed
Apr 13 15:49:02 2005
Initialization Sequence Completed
Significa che il dispositivo è stato inizializzato
correttamente.
Installazione
del client.
La procedura di installazione del client è esattamente la
stessa
di quella del server,ma in questo caso non vanno create le chiavi.
Configurazione
del client (Linux)
La riga da editare per stabilire la connessione con il server
è
quella del tipo:
remote my-server-1 1194
in cui dovrete sostiruire l' ip o l'host name del server su cui gira
openvpn.
Se ad esempio create una vpn all'interno di una lan, la riga sara una
cosa del tipo:
remote
192.168.0.1 1194
(192.168.0.1 è l'ip del mio server ma potrebbe anche essere
un host name di un server accedibile da internet)
Copiamo i file necessari dal server al client: ca.crt
client1.crt client1.key in /etc/openvpn/keys (del pc client)
Anche in questo caso andiamo a inserire i percorsi assoluti dei
certificati per fare in modo che openvpn possa essere lanciato da
qualsiasi dir.
Editiamo il file client.conf :
ca
/etc/openvpn/keys/ca.crt
cert
/etc/openvpn/keys/client.crt
key
/etc/openvpn/keys/client.key
Faccio notare che quando mettiamo i certificati creati sul server, sul
pc client, il loro nome sara del tipo client1.key e client1.crt. Percio
sara necessario rinominare tali file per farli combaciare con la
sintassi del file client.conf (o rinominiamo i file oppure modifichiamo
il loro nome all'interno del file client.conf)
A questo punto (dopo aver caricato il modulo tun anche sul client)
possiamo instaurare la connessione, impartendo sul client il comando:
# openvpn /etc/openvpn/client.conf
Se tutto è corretto vedrete una cosa del tipo:
Wed
Apr 13 16:03:05 2005 OpenVPN
2.0_rc21 i686-pc-linux [SSL] [LZO]
built on Apr 12 2005
Wed
Apr 13 16:03:05 2005
IMPORTANT: OpenVPN's default port number is
now 1194, based on an official port number assignment by
IANA.
OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Wed
Apr 13 16:03:05 2005 LZO
compression initialized
Wed
Apr 13 16:03:05 2005 Control
Channel MTU parms [ L:1542 D:138 EF:38
EB:0 ET:0 EL:0 ]
Wed
Apr 13 16:03:05 2005 Data
Channel MTU parms [ L:1542 D:1450 EF:42
EB:23 ET:0 EL:0 AF:3/1 ]
Wed
Apr 13 16:03:05 2005 Local
Options hash (VER=V4): '41690919'
Wed
Apr 13 16:03:05 2005
Expected Remote Options hash (VER=V4):
'530fdded'
---
---
Wed
Apr 13 16:03:06 2005 OPTIONS
IMPORT: timers and/or timeouts modified
Wed
Apr 13 16:03:06 2005 OPTIONS
IMPORT: --ifconfig/up options modified
Wed
Apr 13 16:03:06 2005 OPTIONS
IMPORT: route options modified
Wed
Apr 13 16:03:06 2005 TUN/TAP
device tun0 opened
Wed
Apr 13 16:03:06 2005
/sbin/ip link set dev tun0 up mtu 1500
Wed
Apr 13 16:03:06 2005
/sbin/ip addr add dev tun0 local 10.8.0.10
peer 10.8.0.9
Wed
Apr 13 16:03:06 2005
/sbin/ip route add 10.8.0.1/32 via 10.8.0.9
Wed
Apr 13 16:03:06 2005 GID set
to nobody
Wed
Apr 13 16:03:06 2005 UID set
to nobody
Wed
Apr 13 16:03:06 2005
Initialization Sequence Completed
Cio significa che al client è stato assegnato l'ip 10.8.0.10.
Configurazione
e installazione del client (Windows XP)
Scarichiamo il pacchetto binario per windows e lo installiamo seguendo
il wizard.
Verra chiesto di installare un driver non certificato, clicchiamo per
continuare l'installazione.
Una volta installato, troveremo i file di configurazione sotto
C:\Programmi\OpenVPN\sample-config
Andiamo a editare il file C:\Programmi\OpenVPN\vars.bat come
segue:
set
KEY_DIR=C:\Programmi\OpenVPN\easy-rsa\keys
Creiamo una direcorty in C:\Programmi\OpenVPN\easy-rsa\ di nome keys.
Copiamo i certificati creati ca.crt
client2.crt client2.key nella directory keys andando a rinominare i
file
in modo che combacino con le direttive del file client.ovpn
cioe avremo una cosa del tipo:
ca
C:\\Programmi\\OpenVPN\\keys\\ca.crt
cert
C:\\Programmi\\OpenVPN\\keys\\client.crt
key
C:\\Programmi\\OpenVPN\\keys\\client.key
da notare le \\ per indicare che il percorso è assoluto.
Editiamo il file client.ovpn andando ad inserire la riga che contiene
l'ip del server:
remote
192.168.0.1 1194
salviamo e chiudiamo l' editor.
A questo punto è sufficiente cliccare con il destro sul file
appena editato e cliccare su:
Start
openvpn on this config file
In questo modo sara instaurata la connessione con il server.
Si aprira anche una console contente i log della connessione, in modo
da capire se è tutto funzionante.
Verificare
il
funzionamento:
testiamo
la connessione dal clinet con un semplice ping al
server che ha ip 10.8.0.1
$
ping 10.8.0.1
PING
10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64
bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=3.08 ms
64
bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=3.01 ms
che come vedete risponde correttamente.
Proviamo anche ora dal lato server al client:
$
ping 10.8.0.10
PING
10.8.0.10 (10.8.0.10) 56(84) bytes of data.
64
bytes from 10.8.0.10: icmp_seq=1 ttl=64 time=4.83 ms
64
bytes from 10.8.0.10: icmp_seq=2 ttl=64 time=4.41 ms
Anche in questo caso è tutto corretto.
Note
per
l'automatizzazione su slackware
Se
vogliamo
che sia il server che il client vpn siano inizializzati al boot,
è sufficiente aggiungere a /etc/rc.d/rc.local una riga del
tipo:
openvpn
/etc/openvpn/client.conf
(per il client)
oppure
openvpn
/etc/openvpn/server.conf
(per il server)
e aggiungere la riga
/sbin/modprobe
tun
in /etc/rc.d/rc.modules.
In entrambi i casi sia server che client saranno lanciati con user e
group di default cioe nobody.
Note
per l'utilizzo di server con firewall
Se
state cercando di collegare un client ad un server attraverso internet,
dovete ricordarvi di aprire la porta 1194 UDP del firewall, e se state
usando anche un router, dovete ricordarvi di ridirigere la porta 1194
verso l'ip del server su cui gira il servizio openvpn.
Link
Utili
http://openskills.info/infobox.php?ID=595
http://www.sistemistiindipendenti.org/modules/news/article.php?storyid=66
Ringraziamenti
Grazie a matrig che mi ha aiutato nella realizzazione della sezione
dedicata a OpenVPN per windows.
Grazie a darkpand per i chiarimenti sul networking.
Autore: scomodo
www.scomodo.com
|