Usare OpenVpn con un client windows

Sono molto spesso fuori ufficio in quanto la mia attività è in prevalenza presso il cliente ma alcune volte avrei bisogno di vedere alcune directory presenti su mio server aziendale.

Per risolvere questo problema ho pensato ad diverse soluzioni.

1. ssh fordware con vnc o rdc ( RemoteDesktopConnection )
con questa sistema il trasferimeto di file era alquanto difficoltoso.

2. vpn tunnel tra cliente e ufficio
ma oltre al fatto che non da tutti i clienti è praticabile, il fatto di lasciare “porte” aperte aumenta cmq il rischio di intruzioni non autorizzate.

Ho quindi optato per una terza via: OpenVpn.

Questa meraviglia ( concedetemi il termine ) crea connessioni punto-punto ( client-server ) criptate in modo simile a Ipsec ma senza modificare il kernel, permenttendo il routing delle chiamate del client sulla rete del server.

In altre parole dal mio portatile con windows ( il client ) mi collego al server che ospita openvpn il quale si occuperà del routing verso le macchine della rete remota gestendo il tutto come se fossi fisicamente collegato allo switch .

Per il server ho utilizzato la solita Debian Sarge dove l’installazione è praticamente automatica.

# apt-get install openvpn

durante l’installazione ci vengono fatte due domande

1. Would you like Tun/Tab device to be created ?

Vuoi creare adesso un device tap ? -> Sì

2. would you like to stop openvpn before it gets upgrade ?

Vuoi fermate openvpn prima di un aggiornamento ? -> io ho lascito la risposta di default … no

Il passo successivo è la creazione della chiave che permetterà l’autenticazione del client

# cd /etc/openvpn
# openvpn --genkey --secret server.key

adesso sotto la directory /ect/openvpn abbiamo un file ( server.key ) che andrà trasferito anche sul client ( nel mio caso sul portatile )

Passiamo al file di configurazione del server creando un file server.conf sempre nella dir /etc/openvpn

# touch server.conf
# nano server.conf

mentre per il suo contenuto uso queste poche righe


dev tap

# lport è la porta sulla quale openvpn rimane in ascolto

lport 5002

# secret indica il percorso della chiave per l’autenticazione

secret /etc/openvpn/server.key

ping 10

verb 1

mute 10

ifconfig 10.0.0.1 255.255.255.0

Con ifconfig abbiamo impostiamo l’indirizzo ip del’interfaccia virtuale che dovrà avere una classe diversa da quella del server la mia eth0 è 192.168.9.1 quindi per la tap posso utilizzare 10.0.0.1

Possiamo provare il funzionamento lanciando questo comando
# openvpn --config /etc/openvpn/server.conf

Adesso se non sono venuti fuori errori lasciamo le cose così come sono e passiamo alla preparazine dal client, torneremo alla fine sul server in modo da rendere automatico la partenza della vpn

Essendo sul mio portatile windowsxp ho installato questi due pacchetti: openvpn e openvpn-gui

Finita l’installazione dovremmo trovare una nuova interfaccia di rete ed un icona colorata di rosso nella system try.

Andiamo sotto la directory di configurazione di openvpn che se avete fatto l’installazione di default dovrebbe essere “C:\Programmi\OpenVPN\config\” e copiamo qui la chiave che abbiamo generato sul server ( server.key )

bene … adesso ci manca l’ultima cosa: il file di configurazione del client.

apriamo il notepad e scriviamo


remote Ip.Server.Remoto

rport 5002

dev tap

ifconfig 10.0.0.2 255.255.255.0

secret server.key

ping 10

verb 1

mute 10

route-gateway 10.0.0.1

redirect-gateway

L’unica cosa da cambiare è la direttiva remote nel quale dovete scrivere l’indirizzo ip publico del server openvpn.

E’ importante salvare il file sempre nella directory di installazione di openvpn con estensione .ovpn in modo che la gui lo riconosca come file di configurazione. ( es. C:\Programmi\OpenVPN\config\connessione1.ovpn )

Dopo averlo salvato, clicchiamo con il pulsante destro sull’icona della openvpn-gui che dovremmo avere nella system tray.
A questo punto sotto la voce connessione1 nel sottomenu clicchiamo l’opzione connect.

Vi lascio indovinare connect cosa faccia …

Dopo qualche secondo ( anche più di 10 ) l’icona passa dal rosso al giallo e poi dal giallo a verde ..
Adesso siamo connessi 🙂
Se siamo curiosi possiamo leggere sulla console del nostro server il log dei messaggi che ci informano dell’avvenuta connessione.

Proviamo da windows a fare un ping su 10.0.0.1 , ci dovrebbe rispondere il nostro server come pure se pingassimo 192.168.9.* ( la classe ip del server open vpn )

Nel mio caso era presente un firewall che ho dovuto ri-configurare per permettere la connessione.

Ok … pausa caffe …

Finiamo la configurazione del server testando la partenza automatica del servizio.
Chiudiamo la connessione dal client e sulla console del server interrompiamo il processo ( CTRL+C )

Facciamo un esperimento …

# ifconfig tap0
( tapZERO non tapo )

In questo momendo avendo interrotto il processo di openvpn il nostro server ci dovrebbe rispondere con un messaggio del tipo “device non found”

Proviamo questo …

# /etc/init.d/openvpn restart
# ifconfig tap0

Adesso l’interfaccia dovrebbe essere pronta e l’uotput di ifconfig potrebbe essere simile a questo:


tap0 Link encap:Ethernet HWaddr 00:FF:F0:8F:72:B3

inet addr:10.0.1.1 Bcast:10.0.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:1 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:254 (254.0 b) TX bytes:0 (0.0 b)

In pratica se abbiamo scritto la nostra configurazione con estensione .conf ( server.conf ) nella dir. giusta ( /etc/openvpn ) è sufficente per partire ri-partire il servizio è lui magicamente alzera un l’interfaccia in ascolto sulla porta indicata nella configurazione ( nel nostro caso 5002 )

Riproviamo a connetterci dal client che dopo pochi secondi dovrebbe mostrarci nuovamente l’icona di openvpn colorata di un bel verde.

Bhe .. spero che questo possa esservi utile, a me sicuramente a fissato le idee.

Link di riferimento/approfondimento:

  1. OpenVpn
  2. Gurutech.it
  3. Andrea Beggi

Versione 1.0.2

Ultimo Aggironamento: 11.04.2006

Un grazie a Denis per le correzioni

9 commenti

  1. Ciao,
    volevo ringraziarti per questa guida, cercavo proprio qualcosa del genere per fare una vpn con il mio server dedicato, ne ho trovate diverse ma nessuna è stata chiara e veloce da seguire quanto la tua.
    OpenVPN è veramente una meraviglia rispetto ai vari ppptd visto che si puo’ installarlo senza problemi anche su server di produzione senza fare modifiche o patch al kernel (magari su server con kernel 2.4 dove l’upgrade a 2.6 sarebbe un piccolo nightmare per diversi motivi).

    Per caso potresti indicarmi una maniera altrettanto veloce di usare la vpn appena configurata per uscire su internet (if any) ?

    Il server linux (debian sarge) che fa da server open-vpn nel mio caso è già collegato direttamente a internet (ha 2 ip pubblici e sta in una server farm), come posso fare a uscire attraverso lui su internet una volta stabilita la vpn ?

    Uscire attraverso una siffatta vpn sarebbe una cosa utilissima specialmente in casi tipo “accesso wifi tramite hotspot non criptati”, e situazioni simili.

  2. Ciao
    ti scrivo solo per ringraziarti per aver pubblicato questa guida.
    Volevo installare vpn per evitare il sabato mattina di andare in ufficio, e per avere la possibilità , quando mi trovo da qualche cliente ad eseguire manutenzione su alcuni macchinari, di avere pieno accesso alle risorse del mio server.
    Dopo aver navigato e googlato un po’ mi sono spaventato perchè pensavo non fosse una passeggiata, ma poi ho trovato il tuo tutorial. Ieri in ufficio ho configurato il server (fc5) in 5 minuti, e oggi da casa, in altri 5 minuti ho preparato il client, mi sono connesso e…. funziona!!
    10 minuti per una vpn, complimenti davvero per la chiarezza e semplicità del tutorial, e grazie di nuovo per averlo pubblicato.
    ciao
    Marco Foschi

  3. wow, quanti rinraziamenti.

    @Johnny
    collegandoti ( attraverso la rete ) ad un server remoto, l’unica cosa che mi viene in mente è l’utilizzo di un proxy …

    dovresti configurare qualcosa tipo squid sul tuo server, e poi configurare il tuo browser per puntare all’ip del server ( quelo usato da openvpn – 10.0.0.1 )

    per il momento non mi viene in mente null’altro 🙁

  4. Maurizio, per un periodo ho usato un proxy come da te suggerito, poi mi hanno suggerito un altra soluzione per uscire in maniera “migliore” su internet (nel senso che si possono usare tutte le applicazioni e non solo il web), e – anche se con qualche mese di ritardo – la riporto comunque qui giusto nel caso potesse interessare a qualcun’altro che capita su queste pagine.

    Per uscire su internet dal client attraverso la macchina dove c’è il server openvpn si puo’ impostare un nat del tipo :

    iptables -t nat -A POSTROUTING -o eth+ -s 192.168.19.0/29 -j MASQUERADE

    dove nel mio caso 192.168.19.0/29 è il range di indirizzi assegnato ai client vpn, mentre eth è l’interfaccia attraverso cui il server vpn esce su internet.

    Anche se apparentemente questa cosa sembra inutile, in quanto per accedere al server vpn già sono connesso a internet, questo puo’ essere comodo in almeno 2-3 situazioni diverse, tra cui :
    1) La classica situazione “road warrior” (sono in albergo o allo starbucks dove c’è la wifi aperta e voglio navigare su internet senza rendere il mio traffico sniffabile)
    2) Sono un giornalista che sta lavorando all’estero in un paese dove c’è censura del traffico web e voglio uscire su internet attraverso un server locato in un paese libero

    ecc ecc

    Saluti

  5. Ottimo tutorial.
    Per ho fatto pptp da ubuntu 7.10 verso server windows 2003 server.
    Ho perso un po’ di tempo con mschap-v2 e MPPE.

    Visto che openvpn sembra essere meglio:
    -Proverò da ubuntu 7.10 come client verso windows 2003 server (o vista se è meglio),
    -poi a questo punto farò il contrario.
    -e quindi, dulcis in fundo, farò il porting verso una scheda con processore arm con kernel 2.4

    sperem.
    saluti

  6. Ciao, io ho un problemino. Ho seguito alla lettera il tuo post. La connessione client – server avviene correttamente…ma come faccio a ruotare nella mia rete reale? Mi spiego meglio: a casa ho una rete 10.0.0.X In questa rete c’è il mio server con ip 10.0.0.111
    Collegandomi con Openvpn io prendo un ip 192.168.0.2 e non riesco a raggiungere la mia rete locale. Il server ha il suo routing interno verso la rete 10.0.0.x

  7. ciao,
    come mai devo specificare un ip di rete di classe diverso da quello su cui devo fare il tunnel? forse perche devo creare una sorta di connessione point-to-point e poi ci pensa vpn a nattare sulla rete locale?

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *