Oggi sono finalmente riuscito a configurare quello che è nel titolo del post e che volevo fare da un po' di tempo...
Ho un piccolo box con l'ottimo zeroshell (zeroshell.org, da qui in avanti "ZS") che mi funge da firewall.
Avevo in precedenza utilizzato la sua ottima web interface per mettere a disposizione una VPN (Virtual Private Network) a dei client windows e Android (ma solo con root e busybox+openvpn).
Il motivo per cui non si potevano creare tunnel con Android non root è che in tal caso il tipo di interfaccia di rete virtuale deve essere "TUN", mentre ZS utilizza "TAP" e non c'è modo di cambiarlo.
Se pensate siano solo delle simpatiche onomatopee, rinunciate a leggere il resto. :-)
Allora, quello che vi dirò qui è un bel po' machinoso e complicato, ma la sola lettura del post e la comprensione di alcuni parametri serviranno a meglio comprendere parecchie cose su OpenVPN ed il suo modo di funzionare, nonchè su come rendere permamenti i cambiamenti (questi o altre personalizzazioni che potreste decidere di fare).
Nota per i non-informatici: se avete già mal di testa non continuate la lettura. Non mi assumo nessuna responsabilità di alcun genere per mal di testa formato famiglia ne' mi potrete addebitare spese per farmaci o cure neurologiche o di altro tipo....
OK, a parte gli scherzi, cominciamo. Allacciate le cinture.
Allora, siccome openvpn permette la creazione di più VPN contemporaneamente, mi è saltato il pallino che CI DEVE ESSERE UN MODO per permettermi di tenere su entrambe le device (TUN e TAP) senza quindi andarmi a rimodificare tutte le config. dei clients...
Questo articolo potrebbe anche titolare:
Come creare una VPN per Android con OpenVPN
Come permettere più tunnel contemporaneamente con OpenVPN / Zeroshell
ma, per motivi legati al tempo, diciamo che "unifico tutto" (unifico tutto?)
Dopo varie prove ho creato questi file di configurazione, per il server e per il client, rispettivamente:
############## SERVER FILE ####################
#imposto la device virtuale per essere TUN
dev tun
#ascolto per connessioni che vengono dall'interfaccia ESTERNA DEL FIREWALL
local 172.17.104.2
#modalità server, ovvio
mode server
#Transport-Layer-Security server. Cioè crittografa tutte le trasmissioni.
tls-server
#qui definisco la RETE sulla quale dovranno essere assegnati gli IP dei clients
server 192.168.250.0 255.255.255.0
# protocollo tcp-server
proto tcp-server
#porta 1195 (quella di default 1194 è già usata dall'altro tunnel)
port 1195
#una volta startato "demonizzati", ovvero diventa un demone in esecuzione e rilascia il comando da shell.
daemon VPNH2Ltun
#Qui imposto i vari certificati: CA, certificato per la TLS, ...
ca /DB/_DB.002/var/register/system/openvpn/Auth/X509/CAFile
cert /DB/_DB.002/var/register/system/openvpn/TLS/cert.pem
key /DB/_DB.002/var/register/system/openvpn/TLS/key.pem
dh /etc/ssl/dh.pem
#_DB.002 è il nome del vostro profilo attivo
# verbosity 5, perchè voglio vedere TUTTO nei log .
verb 5
push "redirect-gateway def1"
push "dhcp-option DNS 192.168.250.254"
# 192.168.250.254 è l'IP di ZS sulla interfaccia virtuale VPN principale.
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
comp-lzo
status /var/log/tmpOVPN/openvpn-status.log
log /var/log/tmpOVPN/openvpn.log
log-append /var/log/tmpOVPN/openvpn.log
client-cert-not-required
auth-user-pass-verify /root/kerbynet.cgi/scripts/ov_pw_auth via-env
username-as-common-name
comp-lzo
#ifconfig-pool 192.168.250.1 192.168.250.253 255.255.255.0
push dhcp-option DNS 10.36.40.242
push route remote_host 255.255.255.255 net_gateway 1
push route X.X.X.X 255.255.255.0
push route 172.17.100.0 255.255.255.0
push route 172.17.101.0 255.255.255.0
push route 172.17.102.0 255.255.255.0
push route 172.17.103.0 255.255.255.0
push route 172.17.105.0 255.255.255.0
push route 192.168.111.0 255.255.255.0
# queste sono le VOSTRE subnet che volete siano raggiunte tramite la VPN.
client-connect /root/kerbynet.cgi/scripts/ov_connect
client-disconnect /root/kerbynet.cgi/scripts/ov_disconnect
mute 3
duplicate-cn
script-security 3
###############################################
########## CLIENT FILE #########################
remote Z.Z.Z.Z 1194
proto tcp
#Z.Z.Z.Z è l'IP PUBBLICO DEL VOSTRO ZS
auth-user-pass
remote Z.Z.Z.Z 1194
proto tcp
#Z.Z.Z.Z è l'IP PUBBLICO DEL VOSTRO ZS
auth-user-pass
# Chiaramente devi poi andare (in openvpn per android) a selezionare il file .pem che ti sei esportato da zeroshell..
ca CA.pem
# due righe commentate
;cert client.pem
;key client.pem
comp-lzo
verb 3
mute 20
resolv-retry infinite
nobind
client
dev tap
persist-key
persist-tun
###############################################
# due righe commentate
;cert client.pem
;key client.pem
comp-lzo
verb 3
mute 20
resolv-retry infinite
nobind
client
dev tap
persist-key
persist-tun
###############################################
Leggendo i commenti potrete apprendere cosa significano i vari parametri.
a questo punto non ci resta che andare in Zeroshell e lanciare il tunnel con openVPN dalla SHELL (dovete abilitare SSH e loggarvi), per vedere se funziona.... ma questo lo vedremo nel prossimo articolo... :-)