Server Openvpn su Mikrotik con Ros 7.x

Questa è una configurazione completa di un server Openvpn su RouterOS 7.x, provata con la 7.6 al momento. Si basa su autenticazione mista con un certificato lato server, un certificato lato client (uguale per tutti i client) e poi username e password. E` pensata per l'uso con diversi pc portatili, non come punto-punto.

Creare i certificati necessari

I certificati necessari sono tre, ovvero la CA, il certificato per il server, e quello per i client. La procedura di creazione consiste in due passi, uno per crearli e uno per firmarli. La procedura di firma richiede tempo. Se dopo aver dato un comando di firma si riceve un errore di timeout, abbiate pazienza e controllate il carico di CPU, la firma non e` fallita, sta solo lavorando in background. Quando la cpu va a zero, vedrete che il vostro certificato è stato firmato correttamente anche se avete avuto un errore in console.

Chiaramente come common name potete usare quello che vi sembra più sensato. Se avete un hostname pubblico per il vostro server vpn potete usare quello quando create il certificato server.

Esportare i certificati

Dobbiamo esportare il certificato della CA e inoltre certificato e chiave del client, da caricare sui PC che saranno i nostri client.

Per farlo, dobbiamo per forza crittare con una password la chiave del client in fase di export, altrimenti non verrà esportata.

Ora i files (un cert per la CA, e un cert e una key per il client) sono disponibili sotto "files" dentro al winbox (o interfaccia web) e possiamo scaricarli sul nostro PC.

Configuriamo un pool di IP per le interfacce punto-punto di openvpn

Configuriamo un pool di ip dedicato alla punto-punto di openvpn. La topologia supportata attualmente è solo "subnet", quindi il server assegna 4 ip per ogni client, con una /24 quindi possiamo servire al massimo 64 client. Ovviamente qui usiamo una subnet che non usiamo in altri posti. L'ip "1" lo tengo fuori dal pool e lo userò come ip locale del nostro server vpn

Configuriamo un profilo PPP per openvpn

Questo profilo usa il pool che abbiamo precedentemente creato per assegnare ip dinamici ai client. Assegna al server l' ip 192.168.222.1 che è l' ip "1" del pool, e dice ai client di usare quello come DNS (ovviamente se vi serve diverso lo farete diverso).

Attiviamo il server openvpn

Attiviamo il server openvpn, con protocollo UDP e porta 1194 (il default). Uso come algoritmi crittografici quelli più sicuri, anche se questo può comportare una perdita di prestazioni. Ovviamente se dovete stabilire connessioni con client che non li supportano dovrete adattarvi di conseguenza

Creiamo uno o più utenti

Creiamo gli utenti che accederanno al server openvpn:

Configurazioni del firewall

Ricordiamoci di aprire la 1194/udp verso internet e di permettere il forward fra la LAN e la VPN nel firewall. Qui dipende da come avete configurato il firewall, non metto esempi.

Configurazione del client (linux, windows, ecc)

Sul client copiamo i files (il certificato della CA, il certificato e la chiave del client) che abbiamo esportato prima, poi come configurazione possiamo usare una cosa di questo genere:

Importante: Notare che il server almeno con la versione attuale del firmware (7.6) non ha alcun modo di fare dei push delle configurazioni ai client (se si escludono ip e dns) quindi nel file di configurazione del client dobbiamo inserire a mano le rotte verso gli ip raggiungibili dietro la VPN. A questo serve il comando route che nel nostro esempio punta agli ip della LAN dietro al server VPN.

Per finire, il file "user-pass.txt" conterrà username e password (prima riga lo username, seconda riga la password, senza altro), a meno che non vogliamo fare in modo che l'utente debba ogni volta inserirle a mano.

Quando si stabilisce la connessione verrà chiesta la password di sblocco della chiave privata del client (quella impostata in fase di esportazione) e poi user/password per l'account utente della vpn. Volendo potremo togliere la password dalla chiave e lasciare solo user e password dell'utente.

Per togliere la password dalla chiave privata del client usiamo il comando