una volta terminata la fase di setup del server, dedichiamoci a quelle attivita' che servono per i client
iniziamo a creare le chiavi dei client, durante il processo di creazione delle chiavi ci verra' richiesto se vogliamo proteggerle con una password, la scelta e' vostra ,
quella meno sicura , ma piu' comoda (non avere la password)
quella piu' sicura , ma piu' seccante , avere la password, password che vi verra' chiesta dal client ogni volta che viene lanciata la vpn , e che personalmente ritengo sia utile solo nel caso di vpn client to lan dove vi e' la presenza di una persona nell' instante della connessione, e non in caso di client lan to lan
cd /etc/openvpn/easy-rsa source ./vars ./build-key client1
rispondiamo alle domande, dando un colpo di invio a quelle che vogliamo lasciare con la risposta di default, prestando particolare attenzione alla domanda sul
COMMON NAME
questo nome e' quello che identifichera' il client e sara' quello che dovremo usare per imporre delle configurazioni ad hoc per il singolo client nella directory ccd
alla fine del processo nella sotto directory keys ci troveremo i 3 file
-rw-r--r-- 1 root root 3921 mag 19 00:22 client1.crt -rw-r--r-- 1 root root 725 mag 19 00:22 client1.csr -rw------- 1 root root 916 mag 19 00:22 client1.key
in aggiunta a quelli del server
di questi solo i file client1.crt e client1 .key vanno messi sul client insieme al file nomeserver.crt dh2048.pem e ta.key
se invece abbiamo gia' creato delle chiavi in passato e non vogliamo cancellare le chiavi precedenti quello che dobbiamo evitare e' di dare il comando ./clean-all che cancella tutte le chiavi preesistenti
cd /etc/openvpn/easy-rsa source ./vars
./build-key client2
per completare ora la configurazione del server relativa al client nel caso che questo sia un router e quindi abbia un' altra rete dietro dovremo aggiungere il file nella direcotry ccd col nome del client (common name) e aggiungere due righe alla configurazione del server , questo per ogni client/chiave che generiamo , ma prima di andare avanti meglio due righe di spiegazione
credit http://backreference.org/2009/11/15/openvpn-and-iroute/
ipotizziamo una rete come quella di sopra, con un server ed N client
essendo che sul router A abbiamo la rete interna 192.168.21.x/24 e ci interessa che sia raggiungibile da tutta la nostra rete dobbiamo far si che ongi client che si colleghi ad openvpn sappia dell' esistenza e che quindi i pacchetti destinati a questa rete devono esser inoltrati verso il server, quindi nel file
server_tun.conf andremo ad inserire la riga
push "route 192.168.21.0 255.255.255.0" consente al router B e a tutti gli N router di sapere che la rete 192.168.21.0 e' raggiungibile tramite il server
In pratica sul router B dando il comando
route -n
otterremo in risposta
192.168.21.0 10.20.30.1 255.255.255.0 UG 0 0 0 tun0
che ci conferma che ora il router sa' dove indirizzare un pacchetto relativo alla rete 192.168.1.0/24
questo nostro pacchetto ip, e' quindi arrivato al server, ma il server a chi lo deve inviare?
lo diciamo inserendo sempre nel file server_tun.con un ' altra riga
route 192.168.21.0 255.255.255.0 10.20.30.4 dice la rete su quale interfaccia va!
quindi ora il server sa' che la rete 192.168.21.0/24 e' raggiungibile tramite l' interfaccia tun remota con ip 10.20.30.4
quello che ancora non sa' e' quest' interfaccia , su quale ip pubblico remoto deve inviarlo , siccome (a meno che il vostro client non abbia un 'ip statico) questo ip varia , lo diremo dinamicamente ogni volta che il client si collega
il posto per fare le configurazioni "dinamiche e/o relative ad un singolo client" e' il file dentro la directory ccd
questo file, lo ripeto deve avere lo stesso nome che abbiamo messo come common name nella generazione del certificato , quindi se alla domanda common name ho risposto tplink il file si dovra chiamare tplink
dentro al file aggiungero
iroute 192.168.21.0 255.255.255.0 # route interna a openvpn serve a far associare a openvpn I pacchetti relativi a 192.168.21.x/24 su quale ip pubblico devono andare
dopo la connessione del client, se andiamo a vedere nei log del server troveremo
Tue Jun 14 23:57:56 2016 tplink/5.170.222.72:44555 MULTI: internal route 192.168.21.0/24 -> tplink/5.170.222.72:44555
passiamo ora al file di configurazione da mettere nel client
dev tun port 1295 proto udp remote server.dovevuoitu.tld 1294 keepalive 10 120 verb 3 comp-lzo client tls-client ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/client1.crt key /etc/openvpn/easy-rsa/keys/client1.key dh /etc/openvpn/easy-rsa/keys/dh2048.pem tls-auth /etc/openvpn/easy-rsa/keys/ta.key 1 ns-cert-type server # Select a cryptographic cipher. # If the cipher option is used on the server # then you must also specify it here. ;cipher x log /var/log/openvpn/openvpn.log
aggiustiamolo secondo le nostre esigenze e mettiamolo nel posto piu' appropiato (a seconda della distro/firmware usato) , ricordiamoci di caricare sul clientanche i vari certificati e correggere il path
su ubuntu e debian se e' presente un file *.conf nel path /etc/openvpn la vpn parte in automatico all' avvio del pc, se non vogliamo questo comportamento , possiamo agire sul file
/etc/default/openvpn
andando a levare il cancelletto # davanti alla riga autostart
AUTOSTART="none"
di default e'
#AUTOSTART="all" #AUTOSTART="none" #AUTOSTART="home office"
che equivale a "all" ossia qualsiasi configurazione presente viene avviata
se invece vogliamo che parta con una determinata configurazione perche' ne abbiamo piu' di una , andiamo a levare il cancelletto sull' ultima riga, sostituendo "home office" col nome della configurazione che vogliamo si avvi
se serve creare la configurazione e le chiavi per un device android, dopo aver generato i certificati dovremo creare un file unico con estenzione ovpn che racchiude al suo interno sia la configurazione che i certificati , per far cio' ci possiamo aiutare con uno script che ho trovato in rete
credit https://renatocunha.com/blog/2014/12/openvpn-android/
https://gist.github.com/trovao/18e428b5a758df24455b
lo script e' incompleto in quanto non tiene conto della chiave DH , quindi l' ho modificato e lo potete prelevare da qui ovpn-writer.sh
basta scaricarlo, renderlo eseguibile e lanciarlo con
./ovpn-writer.sh SERVER CA_CERT CLIENT_CERT CLIENT_KEY SHARED_SECRET DH_KEY> client.ovpn
attenzione che lo script imposta la porta di default, se ne usiamo un' altra va' modificata a manina
arrivati fin qua, ci troveremo quindi con :
uno o piu' router configurati con una rete localeche gli consente di navigare verso internet col loro ip pubblico, e che possono raggiungere/essere raggiunti dal resto della nostra intranet
uno o piu' dispositivi singoli (pc, raspberry etc etc) connessi alla intranet , che possono navigare verso internet con l' ip pubblico della rete che li ospita , e che possono raggiungere/essere raggiunti dal resto della nostra intranet (raggiunti tramite l' ip dell'a loro interfaccia tun
uno o piu' telefonini android connessi alla intranet , che possono navigare verso internet con l' ip pubblico della rete che li ospita , e che possono raggiungere/essere raggiunti dal resto della nostra intranet (raggiunti tramite l' ip dell'a loro interfaccia tun
se vogliamo che i vari dispositivi invece di consentire la navigazione attraverso il loro ip pubblico escano verso internet dall' ip pubblico del server dovremo ricordarci di abilitare il routing sul server e su di ogni file ccd inserire la riga
push "redirect-gateway def1"