OpenVPN – Configurazione e Client ‘portatile’

9 03 2006

Ultimamente sto apprezzando molto le possibilita’ offerte da OpenVPN, un software per la realizzazione di reti private virtuali:

OpenVPN is a full-featured SSL VPN solution which can accomodate a wide range of configurations, including remote access, site-to-site VPNs, WiFi security, and enterprise-scale remote access solutions with load balancing, failover, and fine-grained access-controls

Lo sto usando con discreta soddisfazione per accedere da remoto alla mia rete casalinga: fino a poco tempo fa utilizzavo esclusivamente tunnels generati con SSH2, ma da quando ho provato l’ebrezza della VPN (:-D) non posso piu’ farne a meno! :-)

La configurazione da me utilizzata è abbastanza semplice ma mi permette di dare accesso a un buon numero di client senza problemi: oltre a me, infatti, sono collegate tramite VPN alla mia rete anche macchine di amici/colleghi fidati, alcuni anche in join al mio dominio Active Directory ‘casalingo’.

Partiamo dal server:

Ubuntu GNU/Linux, kernel  2.6.12 (fino a qualche giorno il server girava su un Windows 2000 Server: le modifiche ai file di configurazione per la migrazione sono state minime).

Naturalmente in primis bisogna effettuare l’installazione di OpenVPN, e per questo lascio tutte le liberta’ possibili: tramite APT, scaricando i sorgenti dal sito o utilizzando pacchetti precompilati di ogni tipo.

Il primo passo per la configurazone consiste nella generazione delle chiavi pubbliche e private necessarie all’autenticazione.

Per questo compito usiamo i tool della ’suite’ Easy-RSA, installata insieme al pacchetto di OpenVPN.

Usiamo quindi il tool build-ca per generare il Certification Authority (CA) certificate (ca.crt), build-dh per i parametri Diffie-Hellmann, e build-key per generare le chiavi pubbliche e private della nostra VPN (ca.key). Dico pubbliche e private perche’ nel mio caso non punto alla sicurezza ’stagna’, ma alla comodita’ di collegare altre reti alla mia in maniera semplice, rapida e economica.
Quindi, invece di generare una chiave privata per il server e una serie di chiavi pubbliche corredate da certificati per i client (esclusive per ogni client), prediligo (orrore e schifo!) utilizzare la stessa chiave sia per server che per client: questo mi permette di aggiugere ‘al volo’ un nuovo client VPN alla mia rete. Della sicurezza mi occupo a livello superiore, dividendo la subnet dei client VPN dalla mia rete domestica con qualche regola di firewalling.

In quest’ottica ‘insicura’, il file di configurazion del server sara’ il seguente

root@zapotec:~# cat /etc/openvpn/server.conf

dev tap  #Utilizzo il dispositivo di rete virtuale TAP
proto tcp-server
ifconfig 10.0.0.1 255.255.255.0 #definisco l’IP del server all’interno della subnet dedicata alla VPN
tls-server

# Percorsi dei certificati
key "/etc/openvpn/certificati/ca.key"
dh "/etc/openvpn/certificati/dh.pem"
cert "/etc/openvpn/certificati/ca.crt"
ca "/etc/openvpn/certificati/ca.crt"
local 192.168.0.2 #IP ‘reale’ del server VPN

lport 8080 #porta di ascolto del server
verb 4

mode server
duplicate-cn

ifconfig-pool 10.0.0.10 10.0.0.30 # Range di IP da assegnare ai clients
mssfix 1450
#Mantiene il tunnel aperto effettuando dei ping a intervalli regolari
push "ping 10"
push "ping-restart 60"
ping 10
ping-restart 120
#Invia le regole di routing ai clients
push "192.168.0.0 255.255.255.0 10.0.0.1" #routing verso la rete ‘reale’
push "dhcp-option DNS 192.168.0.3"  #invio al client l’indirizzo del DNS
comp-lzo #attiva la compressione

Naturalente i certificati prima generati saranno stati copiati nella cartella /etc/openvpn/certificati/.

Nell’esempio proposto, la rete ‘reale’ e’ costituita da una subnet 192.168.0.0/24, con 192.168.0.1 assegnato al default gateway e 192.168.0.3 al server DNS.
Ai client VPN e’ stata assegnata una subnet ‘virtuale’ 10.0.0.0/24, con default gateway su 10.0.0.1 (lo stesso server OpenVPN).

A livello di rete, per permettere ai client di accedere alla rete, sono necessari 2 passi:

  • Attivare l’IP forwarding sulla macchina linux che ospita OpenVPN, con echo 1 > /proc/sys/net/ipv4/ip_forward
  • Aggiungere sul proprio router (quindi defaul gateway della rete ‘reale’) una route statica per la rete 10.0.0.0/24 verso l’ip del server VPN (in questo caso 192.168.0.2).

Vediamo ora la (piu’ semplice) configurazione del client:

remote IP_DEL_SERVER
rport 8080
proto tcp-client
tls-client
dev tap
tls-client

key "/etc/openvpn/certificati/ca.key"
ca "/etc/openvpn/certificati/ca.crt"
cert "/etc/openvpn/certificati/ca.crt"

pull
route 192.168.0.0 255.255.255.0 10.0.0.1
comp-lzo
verb 4

Come gia’ detto sopra, la configurazione e’ ’spiccia’ ed insicura, utilizzando la stessa chiave per client e server, senza utilizzare il sistema di chiave pubblica e privata.

Addirittura, per facilitarmi ancora di piu’ le operazioni di collegamento alla mia rete, ho realizzato un client OpenVPN per Windows ‘portatile’ da tenere su una normale chiave dati USB.

Questa la struttura delle directory:

G:\VPNCLIENT
│   VPNSTART.bat
│   VPNSTOP.bat

├───driver
│       OemWin2k.inf
│       tap0801.sys

├───config
│   │   client.ovpn
│   │
│   └───certificati
│           ca.crt
│           ca.key

└───bin
        ca.crt
        ca.key
        deltapall.bat
        KILL.EXE
        libeay32.dll
        libssl32.dll
        openssl.cnf
        openssl.exe
        openvpn.exe
        openvpnserv.exe
        tapinstall.exe

Nella cartella bin sono presenti eseguibili e DLL necessari al funzionamento di OpenVPN, in config ho copiato la configurazione del client e i certificati e in driver il driver del dispositivo TAP indispensabile alla creazione della scheda di rete virtuale.

Le uniche modifiche da effettuare sono sulla configurazione del client, che deve essere adattata ai percorsi non assoluti:

remote IP_DEL_SERVER
rport 8080
proto tcp-client
tls-client
dev tap
tls-client

key "./config/certificati/ca.key
ca "./config/certificati/ca.crt"
cert "./config/certificati/ca.crt"

pull
route 192.168.0.0 255.255.255.0 10.0.0.1
comp-lzo
verb 4

Ho creato inoltre 2 batch (VPNSTART.BAT e VPNSTOP.BAT) che si occupano di creare il dispositivo virtuale e avviare la VPN (VPNSTART) e di chiudere la VPN e rimuovere il dispositivo creato (VPNSTOP).

VPNSTART.BAT

@Echo Off
"bin\tapinstall.exe" install "driver\OemWin2k.inf" tap0801
"bin\openvpn.exe" –config config\client.ovpn

VPNSTOP.BAT

@Echo Off
bin\kill.exe openvpn.exe
"bin\tapinstall.exe" remove tap0801
pause

In questo modo e’ possibile sedersi a un PC, inserire la chiavetta e collegarsi alla propria VPN, lasciando una volta finito di lavorare il PC ospite ‘pulito’.

Non smetto di ripetere che anche questo utilizzo di OpenVPN e’ estremamente ‘insicuro’:

porto in giro i miei certificati… (il bravo sistemista comincia storcere il muso)

…compresa la chiave privata… (il bravo sistemista cambia colore)

…su una chiave dati USB, facilmente smarribile…(al bravo sistemista comincia a mancare l’aria)

…copio il tutto agli amici che vogliono avere un accesso alla mia rete…(il bravo sistemista ha un mancamento)

…magari per fare una partita in rete a Quake3…(il bravo sistemista sembra riprendersi)

…e se serve, gli spedisco tutto via E-Mail! (il bravo sistemista ha un arresto cardiaco)

:-D


Azioni

Informazione

17 risposte

1 04 2006
David

spettacolo ! ;)

1 04 2006
David

gran finale :o

23 04 2006
enrico

ciao, uso anche io openvpn, noto però che ogni tanto casualmente la vpn rimane collegata ma non si pinga nessuno nella rete remota. tutto questo senza particolari messaggi d’errore nei log di openvpn. sai dirmi qualcosa? sul server c’è la 1.4.x e sui client la 2

2 07 2006
hildesheim

unbelievable blog! http://www.chromo.bcolorado.com

8 10 2006
Carlo

il file KILL.EXE dove lo hai trovato?

8 10 2006
Andy

Kill.exe è presente nel Resource Kit di Windows 2000.

15 05 2007
Roberto

>Aggiungere sul proprio router (quindi defaul gateway della rete ‘reale’) >una route statica per la rete 10.0.0.0/24 verso l’ip del server VPN (in >questo caso 192.168.0.2).

Ciao io ho un Zyxtel 640 configurato SUA mode.
Come posso fare questa regola?
Devo per forza usare multi ip mode?

17 05 2007
Roberto

Come non detto.
Non riuscivo a creare la rote statica da interfaccia web sul mio Zyxtel, ma da telnet si

Bella guida.La segnalerò sul mio blog

22 05 2007
giuleppe

al posto di kill.exe si puo usare il comando taskkill (gia in pancia al S.O.)

17 10 2007
Francesco Biacca

ciao,
che differenza c’è se, nella soluzione che hai adottato, faccio uso di tun invece che di tap?

non vedo bridge nella tua configuazione, per cui mi verrebbe naturale usare una interfaccia routed (tun, per l’appunto).

sei daccordo?

1 05 2008
28 06 2008
Max

Ciao, splendida guida :-)
una domandina si puo impostare ad un client di openvpn sempre lo stesso ip??
Mi servirebbe per una route statica bidirezionale

31 08 2008
OpenVPN su Gutsy Gibbon (Ubuntu 8.04) « Works in my mind…

[...] cosa che mi secca sono i privilegi di amministratore che devi avere, ma a quanto pare si può porre rimedio anche a quelli). Ho così installato il server sulla mia Gutsy Gibbon e vado a trascrivervi come al solito i [...]

9 01 2009
sixv1c10us

Puoi usare anche OpenVPN gui da windows, con una bella interfaccia grafica, davvero piacevole!
Comunque bella guida!

18 03 2009
Briciole di High-Tech » Realizzare OpenVPN portatile

[...] le istruzioni che ho trovato su questo sito, è possibile creare un client OpenVPN portatile completo di configurazione personalizzata, da [...]

14 05 2009
OpenVPN su Hardy Heron (Ubuntu 8.04) | Works in my mind...

[...] cosa che mi secca sono i privilegi di amministratore che devi avere, ma a quanto pare si può porre rimedio anche a quelli). Ho così installato il server sulla mia Hardy Heron e vado a trascrivervi come al solito i [...]

5 08 2009
Alessandro

Ciao,
anche a me interesserebbe dare un IP statico ai client.
È possibile?
Grazie

Lascia un commento