Configurazione di un client OpenVPN su sistemi Windows, Linux, Mac OS X e Windows Mobile per Pocket PC

Lo scopo di questo breve documento è di guidare l'utente nella configurazione del proprio client per accedere tramite OpenVPN alla propria LAN. Si prenderanno in considerazione le principali GUI di OpenVPN per Microsoft Windows, Linux, Mac OS X, Windows Mobile per Pocket PC e alla fine l'uso di OpenVPN da linea di comando senza interfaccia grafica. Quest'ultima possibilità risulta utile poiché il comando openvpn, richiamabile da prompt (sia esso una shell Unix che il prompt dei comandi Windows), accetta i medesimi parametri e si comporta nella stessa maniera indipendentemente dalla piattaforma. Peraltro, il comando openvpn può essere utilizzato negli script per automatizzare l'avvio automatico delle VPN.

L'obiettivo che ci prefiggiamo è di accedere ad un server VPN realizzato con Zeroshell e configurato con i parametri di default. Per realizzare tale server sarà pertanto sufficiente, una volta messo in rete un server Zeroshell, semplicemente abilitare il servizio OpenVPN attivando il flagEnabled nella sezione [VPN]->[OpenVPN] dell'interfaccia web di Zeroshell. Per default il servizio OpenVPN del nostro server VPN ascolterà sulla porta 1194/TCP con cifratura TLS/SSL e compressione LZO abilitate. L'autenticazione degli utenti avverrà con username e password, ma varieremo anche la configurazione per testare l'autenticazione con certificati digitali X.509.
Per maggiori dettagli sulla configurazione di un server OpenVPN, che non rientrano negli scopi di questo documento, è possibile consultare la guida "Un server OpenVPN con Zeroshell". 

Di seguito sono riportate le sezioni in cui è suddiviso il resto di questa guida. Si tenga presente che la prima di queste, cioè quella relativa al file di configurazione di OpenVPN è comune alle altre sezioni e non dipende dalla GUI o Sistema Operativo che si usa.

Il file di configurazione di OpenVPN

Grazie ai numerosi parametri che possono essere inseriti nel file di configurazione o specificati da linea di comando, OpenVPN ha una configurabilità veramente impressionante. Tuttavia, per potersi connettere ad un server OpenVPN realizzato con Zeroshell è sufficiente conoscerne un numero limitato di essi. Per semplificare ulteriormente il procedimento è possibile scaricare un file di configurazione preimpostato cliccando sul link File di configurazione OpenVPN Client.
Per ogni parametro che potrebbe interessare l'utente, il file di configurazione riporta un commento. Tuttavia, sono soltanto due i parametri che è sicuramente necessario cambiare per potersi connettere ad un server OpenVPN realizzato con Zeroshell: 
  • remote zeroshell.example.com 1194

    È necessario sostituire zeroshell.example.com, con l'hostname o l'indirizzo IP del server OpenVPN. La configurazione di default di Zeroshell prevede che il servizio OpenVPN ascolti sulla porta 1194/TCP e pertanto il secondo parametro (1194) può rimanere invariato.
  • ca CA.pem

    Il parametro 
    ca indica un file in formato PEM contenente il certificato X.509 della Certification Authority che ha firmato il certificato server del servizio OpenVPN. Per ottenere tale certificato, è sufficiente, cliccare sul link CA nella pagina di login di Zeroshell (vedi figura). Se si salva il certificato nella stessa directory del file di configurazione e lo si chiama CA.pem, si può lasciare questo parametro invariato. Altrimenti è necessario indicarne il percorso assoluto.
    Si tenga presente, che il certificato della Certification Authority è necessario anche se non si utilizza l'autenticazione X.509 dal client e quindi si opta per l'autenticazione 
    "Only Password" (Default in Zeroshell).
Si noti da subito, che le interfacce grafiche per OpenVPN che tratteremo, non danno alcun supporto alla creazione o modifica del file di configurazione. Esse si occupano solo di permette la connessione, la disconnessione e di richiedere Username e Password quando necessario. Questo file va pertanto editato manualmente.

OpenVPN GUI per Windows

Per installare OpenVPN GUI per Windows su di un sistema Microsoft Windows XP a 32 o 64 bit, procedere nel seguente modo:
  • Effettuare il download del pacchetto di installazione dall'URL http://openvpn.se/download.html. Scegliere la versione contenente oltre alla GUI anche il software OpenVPN già incluso;
  • Avviare l'installazione. Scegliere le opzioni di default e confermare di voler proseguire nell'installazione del TAP-Win32 Adapter V8 (si tratta dell'interfaccia Ethernet Virtuale utilizzata da OpenVPN).
    Terminata la procedura di installazione, nella TrayBar compare un'icona con due terminali rossi ed un globo terrestre. Tali terminali diventano gialli quando si sta tentando una connessione e finalmente verdi quando la connessione VPN con la LAN remota è stabilita;
  • Dal Menu di Avvio di Windows, cliccare su [Start]->[Programmi]->[OpenVPN]->[OpenVPN configuration file directory]. Si aprirà la cartella:

    C:\Programmi\OpenVPN\config

    in cui bisogna copiarci dentro i file zeroshell.ovpn contenente la configurazione e CA.pem contenente il certificato X.509 della Certification Authority. Fare riferimento alla sezione precedente se si hanno dubbi su come ottenere i due file;

  • Editare il file zeroshell.ovpn e sostituire zeroshell.example.com con l'hostname o l'indirizzo IP del server OpenVPN;
  • A questo punto, effettuando un doppio click sull'icona di OpenVPN nella Tray Bar, inizia la procedura di connessione. Comparirà una finestra di dialogo in cui inserire Username e Password (vedi Nota *). Se l'autenticazione avviene con successo la connessione VPN sarà stabilita e i due terminali dell'icona di OpenVPN diventano verdi.
Cliccando con il tasto destro del mouse sull'icona di OpenVPN nella Traybar compare un menu con diverse utili opzioni elencate di seguito e che si commentano da sole: ConnectDisconnectShow StatusView LogEdit ConfigProxy Settings. In particolare, qualora si verificassero problemi di connessione è utile la voce View Log per stabilire la causa dell'insuccesso.

Se invece la connessione avviene, quindi i 2 terminali dell'icona sono verdi, ma comunque non si raggiunge la LAN remota o Internet, può tornare utile il comando 
ipconfig /all da digitare al Prompt dei Comandi di Windows. Ecco un esempio della parte di output che interessa:
Scheda Ethernet Connessione alla rete locale (LAN) 7:          Suffisso DNS specifico per connessione:         Descrizione . . . . . . . . . . . . . : TAP-Win32 Adapter V8         Indirizzo fisico. . . . . . . . . . . : 00-FF-AD-63-83-3D         DHCP abilitato. . . . . . . . . . . . : Sì         Configurazione automatica abilitata . : Sì         Indirizzo IP. . . . . . . . . . . . . : 192.168.250.51         Subnet Mask . . . . . . . . . . . . . : 255.255.255.0         Gateway predefinito . . . . . . . . . : 192.168.250.254         Server DHCP . . . . . . . . . . . . . : 192.168.0.0         Server DNS . . . . . . . . . . . . .  : 192.168.250.254         Lease ottenuto. . . . . . . . . . . . : giovedì 20 settembre 2007 19.51.37         Scadenza lease . . . . . . . . . . . .: venerdì 19 settembre 2008 19.51.37 
Bisogna controllare, affinché la VPN si comporti correttamente, che il routing sia effettuato nel modo giusto e quindi l'indirizzo IP e il Default Gateway appartengano alle subnet della LAN remota a cui si è connessi in Virtual Private Network. Come ulteriore garanzia che il traffico sia realmente instradato nella VPN, digitare il comando: tracert /d . Se il primo router che si incontra si trova sulla LAN remota a cui si connessi, allora il traffico passa criptato nella VPN come ci si aspetta. 

Tunnelblick per Mac OS X

Un'interfaccia grafica per OpenVPN su Mac OS X è Tunnelblick. Per installare tale GUI procedere nel seguente modo:
  • Effettuare il download del pacchetto di installazione dall'URL http://www.tunnelblick.net. Si tratta di un file compresso .zip che contiene al suo interno oltre alla GUI anche OpenVPN;
  • Effettuare un doppio click sul file zip (supponiamo che si trovi sul Desktop) in modo da estrarne il contenuto. Comparirà sul Desktop l'eseguibile di nome Tunnelblick;
  • Avviare l'eseguibile Tunnelblick con un doppio click. Premere [Continue] nella dialog box che appare avvisandovi che potete mettere i vostri file di configurazione in Library/openvpn/. Chiudete la finestra che si apre per permettervi di editare il file di configurazione di esempio openvpn.conf;
  • La GUI per OpenVPN Tunnelblick è ora installata e sulla barra superiore, vicino l'orologio, compare la sua icona. Procediamo ora con la configurazione necessaria per accedere ad un server OpenVPN realizzato con Zeroshell;
  • Seguire il procedimento descritto nella sezione Il file di configurazione di OpenVPN per ottenere il file di configurazione zeroshell.ovpn e il file CA.pem contenente il certificato X.509 della Certification Authority. Aprire il Finder e selezionare la directory Library/openvpn (quella dell'utente e non quella di sistema). Cancellare il file di configurazione di esempio openvpn.conf e trascinate all'interno della directory i due file ottenuti prima;
  • Chiudere Tunnelblick selezionando la voce [Quit] dal menu contestuale che appare quando si clicca sull'icona. Riavviarlo poi con un doppio click sul file eseguibile Tunnelblick. Ora, cliccando sull'icona di Tunnelblick, compare la voce [Connect 'Zeroshell'] che permetterà la connessione al VPN Box realizzato con Zeroshell;
  • Selezionare la voce [Details...] con cui si apre una finestra di dialogo da cui premere [Edit Configuration]. Sostituite zeroshell.example.comcon l'hostname o l'indirizzo IP del server VPN. Salvate il file di configurazione.
  • Provare la connessione VPN cliccando sulla voce [Connect 'Zeroshell']. Comparirà una finestra di dialogo in cui inserire username e password (vedi Nota *).
Qualora si verifichino problemi di connessione, può risultare utile, per stabilire la causa del problema, consultare i log di OpenVPN. Per farlo è sufficiente selezionare dall'icona di Tunnelblick la voce [Details...].
Se si vuole verificare che l'indirizzo IP che si sta utilizzando con la VPN, realmente appartenga alla LAN remota cui si è connessi, basta aprire un terminale Mac OS X e al prompt della shell digitare il comando: 

         
ifconfig tap0 

il cui output è simile al seguente:
tap0: flags=8843 mtu 1500         inet 192.168.250.1 netmask 0xffffff00 broadcast 192.168.250.255         ether b6:da:d9:91:22:ff          open (pid 368) 
La voce inet indica che l'indirizzo IP è 192.168.250.1 (Zeroshell per default, se non configurato altrimenti assegna ai client VPN remoti indirizzi appartenenti alla subnet 192.168.250.0/24 con Gateway Predefinito 192.168.250.254). Per avere la certezza assoluta che il traffico sia realmente instradato nel tunnel crittografato dalla VPN utilizzare il comando traceroute -n . Affinché il routing nella VPN sia corretto, il primo hop deve essere un router della LAN remota (192.168.250.254 con la configurazione di default di OpenVPN configurato su Zeroshell).

KVpnc per Linux

KVpnc è un frontend Linux che gestisce la maggior parte dei client VPN disponibili: Cisco VPN, IPSec, PPTP, OpenVPN, L2TP. È molto flessibile e completo, tanto che ha anche il supporto per le Smart Card. Ovviamente, in questo contesto, documenteremo solo la sua installazione e configurazione relativa ad OpenVPN. Esistono pacchetti precompilati per buona parte delle distribuzioni Linux come per esempio gli RPM per Suse e Fedora. Per quel che riguarda Ubuntu e Kubuntu (o altre derivate da Debian), si può installare KVpnc con OpenVPN semplicemente con i comandi:

         
sudo apt-get install openvpn
         
sudo apt-get install kvpnc 

Si noti che a differenza delle altre GUI, il pacchetto KVpnc non include anche OpenVPN che invece va installato separatamente. Nel seguito, allo scopo di mantenere la trattazione il più indipendente possibile dalla particolare distribuzione Linux, compileremo direttamente i sorgenti di KVpnc, ma qualora esista il pacchetto binario per la propria distro, si invita a farne uso.
Poiché KVpnc fa uso delle librerie QT, la presenza di tali librerie (e dei relativi file include) è un prerequisito per la compilazione. Nei passaggi successivi, daremo per scontato che OpenVPN sia già installato. Se così non fosse si faccia riferimento al paragrafo 
Compilazione e installazione di OpenVPN.
Procediamo ora con l'installazione e la configurazione di KVpnc:
  • Effettuare il download del codice sorgente dal sito http://home.gna.org/kvpnc/. Nel seguito faremo riferimento alla versione 0.8.9 di KVpnc, ma si consiglia comunque di scaricare l'ultima disponibile;
  • Estrarre il contenuto del pacchetto con il comando:
           
    tar xvfj kvpnc-0.8.9.tar.bz2
  • Compilare ed installare KVpnc con la sequenza di comandi:
           
    cd kvpnc-0.8.9
           
    ./configure
           
    make
           
    sudo make install

    In alcune distribuzioni, è necessario specificare esplicitamente dove si trovano gli include file e le librerie QT. In tal caso aggiungere i parametri 
    --with-qt-includes=/usr/lib64/qt-3.3/include/ --with-qt-libraries=/usr/lib64/qt-3.3/lib/ al comando ./configure, sostituendo/usr/lib64/qt-3.3/ con il path opportuno per la vostra distribuzione Linux;
  • Creare la directory /etc/openvpn/ con il comando sudo mkdir /etc/openvpn e copiare al suo interno i file zeroshell.ovpn e CA.pem. Per ottenere tali file fare riferimento alla sezione Il file di configurazione di OpenVPN;
  • Per utilizzare KVpnc con utenti non privilegiati è necessario utilizzare sudo. Per far ciò, dopo avere acquisito privilegi di root, aggiungere la seguente linea in coda al file /etc/sudoers:
           
    ALL ALL=NOPASSWD:/usr/bin/kvpnc

    Quando si deve lanciare il comando kvpnc si utilizzi la sintassi:
           
    sudo /usr/bin/kvpnc

    In questa maniera 
    kvpnc avrà i previlegi di root che gli servono a creare l'interfaccia Ethernet Virtuale tap0 e ad aggiungere le route statiche che instradano il traffico nella VPN;
  • Importare il profilo per connettersi ad un server VPN Zeroshell con il seguente comando:
           
    kvpnc --openvpnimport=/etc/openvpn/zeroshell.ovpn

    Dal Profile Manager che compare, eseguire le seguente configurazioni:
    • Dalla schermata General configurare la voce VPN gateway con l'indirizzo IP o l'hostname del server VPN Zeroshell;
    • Dalla schermata OpenVPN assicurarsi che la voce Authentication method sia impostata a SHA1 invece che a MD5;
    Premere [Apply] e poi [Ok] sul Profile Manager e dal menu [Profile]->[Save Profile...] salvare il profilo e chiudere kvpnc con la voce di menu [File]->[Quit];
  • Eseguire quindi il comando sudo /usr/bin/kvpnc e premere [Connect] per connettersi in VPN con Zeroshell. A questo punto vengono richiesti Username e Password (vedi Nota *) e se l'autenticazione va a buon fine la connessione VPN viene stabilita con la rete remota.
Per verificare che l'indirizzo IP che si sta utilizzando con la VPN, realmente appartenga alla LAN remota cui si è connessi, basta aprire una shell e al prompt digitare il comando: 

         
/sbin/ifconfig tap0 

il cui output è simile al seguente:
tap0      Link encap:Ethernet  HWaddr 26:8F:1E:31:44:DD           inet addr:192.168.250.50  Bcast:192.168.250.255  Mask:255.255.255.0           inet6 addr: fe80::248f:1eff:fe31:44dd/64 Scope:Link           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:19 errors:0 dropped:0 overruns:0 frame:0           TX packets:25 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:100           RX bytes:1384 (1.3 KiB)  TX bytes:1668 (1.6 KiB) 
La voce inet indica che l'indirizzo IP è 192.168.250.50 (Zeroshell per default, se non configurato altrimenti assegna ai client VPN remoti indirizzi appartenenti alla subnet 192.168.250.0/24 con Gateway Predefinito 192.168.250.254). Per avere la certezza assoluta che il traffico sia realmente instradato nel tunnel crittografato dalla VPN utilizzare il comando traceroute -n . Affinché il routing nella VPN sia corretto, il primo hop deve essere un router della LAN remota (192.168.250.254 con la configurazione di default di OpenVPN configurato su Zeroshell).

OpenVPN per Pocket PC

OpenVPN per Pocket PC è un software ancora in Alpha release, tuttavia dopo numerose prove si è dimostrato sufficientemente stabile ed affidabile. I test sono stati effettuati su Microsoft Windows Mobile v5.0 installato su di un Palmare i-Mate JASJAR (equivalente ad un HTC Universal Qtek 9000), comunque non dovrebbero esserci problemi di funzionamento neanche su WM 2003 e su altri modelli di PDA. Prima di vedere la procedura di installazione e configurazione, si tenga presente che, dovendo modificare manualmente il file di configurazione di OpenVPN, conviene connettersi al proprio PDA mediante ActiveSync ed effettuare tali modifiche con un editor di un PC. In alternativa, se si vuole effettuare le modifiche direttamente sul Palmare, conviene installare il Total Commander CE che è un File Manager Freeware per Pocket PC, disponibile all'URL http://www.ghisler.com/pocketpc.htm. Questo Filemanager integra, tra l'altro, un Editor utile ai nostri scopi.
Di seguito sono elencati i passi necessari ad installare OpenVPN per Pocket PC:
  • Effettuare il download di OpenVPN per Pocket PC dal sito http://ovpnppc.ziggurat29.com/ovpnppc-main.htm. Il pacchetto può essere prelevato in due formati: in .exe da utilizzare per l'installazione da Personal Computer con il PDA connesso tramite ActiveSync; in formato.cab direttamente installabile dal Palmare stesso. Si scelga il formato che si ritiene opportuno e lo si installi;
  • Supposto di aver installato OpenVPN per Pocket PC nella cartella \Programmi\OpenVPN della memoria del dispositivo, copiare i filezeroshell.ovpn e CA.pem nella cartella \Programmi\OpenVPN\config. Per ottenere tali file fare riferimento alla sezione Il file di configurazione di OpenVPN;
  • Editare il file di configurazione \Programmi\OpenVPN\config\zeroshell.ovpn per permettere la connessione ad un server OpenVPN realizzato con Zeroshell:
    • Sostituire zeroshell.example.com con l'indirizzo IP o l'hostname del server OpenVPN;
    • Sostituire CA.pem con il percorso completo del file contenente il certificato in formato PEM della Certification Authority. Nel nostro caso bisogna specificare:

             
      ca "\\Programmi\\OpenVPN\\config\\CA.pem"

      Si badi bene ai doppi apici e ai doppi backslash che sono richiesti dalla sintassi;
  • Cliccare sull'icona di OpenVPN e dalla voce di menu Avvio da Config. scegliere zeroshell. A questo punto verrano richiesti Username e Password (vedi Nota *). Se l'autenticazione va a buon fine la connessione VPN viene stabilita e i 2 terminali dell'icona di OpenVPN diventano verdi;
In caso di mancata connessione consultare i log accessibili da \Programmi\OpenVPN\log\zeroshell.log. Per verificare infine, che il traffico verso la rete remota o Internet sia effettivamente incapsulato nel tunnel criptato della VPN, è necessario eseguire un traceroute e controllare che il primo hop che si incontra appartenga alla LAN remota (il default di Zeroshell è 192.168.250.254). Tuttavia, Windows Mobile non dispone nativamente del traceroute ed è pertanto necessario installare un utility esterna. Un software Free utile allo scopo è ceNetTools che oltre al tracerouteconsente anche di effettuare il comando ping e il comando whois.

La linea di comando di OpenVPN

Qualora per il sistema che si utilizza non sia disponibile una GUI per OpenVPN o comunque si vuole automatizzare la partenza della connessione VPN mediante gli script di startup, è necessario utilizzare direttamente il comando openvpn. Basta digitare man openvpn per accorgersi che sono disponibili una miriade di parametri che possono influire sul comportamento della VPN. Tali parametri possono essere specificati direttamente sulla linea di comando preceduti da un doppio trattino (--), oppure inseriti in un file di configurazione. Tranne pochi casi, conviene sempre utilizzare il file di configurazione poiché è di più facile lettura rispetto ad una linea di comando appesantita da numerosi parametri. Non è negli scopi di questo documento trattare i parametri di OpenVPN, anche perché, le pagine di manuale che si ottengono con il comando man sono ben dettagliate. Vediamo soltanto i passi per connetterci ad un server OpenVPN realizzato con Zeroshell:
  • Collocare in una stessa directory (supponiamo /etc/openvpn/) il file di configurazione zeroshell.ovpn e il file CA.pem contenente il certificato in formato PEM della Certification Authority. Per i dettagli su come ottenere tali file, consultare la sezione Il file di configurazione di OpenVPN;
  • Editare il file di configurazione zeroshell.ovpn sostituendo zeroshell.example.com con l'indirizzo IP o l'hostname del server VPN;
  • Nella stessa directory in cui è collocato il file di configurazione, eseguire il comando:

           
    openvpn --config zeroshell.ovpn

    Verrano richiesti Username e Password e se l'autenticazione va a buon fine verrà visualizzata la linea di log:

           
    Initialization Sequence Completed

    che indica che la connessione VPN è stata stabilita.
Si noti che il debbuging di eventuali problemi di connessione è facilitato dal fatto che i messaggi di log vengono stampati direttamente sullo standard di output.

Compilazione e installazione di OpenVPN

Per la maggior parte dei sistemi per cui OpenVPN è supportato, esistono i pacchetti già compilati. Tuttavia, soprattutto per Linux, vista la miriade di Distribuzioni che esistono, ci sono dei casi in cui è necessaria la compilazione del codice sorgente di OpenVPN. Vediamo i passi necessari per far ciò:
  • Effettuare il download dal sito http://openvpn.net del pacchetto contenente i codici sorgenti relativi all'ultima release stabile disponibile;
  • Estrarre il contenuto del pacchetto dei sorgenti utilizzando il comando tar nella seguente maniera:
           
    tar xvfz openvpn-2.0.9.tar.gz
  • Entrare nella directory directory openvpn-2.0.9 tramite il comando
           
    cd openvpn-2.0.9
  • Eseguire il check del sistema per la produzione dei Makefile utilizzando il comando:
           
    ./configure --prefix=/usr

    Se il comando 
    ./configure si lamenta per l'assenza del software di compressione lzo, procedere alla sua installazione come segue:
    • Effettuare il download del codice sorgente di lzo dal sito http://www.oberhumer.com/ ed estrarne il contenuto con
             
      tar xvfz lzo-2.02.tar.gz
    • Entrare nella directory lzo-2.02 ed installare il software di compressione lzo grazie ai seguenti comandi:
      • ./configure
      • make
      • make install   (questo comando necessita di privilegi di amministratore)
      Installato lzo, dopo essere tornati nella directory openvpn-2.0.9, rieseguire il comando
             
      ./configure --prefix=/usr
  • Compilare il codice sorgente in base ai Makefile appena generati utilizzando il comando:
           
    make
  • Installare il programma binario openvpn e le sue pagine di manuale mediante il comando:
           
    make install

    Poiché l'installazione avviene nella directory di sistema 
    /usr, quest'ultimo comando deve essere eseguito con privilegi di Amministratore.

Note

(*) Il modo con cui vengono convalidate le credenziali utente dipende da come è configurato il server OpenVPN. Zeroshell permette di aggiungere più domini di autenticazione, ognuno dei quali può essere autenticato su KDC Kerberos 5 (locale, esterno o mediante cross-autenticazione) oppure su un server RADIUS esterno. Uno di tali domini è quello di Default, intendendo con ciò che l'utente nello specificare lo username non è obbligato ad indicarlo esplicitamente. Negli altri casi, lo username deve essere nella forma username@domain (es. fulvio@example.com). Si noti che il dominio non è case sensitive, visto che se si tratta di un REALM Kerberos V, Zeroshell lo converte automaticamente in maiuscolo.

Commenti

Unknown ha detto…
Ciao grande guida,

io ho il problema di connettere 6 pc tutti winxp.

uno con winxp che fa da server e tutti gli altri client che si connettono cosa devo fare?

uso dundns per gli ipdinamici

ciao

Post popolari in questo blog

Crack pagina di accesso basata sul Web con Hydra in Kali Linux

Smart Working ai tempi del Covid 19