FritzBox 7270 als OpenVPN Client

Schon länger habe ich mit dem Gedanken gespielt, meine FritzBox 7270 als OpenVPN Client zu nutzen. Warum sich das immer wieder verschoben hatte…? Ich weiß es nicht. Vll. habe ich keine brauchbare Anleitung gefunden, vll. fehlte mir die Muße.
Nun ist es vollbracht. Meine FritzBox ist nun als OpenVPN Client an meinem OpenVPN Server angemeldet. Einzig noch fehlend: Das Netz hinter der FritzBox muss auch noch auf den OpenVPN Server zugreifen können. Das kommt aber später.

Diese Notizen/ Anleitung soll nur eine Hilfestellung geben. Es wird keine Gewährleistung oder Garantie übernommen. Weiterhin verliert man mit der Modifikation u.U. seinen Gewährleistungsanspruch an AVM.

Voraussetzung:

  • Funktionierender OpenVPN Server (setze ich hiermit voraus)
  • Linux/ UNIX Grundkenntnisse (also wie man vi bedient, cp usw.)
  • Eine FritzBox 7270 mit aktueller Firmware
  • Ein USB Stick am USB Port der FritzBox (wenige MB reichen für VPN aus)

Vorgehen:

  1. Telnet Zugang auf der FritzBox aktivieren, sollte das noch nicht geschehen sein. An einem angeschlossenen Telefon #96*7* wählen. Praktisch: In meinem ISDN Telefon wird einem noch telnetd aktiviert angezeigt.
  2. Telnet Zugang zur FritzBox testen: In einer Konsole/ Terminal telnet IP_der_FritzBox (IP_der_FritzBox ist natürlich durch die IP zu ersetzen) eingeben. Man erhält eine Passworteingabe. Gleiches wie das Passwort für die Weboberfläche.
  3. USB Stick ist an der FritzBox angeschlossen. Wohin der gemountet ist, bekommt man durch den Befehl mount raus:
    /dev/sda1 on /var/media/ftp/Generic-STORAGEDEVICE-01 type vfat (blah.....)

Der einfachste Weg, die Daten (Konfigdateien OpenVPN, Zertifikate, Startskripte) auf den USB Stick zu bekommen: USB Stick an den Rechner anschließen und über diesen die Daten auf den Stick kopieren. Alternativ kann man auch alle Daten fertig machen und zum Beispiel per wget auf der FritzBox von einem HTTP Server ziehen. Das setzt aber voraus, dass man intern im LAN einen selbigen hat bzw. seine Daten über’s Internet kopieren mag (nicht sicher und sollte man unbedingt die Finger von lassen!).

Also haben wir nun den USB Stick am Rechner angeschlossen, gemountet und können auf diesen zugreifen. Wir legen auf diesem ein Verzeichnis openvpn an. In dieses Verzeichnis kopieren wir alle nötigen Dateien und die Skripte.

Auf dem OpenVPN Server erzeugen wir die nötigen Zertifikate. (Wie das genau geht, siehe OpenVPN Howto. In Kurzform: sourcen der vars, build-key name (z.B. fritzbox) aufrufen.).
Die nun erzeugten Zertifikatsdateien fritzbox.crt, fritzbox.csr und fritzbox.key, das Diffie Hellmann Zertifikat und die Server-Zertifikatsdatei ca.crt werden in dieses Verzeichnis kopiert.
Nun noch eine Konfigurationsdatei für den Client anlegen. Wichtig hierbei: Entgegen der bisherigen Konfigurationsdateien muss ein Eintrag hinzu kommen. In der OpenVPN Client Konfiguration muss das Device mit angegeben werden. Andernfalls quittiert der openvpn Client beim Start seinen Dienst, da er das device tun nicht nutzen kann.
Als Eintrag ist dev-node /var/tmp/tun hinzuzufügen.

Eine Beispielkonfig sieht ungefähr so aus:

client # wir sind Client
dev tun #
dev-node /var/tmp/tun # Hier wird das Devide angegeben. wichtig!
proto udp # wir nutzen UDP, kein TCP
remote ip.andere.seite 1194 # die IP/ DNS Name der Gegenseite und Port
resolv-retry infinite # Namensauflösung immer
nobind # wir brauchen den Port nicht zu binden.
persist-key
persist-tun
ca ./ca.crt # Die Zertifikate (Pfadangabe muss richtig sein)
cert ./fritzbox.crt
key ./fritzbox.key
dh ./dh2048.pem
comp-lzo # Komprimierung, sofern auf der Gegenseite auch aktiv.
verb 1 # Fuer Debugging ruhig bis 8 hochsetzen.
mute 20 # Nach x Wiederholungen im Log ruhe.

Wir nennen diese Datei nun einfach mal vpnclient.conf. Diese legen wir auch in das Verzeichnis ab.
Nun fehlt uns noch die Startup Datei, die beim Booten (oder zum Testen händisch) gestartet wird. Die Datei umfasst nur wenige Zeilen:

# Skript startet den VPN Dienst.
# Wird von debug.cfg (aus dem Flash) aufgerufen
# Start des telnet Dienstes
echo telnetd wird gestartet
/usr/sbin/telnetd -l /sbin/ar7login

# wir warten und pruefen, bis Internetverbindung steht:
echo warten auf bestehende Internetverbindung
# hier wird jeweils so lange versucht,
# einen Ping erfolgreich an google
# zu schicken und bei Misserfolg gewartet
while !(ping -c 1 www.google.de); do
sleep 5
done

# tun-Device anlegen, falls noch nicht vorhanden
echo das TUN Device wird erzeugt
mknod /var/tmp/tun c 10 200

# wir geben eine Info raus, dass der VPN Dienst gestartet wird:
echo OpenVPN wird gestartet
# Wir gehen in das Verzeichnis auf dem USB Device:
cd /var/media/ftp/Generic-STORAGEDEVICE-01/vpn
# Aufruf des OpenVPN Binary mit dem Konfigurationsnamen, wird als daemon gestartet
/var/media/ftp/Generic-STORAGEDEVICE-01/vpn/openvpn --client --config vpnclient.conf --daemon

Diese Datei kann händisch ausgeführt werden oder über die debug.cfg aufgerufen werden. Mit Hilfe der debug.cfg im Flashspeicher der Fritzbox wird dieses Skript bei jedem Start ausgeführt. Wir gehen also davon aus, dass der USB Speicher immer an der FritzBox hängt und auf diesen zugegriffen werden kann. Sollte das nicht so sein, so sollte man das Skript etwas anpassen (u.a. eine Pruefung einbauen, ob /dev/sda1 vorhanden ist).
In der debug.cfg reicht es aus, einen Aufruf von startup.sh zu definieren. Mehr braucht dort eigentlich nicht rein. Alternativ kann man diese noch erweitern und jeweils /dev/sda1 auf einen festen “Platz” mounten. Damit umgeht man das Problem, dass u.U. der Name (wir gehen von /var/media/ftp/Generic-STORAGEDEVICE-01 aus) mal anders ausfallen sollte.

# debug.cfg wird aus flash der FritzBox aufgerufen
mkdir /var/media/ftp/Generic-STORAGEDEVICE-01
mount /dev/sda1 /var/media/ftp/Generic-STORAGEDEVICE-01
/var/media/ftp/Generic-STORAGEDEVICE-01/openvpn/startup.sh

Diese Datei muss noch in den Flash “geschrieben” werden. Einfach ein cat /pfad/zur/debug.cfg > /var/flash/debug.cfg und fertig. Nun steht dies im Flash und ist damit “rebootsave”.

Zu guter Letzt fehlt noch das OpenVPN Binary, welches ebenfalls auf dem USB Speicher vorhanden sein muss. Das ist ein Binary für MIPS. Herunterladen kann man das Binary aus dem Netz oder durch cross-compiling für MIPS selber bauen. Auf Wunsch werde ich dieses auch hier verlinken. Auf Wunsch nun auch ein Link auf das MIPS OpenVPN Binary. Herunterladen, un’gzippen und ins Verzeichnis kopieren.

Alle Daten sind auf dem USB Speicher? Alle Dateien in dem richtigen Verzeichnis? Dann kann dieser angesteckt werden. Er wird automatisch von der FritzBox gemountet und steht zur Verfügung.

Um den VPN Tunnel zu testen reicht ein Aufruf von startup.sh auf der Konsole. Der Tunnel sollte aufgebaut werden und die Gegenseite per z.B. Ping erreichbar sein. Sollte etwas nicht auf Anhieb klappen kann man das –daemon mal weglassen und gleichzeitig auf dem OpenVPN Server im Log nachsehen, was passiert. Verbose Level für diesen Zweck ruhig hochdrehen.

Das war’s. FritzBox stellt nun zuverlässig (auch nach einem Reboot) den Tunnel her. Vom VPN Server kann nun ohne Probleme auf die FritzBox zugegriffen werden. Gibt es eine Client-to-Client Einstellung, so kann jeder VPN Client ebenfalls auf die FritzBox per VPN zugreifen.

Was noch fehlt (hierzu demnächst Teil II): Routing aus dem hinter der FritzBox befindlichen Netz in das VPN Netz.

Nachtrag: Das Routingproblem mit dem Zugriff aus dem hinter der FritzBox befindlichen Netz auf das VPN Netz ist auch geklärt.
Es reicht nicht aus auf dem System, auf dem auch der OpenVPN Server läuft, eine Route in das Hinter-VPN-Client-Netz auf den VPN Client-Endpunkt zu setzen. In der Konfig des OpenVPN Servers muss auch noch ein Eintrag für die Routen vorhanden sein. Das benötigt der OpenVPN Dienst quasi für “interne Zwecke”.
Wie die Routen zu setzen sind können auch im Artikel OpenVPN Netz hinter FritzBox OpenVPN Client erreichbar machen nachgelesen werden.
/Nachtrag ENDE

Tags: , , , , , ,

2 Responses to “FritzBox 7270 als OpenVPN Client”

  1. Jan says:

    Würde gerne BlackVPN mit meiner Fritzbox nutzen und bin auf deine Anleitung gestoßen.
    Allerdings verwendet BlackVPN kein Zertifikat zur Authentifizierung, sondern nur plain username/password. Alles was ich habe ist das ca.crt, ta.key und username+password.
    Gibt es eine Möglichkeit hiermit?
    Besten Dank vorab.

  2. Stefan says:

    Danke für den Anstoß, ich habe allerdings das selbe problem wie Jan. Fällt dir dazu etwas ein?

    Gruß, Stefan

Leave a Reply

*