OpenVPN Verbindung zum Freifunk Hannover Netzwerk

Aus Freifunk Hannover

Diese Anleitung beschreibt Schritt für Schritt die Konfiguration einer Freifunk-Node für die Verbindung zum OpenVPN Server von Freifunk Hannover.
Hier sieht man die Topologie grafisch aufbereitet.

Ziel dieser Tunnelgrabungen ist es, die vorhandenen "Inseln" über eine Art Backbone miteinander zu vernetzen, bis die einzelnen WLAN-Wolken auf "natürliche Weise" miteinander verwachsen sind.

Inhaltsverzeichnis

Software automatisch installieren

Zunächst müssen die benötigten Software Pakete installiert werden. Dazu logge Dich auf Deinem Router ein und gib ein:

ipkg update
ipkg install openvpn-ssl-nolzo

Alle zusätzlich benötigten Pakete werden von ipkg automatisch ermittelt und nachinstalliert.

(Falls Du nicht weisst, wie Du Dich "einloggen" kannst, solltest Du zuerst den Eintrag über SSH lesen.)

Software manuell installieren

Falls man die Pakete manuell installieren möchte, dann muss man folgende Pakete herunter laden:

kmod-tun
libssl
busybox-awk
busybox-crontab
freifunk-iptables-missing
freifunk-openwrt-compat
openvpn-ssl-nolzo

Diese können dann per Freifunk Webadmin oder mit scp und ipkg installiert werden.

Client-Zertifikat anfordern

Um einen OpenVPN Tunnel ins Freifunk-Hannover Netz aufbauen zu können, benötigt man ein Client-Zertifikat, das man beim Freifunker seines Vertrauens auf einem der nächsten Freifunk-Treffen beantragen kann.

Das eigene Zertifikat zusammen mit dem privaten Schlüssel und dem Zertifikat der Root-CA muss man dann auf dem Router unter /etc/openvpn ablegen.

OpenVPN Client Konfiguration

Als nächstes muss eine Client-Konfiguration angelegt werden

mkdir -p /etc/openvpn #Verzeichnis anlegen
vi /etc/openvpn/freifunk.conf

mit folgendem Inhalt:

remote vpn.freifunk-hannover.de
client
dev tap
proto udp
port 1194
ca ca.crt
cert <Node-XYZ>.crt
key <Node-XYZ>.key
ns-cert-type server
tun-mtu 1500
mssfix
nobind      

(Drücke :x zum Speichern und beenden.)

Der Wert für <Node-XYZ> müssen natürlich durch einen sinnvollen Wert ersetzt werden :-)

Wer die OpenVPN-Verbindung über einen regulären DSL-Link betreibt, sollte anstelle von tun-mtu 1500 die Option link-mtu 1492 verwenden (siehe freifunk.conf) , um unnötige Paket-Fragmentierungen zu vermeiden.

OpenVPN Startscript

Für einen automatischen Start von OpenVPN beim Booten muss das Startscript justiert werden:

cd /etc/init.d
ln -s openvpn S65openvpn

Es ist nicht ganz klar, wieso das ipkg Package ein Script mitbringt, dieses aber nicht richtig verlinkt wird. Vielleicht ist auch die Startrangfolge etwas verfrüht und könnte weiter nach hinten verlegt werden?

Firewall anpassen

Damit eine Kommunikation durch den Tunnel möglich ist, muss die Firewall der Freifunk Firmware erweitert werden.

vi /etc/local.fw

Folgendes muss man einfügen:

# Place your firewall addons here

# configuration
TAPDEV=tap0

# figure local settings
eval $(/usr/bin/netparam)

case $1 in
       start)
       # Allow all traffic through the tunnel
       iptables -I OUTPUT -o $TAPDEV -j ACCEPT
       iptables -I INPUT -i $TAPDEV -j ACCEPT
       iptables -I FORWARD -o $TAPDEV -j ACCEPT
       iptables -I FORWARD -i $TAPDEV -j ACCEPT

       # Masquerade LAN traffic through the tunnel
       iptables -t nat -A POSTROUTING -o $TAPDEV -s $LANNET/$LANPRE -j MASQUERADE
       iptables -I FORWARD -i $LANDEV -o $TAPDEV -j ACCEPT
       iptables -I FORWARD -i $TAPDEV -o $LANDEV -j ACCEPT
       ;;
       stop)
       iptables -D OUTPUT -o $TAPDEV -j ACCEPT
       iptables -D INPUT -i $TAPDEV -j ACCEPT
       iptables -D FORWARD -o $TAPDEV -j ACCEPT
       iptables -D FORWARD -i $TAPDEV -j ACCEPT

       iptables -t nat -D POSTROUTING -o $TAPDEV -s $LANNET/$LANPRE -j MASQUERADE
       iptables -D FORWARD -i $LANDEV -o $TAPDEV -j ACCEPT
       iptables -D FORWARD -i $TAPDEV -o $LANDEV -j ACCEPT
       ;;
esac

OLSR durch den Tunnel

So richtig Sinn macht der Tunnel natürlich erst, wenn das diesseitige OLSR Netzwerk auch jenes an den anderen Tunnelenden erreichen kann. Dazu muss der olsrd so konfiguriert werden, daß er auch auf dem Tunnel-Device arbeitet.

Dazu muss man eine neue Datei auf dem Router anlegen

vi /etc/local.olsrd.conf

mit folgendem Inhalt:

Interface "tap0"
{
  Ip4Broadcast 255.255.255.255   
  HelloInterval           15.0
  HelloValidityTime       180.0     
  TcInterval              10.0
  TcValidityTime          270.0 
  MidInterval             30.0 
  MidValidityTime         180.0 
  HnaInterval             30.0 
  HnaValidityTime         180.0
  LinkQualityMult 10.2.255.1 0.5
}

Diese Werte sind darauf abgestimmt, nicht so viel Netzwerkverkehr ("Grundrauschen") über den VPN Tunnel zu schicken.

Starten

Nach der Installation und Konfiguration kann man die Verbindung starten:

/etc/init.d/S45firewall restart
/etc/init.d/S65openvpn start
/etc/init.d/S53olsrd restart

und testen:

ping 10.2.255.1

Alternativ kann man den Router auch einfach einmal rebooten :-)

Log Informationen anzeigen

Falls die Verbindung nicht gestartet wird, kann man sich wie folgt die Log Informationen anschauen:

logread -f

Zeitsynchronisation

Für eine korrekte Funktion der Zertifkate ist es notwendig, dass Datum und Uhrzeit auf dem Router korrekt gesetzt sind.

Falls das in der Freifunk Firmware enthalten rdate-Script und die dadurch erreichte Zeitsynchronisation beim Boot der Node nicht ausreichen sollte, kann man mit dem ntpclient-Paket die Zeit in regelmäßigen Abständen automatisch aktualisieren. Ob dies allerdings wirklich nötig ist, muss der Langzeittest erst noch klären.

Fehlerhafte Zeitsyncronisation macht sich folgendermaßen bemerkbar:

root@OpenWrt:~# openvpn --config /etc/openvpn/freifunk.conf
Sat Jan  1 00:04:10 2000 OpenVPN 2.0.9 mips-linux [SSL] [LZO] [EPOLL] built on     Jun  6 2007
Sat Jan  1 00:04:12 2000 UDPv4 link local: [undef]
Sat Jan  1 00:04:12 2000 UDPv4 link remote: 212.112.231.84:1194
Sat Jan  1 00:04:12 2000 VERIFY ERROR: depth=1, error=certificate is not yet  valid:  /C=DE/ST=NDS/L=Hannover
/O=Freifunk_Hannover/emailAddress=info@freifunk-hannover.de
Sat Jan  1 00:04:12 2000 TLS_ERROR: BIO read tls_read_plaintext error:
   error:14090086:lib(20):func(144):reason(134)
Sat Jan  1 00:04:12 2000 TLS Error: TLS object -> incoming plaintext read error
Sat Jan  1 00:04:12 2000 TLS Error: TLS handshake failed

RRDTool Grafiken anpassen

Damit die Statistik auch den VPN Tunnel erfassen, ist eine kleine Änderung notwendig.

sed -i 's/tun/tap/' /etc/rrdcollect.conf
kill $(cat /var/run/rrdcollect.pid) && rrdcollect >/dev/null