Come creare una VPN con OpenVPN e Mikrotik

Una connessione VPN site-to-site con GNU/Linux Debian come concentratore VPN e Routerboard Mikrotik come client VPN.

Creare una VPN con OpenVPN e Mikrotik ormai è abbastanza semplice, basta cercare in rete le tantissime guide che illustrano come realizzare una connessione VPN impiegando OpenVPN con prodotti Mikrotik. Più difficile sarà trovare una guida che illustri come realizzare una VPN tra un concentratore VPN, realizzato con una distribuzione Linux, esempio Debian, e una routerboard Mikrotik.

Una VPN site-to-site particolare!

SCENARIO: un’azienda con diverse sedi geograficamente separate vuole consentire ai suoi collaboratori la possibilità di accedere in piena sicurezza a risorse condivise dislocate in datacenter aziendali decentrati, come illustrato nello schema.

Schema VPN con OpenVPN, Linux e Mikrotik
Schema VPN con OpenVPN, Linux e Mikrotik

Per creare una VPN ci sono diversi strumenti e tecnologie che consentono di implementare una VPN site-to-site. Ti spiegherò un modo semplice ed economico, in termini di realizzazione e manutenzione, basato su tecnologie Open Source:

  • GNU/Linux: cuore operativo del concentratore VPN basato su un distribuzione GNU/Debian Linux e delle routerboard Mikrotik;
  • OpenVPN: tecnologia che consente di instaurare VPN lavorando allo strato layer 4 della pila ISO/OSI, che consente di realizzare VPN in modo agevole senza problemi connessi ad attività di NAT/PAT (Network Address Translation/Port Address Translation).

Ci sono alcune precisazioni da fare nell’impiego di OpenVPN con Mikrotik.
Mikrotik non consente di realizzare tutte le tipologie di VPN concesse da OpenVPN ma pone dei limiti ben precisi:
– le VPN possono essere realizzato solo con protocollo TCP, quindi UDP bandito con Mikrotik;
– le VPN a possono essere realizzate solo con meccanismo a chiave privata/pubblica, cioè con architettura PKI (Public Key Infrastucture.

Realizziamo la VPN…

in pratica…

cd /tmp
mkdir /opt/easy-rsa
git clone https://github.com/OpenVPN/easy-rsa-old.git
mv easy-rsa-old/easy-rsa/2.0/ /opt/easy-rsa/
cd /opt/easy-rsa/2.0/

modifichiamo il file vars per impostare i parametri per la gestione della PKI…

set KEY_SIZE=2048
set KEY_COUNTRY=IT
set KEY_PROVINCE=PZ
set KEY_CITY=Potenza
set KEY_ORG=Salvia Mauro
set KEY_EMAIL=info@maurosalvia.it

creiamo la CA impostando coerentemente il common name della CA (ad esempio vpn-ca)

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

I file generati (ca.crt e ca.key) saranno posizionati nella cartella keys.

creiamo i certificati per il server...

Ipotizzando che il server si chiami vpn.maurosalvia.it il common name per il certificato sarà vpn.maurosalvia.it. Rispondere Yes a:

Sign the certificate? [y/n]

1 out of 1 certificate requests certified commit? [y/n]
. ./vars
./build-key-server vpn

Verranno generati i seguenti file nella cartella keys: 01.pem, vpn.csr, vpn.crt, vpn.key.

creiamo i certificati per il client, con password:

. ./vars
./build-key-pass client1

creiamo i certificati per il client, senza password:

. ./vars
./build-key client1

In entrambi i casi rispondereYes alle domande:

Sign the certificate? [y/n]

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

Verranno generati i seguenti file nella cartella keys: 02.pem, client1.key, client1.crt.

creiamo la chiave Diffie-Hellman

./build-dh 

Nella cartella keys sarà collocato il file dh2048.pem.

generiamo la chiave per TLS-AUTH

cd keys/
openvpn --genkey --secret ta.key

A questo punto è stata predisposta la PKI per consentire la gestione di autenticazione tramite meccanismo a chiave privata e pubblica della VPN.

predisponiamo un’istanza di server OpenVPN, definendo un file di configurazione lato server:

port 443
tls-server
proto tcp-server
dev tun1
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn.crt
key /etc/openvpn/keys/vpn.key
dh /etc/openvpn/keys/dh2048.pem

server 192.168.20.224 255.255.255.240
topology subnet
push "route 192.168.10.0 255.255.255.0"
push "route 192.168.11.0 255.255.255.0"
push "route 192.168.12.0 255.255.255.0"
push "route 192.168.13.0 255.255.255.0"
push "route 192.168.14.0 255.255.255.0"
push "route 192.168.15.0 255.255.255.0"
push "route 192.168.16.0 255.255.255.0"
push "route 192.168.17.0 255.255.255.0"
push "dhcp-option DNS 192.168.13.12"
push "dhcp-option DOMAIN int.salviamauro.it"

ifconfig-pool-persist /etc/openvpn/pool-443.txt
max-clients 8

keepalive 10 120
tun-mtu 1500
mssfix 1450
cipher AES-256-CBC
auth sha1

persist-key
persist-tun

status /var/log/openvpn-status-443.log
log-append /var/log/openvpn-443.log
verb 2

predisponiamo un file di configurazione client1.ovpn da impiegare per il client:

client
dev tun
proto tcp-client
remote vpn.maurosalvia.it
port 443


-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----


-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----


-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----

key-direction 1

#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
...
-----END OpenVPN Static key V1-----


ns-cert-type server
pull

keepalive 10 120
comp-lzo

user nobody
group nogroup

persist-key
persist-tun

Ora disponiamo del server OpenVPN e del file client1.opvn impiegato per la configurazione del primo client OpenVPN.

per configurare una prima routerboard sarà necessario:

  • passo 1: copia il file client1.opvn sulla routerboard Mikrotik;
  • passo 2: esegui il comando di importazione dei certificati impiegando il file client1.opvn appena caricato. Usando l’interfaccia GUI di winbox sarà sufficiente seguire il percorso System→Certificates, ed eseguire il comando import, selezionando il file client1.ovpn dal menu a tendina di Only File e impostando la password per la decifratura della chiave nel campo Passphrase.

Dopo queste operazioni preliminari, è possibile creare la VPN accedendo alla voce di menu di Interfaces dell’interfaccia GUI di Winbox creando una nuova interfaccia OVPN Client. Si riporta questa definizione a riga di comando :

/interface ovpn-client
add certificate=client1.ovpn_1 cipher=aes256 connect-to=vpn.maurosalvia.it disabled=no mac-address=02:C9:37:43:D9:31 max-mtu=1400 name=ovpn-1 password=PASSWORD port=443 user=client1 verify-server-certificate=yes

A questo punto la VPN sul client si avvia e il concentratore VPN ed il client Mikrotik risulteranno interconnessi con le relative network associate.


Questa modalità di gestione delle VPN tra più sedi con un datacenter, è realizzabile con minimi costi di manutenzione ed investimenti. Infatti, il costo di una routerboard Mikrotik parte da un centinaio di euro a salire, mentre il concentratore VPN presenta un costo di realizzazione minimo e non comporta acquisto di hardware.

Questa soluzione consente di realizzare una struttura resiliente ai cambiamenti, sia lato concentratore VPN sia lato client (routerboard Mikrotik), infatti, in nessuno dei due casi, si è legati ad un provider o delle licenze d’uso. Se nel tempo si è costretti a traslocare o cambiare Internet provider, non bisogna fare nulla. Se nel tempo è necessario spostare il concentratore VPN, sarà sufficiente eseguire semplici operazioni di ricollocazione del servizio e variazione di alcuni parametri sul DNS. Infine, nel caso dovessero nascere nuove sottoreti o instradamenti interni, sarà sufficiente variare le impostazioni di push nella configurazione del server e riavviare il servizio. Immediatamente il tutto verrà comunicato ai partecipanti al sistema di interconnessione in VPN.

Questo sito raccoglie dati statistici anonimi sulla navigazione attraverso i cookie, nel rispetto della tua privacy. Informativa Cookie Policy