Configurare VPN con OpenVPN in Modalità Bridge

Ultimamente ho avuto necessità, per motivi di lavoro, di poter utilizzare il mio PC di casa mia dal lavoro.

Per fare questo è necessario configurare sia lato server, che lato client una VPN.

Ma vediamo un di capire cosa risulta essere una VPN.

Una VPN, il cui acronimo è Virtual Private Network, altro non è, come dice il nome stesso, che una Rete Private Virtuale, quindi immaginate di avere due computer, molto distanti fra loro, e grazie alla VPN potrete collegarli in rete, grazie alla sola connessione internet e uno strumento opensource chiamato openVPN.

OpenVPN, è uno strumento openSource, ed è anche multipiattaforma, ed è completamente gratuito.

La configurazione di openVPN è quasi identica fra Windows e Linux.

In questa guida vedremo come configurare una VPN in modalità bridge, che ci permetterà di entrare nel PC che fa da server, con il nostro IP Privato di casa nostra.

Per prima cosa installiamoci openVPN, per Linux è ormai presente in tutti i repository delle maggiori distribuzioni, per windows, se gradite anche un interfaccia grafica potete scaricarlo a questo sito: http://openvpn.se/files/install_packages/ e scaricate l’ultima versione disponibile attuale.

Su windows inutile dire come si installa, basta lanciare l’exe e il gioco è fatto, su Linux anche non è difficile, su distribuzioni Debian Based lanciate il comando da root: apt-get install openvpn, se usate delle distribuzione Red Hat based invece lanciate il comando yum install openvpn.

Se volete installarlo a mano, andate sull’area download del sito ufficiale e scaricate i sorgenti, dopo averli scaricate lanciate i seguenti comandi:

./configure
make
make install

Ora openVPN è installato, per utilizzare la modalità bridge, come verà spiegato in questa guida, è necessario creare un bridge di rete fra l’interfaccia virtuale di openVPN tap0, e l’interfaccia di rete reale, eth0.

Per windows si chiameranno LAN quella reale, e TAP Windows32 Adapter, quella virtuale.

Su windows è molto semplice, andate su Connessioni di rete, e troverete le due interfaccie, quella LAN, e quella TAP per openVPN, selezionatele entrambe e andate su Collegamento Bridge, o qualcosa di simile.
Dopo averle collegate iin bridge dovete andare nella configurazione del bridge, andare quindi su Proprietà -> Protocollo di Configurazione TCP/IP e impostare l’ip che prima era impostato sulla LAN.

Su linux invece è necessario installare anche un utility per il bridge, da console quindi digitate:

apt-get install bridge-utils se usate Debian Based, o yum install bridge-utils se usate Red Hat Based.

Ora è necessario intervenire nella configurazione della rete per la realizzazione del bridge su Linux, io vi mostrerò come deve essere configurato su Debian – Ubuntu, dato che openVPN l’ho configurato solo su Debian, Ubuntu e Windows.

Aprite quindi con un editor di testo il file: /etc/network/interfaces e il suo contenuto deve essere simile a questo:

auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.1.5
netmask 255.255.255.0
gateway 192.168.1.1
pre-up /usr/sbin/openvpn –mktun –dev tap0
pre-up /sbin/ip link set tap0 up
pre-up /sbin/ip link set eth0 up
pre-up /usr/sbin/brctl addbr br0
pre-up /usr/sbin/brctl addif br0 eth0
pre-up /usr/sbin/brctl addif br0 tap0
post-up /etc/init.d/openvpn start
pre-down /etc/init.d/openvpn stop
pre-down /usr/sbin/brctl delif br0 eth0
pre-down /sbin/ip link set eth0 down
pre-down /usr/sbin/brctl delif br0 tap0
pre-down /sbin/ip link set tap0 down
post-down /usr/sbin/brctl delbr br0
post-down /usr/sbin/openvpn –rmtun –dev tap0

Se usate programmi che gestiscono le interfacce, assicuratevi che al riavvio la rete viene avviata come bridge, e che eth0 e tap0 non abbiano indirizzo, e l’indirizzo ip che usavate per eth0, dovete inerirlo in br0, che farà da bridge.

Per esempio io uso wicd per gestire la rete su Ubuntu, e non mi ero accorto che lui all’avvio gestiva eth0 e dovevo cambiarlo in br0, in questo modo al riavvio carica il bridge di rete.

Ora il bridge è fatto, ora possiamo passare alla generazione dei certificati per server e client.

Per prima cosa se usiamo Linux, copiamoci tutta la cartella easy-rsa/2.0 in /etc/openvpn, quindi diamo il seguente comando:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/

Su windows questa cartella si trova sotto C:\Programmi\openVPN\easy-rsa\

A questo punto è necessario modificare il file vars che si trova nella cartella easy-rsa.

Su windows però prima è necessario lanciare il comando init-config in questo modo:

Andiamo su Esegui, digitiamo cmd, nella console portiamoci nel percorso giusto, quindi digitiamo:

C:\Programmi\OpenVPN\easy-rsa

Ora digitiamo: init-config

In questo modo abbiamo generato i file di configurazione per windows.

Su linux il file vars si trova in /etc/openvpn/easy-rsa/2.0/

La configurazione è identica fra Windows e Linux.

Apriamo quindi con il vostro editor di testo preferito il file vars e in fondo al file troverete queste righe:

export KEY_COUNTRY=IT
export KEY_PROVINCE=Italia
export KEY_CITY=Roma
export KEY_ORG=Augen
export KEY_EMAIL=my_e-mail@mydomain.org

Modificatele a vostro piacimento e salvate.

Su linux nel percorso dove sta il file scrivete da root:

source ./vars
./clean-all
./build-ca

Su windows semplicemente nella cartella di easy-rsa scrivete:

vars
clean-all
build-ca

In questo modo avete creato i file ca.crt A ca.key.

Ora possiamo creare i certificati per server e client.

Per il server digitiamo:

./build-key-server server

Windows:

build-key-server server

Dopo aver immesso i dati, a queste due domande rispondete y:

Certificate is to be certified intil Nov 27 13:25:30 2018 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Ora avete generato i certificati per il server, ora passiamo al client:

./build-key client1

Windows:

build-keu client1

E continuate per tutti i client che vi servono

Vi chiederà le stesse domande di prima, voi rispondete sempre y.

Gli ultimi passi per la generazione di certificati sono la generazione di Diffie-Hellman e la chiave statica.

Per generare il parametro Diffie-Hellman digitate il seguente comando:

./build-dh

Windows:

build-dh

Al termine sarà generato un file dh1024.pem

Infine, ma non è obbligatorio, potrete generare una chiave statica, su Linux è possibile generarla con il seguente comando:

openvpn –genkey –secret ta.key

Su windows è possibile crearla automaticamente andando su Start->Programmi->OpenVPN->Generate a Static Key

Ora abbiamo tutti i certificati e la chiave statica che ci servono per la nostra VPN, su linux nella cartella easy-rsa/2.0 è stata creata una cartella keys, dove sono state messi tutti i certificati creati, escusa la chiave statica che è stata creata dove avete lanciato il comando.

Ora dovrete copiare i vari certificati e metterli al posto giusto, dato che ora siamo sul server, iniziamo con i file per il server, quindi copiamoci i seguenti file con il seguente comando:

cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/server.crt /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/keys/server.key /etc/openvpn/
cp /etc/openvpn/easy-rsa/2.0/ta.key /etc/openvpn/ (scegliete il percorso dove avete generato la ta.key)

Ora ci manca la configurazione vera e propria del server, copiamoci quindi il file d’esempio del server, ma è in formato compresso, quindi eseguiamo il seguente comando:

zcat /usr/share/doc/openvpn/examples/samples-config-files/server.conf.gz > /etc/openvpn/server.conf

Ora apriamo il file server.conf appena estratto con il nostro editor di testo preferito e impostiamolo in questo modo:

port 1194 # Porta in ascolto, deve essere aperta sul router verso il pc locale dove si trova il server VPN
;proto tcp
proto udp # Protocollo in ascolto, in questo caso udp, che è quello di default
dev tap0 # Per la modalità bridge devi usare tap0
;dev tun
;dev-node MyTap # Questo parametro serve solo a windows, devi indicare il nome del dispositivo tap su windows, per esempio se quando lo hai creato lo hai rinominato in BridgeTAP, devi scriverlo in questo parametro.
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
;Server 10.8.0.0 255.255.255.0
;ifconfig-pool-persist ipp.txt
server-bridge 192.168.1.5 255.255.255.0 192.168.1.50 192.168.1.60
keepalive 10 120
tls-auth ta.key 0 # Chiave statica secreta generata automaticamente, nel server devi mettere 0 come valore, nel client devi mettere 1
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
comp-lzo
max-clients 10 # Qui definisci il numero massimo di client che possono connettersi alla rete locale
;user nobody
;group nobody
persist-key
persist-tun
status openvpn-status.log # Genera un file chiamato openvpn-status.log che da informazioni sullo stato del server
log openvpn.log # Genera un file chiamato openvpn.log che scrive il log di openvpn in questo file, controllate che non ci siano errori e che dia Inzializzation Sequence Complete fin fondo al file.
;log-append openvpn.log
verb 3
;mute 20

Su windows cambia solo che il nome del file sarà server.ovpn, e lo troverete in C:\Programmi\openVPN\sample-config\

Ora il server è pronto, siamo pronti per connetterlo, su windows è necessario far partire openvpn-gui e fare Connetti, oppure fare con il tasto destro del mouse sul file di configurazione Start OpenVPN on This configuration file.

Su linux lanciate il seguente comando:

openvpn –config /etc/openvpn/server.conf, poi andate nel file di log e controllate che si sia connesso senza problemi.

Se tutto è andato bene, il server dovrebbe essere connesso, e siamo ora pronti per configurare la parte client per connetterci al nostro server appena configurato.

Per il client è sufficente avere i certificati generati in precedenza e infine configurare il client.conf.

Speidamo in maniera sicura, o con e-mail crittografate, o con scp, o altri metodi che garantiscono sicurezza, i certificati necessari, copiamo quindi nella cartella /etc/openvpn/ nel client (dopo aver installato openvpn anche sul client) i file ca.crt, client1.crt, client1.key e ta.key, su windows il percorso dove mettere i file è C:\Programmi\OpenVPN\config\

Ora copiamoci il file d’esempio del client, su linux scriviamo il seguente comando:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn

Su windows si trova nella cartella sample-config, e lo copiate poi nella cartella config.

Ora modifichiamo il file client.conf (Linux) client.ovpn (Windows) in questo modo:

client # Specifica che stiamo usando openVPN come client
dev tap # Deve stare su tap perchè stiamo usando openVPN in modalità bridge
;dev tun
;dev-node MyTap
;proto tcp
proto udp # Specifica che stiamo usando il protocollo udp, che è comunque quello di default
remote 151.50.106.41 1194 # Qui dobbiamo mettere l’ip pubblico del pc a cui vogliamo connetterci, seguito dalla porta in ascolto
resolv-retry infinite
nobind
;user nobody
;group nogroup
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
verb 3
;mute 20

Ora dovrebbe essere tutto apposto, proviamo a connetterci alla nostro VPN, Windows, aprite openvpn-gui e andate su Connect e se si è connesso dovrebbe comprarire l’ip che è stato assegnato con i due monitor di colore verde.

Su Linux lanciate il solito comando:

openvpn –config /etc/openvpn/client1.conf

Ora controllate i log se è tutto apposto, su Windows li crea a parte, se la usate su Linux, aggiungete al file di configurazione log openvpn.log, e in entrambi, sia se usate linux, sia se usate windows, se volete avere lo stato del client aggiungete anche status openvpn-status.log

Molto interessante.