{"id":1536,"date":"2014-05-14T16:37:43","date_gmt":"2014-05-14T14:37:43","guid":{"rendered":"http:\/\/blog.sfsoft.it\/?p=1536"},"modified":"2015-06-25T13:43:30","modified_gmt":"2015-06-25T11:43:30","slug":"openvpn-bridged-su-ubuntu-14-04","status":"publish","type":"post","link":"http:\/\/www.sfsoft.it\/blog\/2014\/05\/14\/openvpn-bridged-su-ubuntu-14-04\/","title":{"rendered":"OpenVPN &#8220;bridged&#8221; su Ubuntu 14.04"},"content":{"rendered":"<p>Essendo passato diverso tempo aggiorno l&#8217;articolo scritto <a title=\"OpenVPN \u201cbridged\u201d su Ubuntu Lucid Lynx\" href=\"http:\/\/blog.sfsoft.it\/2011\/08\/03\/openvpn-bridged-su-ubuntu-lucid-lynx\/\" target=\"_blank\">OpenVPN \u201cbridged\u201d su Ubuntu Lucid Lynx<\/a> per la versione nuova di Ubuntu 14.04 Trusty Tahr.<\/p>\n<p><strong>Nota<\/strong>: avendo notato in passato che in alcune circostanze se la macchina oltre a fare da server VPN si occupa anche da fare da gateway falliscono le operazioni di re-indirizzamento verso l&#8217;interno ( nel caso ci fossero e servissero ), in questi casi occorre disabilitare il <em>bridge-nf-call-iptables<\/em>:<\/p>\n<pre class=\"lang:default decode:true\">sudo echo \"0\" &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/pre>\n<p>Sempre pi\u00f9 spesso abbiamo necessit\u00e0 che portano a collaboratori esterni il dover accedere a risorse interne alla nostra <em>LAN<\/em>.<\/p>\n<p>Per molti casi \u00e8 pi\u00f9 veloce mettere mano al router e aprire le porte che instradino il traffico verso le risorse ( esempio una connessione <em>RDP<\/em> o <em>VNC<\/em> verso una macchina ) ma sotto aspetti pi\u00f9 complessi non \u00e8 una soluzione accettabile, ad esempio se serve accedere a molte macchine interne che offrono gli stessi servizi e che richiedono quindi la mappatura sul router molte di porte diverse oppure se vogliamo che le nostre informazioni viaggino in maniera sicura in forma cifrata.<\/p>\n<p>In questo caso \u00e8 necessario appoggiarsi a soluzioni <a href=\"http:\/\/it.wikipedia.org\/wiki\/Virtual_Private_Network\" target=\"_blank\">VPN<\/a>.<\/p>\n<p>Ci sono in giro molte soluzioni <em>VPN<\/em> diciamo facili dette <em>server-less<\/em> ovvero che si appoggiano a <em>server<\/em> esterni per le operazioni di autenticazione e instradamento, soluzioni ad esempio come <a href=\"https:\/\/secure.logmein.com\/products\/hamachi\/?lang=it\" target=\"_blank\">LogMeIn Hamachi<\/a>, <a href=\"http:\/\/easy-vpn.comodo.com\/\" target=\"_blank\">Comodo EasyVPN<\/a> o <a href=\"http:\/\/www.wippien.com\/\" target=\"_blank\">Wippien<\/a>, ma spesso queste soluzioni richiedono un canone annuale, non sono multi-piattaforma o semplicemente non ci garba che i nostri dati passino a casa degli altri.<\/p>\n<p>Una soluzione gratuita e multi-piattaforma \u00e8 <a href=\"http:\/\/openvpn.net\/\" target=\"_blank\">OpenVPN<\/a>, il sistema \u00e8 molto potente e versatile e di conseguenza \u00e8 anche complesso per certi versi.<\/p>\n<h2>Installazione server<\/h2>\n<p>Innanzitutto installiamo la parte <em>server<\/em> sulla nostra macchina con <em>Ubuntu 14.04<\/em>:<\/p>\n<pre lang=\"bash\">sudo apt-get install openvpn easy-rsa<\/pre>\n<p>Creiamo ora i certificati, per evitare che ad ogni aggiornamento perdiamo i dati facciamo anche una copia dei file di configurazione in un percorso diverso da quello di <em>default<\/em>:<\/p>\n<pre lang=\"bash\">sudo mkdir \/etc\/openvpn\/easy-rsa\/\r\nsudo cp \/usr\/share\/easy-rsa\/* \/etc\/openvpn\/easy-rsa\/<\/pre>\n<p>Ora modifichiamo i parametri di <em>default<\/em> che verranno utilizzati nelle chiavi con i nostri o quelli che riguardano la situazione, quindi apriamo il file <em>vars<\/em>:<\/p>\n<pre lang=\"bash\">sudo nano \/etc\/openvpn\/easy-rsa\/vars<\/pre>\n<p>E modifichiamo i seguenti valori:<\/p>\n<pre lang=\"bash\">export KEY_COUNTRY=\"IT\"\r\nexport KEY_PROVINCE=\"Roma\"\r\nexport KEY_CITY=\"Roma\"\r\nexport KEY_ORG=\"Societ\u00e0 di esempio\"\r\nexport KEY_EMAIL=\"mario@example.com\"\r\nexport KEY_OU=\"Organizzazione di esempio\"<\/pre>\n<h2>Creazione certificati server<\/h2>\n<p>Ora procediamo alla generazione dei certificati del nostro <em>server VPN<\/em> ( il comando <em>build-dh<\/em> \u00e8 facile che impieghi molto tempo a seconda delle prestazioni della macchina ):<\/p>\n<pre lang=\"bash\">cd \/etc\/openvpn\/easy-rsa\/\r\nsource vars\r\n.\/clean-all\r\n.\/build-dh\r\n.\/pkitool --initca\r\n.\/pkitool --server server\r\ncd keys\r\nopenvpn --genkey --secret ta.key\r\nsudo cp server.crt server.key ca.crt dh2048.pem ta.key \/etc\/openvpn\/<\/pre>\n<ul>\n<li>la generazione della chiave <em>ta.key<\/em> serve per i <em>client<\/em> quando effettuano la prima connessione al <em>server<\/em> in modo da avere il permesso per procedere con le fasi di autenticazione, \u00e8 una protezione che gli evita attacchi di tipo <a href=\"http:\/\/it.wikipedia.org\/wiki\/Denial_of_service\" target=\"_blank\"><em>Denial of Service<\/em><\/a> e lascia passare alla fase successiva solo chi \u00e8 effettivamente abilitato;<\/li>\n<\/ul>\n<h2>Creazione certificati client<\/h2>\n<p>Successivamente occorre creare un certificato per ogni <em>client<\/em> che necessita il collegamento, al posto di <em>hostname<\/em> mettiamo il nome identificativo di ogni <em>client<\/em> in maniera da distinguere poi le chiavi da consegnare ( qui ho preferito usare <em>build-key<\/em> perch\u00e8 \u00e8 in modalit\u00e0 interattiva, quindi per ogni campo della chiave chiede conferma, invece <em>pkitool<\/em> fa tutto in automatico prendendo in valori dal file <em>vars<\/em> ):<\/p>\n<pre lang=\"bash\">cd \/etc\/openvpn\/easy-rsa\/\r\nsource vars\r\n.\/build-key hostname<\/pre>\n<p>Se al certificato per ragioni di sicurezza vogliamo anche associare una password che verr\u00e0 poi richiesta ad ogni connessione occorre dare invece il comando:<\/p>\n<pre lang=\"bash\">.\/build-key-pass hostname<\/pre>\n<p>Al <em>client<\/em> occorre poi fornire i seguenti file e possibilmente \u00e8 bene non mandarli per email ma usare un metodo di copia cifrata tipo <em>scp<\/em> o consegnarli a mano su supporto esterno per evitare che vengano intercettati e utilizzati a nostra insaputa:<\/p>\n<div>\n<ul type=\"disc\">\n<li>\/etc\/openvpn\/ca.crt<\/li>\n<li>\/etc\/openvpn\/easy-rsa\/keys\/hostname.crt<\/li>\n<li>\/etc\/openvpn\/easy-rsa\/keys\/hostname.key<\/li>\n<li>\/etc\/openvpn\/ta.key<\/li>\n<\/ul>\n<p>Questi certificati \u00e8 consigliabile tenerne sempre una copia anche sul <em>server<\/em> in quanto se capitasse la necessit\u00e0 di revocarne uno occorre averlo, in fondo aggiungo le operazioni da eseguire per la revoca.<\/p>\n<\/div>\n<h2>Configurazione server<\/h2>\n<p>Procediamo ora alla configurazione del nostro <em>server<\/em>, creiamo il file <em>server.conf<\/em> partendo dall&#8217;esempio fornito dal pacchetto:<\/p>\n<pre lang=\"bash\">sudo cp \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/server.conf.gz \/etc\/openvpn\/\r\nsudo gzip -d \/etc\/openvpn\/server.conf.gz\r\nsudo nano \/etc\/openvpn\/server.conf<\/pre>\n<p>In questo caso procederemo alla configurazione detta <em>bridged<\/em>, la differenza sostanziale tra una <em>bridged<\/em> e una <em>routed<\/em> \u00e8 che la prima funziona come fosse un <em>hub<\/em> o uno <em>switch<\/em> virtuale ( quindi mette in connessione due reti che hanno visibilit\u00e0 di classe di IP tra loro ) mentre la seconda si occupa di far dialogare due reti con classi diverse e quindi impossibilitate a vedersi.<\/p>\n<p>Esiste poi anche una versione chiamiamola <em>base<\/em> che mette in comunicazione solo i <em>client<\/em> della <em>VPN<\/em> tra loro oppure solo verso il <em>server<\/em>, la configurazione \u00e8 molto pi\u00f9 semplice ma per cosa serve a me \u00e8 troppo limitante quindi la ignoro.<\/p>\n<p>Per le differenze nel dettaglio e i vari pro e contro tra i vari metodi rimando alle <a href=\"http:\/\/openvpn.net\/index.php\/open-source.html\" target=\"_blank\">documentazioni ufficiali<\/a>.<\/p>\n<p>Nel caso la macchina facesse anche da <em>gateway<\/em> e quindi abbia due schede di rete ( <em>eth0<\/em> la LAN e <em>eth1<\/em> la WAN ), quella da usare per le operazioni di <em>bridge<\/em> \u00e8 quella associata alla LAN interna ( di solito <em>eth0<\/em> ).<\/p>\n<p>Prima di tutto nel caso non avessimo il pacchetto <em>bridge-utils<\/em> andiamo a installarlo:<\/p>\n<pre lang=\"bash\">sudo apt-get install bridge-utils<\/pre>\n<p>Dal sito ufficiale di <em>OpenVPN<\/em> \u00e8 disponibile uno <em>script<\/em> che si occupa di creare il <em>bridge<\/em>, si chiama <a href=\"http:\/\/openvpn.net\/index.php\/open-source\/documentation\/miscellaneous\/76-ethernet-bridging.html#linuxscript\" target=\"_blank\">bridge-start<\/a> ( per comodit\u00e0 riporto lo <em>script<\/em> intero ):<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\n#################################\r\n# Set up Ethernet bridge on Linux\r\n# Requires: bridge-utils\r\n#################################\r\n\r\n# Define Bridge Interface\r\nbr=\"br0\"\r\n\r\n# Define list of TAP interfaces to be bridged,\r\n# for example tap=\"tap0 tap1 tap2\".\r\ntap=\"tap0\"\r\n\r\n# Define physical ethernet interface to be bridged\r\n# with TAP interface(s) above.\r\neth=\"eth0\"\r\neth_ip=\"192.168.8.4\"\r\neth_netmask=\"255.255.255.0\"\r\neth_broadcast=\"192.168.8.255\"\r\n\r\nfor t in $tap; do\r\n    openvpn --mktun --dev $t\r\ndone\r\n\r\nbrctl addbr $br\r\nbrctl addif $br $eth\r\n\r\nfor t in $tap; do\r\n    brctl addif $br $t\r\ndone\r\n\r\nfor t in $tap; do\r\n    ifconfig $t 0.0.0.0 promisc up\r\ndone\r\n\r\nifconfig $eth 0.0.0.0 promisc up\r\n\r\nifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast\r\n<\/pre>\n<p>I parametri che vanno modificati sostanzialmente sono:<\/p>\n<ul>\n<li><strong>eth<\/strong>: nome dell&#8217;interfaccia fisica di rete da utilizzare per il <em>bridge<\/em>;<\/li>\n<li><strong>eth_ip<\/strong>: indirizzo ip utilizzato dal <em>bridge<\/em>, va bene lo stesso ip attualmente assegnato alla scheda di rete;<\/li>\n<li><strong>eth_netmask<\/strong>: la maschera di rete;<\/li>\n<li><strong>eth_broadcast<\/strong>: l&#8217;indirizzo di <em>broadcast<\/em> della rete;<\/li>\n<\/ul>\n<p><strong>Aggiunta:<\/strong> Pu\u00f2 capitare in certe situazioni che dopo aver tirato su il <em>bridge<\/em> di rete la macchina anche se vista dalla rete interna risulta irraggiungibile dall&#8217;esterno, dopo varie prove ho notato che in quel caso viene a mancare il parametro del <em>gateway<\/em>, quindi \u00e8 sufficiente aggiungerlo in seguito:<\/p>\n<pre lang=\"bash\">sudo route add default gw 192.168.8.1<\/pre>\n<p>Oppure se vogliamo modificare lo <em>script<\/em> sopra, aggiungiamo il parametro configurabile all&#8217;inizio ( subito sotto <em>eth_broadcast<\/em> ):<\/p>\n<pre lang=\"bash\">eth_gateway=\"192.168.8.1\"<\/pre>\n<p>E poi aggiungiamo il comando <em>route<\/em> alla fine dello <em>script<\/em>:<\/p>\n<pre lang=\"bash\">route add default gw $eth_gateway<\/pre>\n<p>Sul sito esiste anche lo script eventualmente da usare per rimuovere il nostro <em>bridge<\/em>, si chiama <a href=\"http:\/\/openvpn.net\/index.php\/open-source\/documentation\/miscellaneous\/76-ethernet-bridging.html#linuxscript\" target=\"_blank\">bridge-stop<\/a>:<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n\r\n####################################\r\n# Tear Down Ethernet bridge on Linux\r\n####################################\r\n\r\n# Define Bridge Interface\r\nbr=\"br0\"\r\n\r\n# Define list of TAP interfaces to be bridged together\r\ntap=\"tap0\"\r\n\r\nifconfig $br down\r\nbrctl delbr $br\r\n\r\nfor t in $tap; do\r\n    openvpn --rmtun --dev $t\r\ndone<\/pre>\n<p>Per avviare il tutto occorrer\u00e0 eseguire in successione prima lo script <em>bridge-start<\/em> e dopo avviare il demone <em>openvpn<\/em>:<\/p>\n<pre lang=\"bash\">sudo bridge-start\r\nsudo \/etc\/init.d\/openvpn start<\/pre>\n<p>E di conseguenza se volessimo fermarlo dovremo prima fermare il demone e in seguito eseguire <em>bridge-stop<\/em>:<\/p>\n<pre lang=\"bash\">sudo \/etc\/init.d\/openvpn stop\r\nsudo bridge-stop<\/pre>\n<p>Comunque prima di avviare il demone andiamo a modificare il file <em>\/etc\/openvpn\/server.conf<\/em> ( sotto la spiegazione dettagliata ):<\/p>\n<pre lang=\"bash\">port 1194\r\nproto udp\r\ndev tap0\r\nca \/etc\/openvpn\/ca.crt\r\ncert \/etc\/openvpn\/server.crt\r\nkey \/etc\/openvpn\/server.key\r\ndh \/etc\/openvpn\/dh1024.pem\r\ntls-auth \/etc\/openvpn\/ta.key 0\r\n;server 10.8.0.0 255.255.255.0\r\nserver-bridge 192.168.8.4 255.255.255.0 192.168.8.128 192.168.8.254\r\npush \"route 192.168.8.0 255.255.255.0\"\r\npush \"dhcp-option DNS 192.168.8.8\"\r\npush \"dhcp-option WINS 192.168.8.8\"\r\npush \"dhcp-option DOMAIN mydomain.loc\"\r\nmax-clients 10\r\nifconfig-pool-persist \/etc\/openvpn\/ipp.txt\r\nlog openvpn.log\r\n;log-append openvpn.log<\/pre>\n<div>\n<ul type=\"disc\">\n<li><strong>port<\/strong>: \u00e8 la porta di ascolto del <em>server VPN<\/em>, ovviamente questa porta va aperta e reindirizzata dal <em>router<\/em>;<\/li>\n<li><strong>proto<\/strong>: il protocollo da utilizzare, <em>tcp<\/em> o <em>udp<\/em>, ovviamente questo va a interessare anche la regola di <em>forwarding<\/em> dal <em>router<\/em>, in giro consigliano di usare <em>udp<\/em> in quanto \u00e8 pi\u00f9 veloce la trasmissione e poi tanto il controllo dei dati avviene tramite <em>tun\/tap<\/em>;<\/li>\n<li><strong>dev<\/strong>: \u00e8 il metodo di incapsulamento dei dati, <em>tun<\/em> virtualizza il passaggio di pacchetti IP ( tunnel ) mentre <em>tap<\/em> virtualizza per intero come un interfaccia ethernet; di solito si mette <em>tun<\/em> in quanto i dati che transitano sono ridotti, se invece ci sono soluzioni pi\u00f9 complesse ad esempio in cui si richiede un <em>bridge<\/em> di rete ( come nel nostro caso ) occorre usare <em>tap<\/em>;<\/li>\n<li><strong>ca, cert, key, dh, tls-auth<\/strong>: questi devono puntare ai certificati del server creati prima;<\/li>\n<li><strong>server<\/strong>: necessaria in caso di <em>VPN routed<\/em>, se si usa un <em>bridge<\/em> di rete come nel nostro caso questa voce va commentata;<\/li>\n<li><strong>server-bridge<\/strong>: qui vanno indicati in ordine l&#8217;IP dell&#8217;interfaccia di <em>bridge<\/em>, la maschera di rete del <em>bridge<\/em>, l&#8217;inizio del <em>range<\/em> di IP da assegnare ai <em>client VPN<\/em>, la fine del range di IP da assegnare ai <em>client VPN<\/em>;<\/li>\n<li><strong>push &#8220;route &#8230;&#8221;<\/strong>: indica ai vari <em>client<\/em> l&#8217;eventuale modifica alla tabella di <em>routing<\/em>;<\/li>\n<li><strong>push &#8220;dhcp-option &#8230;&#8221;<\/strong>: indica ai vari client l&#8217;eventuale aggiunta di parametri <em>DNS\/WINS\/DOMAIN<\/em>;<\/li>\n<li><strong>max-clients<\/strong>: indica il numero massimo di <em>client VPN<\/em> che sono accettati, \u00e8 possibile anche non mettere questo parametri se non si vuole limitare;<\/li>\n<li><strong>ifconfig-pool-persist<\/strong>: serve a far memorizzare su file le varie assegnazioni degli IP in maniera che ogni <em>client<\/em> abbia sempre lo stesso indirizzo, si basa sull&#8217;<em>hostname<\/em>;<\/li>\n<li><strong>log<\/strong> \/ <strong>log-append<\/strong>: normalmente OpenVPN salva i log nel log di sistema, se vogliamo che per maggiore chiarezza venga salvato a parte basta attivare i parametri <em>log<\/em> o <em>log-append<\/em>; la differenza sta che <em>log<\/em> ad ogni sessione azzera il file e riparte pulito, <em>log-append<\/em> invece accoda sempre; se indicato solo il nome del file viene salvato nella dir di configurazione ( <em>\/etc\/openvpn\/<\/em> );<\/li>\n<\/ul>\n<\/div>\n<p>Ora salviamo e proviamo prima di tutto a far partire a mano il <em>server<\/em> per vederne i <em>log<\/em> a video nel caso qualcosa non vada come dovrebbe ( ricordandoci ovviamente di far partire il <em>bridge<\/em> prima se ancora non l&#8217;abbiamo fatto ):<\/p>\n<pre lang=\"bash\">sudo bridge-start\r\nsudo openvpn --config \/etc\/openvpn\/server.conf --verb 4<\/pre>\n<p>Il parametro <em>&#8211;verb<\/em> indica il livello di <em>log<\/em>, maggiore lo mettiamo pi\u00f9 dettagliato avremo il <em>log<\/em>, pu\u00f2 arrivare fino a 9.<\/p>\n<p>Di default <em>OpenVPN<\/em> si installa come avvio automatico ai runlevel 2-3-4-5, quindi dobbiamo ricordarci di toglierlo perch\u00e8 prima dobbiamo far partire il <em>bridge<\/em>.<\/p>\n<pre lang=\"bash\">sudo update-rc.d openvpn disable<\/pre>\n<p>E&#8217; necessario inoltre che sul nostro <em>server<\/em> che fa da <em>bridge<\/em> sia abilitato il <em>port-forwarding<\/em>, quindi editiamo i file <em>\/etc\/sysctl.conf<\/em> e impostiamo la riga:<\/p>\n<pre lang=\"bash\">net.ipv4.ip_forward=1<\/pre>\n<p>Forziamo il caricamento delle regole appena modificate:<\/p>\n<pre lang=\"bash\">sudo sysctl -p<\/pre>\n<p>Ricordiamo infine di abilitare il traffico attraverso le nostre interfacce con <em>iptables<\/em>:<\/p>\n<pre lang=\"bash\">iptables -A INPUT -i tap0 -j ACCEPT\r\niptables -A INPUT -i br0 -j ACCEPT\r\niptables -A FORWARD -i br0 -j ACCEPT\r\niptables -t nat -A POSTROUTING -j MASQUERATING<\/pre>\n<p>Ovviamente queste regole del firewall sono molto generiche e molto insicure, ogni soluzione dovr\u00e0 poi adottare le proprie restrizioni per garantire una maggiore sicurezza alla rete.<\/p>\n<h2>Configurazione client Ubuntu<\/h2>\n<p>Installiamo ovviamente il pacchetto <em>openvpn<\/em>:<\/p>\n<pre lang=\"bash\">sudo apt-get install openvpn<\/pre>\n<p>Copiamo le chiavi del client ( <em>ca.crt<\/em>, <em>hostname.crt<\/em>, <em>hostname.key<\/em>, <em>ta.key<\/em> ) nella cartella <em>\/etc\/openvpn<\/em>.<\/p>\n<p>Copiamo il file di configurazione di esempio per modificarlo:<\/p>\n<pre lang=\"bash\">sudo cp \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/client.conf \/etc\/openvpn<\/pre>\n<p>Editiamolo e impostiamo con i parametri del <em>server<\/em>:<\/p>\n<pre lang=\"bash\">dev tap\r\nproto udp\r\nremote [ip o host del server] 1194\r\nca ca.crt\r\ncert hostname.crt\r\nkey hostname.key\r\ntls-auth ta.key 1<\/pre>\n<p>In questo caso a differenza della configurazione del <em>client<\/em> per <em>Windows<\/em> che vedremo dopo \u00e8 che le direttive <em>push<\/em> del <em>server<\/em> ( esempio per avere la risoluzione <em>DNS<\/em> ) non avvengono in automatico ma serve impostarle a mano magari tramite uno script che come recita <a href=\"http:\/\/openvpn.net\/index.php\/open-source\/documentation\/howto.html#dhcp\" target=\"_blank\">la pagina ufficiale<\/a> analizzi la variabile d&#8217;ambiente <em>foreign_option_*<\/em>:<\/p>\n<blockquote><p><em>Windows clients can accept pushed DHCP options natively, while non-Windows clients can accept them by using a client-side up script which parses the foreign_option_n environmental variable list.<\/em><\/p><\/blockquote>\n<p>Attualmente nessuna delle soluzioni che ho trovato in giro hanno funzionato, l&#8217;unica per avere anche la risoluzione dei <em>DNS<\/em> \u00e8 quella di editare a mano il file <em>\/etc\/resolv.conf<\/em> e aggiungere come prima riga la voce <em>nameserver x.x.x.x<\/em> ( dove per <em>x.x.x.x<\/em> si intende l&#8217;ip del <em>server DNS<\/em> dietro <em>VPN<\/em> ).<\/p>\n<p>Anche in questo caso la prima volta magari invece che seguire il demone possiamo farlo partire a mano per vederne i <em>log<\/em> a video:<\/p>\n<pre lang=\"bash\">sudo openvpn --config \/etc\/openvpn\/client.conf --verb 4<\/pre>\n<p>Altrimenti basta un:<\/p>\n<pre lang=\"bash\">sudo \/etc\/init.d\/openvpn start<\/pre>\n<h2>Configurazione client Windows<\/h2>\n<p>Il pacchetto che andremo a usare sar\u00e0 quello ufficiale di <em>OpenVPN<\/em> scaricabile dal sito a questo indirizzo:<\/p>\n<p><a href=\"http:\/\/openvpn.net\/index.php\/open-source\/downloads.html\" target=\"_blank\">http:\/\/openvpn.net\/index.php\/open-source\/downloads.html<\/a><\/p>\n<p>Noto con piacere che il pacchetto <em>openvpn-gui<\/em> rispetto alle versioni vecchie di <em>OpenVPN<\/em> \u00e8 stato incluso nel pacchetto base e non serve installarlo a parte, il file di configurazione va comunque fatto a mano.<\/p>\n<p>Installiamo il pacchetto che di default si installa in <em>C:\\Programmi\\OpenVPN<\/em><\/p>\n<p>Andiamo in quel percorso e spostiamo nella cartella <em>sample-config<\/em> al cui inteno ci sono i file di configurazione standard, a noi interessa il file <em>client.ovpn<\/em><\/p>\n<p>Copiamo il file nella cartella <em>C:\\Programmi\\OpenVPN\\config<\/em>, volendo se abbiamo una sola configurazione possiamo usare direttamente questa, ma per pulizia io preferisco creare un ulteriore sotto cartella per ogni configurazione che abbiamo, quindi ad esempio creiamo la cartella <em>vpn-prova<\/em> e spostiamoci dentro il file <em>client.ovpn<\/em> ( magari rinominiamolo come la cartella sempre per pulizia, quindi <em>vpn-prova.ovpn<\/em> ) e anche i quattro file dei certificati <em>client<\/em> che abbiamo creato prima ( <em>ca.crt<\/em>, <em>hostname.crt<\/em>, <em>hostname.key<\/em>, <em>ta.key<\/em> ).<\/p>\n<p>Ora apriamo con il <em>notepad<\/em> o qualsiasi editor di testo il file <em>vpn-prova.ovpn<\/em> e andiamo a modificare le seguenti righe con i dati del server come nell&#8217;esempio<\/p>\n<pre lang=\"bash\">dev tap\r\nproto udp\r\nremote [ip o host del server] 1194\r\nca ca.crt\r\ncert hostname.crt\r\nkey hostname.key\r\ntls-auth ta.key 1<\/pre>\n<p>A questo punto possiamo salvare e chiudere.<\/p>\n<p>Nel menu <em>Programmi<\/em> di <em>Windows<\/em>, nel gruppo <em>OpenVPN<\/em> abbiamo il programma <em>OpenVPN GUI<\/em>, lanciamolo e avremo un icona con due terminali rossi vicino nella barra vicino all&#8217;orologio.<\/p>\n<p>Avendo una configurazione sola possiamo anche fare doppio click sull&#8217;icona e automaticamente partir\u00e0 la connessione, e se tutto va come deve saremo collegati in <em>VPN<\/em> con il <em>server<\/em> e lo vedremo dall&#8217;icona che da terminali rossi, diventano prima gialli durante il tentativo e poi verdi a connessione effettuata.<\/p>\n<p>Il <em>client Windows<\/em> a differenza di quello di <em>Ubuntu<\/em> di prima ho riscontrato che tutti i vari <em>push<\/em> impostati dal <em>server<\/em> funzionano perfettamente, quindi ad esempio possiamo richiamare un <em>host<\/em> remoto anche tramite il suo nome registrato nel server <em>DNS<\/em> dietro <em>VPN<\/em>.<\/p>\n<h2>Revoca di un certificato<\/h2>\n<p>In caso si volesse revocare un certificato ( magari perch\u00e8 \u00e8 stato rubato o perso ) occorre seguire alcuni semplici punti, occorre per\u00f2 avere copia del certificato da revocare, per quello prima si consigliava di non cancellarli mai dal <em>server<\/em>:<\/p>\n<pre lang=\"bash\">cd \/etc\/openvpn\/easy-rsa\/\r\nsudo source vars\r\nsudo .\/revoke-full client1<\/pre>\n<p>Dopo un po&#8217; di messaggi uscir\u00e0 un <em>error 23 at 0 depth lookup:certificate revoked<\/em> che sta a indicare che il certificato \u00e8 stato revocato e sar\u00e0 creato un file <em>crl.pem<\/em> con l&#8217;elenco dei certificati revocati.<\/p>\n<p>Questo file va copiato nella cartella con le altre chiavi del <em>server<\/em>:<\/p>\n<pre lang=\"bash\">sudo cp keys\/crl.pem \/etc\/openvpn\/<\/pre>\n<p>Controllate nella configurazione del <em>server<\/em> che esista la riga ( altrimenti aggiungetela ):<\/p>\n<pre lang=\"bash\">crl-verify \/etc\/openvpn\/crl.pem<\/pre>\n<p>Ora basta dire al <em>server<\/em> di aggiornarsi i parametri in maniera che al <em>client<\/em> revocato non venga dato pi\u00f9 accesso alla <em>VPN<\/em>:<\/p>\n<pre lang=\"bash\">sudo \/etc\/init.d\/openvpn reload<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Essendo passato diverso tempo aggiorno l&#8217;articolo scritto OpenVPN \u201cbridged\u201d su Ubuntu Lucid Lynx per la versione nuova di Ubuntu 14.04 Trusty Tahr. Nota: avendo notato in passato che in alcune circostanze se la macchina oltre a fare da server VPN si occupa anche da fare da gateway falliscono le operazioni di re-indirizzamento verso l&#8217;interno ( [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,3,23],"tags":[189,8,7,190,5,6],"_links":{"self":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/1536"}],"collection":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/comments?post=1536"}],"version-history":[{"count":10,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/1536\/revisions"}],"predecessor-version":[{"id":1583,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/1536\/revisions\/1583"}],"wp:attachment":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/media?parent=1536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/categories?post=1536"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/tags?post=1536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}