OpenVPN auf Freifunk Firmware

Info

Das VPN, das von den Freifunk Knoten an Uplinks (bspw. DSL) konfiguriert wird, verbindet im Ernstfall, ueber einen Link mit schlechter Metrik, voneinander getrennte Wolken im Weimarnetz. Momentan arbeiten wir mit VPN Zertifikaten / Schluesseln, die individuell fuer jeden Knoten ausgestellt werden.

Installation

Software

Per ssh auf den Router verbinden, um zuallererst die openvpn Software zu installieren.

 ssh root@104.63.Knotennummer.1 
 ipkg update
 ipkg install openvpn
 ipkg install freifunk-openwrt-compat
 mkdir /etc/openvpn


Keys

Nun ist die Software installiert, jetzt noch die vom VPN-Admin bezogenen Keys auf den Router spielen: scp benutzen um das Tar-Archiv auf den Router zu uebertragen.

 scp keys-[knotenname].tar.gz root@104.63.knotennummer.1:/etc/openvpn 

Nun in der ssh Konsole die Keys auspacken:

 cd /etc/openvpn/
 tar xfvz keys-[knotenname].tar.gz
 rm keys-[knotenname].tar.gz 

Konfiguration

Client konfigurieren

 cd /etc/openvpn
 vi bongbong.conf

Im vi muss man fuer den Editier-Modus i druecken und nun kanns losgehen. Die folgenden Eintraege in der Datei bongbong.conf sollten ueberprueft werden.

 remote l18a.de 
 client
 dev tap
 proto tcp
 port 1195
 ca ca.crt
 cert [knotenname].crt
 key [knotenname].key
 cipher AES-128-CBC 
 #nach der kommenden Zertifikatumstellung dann 
 #cipher none
 ns-cert-type server
 #tun-mtu 1500
 #bei Tunnelung ueber internet, z.b. DSL braucht man folgende Zeile
 #mssfix 1397
 tun-mtu 1472
 mssfix

Wobei natuerlich [Knotenname] durch den Knotennamen erzetzt werden muss. Mit Esc wird der Editier-Modus im vi beendet. Mit : gelangt man in den Datei-Modus. Im Datei-Modus noch ein w und ein q eigeben (fuer write und quit) und Enter.


OLSR Konfiguration

 cd /etc
 rm local.olsrd.conf
 cp /rom/etc/local.olsrd.conf .
 vi local.olsrd.conf 

Mit i in den Editier-Modus.

 # Add your addons (e.g. plugins) to olsrd.conf here,
 # addons for interfaces in /etc/local.olsrd.conf.eth1
 Interface "tap0" "tap1"
 {
 HelloInterval                5.0
 HelloValidityTime           90.0
 TcInterval                   2.0
 TcValidityTime             270.0
 MidInterval                 15.0
 MidValidityTime             90.0
 HnaInterval                 15.0
 HnaValidityTime             90.0
 Ip4Broadcast     104.255.255.255
 LinkQualityMult 104.63.[Knotennummer].1 0.1
 }

Esq :wq zum speichern und schliessen.

Firewall konfigurieren

 cd /etc
 rm local.fw
 cp /rom/etc/local.fw /etc/local.fw 
 vi local.fw

Mit dem Cursor vor diesen Eintrag gehen

      ;;
      stop)
      ;;

Folgendes eintragen: (i druecken)

 iptables -I INPUT -i tap0 -j ACCEPT
 iptables -I OUTPUT -o tap0 -j ACCEPT
 iptables -t nat -A POSTROUTING -o tap0 -s 104.63.knotennummer.1/255.255.255.224 -j MASQUERADE
 iptables -I FORWARD -i tap0 -o eth1 -j ACCEPT
 iptables -I FORWARD -i eth1 -o tap0 -j ACCEPT

Esq :wq zum speichern und schliessen.

Automatischer VPN Start beim Booten

Wir editieren das initscript S99done.

 cd /etc/init.d
 rm S99done
 cp /rom/etc/init.d/S99done /etc/S99done . 
 vi S99done 

Am Ende der Datei folgendes eintragen (i).

 modprobe tun
 /etc/init.d/openvpn restart

Konfiguration testen

Nun einen Neustart. Das sollte eigendlich alles gewesen sein.

Wenn das Gerät wieder erreichbar ist, könnt ihr euch einloggen und die Log-Datei anzeigen lassen.

 logread -f

das VPN startet etwas später, d.h. ihr habt noch 1-2 Minuten Zeit bis zur ersten Meldung...

Wenn probleme auftauchen

Wenn ihr nicht ins VPN kommt. SSH auf den Router und eingeben:

 killall openvpn
 cd /etc/openvpn
 openvpn --config bongbong.conf

Das gibt erstmal recht viel aus, aber zeigt auch woran es hängt.

Checkliste

  • openvpn installiert?
  • compat installiert?
  • /etc/local.fw verändert?
  • /etc/local.olsrd.conf verändert?
  • /etc/init.d/S99done verändert?
  • keys in /etc/openvpn?
  • conf-datei in /etc/openvpn?
  • neugestartet und lange gewartet?

als letzter hinweis: falls die Uhrzeit auf dem Gerät noch auf 2000 steht, dann gehts nicht, weil das Zertifikat damals noch gar nicht gültig war :-)

 date -s 20060710 (auf das heutige Datum anpassen!)