guest@il_blog_di_Enrico204:/$ _  
.: Home :: Chi sono :: Attività :: HowTo :: Appunti vari :: Software :: Files :.

OpenVPN: Virtual Private Network daemon

Indice:
  1. Prerequisiti
  2. Creazione certificati
  3. Configurazione server
  4. Partenza OpenVPN Server
  5. Configurazione client
  6. Partenza OpenVPN Client

Utilizzeremo quindi OpenVPN per connettere un client ad una rete VPN (Virtual Private Network)

Prerequisiti

OpenVPN è disponibile in due modi: precompilato (RPM e DEB) e con il codice sorgente. Noi prenderemo in considerazione la seconda ipotesi poiché è la più world-compatible.

Scarichiamoci quindi il nostro bel tarball openvpn:

wget http://openvpn.net/release/openvpn-2.0.9.tar.gz

e quindi scompattiamolo:

tar -xvf openvpn-2.0.9.tar.gz

Portiamoci quindi nella cartella di OpenVPN:

cd openvpn-2.0.9/

e avviamo lo script ./configure, che verifica l'esistenza delle librerie e headers necessari.

./configure

Quando ha finito di verificare e non ci sono più dipendenze da soddisfare, possiamo dare il make:

make

Adesso compilerà openvpn e creerà l'eseguibile, installabile con (da root oppure con sudo):

make install

Creazione certificati

Per l'accesso al server VPN, OpenVPN utilizza un sistema di certificati digitali: ogni client dovrebbe avere il suo certificato (anche se si può distribuire un solo certificato e farlo utilizzare a più clients). Andando per ordine:

Portiamoci ora nella directory easy-rsa e modifichiamo il file vars:

vi vars

Una volta personalizzato secondo le proprie opzioni, dare i comandi:

. ./vars
./clean-all

per applicare le variabili e fare pulizia dei vecchi files.

Creazione certificato C.A. root

Per creare il certificato root della Certification Authority locale, dare il comando:

./build-ca

Questo crea due files (ca.crt e ca.key).

Creazione parametri Diffie-Hellman

Per creare il file .dh dare il comando:

./build-dh

Creazione certificato per il client

Anche se ho usato il singolare per il titolo, è sott'inteso che si possono creare più certificati per più clients. Ci sono 3 diversi tipi di certificato. Ne basta crearne uno con un tipo, quindi se non sapete cosa scegliere, usate il primo.

Usare il comando:

./build-key nomecertificato

per creare un certificato standard. Usare invece:

./build-key-pass nomecertificato

per creare un certificato protetto con password. Usare infine:

./build-key-pkcs12 nomecertificato

per creare un certificato nel formato PKCS #12.

Configurazione server

Ecco un file di esempio preso da OpenVPN. Personalizzatelo e poi vedremo come usarlo:

# Indirizzo sul quale essere in ascolto
;local a.b.c.d

# Porta di OpenVPN. Utile cambiarla se vuoi
# avviare più istanze di OpenVPN insieme.
port 1194

# TCP or UDP?
;proto tcp
proto udp

# "dev tun" crea un tunnel IP routed,
# "dev tap" crea un tunnel ethernet.
# Usa "dev tap0" se vuoi usare un bridge ethernet
# e hai precedentemente creato l'interfaccia tap0
# e l'hai aggiunta al bridge.
# Se vuoi creare le policy di accesso sulla VPN,
# devi creare le regole del firewall per le
# interfacce TUN/TAP.
# Nei sistemi non-Windows, puoi dare un numero
# come tun0.
# Su Windows, usa "dev-node" per farlo.
;dev tap
dev tun

# Windows ha bisogno del nome dell'adattatore.
# Nei sistemi XP SP2 o più nuovi, potresti
# avere bisogno di disabilitare Windows
# Firewall sull'adattatore TAP.
# I sistemi non-Windows generalmente non
# hanno bisogno di farlo.
;dev-node MyTap

# Certificato Root SSL/TLS (C.A.), certificato
# (cert), e chiave privata (key). Ogni client
# e il server devono avere il loro certificato
# e il file chiave. Il server e tutti i clients
# usano lo stesso file C.A.
#
# Vedi nella cartella easy-rsa per una serie
# di script per generare certificati RSA e
# chiavi private. Ricorda di usare un
# Common Name diverso per il server e per
# ogni client.
#
# Può essere usato qualsiasi sistema
# di gestione delle chiavi X509. OpenVPN può
# inoltre usare le chiavi nel formato PKCS #12.
ca ca.crt
cert server.crt
key server.key  # Questo file DEVE essere segreto

# File di parametri di Diffie Hellman.
dh dh1024.pem

# Configura le modalità del server e fornisci
# una subnet VPN per OpenVPN. Il server
# Prende il primo indirizzo per se, gli
# altri restano a disposizione per i clients.
# Ad esempio, se la rete è 10.8.0.0, il
# server si prenderà 10.8.0.1.
# Commenta questa linea se usi un bridge
# ethernet. Vedi le pagine man per info.
server 10.8.0.0 255.255.255.0

# Mantiene le corrispondenze client <-> IP
# in questo file. Se OpenVPN dovesse cadere
# o è riavviato, i client alla riconnessione
# viene fornito lo stesso IP.
ifconfig-pool-persist ipp.txt

# Configura il server per l'ethernet bridging.
# Devi usare prima le opzioni di bridge del tuo
# OS per unire l'interfaccia TAP con la scheda NIC.
# Quindi devi impostare manualmente IP/netmask
# nell'interfaccia di bridge. Infine devi impostare
# il range di IP di questa subnet da riservare
# per i clients. Lascia la linea commentata
# se non usi l'ethernet bridging.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# Tabella di routing da mandare ai clients.
# Sappi che anche il resto della rete locale
# deve avere il percorso di route della VPN.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# DNS e WINS
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"

# Decommenta questa direttiva per consentire
# i clients di "vedersi" tra di loro.
# Di default, i clients possono solo vedere
# il server.
;client-to-client

# Decommenta questa linea se vuoi che
# lo stesso certificato può essere
# usato per più connessioni contemporanee
# da client diversi.
#
# SE HAI GENERATO UNA CHIAVE INDIVIDUALE
# NON DOVRESTI DECOMMENTARE QUESTA LINEA.
;duplicate-cn

# Questa direttiva causa dei messaggi
# tipo ping, per controllare il link.
# Il primo paramentro sono gli intervalli
# (in secondi) dei ping. Il secondo è
# il timeout del ping.
keepalive 10 120

# Abilita la compressione del link.
# Se la abiliti qui, devi abilitarla
# anche nei clients.
comp-lzo

# Numero massimo dei clients da connettere.
;max-clients 100

# Nei sistemi non Windows si possono impostare
# privilegi ridotti ad un utente da
# assegnare a OpenVPN.
;user nobody
;group nobody

# Prova a preservare alcune cose nel restart.
persist-key
persist-tun

# Registro di stato
status openvpn-status.log

# Per default, i messaggi di log vanno a finire
# nel syslog (o, in Windows, in
# "\Program Files\OpenVPN\log")
# Usa una di queste direttive per personalizzare.
;log         openvpn.log
;log-append  openvpn.log

# Imposta il livello del log
#
# 0 niente tranne gli errori fatali
# 4 pre l'uso normale
# 5 e 6 possono aiutare per il debug
# 9 è estremamente dettagliato
verb 3

# Raggruppa i messaggi ripetuti. Fino
# a 20 messaggi ripetuti possono essere
# "ridotti" ad un messaggio nel log.
;mute 20

Salvatelo in una cartella.

Partenza OpenVPN Server

Per far partire OpenVPN, dare il comando (nella directory della configurazione):

openvpn ./server.conf

Se tutto va bene, OpenVPN aspetterà le connessioni dei clients.

Configurazione clients

Ecco il file di configurazione per il client. Personalizzatelo e salvatelo:

# Specifica che siamo Client
client

# Usa lo stesso settaggio del server.
;dev tap
dev tun

# Nome dell'adattatore TAP di Windows.
;dev-node MyTap

# TCP o UDP? Usa lo stesso per il server.
;proto tcp
proto udp

# Hostname/IP e porta del server remoto.
# Puoi inserire diversi server qui, per
# il bilanciamento del carico.
remote vattelapesca.org 1194

# Seleziona gli host in modo random,
# altrimenti prova gli host nell'ordine.
;remote-random

# Continua all'infinito a risolvere l'host
# name del server OpenVPN. E' particolarmente
# indicato per le macchine che non hanno
# una connessione permanente ad internet,
# come i portatili.
resolv-retry infinite

# I client non hanno bisogno di restare
# in ascolto su una porta specifica
nobind

# Imposta utente meno privilegiato (non-Windows only)
;user nobody
;group nogroup

# Prova a preservare alcune cose nel restart.
persist-key
persist-tun

# Se ti devi connettere attraverso un
# proxy per raggiungere il server OpenVPN,
# imposta l'indirizzo IP del proxy e
# la porta qui.
;http-proxy-retry # Riprova al fallimento
;http-proxy [proxy server] [proxy port #]

# Le reti wireless producono molti 
# pacchetti duplicati. Impostalo per
# ridurre i warning dei pacchetti.
;mute-replay-warnings

# Certificato Root SSL/TLS (C.A.), certificato
# (cert), e chiave privata (key). Ogni client
# e il server devono avere il loro certificato
# e il file chiave. Il server e tutti i clients
# usano lo stesso file C.A.
#
ca ca.crt
cert client.crt
key client.key

# Verifica il certificato del server
# controllando nsCertType.
#
# Per usare questa opzione, devi generare il
# certificato con l'opzione nsCertType a "server".
;ns-cert-type server

# Se usi anche una chiave tls-auth, impostala
;tls-auth ta.key 1

# Seleziona il cipher crittografico.
;cipher x

# Abilita compressione sul link VPN.
# Da abilitare solo se abilitata al server.
comp-lzo

# Imposta il livello del log
#
# 0 niente tranne gli errori fatali
# 4 pre l'uso normale
# 5 e 6 possono aiutare per il debug
# 9 è estremamente dettagliato
verb 3

# Raggruppa i messaggi ripetuti. Fino
# a 20 messaggi ripetuti possono essere
# "ridotti" ad un messaggio nel log.
;mute 20

Partenza OpenVPN Server

Per far partire OpenVPN, dare il comando (nella directory della configurazione):

openvpn ./client.conf

Se tutto va bene, OpenVPN si connetterà al server specificato.

Tutte le "trascrizioni" sono le mie "esperienze" che ho acquisito facendo di tutto nel tempo libero.

I contenuti di questo sito sono stati prodotti da me, e possono essere ridistribuite sotto licenza Creative Commons BY-NC-ND 3.
In qualsiasi caso gradirei essere contattato...

Enrico Bassetti - Contattami
Ultimo aggiornamento: 03/07/2008

Valid XHTML 1.0 Transitional Level A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0 Creative Commons License
Attribuzione - Non Commerciale - No opere derivate 3.0 Generico