A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

In questi giorni ho giocato ancora un po’ con OpenVPN; in particolare cercavo un modo veloce, efficiente e sicuro per connettermi alla rete di casa quando sono fuori.

Ingredienti:
Un server Debian di modestissime prestazioni che funge da gateway VPN (con poche modifiche a questa procedura va bene qualunque server).
Un client con qualunque sistema operativo(*).

Preparazione del server:

  • Verificare l’esistenza di /dev/net/tun, se non esistesse va creato con mkdir /dev/net && mknod /dev/net/tun c 10 200, caricato con modprobe tun, va impostato il suo caricamento all’avvio: echo "tun" >>/etc/modules, e va abilitato il forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward
  • Installare OpenVPN sul server: apt-get update && apt-get install openvpn
  • Generare una chiave simmetrica con il comando: openvpn --genkey --secret nome_chiave.key
  • Creare il file di configurazione /etc/openvpn/server.conf con un contenuto simile a questo:

dev tap
proto tcp-server
lport 5000
ifconfig 10.0.0.1 255.255.255.0
secret /etc/openvpn/nome_chiave.key
verb 3

Ecco la spiega:
dev tap: non toccare
proto tcp-server: usiamo il TCP; OpenVPN va di default su UDP, che a volte è problematico nelle connessioni casalinghe, e non rutti i router sono in grado di gestirne il NATP
lport 5000: in particolare usiamo la 5000/TCP (potete usare la porta che preferite)
ifconfig 10.0.0.1 255.255.255.0: IP e subnet dell’adattatore virtuale: deve essere di una sottorete diversa dalla rete di casa e del client (inventatelo; non va impostato da nessuna altra parte).
secret /etc/openvpn/nome_chiave.key: la chiave simmetrica
verb 3: il livello di logging; 3 va bene quando funge tutto, potete alzare fino a 9 per avere più informazioni nel caso incontraste problemi.

A questo punto manca una cosa: se il vostro server è anche il default gateway della rete locale di casa, dovete creare le regole del firewall in modo da accettare le connessioni in ingresso:
iptables -A INPUT -p tcp –dport 5000 -s 10.0.0.0/24 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT

Se invece vi affidate ad un firewall diverso, dovrete creare le regole su quest’ultimo ed inoltre dovrete creare una route statica che permetta al traffico in uscita dalla rete locale e destinato al tunnel VPN di essere instradato correttamente. Una cosa così:
route add 10.0.0.2 255.255.255.0 192.168.1.2 dove 10.0.0.2 è l’IP che assegneremo all’interfaccia virtuale del client (vedi dopo), e 192.168.1.2 è l’IP (reale e privato) del server VPN.

Preparazione del client:

  • Installare OpenVPN
  • Copiare sul client (con un mezzo sicuro!) la chiave generata sul server, e metterla nella cartella di configurazione di OpenVPN.
  • Creare il file di configurazione, la cui posizione dipende dal sistema operativo:

remote server.dnsalias.net
dev tap
proto tcp-client
rport 5000
ifconfig 10.0.0.2 255.255.255.0
route 192.168.1.0 255.255.255.0 10.0.0.1
secret nome_chiave.key
verb 3

Ecco la spiega:
remote server.dnsalias.net: l’indirizzo del server; potete usare l’IP oppure il nome FQDN. Se non avete un IP statico potete utilizzare dynDNS, come in questo caso.
dev tap: non toccare
proto tcp-client: usiamo il TCP perché bla bla bla (vedi sopra)
rport 5000: la porta su cui ascolta il server
ifconfig 10.0.0.2 255.255.255.0: l’IP dell’adattatore virtuale; inventatelo, della stessa sottorete di quello del server, non va impostato da nessuna altra parte.
route 192.168.1.0 255.255.255.0 10.0.0.1: la rotta statica che permette di raggiungere tutti gli host della rete remota
secret nome_chiave.key: la chiave simmetrica
verb 3: logging a livello 3 (vedi sopra).

Adesso sul server lanciamo: openvpn --config /etc/openvpn/server.conf e sul client il corrispondente: openvpn --config client.conf (o come avete chiamato il file).
Se tutto va a buon fine, dopo qualche istante vedrete apparire sul server:
Peer Connection Initiated with xxx.yyy.zzz.kkk:nnn
Initialization Sequence Completed

e sul client:
TCP connection established with zzz.ttt.vvv.rrr:5000
TCPv4_CLIENT link local: [undef]
TCPv4_CLIENT link remote: zzz.ttt.vvv.rrr:5000
Peer Connection Initiated with zzz.ttt.vvv.rrr:5000
TEST ROUTES: 1/1 succeeded len=1 ret=1 a=0 u/d=up
route ADD 192.168.1.0 MASK 255.255.255.0 10.0.0.1
Route addition via IPAPI succeeded
Initialization Sequence Completed

La connessione VPN tra il client e la rete remota è stabilita, avete accesso alla rete di casa come se foste fisicamente collegati ad essa.

(*)Il client per Mac OS/X è qui.
Ho trovato una buona guida per tutto il processo su Debianizzati.org. Tra l’altro viene anche spiegato come demonizzare e lanciare al boot il server OpenVPN; inoltre vengono descritti altri metodi di autenticazione oltre alla shared-key che usiamo qui.

I più smaliziati potranno utilizzare OpenVPN anche dietro ad un proxy: Fede, che ne sa, ci spiega.

Tags: ,

Related posts