Può succedere che ci connettiamo a la rete internet da una rete locale che non amministriamo personalmente e in questa rete locale la maggior parte delle porte sono chiuse (solo è attivo un server proxy attraverso il quale possiamo navigare e niente più). In questi casi connettersi al proprio server Linux remoto (se abbiamo Asterisk installato in un server remoto) può essere un problema.
In altri casi alcuni pagine di amministrazione di server installati (openfire, webmin), richiedono che ci colleghiamo a una porta non standard e se il proxy è configurato per darci accesso solamente alle porte 80 e 443 può essere un problema.
Ultima cosa. Se vogliamo risolvere alla fonte i problemi di NAT con le estensioni che colleghiamo a Asterisk (gli interni) OpenVPN è un'altra volta la solucione. Questi sono solamente alcuni esempi. Maggiori informazioni le trovate direttamente sul sito del progetto (in inglese)
Per ovviare a questo invonveniente possiamo usare una OpenVPN che ci permette di creare una rete locale virtuale da lì connetterci al nostro server remoto.
In questo articolo vedremo come installare e configurare OpenVPN su Centos (come server) e windows XP (come cliente).
Quando dobbiamo compilare un programma partendo dai suoi sorgenti precedente dobbiamo sempre installare alguni programmi e librerie che ci permettono di effettuare la compilazione. Normalmente i pacchetti essenziali sono:
yum install gcc ncurses ncurses-devel make gcc-c++ libtermcap libtermcap-devel zlib zlib-devel libtool
Adesso possiamo iniziare
cd /usr/src
scarichiamo una libreria per la compressione dati richiesta da OpenVPN:
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
la scompattiamo:
tar -xf lzo-2.03.tar.gz
entriamo nella cartella appena creata
cd lzo-2.03
e la compiliamo
./configfure
make
make check
make install
Adesso scarichiamo OpenVPN:
cd ..
wget http://www.openvpn.net/release/openvpn-2.0.9.tar.gz
lo scompattiamo
tar -xf openvpn-2.0.9.tar.gz
entriamo nella cartella
cd openvpn-2.0.9
e iniziamo la compilazione:
./configure
make
make install
Adesso dobbiamo eseguire una serie di comandi per prepararci a creare le diversi chiavi (CA, server, cliente) necessarie per il server OpenVPN e i clienti
cd easy-rsa/
creiamo una cartella dove salvare tutte le chiavi generate
mkdir /usr/local/sbin/keys
e modifichiamo il seguente file:
nano vars
export KEY_DIR=/usr/local/sbin/keys
export KEY_COUNTRY=IT
export KEY_PROVINCE=Milano
export KEY_CITY=Milano
export KEY_ORG="MiaCompagnia"
export KEY_EMAIL=admin@miacompagnia.com
cerchiamo le seguenti linee e le modifichiamo adattandole alle nostre necessità (tranne la prima che indica la cartella che abbiamo appena creato e dove andremo a salvare le chiavi generate).
Salviamo i cambiamenti con Ctrl-O e usciamo dall'editor con Ctrl-X
Alcuni passaggi aggiuntivi:
. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on /usr/local/sbin/keys
Tra il primo punto e il secondo c'è uno spazio
./clean-all
Adesso possiamo iniziare con la creazione della chiave CA (Certificate Authority)
./build-ca
Generating a 1024 bit RSA private key
.....++++++
.............................................................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [IT]:
State or Province Name (full name) [Milano]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [MiaCompagnia]:
Organizational Unit Name (eg, section) []:Vendite
Common Name (eg, your name or your server's hostname) []:miacompagnia.com
Email Address [admin@miacompagnia.com]:
Gli unici valori che dobbiamo inserire a mano sono quelli indicati in neretto. Se controlliamo nella cartella /usr/local/sbin/keys, troveremo il file ca.crt e ca.key
Adesso creiamo la chiave per il server a cui diamo il nome server
./build-key-server server
Generating a 1024 bit RSA private key
........................++++++
..++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [IT]:
State or Province Name (full name) [Milano]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [MiaCompagnia]:
Organizational Unit Name (eg, section) []:Vendite
Common Name (eg, your name or your server's hostname) []:server
Email Address [admin@miacompagnia.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/src/openvpn-2.0.9/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'IT'
stateOrProvinceName :PRINTABLE:'Milano'
localityName :PRINTABLE:'Milano'
organizationName :PRINTABLE:'MiaCompagnia'
organizationalUnitName:PRINTABLE:'Vendite'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'admin@miacompagnia.com'
Certificate is to be certified until Apr 22 19:25:39 2019 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
In questo caso dobbiamo in common name indichiamo server, non inseriamo nessuna password e alla fine confermiamo con due Y
Fatto questo possiamo passare alla creazione delle chiavi per i clienti. Dobbiamo ripetere il seguente passaggio per il numero dei clienti che vogliamo configurare avendo l'accortezza di cambiare il numero del cliente (es: cliente1 cliente2, ecc. sia per il nome della chiave sia per la linea "Common Name (eg, your name or your server's hostname"
Vediamone uno:
./build-key cliente1
Generating a 1024 bit RSA private key
..............................++++++
..........++++++
writing new private key to 'esecuredata1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [IT]:
State or Province Name (full name) [Milano]:
Locality Name (eg, city) [Milano]:
Organization Name (eg, company) [MiaCompagnia]:
Organizational Unit Name (eg, section) []:vendite
Common Name (eg, your name or your server's hostname) []:cliente1
Email Address [admin@miacompagnia.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/src/openvpn-2.0.9/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'IT'
stateOrProvinceName :PRINTABLE:'Milano'
localityName :PRINTABLE:'Milano'
organizationName :PRINTABLE:'MiaCompagnia'
organizationalUnitName:PRINTABLE:'vendite'
commonName :PRINTABLE:'cliente1'
emailAddress :IA5STRING:'admin@miacompagnia.com'
Certificate is to be certified until Apr 22 19:32:33 2019 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
ripetiamo l'operazione per tutti i clienti che vogliamo creare
./build-key cliente2
./build-key cliente 3
ecc.
Una volta terminato creiamo la chiave Diffie Hellman
./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
Il server OpenVPN usa come porta predefinita la 1194 Puó essere UDP o TCP Per averle tutte e due a disposizione le apriamo sul nostro firewall (iptables). Se non avete installato iptables tornate a un precedete articolo
nano /etc/sysconfig/iptables
e aggiungiamo:
# OPENVPN server port
-A INPUT -p tcp --dport 1194 -j ACCEPT
-A INPUT -p udp --dport 1194 -j ACCEPT
Salviamo e reiniziamo iptables
service iptables restart
Adesso eseguiamo una serie di comandi per far partire il server OpenVPN al boot di Linux:
cd /usr/src/openvpn-2.0.9/sample-scripts/
cp openvpn.init /etc/rc.d/init.d/openvpn
chkconfig --add openvpn
chkconfig openvpn on
mkdir /etc/openvpn
Adesso possiamo creare il file di configurazione per il server OpenVPN
cd /etc/openvpn
nano server.conf
e copiamo le seguenti linee:
port 1194
proto udp
dev tun
ca /usr/local/sbin/keys/ca.crt
cert /usr/local/sbin/keys/server.crt
key /usr/local/sbin/keys/server.key
dh /usr/local/sbin/keys/dh1024.pem
server 10.10.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
max-clients 30
persist-key
persist-tun
log openvpn.log
log-append openvpn.log
verb 3
management localhost 7505
Per motivi di spazio e di tempo non spiego linea per linea il file di configurazione. L'importante è sapere che la rete locale sará 10.10.0.0, che useremo la porta 1194 UDP un collegamento punto-punto.
Facciamo partire il server:
etc/init.d/openvpn start
Starting openvpn: [ OK ]
Se non ci sono errori è tutto OK
Per controllare la nueva scheda di rete (virtuale):
ifconfig
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.0.1 P-t-P:10.10.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 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:0 (0.0 b) TX bytes:0 (0.0 b)
Se tutto è a posto possiamo passare a configurare il cliente.
Scarichiamo questo programma e lo installiamo. Creiamo una cartella nella cartella radice del nostro disco fisso:
C:\>md keys
ci entriamo:
cd keys
copiamo dal server linux (cartella /usr/local/sbin/keys) con winscp i seguenti files:
ca.crt
cliente1. crt
cliente1.key
Con un editor di testi (per esempio notepad) creiamo il seguente file di configurazione per il cliente:
dev tun
proto udp
remote voztovoice.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca c:\\keys\\ca.crt
cert c:\\keys\\cliente1.crt
key c:\\keys\\cliente1.key
comp-lzo
verb 3
ns-cert-type server
Lo salviamo con la estennsione ovpn (esempio cliente.ovpn) e lo copiamo nella cartella config que troviamo dentro della cartella Programmi > OpenVPN
Adesso possiamo far partire il cliente. nel system tray dovremmo trovare la seguente icona:

Se non è presente facciamo partire il cliente da menu programmi di windows. Quando appare l'icona ci clicchiamo con il tasto destro del mouse e scegliamo nel menu que appare Connect
dovrebbe apparire qualcosa del genere:

L'icona nel system tray diventerà verde confermando che la connessione ha avuto successo.
Per linux è ancora più semplice.
Se per esempio vogliamo che il nostro server Linux sia allo stesso tempo un server e cliente OpenVPN non dobbiamo fare altro che creare un file di configurazione simile a quello che abbiamo visto per windows (modificando le linee opportune) e salvarlo nella cartella /etc/openvpn. Ricordiamoci di avere le chiavi del server con il quale vogliamo connetterci.
Appena creato il file di configurazione facciamo ripartire OpenVPN e il gioco è fatto.
Commenti
OpenVPN e Samba
Ho una piccola domanda...
Ho configurato OpenVPN sul mio server Linux, per consentire a un utente Windows di connettersi alla rete locale dall'esterno.
Funziona tutto perfettamente, ma avviene uno strano comportamento nell'utilizzo di una cartella condivisa con Samba. In pratica se creo ad esempio una cartella, o la rimuovo, la finestra non si aggiorna a meno che non premo F5. Non è grave, ma è piuttosto scomodo, soprattuto se chi utilizza il servizio non è molto afferrato con l'informatica...
A cosa può essere dovuto?