venerdì 14 febbraio 2014

OpenVPN Server su Router DD-WRT

/!\ Warning tl;dr /!\

Far funzionare OpenVPN su un router con firmware DD-WRT richiede una serie di passaggi che vanno oltre la normale sfera della logica. Ci si addentra in una dimensione tutta nuova, si varca la soglia per l’universo del BdC altrimenti detto Buco di Culo. Se infatti nel ristretto spazio della logica una funzione eseguita due volte porta sempre al medesimo risultato (logico), nell’infinito universo del BdC quella stessa funzione puo’ , in preda al caso, portare a risultati disparati e incomprensibili. Quindi va da se che con queste premesse l’installazione spazia da pochi e semplici click del mouse a un valore pari alla resistenza del vostro cranio mentre lo picchiate contro il muro. Per cui prima di cominciare chiedetevi se davvero vi serve una VPN o se non sia il caso di farvi una vita sociale.

Premesse: le versioni e i modelli
Tutto questo e’ stato fatto su un router Linksys E4200v1 con firmware DD-WRT v. 23040_mega di Fractal (scaricabile qua). La versione che avevo prima (22118) non ne voleva sapere di funzionare ma anche qua… vai a capire se era colpa del caso o delle variabili impazzite dell’universo BdC. Ad ogni modo, su quel router oggi (Febbraio 2014) la versione consigliata e stabile e’ la 23040_mega quindi pochi cazzi.
Le solite balle su come fare per aggiornare il firmware le pescate nella solita wiki di DD-WRT, tanto se state leggendo questo post siete gia’ in grado di farlo. Ricordate di partire con una versione mini, in questo caso il file si chiama “dd-wrt.v24-23040_NEWD-2_K2.6_mini-e4200.bin” per poi passare alla _mega. Sono tutte nell’ftp di Fractal.

Installazione software e creazione certificati:
Il sofware da installare sul client lo si prende dal sito ufficiale OpenVPN ed e’ chiaramente free. Durante l’installazione flaggate tutte le voci come se non ci fosse un domani. All’interno della cartella .\OpenVPN\easy-rsa c’e’ tutto il necessario per crearsi i certificati per trustare le connessioni lato client e server. NON USATE altri programmi rsa al di fuori di quello che gia’ mette OpenVPN quando lo installate. Per la procedura potete seguire la wiki oppure tagliare corto e leggere quello che serve modificare qui di seguito:
1- modificare il file vars.bat: le voci da cambiare sono il set HOME (se avete cambiato il percorso d’installazione), il set KEY_SIZE=2048 e le 8 set KEY_ che sono alla fine. PKCS11_MODULE e PIN sono inutili e non van toccate. Salvare e uscire

vars

2- Apire un prompt di dos e scrivere vars [invio]
3- scrivere clean-all [invio]
4- scrivere build-ca [invio] (il programma crea ca.crt e ca.key dentro la cartella keys)
il programma si ciuccia i campi che avete precedentemente modificato dentro vars.bat quindi si puo’ confermare tutto di default
5- riscrivere vars [invio]
6- scrivere build-key-server server [invio]
anche qui va bene tutto il default tranne il Common Name che deve diventare server
confermate con [yes] e [yes] alle due richieste
7- riscrivere vars [invio]
8- scrivere build-key client1 [invio]
tutto default tranne il Common Name che dev’essere qualcosa tipo client1 (ogni client della vpn deve averne uno univoco. se ve ne serve uno solo, create client1 e gg)
anche qui va confermato [yes] entrambe le volte che sara’ richiesto
9- riscrivere vars [invio]
10- scrivere build-dh [invio]
e’ il comando che richiede piu’ tempo. Spammera una serie di puntini e + per diverse righe, don’t worry. Se al termine se ne esce con un “unable to write 'random state'” vuol dire che a) non avete messo il path corretto dentro il file vars in set HOME e/o b) tra il punto 9 e il 10 scrivete un set RANDFILE=.rnd
Al termine dello sbattone, dentro la cartella keys ci saranno i nostri bei file ca.crt, ca.key, server.crt, server.key, client1.crt, client1.key e dh2048.pem piu’ altri di cui non ci frega.

Configurazione Router:
Qui cominciano i dolori. Se siete particolarmente fortunati potrete essere tra i prescelti a cui le cose funzionano al primo try senza aggiunta di comandi secondari (come il caso di questo tizio sul forum). Ad ogni modo, first things first. Si parte configurando il servizio VPN server sul router che e’ sotto il tab “Services” –> “VPN”

1

potete anche mettere i valori esattamente come li ho messi io (more or less) e non capire un cazzo oppure perdere giorni per cercare la config che meglio soddisfa i vostri desideri e poi mettere i valori come li ho messi io senza capire un cazzo.
[Momento spiegone] : nell’esempio ho usato il Routing (tun) e non il Bridging (tap). Se volete capire le differenze potete leggere qui o qua. Con questi settings si presume che:
L’indirizzo IP del router e’ 192.168.2.x
La VPN avra’ ip 192.168.79.x (questo valore puo’ essere modificato con la classe ip che piu’ vi piace ma occhio alle modifiche che devono ancora venire)
La porta di default e’ la 1194, mettete quella che vi pare. Qui ho usato 11940.
Protocollo UDP o TCP a scelta. UDP e’ piu’ “veloce” ma TCP e’ meno rompicoglioni se siete dietro firewall aziendali
Dato che questa e’ la configurazione per il routing, mettete paro paro i valori da Encryption Cipher fino alla fine dell’immagine

2
e’ il momento di usare i certificati.
Partendo da Public Server Cert, aprite il file server.crt con notepad++ e copiate da -----BEGIN CERTIFICATE----- a -----END CERTIFICATE----- compresi e incollatelo dentro. Guardate la foto e regolatevi di conseguenza anche con gli altri file.
Sotto Additional Config vanno inseriti questi comandi:

verb 5 (ci piace lo spam)
push "route 192.168.2.0 255.255.255.0"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 20
management localhost 5001

in corsivo i campi che possono variare a seconda dell’ip e della subnet impostati nel vostro router.
Date un bel Save, un bel Apply Settings e un bel riavvio (da Administration). Quando sara’ di nuovo up andate dentro “Services” –> “Services” ad attivare la Secure Shell

3

poi scaricate putty (e’ un exe che non richiede installazione, mettetelo dove vi pare ma io consiglio in “windows\system32”) e lanciatelo da prompt. Nella prima maschera che appare mettete l’ip del vostro router e via di Open

4

Alla richiesta di salvare il certificato dite di si e loggate nel router usando root come utente e la password che usate per collegarvi nella GUI web. Da qui lanciate il comando ifconfig e sperate che nell’elenco appaia la scheda di rete virtuale “tun”

5
Se non appare ricordate che state operando nell’universo del BdC e che il fattori probabilita’ sono completamente fuori scala, come il famoso plumcake psicocinetico di New York. Magari un secondo, terzo e quarto riavvio del router posson essere una buona soluzione. Ad ogni modo la scheda “tun” deve apparire altrimenti e’ inutile andare avanti. [subinfo: se fosse stato bridging la scheda sarebbe stata “tap”].
Segnatevi il nome (“tun2” in questo caso) perche’ e’ giunto il momento di andare dentro “Administration” –> “Commands” dove nel riquadro bianco andranno riportati questi dati:

iptables -I INPUT 1 -p udp --dport 11940 -j ACCEPT
iptables -I FORWARD 1 --source 192.168.79.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.79.0/24 -o br0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.79.0/24 -j MASQUERADE
iptables -I FORWARD -i br0 -o tun2 -j ACCEPT
iptables -I FORWARD -i tun2 -o br0 -j ACCEPT
iptables -t nat -I POSTROUTING -o tun2 -j MASQUERADE

in corsivo i valori da cambiare se non avete fatto come me e in grassetto il nome della scheda virtuale se e’ diverso da tun2 ovviamente. Fatto questo premete “Save Firewall” e fate un bel riavvio del router.

Si suppone che il server vpn sia up e in ascolto sulla porta 11940, e’ il momento di sistemare il client

Configurazione Client:
Nel PC dove avete installato prima OpenVPN andate dentro .\OpenVPN\sample-config\ e copiate “client.ovpn” dentro .\OpenVPN\config e poi editatelo in questo modo:

client
dev tun2
proto udp
remote IP_PUBBLICO 11940
resolv-retry infinite
nobind
persist-key
persist-tun
float
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
cipher AES-256-CBC
comp-lzo
verb 3

In grassetto va messo naturalmente l’ip con cui uscite su internet. Se non e’ fisso registratevi a dyndns e puntate a quello. In corsivo invece la porta da cambiare se non avete usato la mia e il nome dei file coi certificati se sono diversi da client1.*
Salvate il file e andate a prendere le key (ca.crt, client1.crt e client1.key) dalla cartella .\OpenVPN\easy-rsa\keys per copiarle dentro .\OpenVPN\config.
That’s all, ora si possono incrociare le dita, iniziare a recitare il mantra del cuore e provare a vedere se ci si collega. Dentro .\OpenVPN\bin c’e’ l’exe con la GUI di OpenVPN. Va lanciato come administrator per evitare problemi in Win7 e 8. Apparira’ l’icona nella system tray, se cliccate col destro c’e’ la voce “Connetti”.
Se la buona sorte e’ con voi, dopo una serie di log vi collegherete al vostro router che sta facendo da server OpenVPN. Vi verra’ assegnato l’ip 192.168.79.x e, grazie alle regole preimpostate nel firewall del router, potete pingare e vedere tutti gli altri pc della rete anche se sono su un’altro range di IP.
Se invece non si collega significa che la stella della morte brilla su di voi e il destino e’ segnato. Provate a spulciare nel log del client per vedere con che errore si ferma (di solito tls handshake error). Vedete se e’ il firewall e/o l’antivirus sul pc a bloccare la connessione. Controllate sul router (da putty) che il servizio openvpn sia partito col comando ps | grep vpn. Una volta lanciato dovrebbe mostrare una riga tipo /tmp/openvpnserver --config /tmp/openvpn/openvpn.conf altrimenti non c’e’ il servizio attivo e vai a capire te il motivo.. colpa del firmware caricato male? colpa dell’ascendente astrale?
Un po’ di troubleshooting potrebbe aiutarvi, riguardate i settaggi che siano tutti corretti. Se cercate info in internet… buona fortuna. Ognuno e ripeto OGNUNO ha un errore e una configurazione diversa. Settaggi uguali ai miei a tizio non vanno mentre i settaggi perfettamente funzionanti che ha caio col mio stesso modello di router a me non funzionano.
C’e’ un famoso detto che dice: una farfalla sbatte le ali a Tokyo e a casa vostra una VPN non funziona.

link utili:
best DD-WRT firmware per E4200
differenze tra builds BrainSlayer, Eko, Kong e Fractal
OpenVPN DD-WRT Tutorial
Tutorial with bridging

Leggi tutto...