giovedì 17 gennaio 2008

OpenVPN su Router Asus WL-500G Premium

Installazione di OpenVPN su router Asus WL-500G Premium con firmware "OpenWRT".

Il secondo step di configurazione del progetto "Gateway Internet da cellulare" prevedeva l'utilizzo di un Router con firmware modificato (Linux) per eliminare la necessita' di dover dedicare un PC al server OpenVPN, di conseguenza tenerlo in funzione h24, con le problematiche del caso. Eccoci alla resa dei conti.

Hardware utilizzato: Router Asus WL-500-G Premium
Firmare: Linux distro Kamizaze 7.09 (http://www.openwrt.org/)

Il router in questione e' un router "puro" (privo della componente modem ADSL), quindi si appoggia (in cascata) ad un altro Modem/ADSL (nel mio caso un Netgear DG834G) connesso a internet via ADSL. L'apparecchio ha molte caratteristiche interessanti (anche senza modifcare il firmware), come la possibilita' di funzionare da archiviatore di rete (server FTP e media esterni), dispone di due porte USB (da utilizzare per chiavette USB o HD), e di un processore relativamente veloce (almeno rispetto alla concorrenza consumer) di 266Mhz. Non l'ho scelto comunque per queste funzioni, quanto piuttosto con la facilita' con la quale si puo' "flashare" (via software tramite l'uility proprietaria, quindi senza modifiche hardware) e per la piena compatibilita' con OpenWRT.

Come la precedente guida, non scendero' nei dettagli, ma illustrero' i passaggi chiave e i files di configurazione/setup utilizzati. Gli IP utilizzati saranno gli stessi della precedente configurazione (192.168.0.1 per il Router ADSL, 192.168.0.4 per il Router VPN, 192.168.0.31-33 per i client VPN).

Installazione di OpenWRT sul router

- L'installazione e' relativamente semplice, basta downloadare il firmware (Kamikaze 7.09 nel mio caso) e utilizzare l'apposita utility della Asus per il flah dell'apparecchio.
- Dopo aver fatto le dovute configurazioni: impostazione dell'IP, gateway, DNS, si passa all'installazione di OpenVPN sul dispositivo.

Installazione di OpenVPN

- OpenWRT utilizza i "ipkg" per installare nuovi "moduli", che verranno scaricati, installati e configurati (nella versione di default) automaticamente. Dalla shell del nostro router (root):


ipkg update
ipkg install openvpn


il primo comando serve per aggiornare la lista dei servizi, il secondo per installare openvpn nel sistema. Quindi creiamo la directory dove andremo ad inserire i files di configurazione di openvpn:

mkdir /etc/openvpn

- Copiamo all'interno della directory le chiavi e i certificati necessari (vedere l'altro post) e prepariamo il file di configurazione "/etc/openvpn/server.ovpn", che sara' del tutto simile a quello utilizzato sul server windows, ma con qualche piccola modifica:


proto tcp
port 443
dev tap0

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc7openvpn/dh1024.pem

server-bridge 192.168.0.4 255.255.255.0 192.168.0.31 192.168.0.33

push "dhcp-option DNS 192.168.0.1"

keepalive 10 180
push "keepalive 10 180"
comp-lzo

max-clients 3

persist-key
persist-tun


- Prepariamo adesso lo shell script per creare il bridge fra l'interfaccia ethernet del router e l'interfaccia virtuale di OpenVPN (e' l'operazione che sul server Windows abbiamo fatto unendo le due schede di rete e scegliendo l'opzione: "Connessioni con bridging". Creiamo il file "/etc/openvpn/startupscript":


#!/bin/sh
#/etc/openvpn/startupscript
# OpenVPN Bridge Config File
# Creates TAP devices for use by OpenVPN and bridges them into OpenWRT Bridge
# Taken from http://openvpn.net/bridge.html
# Define Bridge Interface
# Preexisting on OpenWRT

br="br-lan"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".

tap="tap0"

case "$1" in
up)
# Make sure module is loaded
insmod tun
# Build tap devices
for t in $tap; do
openvpn --mktun --dev $t
done
# Add TAP interfaces to OpenWRT bridge
for t in $tap; do
brctl addif $br $t
done
#Configure bridged interfaces
for t in $tap; do
ifconfig $t 0.0.0.0 promisc up
done
;;
down)
for t in $tap; do
ifconfig $t 0.0.0.0 down
done
for t in $tap; do
brctl delif $br $t
done
for t in $tap; do
openvpn --rmtun --dev $t
done
rmmod tun
;;
*)
echo "$0 {updown}"
;;
esac

e rendiamolo eseguibile:

chmod +x /etc/openvpn/startupscript

Non e' necessario fare alcuna modifica all'iptable o al firewall del router poiche' il router e' collegato alla LAN come un client, quindi le regole del firewall (per la WAN) non vengono prese in considerazione.

Prima di verificare che il server funzioni, e' necessario impostare l'orario e la data del router, questo e' essenziale poiche' le chiavi crittografiche hanno una data di validita', e' necessario quindi che l'orario del router sia impostato adeguatamente, e un router non ha un orologio interno, dobbiamo quindi sincronizzarlo ad ogni collegamento. Ci viene in aiuto ntp:

Impostiamo il server ntp e la timezone nella flashram del router:

nvram set ntp_server="pool.ntp.org"
nvram set time_zone="CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00 "
nvram commit


Installiamo quindi ntpclient e aggiorniamo l'orario (ai successivi riavvii o caduta/ripresa della connettivita') l'orario verra' impostato automaticamente:

ipkg install ntpclient
/usr/sbin/ntpclient -c 1 -d -s -h pool.ntp.org


Verifichiamo ora che la configurazione funzioni, avviando il bridge:

/etc/openvpn/startupscript

e poi avviando il server OpenVPN:

openvpn /etc/openvpn/server.ovpn

Proviamo a collegarci con il client e dovremmo poter navigare sia sulla rete locale che su internet, come per la precedente installazione.

Non resta ora che far eseguire il server OpenVPN al boot del router (nel caso lo spegneste, oppure andasse via la corrente):


/etc/init.d/openvpn enable

lo script installera' in "/etc/rc.d/S70openvpn" il virtual link che verra' eseguito all'avvio.

Bene, ora abbiamo il nostro gateway internet, completamente autonomo... potete spegnere il vostro PC e uscire con il vostro PPC. ;)


2 commenti:

Unknown ha detto...

ma come faccio a sapere a che ip collegarmi nel caso in cui l'adsl di casa abbia un ip pubblico dinamico? non posso installare sul router software tipo dyndns..

alex smith ha detto...

I actually heard about logs kept by isp and I didnt want to be under the eye of "Big Brother" so I searched on google and found you. Happy that i did. Using vpn has put my mind at ease. Your server has gone down once or twice but that was just a temporary hardware glitch as you put it.