Configurare un Mikrotik come un server OpenVPN
Da qualche tempo ho convertito tutte le VPN che usavo per la gestione dei clienti in OpenVPN, diventato oramai uno standard, al posto delle vecchie PPTP oramai non più sufficientemente sicure e così avendo quasi sempre un Mikrotik presso i clienti ho deciso di riassumere i passaggi per la configurazione in questo post.
Tutta la configurazione viene fatta direttamente nel Mikrotik, compresa la generazione dei certificati, quindi dopo esserci collegati con il Winbox possiamo iniziare.
Mi raccomando di sostituire gli indirizzi IP, gli utenti e le password con i vostri dati.
Per prima cosa creiamo una CA, firmiamo il relativo certificato ed esportiamolo:
/certificate add name=CA common-name=CA key-usage=key-cert-sign,crl-sign days-valid=3600 sign CA ca-crl-host=192.168.0.1 name=CA export-certificate CA
In questo modo all’interno della sezione File ci ritroveremo con il file cert_export_CA.crt.
Ora che abbiamo generato la CA possiamo generare il certificato per il nostro Mikrotik, quindi scriviamo:
/certificate add name=Mikrotik common-name=mikrotik days-valid=3600 sign Mikrotik ca=CA name=mikrotik
A questo punto se tutto è andato a buon fine dovremmo ritrovarci con i due certificati appena generati:
Ora dobbiamo creare un pool per l’assegnazione degli indirizzi IP ai client:
/ip pool add name=ovpn-pool range=192.168.131.10-192.168.131.200
Qui la scelta della classe è arbitraria, l’importante è che non sia una classe esistente in LAN.
Creaiamo poi il profilo per la connessione, definendo il nome, l’ip da usare per il mikrotik e il relativo pool di indirizzi:
/ppp profile add name=ovpn local-address=192.168.131.1 remote-address=ovpn-pool
Ora creiamo un utente abilitato a connettersi in OpenVPN:
/ppp secret add name=vpn_user password=qystQMf9TxhlVrq9vE00 profile=ovpn service=ovpn
E infine attiviamo il server OpenVPN:
/interface ovpn-server server set enabled=yes certificate=mikrotik auth=sha1 cipher=aes256 port=1194 netmask=24 require-client-certificate=no mode=ip default-profile=ovpn
A questo punto la configurazione lato Mikrotik è terminata, non ci rimane altro da fare che creare i due file di configurazione da usare sul client.
Lato client abbiamo bisogno di due file:
- Nome_connessione.ovpn
- auth.cfg
Nel file auth.cfg dobbiamo inserire due due righe diverse l’utente e la password che abbiamo impostato nel Mikrotik, quindi nel nostro caso conterrà queste due linee:
vpn_user qystQMf9TxhlVrq9vE00
Il file Nome_connessione.ovpn invece conterrà questo:
proto tcp-client remote <nome_o_indirizzo_pubblico_del_Mikrotik> 1194 dev tun script-security 2 nobind persist-key tls-client verb 1 cipher AES-256-CBC auth SHA1 pull auth-user-pass auth.cfg route 192.168.0.0 255.255.255.0 dhcp-option DOMAIN dominio.local dhcp-option DNS 192.168.0.20 <ca> .. </ca>
Nel file dovrete mettere i vostri dati:
- Nome o indirizzo pubblico del Mikrotik
- La classe di IP che usate internamente per creare automaticamente una rotta
- Il nome del dominio locale e l’IP del server DNS interno se volete risolvere i nomi
- Nella sezione <ca></ca> dovrete incollare il contenuto del file cert_export_CA.crt che abbiamo esportato nelle fasi iniziali
Una volta effettuati queste modifiche potrete stabilire una connessione OpenVPN verso il vostro Mikrotik senza nessun problema.
Se il Mikrotik non ha un IP pubblico ma si trova dietro un NAT non dovrete far altro che nattare sul router a monte la porta TCP 1194.
Potresti specificare i modelli che hai utilizzato? I miei dubbi sono anche relativi alle 1000 e più mille vulnerabilità che sono state rilevate su questi oggettini. Tu che mi dici?
Grazie
Riccardo
Considerando che il RouterOS è lo stesso in tutti i modelli non cambia molto, comunque ho utilizzando la configurazione sopra su RB950, hEX lite, RBG2011iL, VM, etc., sempre senza grossi problemi.
E’ verò che i Mikrotik sono stati oggetto di attacchi vari, l’ultimo era dell’anno scorso se non ricordo male, ma se li tieni sempre aggiornati, disabiliti tutti i servizi che non ti servono e lasci abilitato l’accesso di management da dentro la VPN o solo a specifici IP non dovresti avere grossi problemi.
Ciao
Andrea
Una guida utile. Grazie. Ammetto che ho modificato alcuni passaggi, quali la definizione del POOL utilizzando quello che ho già reservando pacchetti alla rete interna e parte alla VPN.
Ciao Andre,
in primis complimenti e grazie.
Inizio ora a prendere possesso di un MikroTik HeX PoE e vorrei capire qualcosa in merito a l’argomento da te postato.
Posso chiederti qualche delucidazione e dettaglio in merito?
Pensi sia più opportuno ti scriva una mail con alcune informazioni e quindi lo scopo che vorrei raggiungere?
Grazie in anticipo e ancora complimenti per questo blog.
Saluti.
M.
Ciao Manuele,
prova a scrivermi, compatibilmente con il tempo proverò a risponderti.
Ciao
Andrea
Eccomi Andrea,
sono stato fuori per lavoro e, tra una festa comandata e l’altra, eccomi qui.
Non so come rintracciare un tuo indirizzo e-mail per scriverti.
Fammi sapere e ancora grazie.
M.
Grazie per la guida, molto utile. Segnalo solo che ho dovuto aggiungere l’opzione “client-cert-not-required” al file .ovpn (OpenVPN Connect 3.1.0 sotto Windows).
Grazie per la guida, molto utile
da client raggiungo la rete del server etc
ma se volessi “uscire” con l’ip pubblico del server cosa dovrei modificare nella configurazione? grazie
Ciao e grazie del tutorial.
Io che non ho un IP pubblico statico (anzi sono addirittura sotto doppio NAT) dovrei inserire l’indirizzo assegnatomi dal mio DDNS (NO-IP) in questa riga sotto:
remote
Potrei usare anche il servizio di dns dinamico offerto gratuitamente da Mikrotik, abilitando e copiando l’indirizzo sopra?
Grazie
Ciao Pierpaolo,
per usare la VPN come gateway predefinito devi agigungere al file di configurazione questa riga:
redirect-gateway def1
Ciao
Andrea
Ciao Luca,
il server VPN può essere indicato sia con l’IP che con un nome DNS, quindi nella direttiva remote puoi indicare anche il nome del dns dinamico del Mikrotik.
Ciao
Andrea
Grazie Andrea per la risposta.
Ancora una cosa (spero). Cosa bisogna inserire qui in route, DOMAIN e DNS?
In DNS l’ip del mio stesso router, visto che lo uso per indirizzare tutte le richieste DNS allo stesso Mikrotik? Grazie
auth-user-pass auth.cfg
route 192.168.0.0 255.255.255.0
dhcp-option DOMAIN dominio.local
dhcp-option DNS 192.168.0.20
Ciao Luca,
il significato delle direttive è questo:
– route indica tutte le network che possono essere raggiunte tramite la VPN
– DOMAIN indica il nome del dominio Active Directory se presente in azienda
– DNS indica l’ip del/dei server DNS se presenti in azienda
Le ultime due direttive in realtà sono facoltative.
Ciao
Andrea
Ciao grazie per la guida ma se vorrei far uscire il client su internet tramite il server openvpn mikrotik e non tramite la sua connessione come potrei fare?
Ciao Alex,
nel file di configurazione del client aggiungi la seguente riga:
redirect-gateway def1
Ciao andrea intanto grazie mille per la guida , ti volevo chiedere se voglio limitare l’accesso a un client su un singolo ip/servizio come posso fare ho provato di tutto creando regole sul firewall ma senza riuscirci faccio un esempio
client 1 una volta collegata il server dhcp ovpn gli assegna 10.10.10.2 e si dovrebbe collegare solo su ip 192.168.10.24 con porta 24000
grazie mille
Ciao Gennaro,
dovrebbe bastarti una regola del genere:
/ip firewall filter
add action=accept chain=forward dst-address=192.168.10.24 dst-port=24000 protocol=tcp src-address=10.10.10.2
add action=drop chain=forward src-address=10.10.10.2
Fai qualche prova.
Ciao
Andrea
Non creerei i certificati dal mikrotik, in quanto la ca non è esportabile e, in caso di guasto o di cambio del mikrotik che fa da server, è necessario ricreare tutti i certificati e ridistribuirli ai client.
Ciao Roberto,
se esporti la CA in formato PKCS12 con password poi la puoi importare in un altro Mikrotik e usarla per generare altri certificati.
Ciao
Andrea
Ciao e grazie per il tuo articolo.
Sono arrivato alla fine della config ed al momento di connettermi ottengo questo errore:
2020-11-28 18:47:10 us=176 VERIFY OK: depth=0,
2020-11-28 18:47:10 us=104603 Connection reset, restarting [0]
2020-11-28 18:47:10 us=104603 TCP/UDP: Closing socket
2020-11-28 18:47:10 us=104603 SIGUSR1[soft,connection-reset] received, process restarting
Hai qualche dritta da darmi?
Ciao e grazie
Ciao,
alza il livello di debug lato client aumentando il valore del parametro verb e lato Mikrotik creando il log specifico per la VPN.
Ciao
Andrea
Ottimo Articolo
Usato per connettermi in VON con il mio iphone usando Mikroptik come ovpn server.
Funziona perfettamente, compreso il redirect di tutto il traffico al gateway.
Ciao non mi è chiaro. E’ possibile realizzare la VPN anche se la connessione non dipone di un ip pubblico ?? Semplicemente utilizzando l’indirizzo il “DDNS ” di Miktorik ?? Grazie
Ciao Alessio,
si la connessione è possibile anche se non hai un IP pubblico configurato nel Mikrotik, ad esempio utilizzi un provider che ti rilascia un IP privato, in questo caso devi farti nattare la porta TCP 1194 verso l’IP del Mikrotik
Ciao
Ciao Andrea ho la necessità di far collegare in vpn alcuni router 4G (teltonika) e permettere il raggiungimento degli host collegati al router (lato client) dalla rete del server VPN (lato MikroTik). La gestione dei pool di indirizzamento è quindi più complessa. Ti scrivo il mio approccio e se possibile mi dai qualche dritta. Es:
Teltonika1 installo certifcato client e configurazione per accedere al MikroTik. Configuro indirizzo IP lato lan 192.168.10.1 dentro una sottorete predeterminata (192.168.10.0/28) assegno agli altri host indirizzi della stessa sottorete. Poi ripeto l’operazione per tutti gli altri router 4G, impostando gli altri indirizzi con le altre subnet 192.168.10.16/28 , 192.168.10.32/28 etc etc.
Adesso devo capire come configurare il MikroTik lato server e come dichiarare le varie sottoreti remote da raggiungere in vpn.
Premetto di aver già fatto questo lavoro su OpenVPN server in Ubuntu qualche anno fa, ma sesso devo sostituire la macchina con un router MikroTik.
Ho seguito tutti i passi, ma usando OPENVPN client resta al messaggio “Attempting to establish TCP Connection”
Con un altro server VPN che usa sempre la porta 1194 dietro un router non ho alcun problema.
Un’idea dell’errore che ho potuto commettere?