Openvpn

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca

Introduzione

Una VPN (Virtual Private Network) e' un tipo di interconnessione tra computer che permette sul piano logico, di comprendere in una LAN (Local Area Network) computer risiedenti in qualsiasi parte del pianeta. Solitamente si considera una LAN come una rete di computer locali, identificati da un indirizzo e una classe di ip (es: 192.168.0.0/24, 10.0.0.0/24 etc.). Con un collegamento VPN, un computer che si trovi fisicamente al di fuori di tale LAN, puo' risultarne un perfetto membro.

Tre computer, quindi, che si trovassero rispettivamente a Madrd, Londra e Roma potrebbero, grazie ad una vpn, creare la seguente rete:

                                                   
______________                       _______________ 
|    LAN      | ----- INTERNET ----- |    LAN      |
|   Madrid    |          |           |    Roma     |
| 192.168.0.1 |          |           | 192.168.0.3 |
|_____________|    ______|_______    |_____________|
                  |     LAN     |         
                  |    Londra   |           
                  | 192.168.0.2 |            
                  |_____________|

Il fenomeno che rende come locali macchine remote, a livello di protocollo, prende il nome di Tunneling.

Prima di cominciare

La prima cosa da fare e' verificare in /dev/net la presenza del device virtuale tun. Se non ci fosse, crearlo con:

mknod /dev/net/tun c 10 200

..tirarlo su e far si che al boot venga caricato:

# modprobe tun
# echo "tun" >> /etc/modules

Infine abilitare il forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward

Openvpn & Iptables

Diamo le opportune regole al firewall:


Generazione delle chiavi

Se non l'abbiamo gia' fatto:

# apt-get update && apt-get install openvpn

Una cosa fondamentale nello scambio di dati privati passando dalla rete pubblica (internet) e' che la nostra comunicazione avvenga in maniera crittografata, cioe' per poter leggere tali dati, ogni elaboratore deve disporre di appropriate chiavi di lettura. Queste stesse chiavi di lettura saranno generate e scambiate fra tutti gli elaboratori che comporranno la vpn. Effettuiamo il collegamento fra due macchine, una chiamata in maniera molto originale server e una client. Queste due macchine sono di due diversi utenti che possono risiedere ovunque nel mondo. La macchina server sara' quella in ascolto. Spostiamoci sul server, esattamente in /etc/openvpn e creiamo la nostra chiave con:

# openvpn --genkey --secret zmo.key

Una volta creata dovremmo poterla copiare nella stessa dir del client. Questo passaggio dovrebbe essere fatto nel piu' sicuro dei modi ad es: mail crittografate, istant messenger (che pero' incapsuli SSL), tramite SSH (scp) etc.

Collegamento

Configurazione client-server

Con l'installazione tramite apt, vengono creati la dir /etc/openvpn ed uno script /etc/init.d/openvpn. Creiamo in /etc/openvpn il file server.conf ed editiamolo cosi':

dev tun 
lport 5000
ifconfig 10.0.0.1 10.0.0.2
secret /etc/openvpn/zmo.key	
verb 9
dev
identifica il device utilizzato per il tunnel. I possibili device utilizzabili da openvpn sono tap (solitamente quando si vuole lavorare con interfacce ethernet) e tun.
port
socket dell'applicazione, il default e' la 5000, deve essere la stessa da ogni capo della vpn. E' da sottolineare che sul server invece di port si scrivera' lport (local) mentre sui client rport (remote).
ifconfig
come configurato nell'esempio vuol dire: l'interfaccia tun con ip 10.0.0.1 (server) si colleghera' all'interfaccia tun con ip 10.0.0.2 (client). Utilizzando il device tap, questa stringa risulta diversa e comprendente di netmask.
secret
a questa stringa diamo il path della key creata in precedenza.
verb
verb definisce il grado di verbose stampato a video in output durante l'esecuzione (da 0 a 11 sono spiegati dando openvpn --help).

Adesso sul client creiamo il file /etc/openvpn/client.conf cosi':

remote www.hostremoto.net
dev tun 
rport 5000
ifconfig 10.0.0.2 10.0.0.1
secret /etc/openvpn/zmo.key	
verb 9
remote
a remote diamo l'ip pubblico della macchina alla quale ci connetteremo, oppure l'hostname come nell'esempio.
ifconfig
come si puo' notare il parametro ifconfig e' inverso al precedente.

A questo punto lanciamo il collegamento su entrambe le macchine, indicando al programma di attenersi alle regole appena definite nei rispettivi server.conf e client.conf:

# openvpn --config /etc/openvpn/xxxx.conf

Tra le righe di output del client dovrebbero apparire tra le altre queste due stringhe:

Wed Sep  7 15:45:28 2005 Peer Connection Initiated with www.hostremoto.net:5000
Wed Sep  7 15:45:29 2005 Initialization Sequence Completed

Andiamo sul server e diamo:

# ifconfig tun
tun0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00
          inet addr:10.0.0.1  P-t-P:10.0.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Come si vede dalla riga inet addr il nostro device virtuale tun0 con ip 10.0.0.1 e' collegato (P-t-P) a 10.0.0.2.
Pinghiamo:

# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=258 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=135 ms
 

Demonizzare Openvpn

Lo script /etc/init.d/openvpn

Come gia' accennato in precedenza, con l'installazione tramite apt viene aggiunto lo script /etc/init.d/openvpn. Questo script, che demonizza openvpn, una volta lanciato va a cercare nella dir /etc/openvpn il file con estensione .conf che dovra' corrispondere al file di configurazione. Dico questo poiche' in varie documentazioni lo troverete con estensioni diverse (es: .ovpn etc..) che lo script non riconoscerebbe come valido.

# /etc/init.d/openvpn start

Una volta avviato lo script attivera' il demone. Per impostarlo al boot:

# update-rc.d openvpn defaults

Openvpn & log

Per loggare l'output in un file qualunque (anche se non esiste verra' creato) aggiungere la riga al file .conf:

log /var/log/openvpn.log

Conclusioni

Usando Openvpn ci si rende subito conto della sua versatilita' e della sua vasta possibilita' di configurazione, dal piu' banale e immediato collegamento point-to-point, all' allacciamento di intere LAN con implementazione di certificati TLS/SSL. Openvpn permette la creazione di vpn da applicativo ad applicativo, non necessitando quindi di modifiche nel kernel come nel caso di vpn che implementino IPSEC.


Autore: zmo