{"id":413,"date":"2018-03-27T20:35:49","date_gmt":"2018-03-27T19:35:49","guid":{"rendered":"http:\/\/www.carinato.net\/?p=413"},"modified":"2018-03-27T20:35:49","modified_gmt":"2018-03-27T19:35:49","slug":"configurare-open-vpn-su-mikrotik-routeros","status":"publish","type":"post","link":"https:\/\/carinato.com\/?p=413","title":{"rendered":"Configurare Open VPN su Mikrotik RouterOS"},"content":{"rendered":"<p>La seguente guida (spudoratamente ispirata da <a href=\"https:\/\/gist.github.com\/SmartFinn\/8324a55a2020c56b267b\">qui<\/a> ) spiega come installare una Open VPN sul sistema RouterOS di Mikrotik (testato sulla versione 6.41.3)<\/p>\n<p>Partiamo da una configurazione Base del Mikrotik<\/p>\n<pre>\/system reset-configuration<\/pre>\n<p>Assegnare l&#8217;identificativo al Mikrotik da<\/p>\n<pre class=\"p1\"><span class=\"s1\">\/system<\/span> <span class=\"s1\">identity<\/span> <span class=\"s3\">set<\/span> <span class=\"s4\">name<\/span><span class=\"s5\">=\"<\/span><strong><span class=\"s2\">MioMikrotik<\/span><\/strong><span class=\"s5\">\"<\/span><\/pre>\n<p>Impostare l&#8217;ora esatta con NTP:<\/p>\n<pre class=\"p1\"><span class=\"s5\">\/system ntp client set mode=unicast enabled=yes servers=([:resolve 0.it.pool.ntp.org],[:resolve 1.it.pool.ntp.org])\n<\/span><\/pre>\n<p>Impostare il fuso orario:<\/p>\n<pre class=\"p1\"><span class=\"s1\">\/system<\/span> <span class=\"s1\">clock<\/span> <span class=\"s3\">set<\/span> <span class=\"s4\">time-zone-name<\/span><span class=\"s5\">=<\/span><span class=\"s2\">Europe\/Rome<\/span><\/pre>\n<p>Copiare questo script personalizzando le variabili <strong>global<\/strong> alle prime linee<\/p>\n<pre><span class=\"pl-c\"># Setup OpenVPN Server and generate certs<\/span>\n<span class=\"pl-c\">#<\/span>\n<span class=\"pl-c\"># Change variables below and paste the script<\/span>\n<span class=\"pl-c\"># into MikroTik terminal window.<\/span>\n<span class=\"pl-c\">#<\/span>\n\n:global CN [\/system identity get name]\n:global COUNTRY <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>IT<span class=\"pl-pds\">\"<\/span><\/span>\n:global STATE <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>MYSTATE<span class=\"pl-pds\">\"<\/span><\/span>\n:global LOC <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>MYCITY<span class=\"pl-pds\">\"<\/span><\/span>\n:global ORG <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>MyOrg<span class=\"pl-pds\">\"<\/span><\/span>\n:global OU <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><span class=\"pl-pds\">\"<\/span><\/span>\n:global KEYSIZE <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>2048<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\">## functions<\/span>\n:global waitSec <span class=\"pl-k\">do<\/span>={:return ($KEYSIZE * 10 \/ 1024)}\n\n<span class=\"pl-c\">## generate a CA certificate<\/span>\n\/certificate\n\nadd <span class=\"pl-k\">name<\/span>=ca-template <span class=\"pl-k\">country<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$COUNTRY<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">state<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$STATE<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">locality<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$LOC<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">organization<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$ORG<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">unit<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$OU<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">common-name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">key-size<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$KEYSIZE<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">days-valid<\/span>=3650 <span class=\"pl-k\">key-usage<\/span>=crl-sign,key-cert-sign\nsign ca-template <span class=\"pl-k\">ca-crl-host<\/span>=127.0.0.1 <span class=\"pl-k\">name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$CN<span class=\"pl-pds\">\"<\/span><\/span>\n:delay [$waitSec]\n\n<span class=\"pl-c\">## generate a server certificate<\/span>\n\/certificate\nadd <span class=\"pl-k\">name<\/span>=server-template <span class=\"pl-k\">country<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$COUNTRY<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">state<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$STATE<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">locality<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$LOC<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">organization<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$ORG<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">unit<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$OU<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">common-name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>server@$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">key-size<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$KEYSIZE<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">days-valid<\/span>=3650 <span class=\"pl-k\">key-usage<\/span>=digital-signature,key-encipherment,tls-server\nsign server-template <span class=\"pl-k\">ca<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>server@$CN<span class=\"pl-pds\">\"<\/span><\/span>\n:delay [$waitSec]\n\n<span class=\"pl-c\">## create a client template<\/span>\n\/certificate\nadd <span class=\"pl-k\">name<\/span>=client-template <span class=\"pl-k\">country<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$COUNTRY<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">state<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$STATE<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">locality<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$LOC<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">organization<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$ORG<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">unit<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$OU<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">common-name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>client<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">key-size<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$KEYSIZE<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">days-valid<\/span>=3650 <span class=\"pl-k\">key-usage<\/span>=tls-client\n\n<span class=\"pl-c\">## create IP pool<\/span>\n\/ip pool\nadd <span class=\"pl-k\">name<\/span>=VPN-POOL <span class=\"pl-k\">ranges<\/span>=192.168.252.128-192.168.252.224\n\n<span class=\"pl-c\">## add VPN profile<\/span>\n\/ppp profile\nadd <span class=\"pl-k\">dns-server<\/span>=192.168.252.1 <span class=\"pl-k\">local-address<\/span>=192.168.252.1 <span class=\"pl-k\">name<\/span>=VPN-PROFILE \\\n  <span class=\"pl-k\">remote-address<\/span>=VPN-POOL <span class=\"pl-k\">use-encryption<\/span>=yes\n\n<span class=\"pl-c\">## setup OpenVPN server<\/span>\n\/interface ovpn-server server\nset <span class=\"pl-k\">auth<\/span>=sha1 <span class=\"pl-k\">certificate<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>server@$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">cipher<\/span>=aes128,aes192,aes256 \\\n  <span class=\"pl-k\">default-profile<\/span>=VPN-PROFILE <span class=\"pl-k\">enabled<\/span>=yes <span class=\"pl-k\">require-client-certificate<\/span>=yes\n\n<span class=\"pl-c\">## add a firewall rule<\/span>\n\/ip firewall filter\nadd <span class=\"pl-k\">chain<\/span>=input <span class=\"pl-k\">dst-port<\/span>=1194 <span class=\"pl-k\">protocol<\/span>=tcp <span class=\"pl-k\">comment<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Allow OpenVPN<span class=\"pl-pds\">\"\n\n## Sposto la regola del firewall prima della generica deny\n\/ip firewall filter move [find \\\ncomment=\"Allow OpenVPN\"] \\\n[find where chain=input in-interface-list=\"!LAN\"]\n<\/span><\/span><\/pre>\n<p>ed incollarlo nel terminale del Mikrotik (io trovo comodo copiarlo dal terminale dopo essermi collegato via ssh al Mikrotik)<\/p>\n<p>Stessa cosa col seguente script per la configurazione dell&#8217;utente client (questo andr\u00e0 ripetuto per ogni nuovo utente da abilitare):<\/p>\n<pre><span class=\"pl-c\"># Add a new user and generate\/export certs<\/span>\n<span class=\"pl-c\">#<\/span>\n<span class=\"pl-c\"># Change variables below and paste the script<\/span>\n<span class=\"pl-c\"># into MikroTik terminal window.<\/span>\n<span class=\"pl-c\">#<\/span>\n\n:global CN [\/system identity get name]\n:global USERNAME <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>user<span class=\"pl-pds\">\"<\/span><\/span>\n:global PASSWORD <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>password<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\">## add a user<\/span>\n\/ppp secret\nadd <span class=\"pl-k\">name<\/span>=$USERNAME <span class=\"pl-k\">password<\/span>=$PASSWORD <span class=\"pl-k\">profile<\/span>=VPN-PROFILE <span class=\"pl-k\">service<\/span>=ovpn\n\n<span class=\"pl-c\">## generate a client certificate<\/span>\n\/certificate\nadd <span class=\"pl-k\">name<\/span>=client-template-to-issue <span class=\"pl-k\">copy-from<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>client-template<span class=\"pl-pds\">\"<\/span><\/span> \\\n  <span class=\"pl-k\">common-name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$USERNAME@$CN<span class=\"pl-pds\">\"<\/span><\/span>\nsign client-template-to-issue <span class=\"pl-k\">ca<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$USERNAME@$CN<span class=\"pl-pds\">\"<\/span><\/span>\n:delay 20\n\n<span class=\"pl-c\">## export the CA, client certificate, and private key<\/span>\n\/certificate\nexport-certificate <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">export-passphrase<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><span class=\"pl-pds\">\"<\/span><\/span>\nexport-certificate <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$USERNAME@$CN<span class=\"pl-pds\">\"<\/span><\/span> <span class=\"pl-k\">export-passphrase<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$PASSWORD<span class=\"pl-pds\">\"<\/span><\/span><\/pre>\n<p>A questo punto dal pc possiamo scaricare i certificati, tramite interfaccia web (impostare correttamente l&#8217;indirizzo ip del vostro Mikrotik es: 192.168.88.1):<\/p>\n<pre>http:\/\/<strong>MikroTik_IP<\/strong>\/webfig\/#Files<\/pre>\n<p>o da terminale con sftp:<\/p>\n<pre>sftp admin@<strong>MikroTik_IP<\/strong>:cert_export_<span class=\"pl-cce\">\\*<\/span><\/pre>\n<p>Creare nella stessa cartella dei certificati un file\u00a0<strong>user.auth<\/strong> con indicati nome utente e password:<\/p>\n<pre>user\npassword<\/pre>\n<p>Sempre nella stessa cartella creare il file di configurazione lato client modificando i parametri in grassetto:<\/p>\n<pre>client\ndev tun\nproto tcp-client\nremote <strong>MikroTik_IP<\/strong> 1194\nnobind\npersist-key\npersist-tun\ncipher AES-256-CBC\nauth SHA1\npull\nverb 2\nmute 3\n\n<span class=\"pl-c\"># Create a file 'user.auth' with a username and a password<\/span>\n<span class=\"pl-c\">#<\/span>\n<span class=\"pl-c\"># cat &lt;&lt; EOF &gt; user.auth<\/span>\n<span class=\"pl-c\"># user<\/span>\n<span class=\"pl-c\"># password<\/span>\n<span class=\"pl-c\"># EOF<\/span>\nauth-user-pass user.auth\n\n<span class=\"pl-c\"># Copy the certificates from MikroTik and change<\/span>\n<span class=\"pl-c\"># the filenames below if needed<\/span>\nca <strong>cert_export_MioMikroTik.crt<\/strong>\ncert <strong>cert_export_user@MioMikroTik.crt<\/strong>\nkey <strong>cert_export_user@MioMikroTik.key<\/strong>\n\n<span class=\"pl-c\"># Add routes to networks behind MikroTik<\/span>\n<span class=\"pl-c\">#route 192.168.10.0 255.255.255.0<\/span><\/pre>\n<p>A questo punto la configurazione \u00e8 pronta per essere data in pasto al vostro client OVPN<\/p>\n<p>Se preferite che non venga chiesta la password all&#8217;avvio della VPN \u00e8 necessario trasformare la chiave privata in questo modo:<\/p>\n<pre><code>openssl rsa -passin pass:password -in cert_export_user@MioMikroTik.key -out cert_export_user_np@MioMikroTik.key<\/code><\/pre>\n<p>ed utilizzare questa nuova chiave privata.<\/p>\n<p>Per rimuovere un utente e revocare il relativo certificato:<\/p>\n<pre><span class=\"pl-c\"># Delete a user and revoke his certificate<\/span>\n<span class=\"pl-c\">#<\/span>\n<span class=\"pl-c\"># Change variables below and paste the script<\/span>\n<span class=\"pl-c\"># into MikroTik terminal window.<\/span>\n<span class=\"pl-c\">#<\/span>\n\n:global CN [\/system identity get name]\n:global USERNAME <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>user<span class=\"pl-pds\">\"<\/span><\/span>\n\n<span class=\"pl-c\">## delete a user<\/span>\n\/ppp secret\nremove [find <span class=\"pl-k\">name<\/span>=$USERNAME <span class=\"pl-k\">profile<\/span>=VPN-PROFILE]\n\n<span class=\"pl-c\">## revoke a client certificate<\/span>\n\/certificate\nissued-revoke [find <span class=\"pl-k\">name<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>$USERNAME@$CN<span class=\"pl-pds\">\"<\/span><\/span>]<\/pre>\n<p>Per rimuovere la configurazione OpenVPN dal Mikrotik:<\/p>\n<pre><span class=\"pl-c\"># Revert OpenVPN configuration<\/span>\n<span class=\"pl-c\">#<\/span>\n\n\/ip pool\nremove [find <span class=\"pl-k\">name<\/span>=VPN-POOL]\n\n\/ppp profile\nremove [find <span class=\"pl-k\">name<\/span>=VPN-PROFILE]\n\n\/ip firewall filter\nremove [find <span class=\"pl-k\">comment<\/span>=<span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span>Allow OpenVPN<span class=\"pl-pds\">\"<\/span><\/span>]\n\n\/ppp secrets\nremove [find <span class=\"pl-k\">profile<\/span>=VPN-PROFILE]\n\n\/certificate\n<span class=\"pl-c\">## delete the certificates manually<\/span><\/pre>\n<p>I certificati vanno rimossi manualmente.<\/p>\n<p>Buon Lavoro \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La seguente guida (spudoratamente ispirata da qui ) spiega come installare una Open VPN sul sistema RouterOS di Mikrotik (testato sulla versione 6.41.3) Partiamo da una configurazione Base del Mikrotik \/system reset-configuration Assegnare l&#8217;identificativo al Mikrotik da \/system identity set name=&#8221;MioMikrotik&#8221; Impostare l&#8217;ora esatta con NTP: \/system ntp client set mode=unicast enabled=yes servers=([:resolve 0.it.pool.ntp.org],[:resolve 1.it.pool.ntp.org]) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-413","post","type-post","status-publish","format-standard","hentry","category-networking"],"_links":{"self":[{"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/posts\/413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=413"}],"version-history":[{"count":0,"href":"https:\/\/carinato.com\/index.php?rest_route=\/wp\/v2\/posts\/413\/revisions"}],"wp:attachment":[{"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carinato.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}