chris' corner
Software, Stories and more
HomeHowto › OpenVPN auf der AVM Fritz!Box Fon 7270

Disclaimer

Die hier beschriebenen Änderungen an der Fritzbox-Konfiguration werden von AVM nicht unterstützt. AVM bietet keinen Support für modifizierte Geräte an und kann ggf. Gewährleistungs- und Garantie-Ansprüche ablehnen.

Ich habe diese Änderungen an inzwischen drei Fritzboxen durchgeführt, ohne dass irgendwelche Probleme im Betrieb aufgetreten wären. Dennoch übernehme ich keine Verantwortung für aufgrund dieser Anleitung vorgenommene Änderungen und deren Folgen.

Anschaffung

Mein alter Router hat gerade die Grätsche gemacht, mein DSL-Modem langweilt mich seit ich es habe, und mein Provider verteilt jetzt selbst auch Fritzboxen (die 3170) statt den grausligen Sphairon-Dingern, also hab ich mir eine Fritz!Box angeschafft.
Eine Fon sollte es sein, damit ich auch meinen PC-ISDN-Anrufbeantworter ersetzen kann; die 7270 ist es geworden, weil dann auch gleich meine Gigaset-Anlage für die DECT-Telefone überflüssig ist.

Über die Kiste ist genug geschrieben worden, ich kann mich der Mehrheit der Reviews nur anschließen: Das Teil ist spitze.
Die einzige Funktion, die die Fritzbox im Vergleich zu meinem alten Router nicht mehr bietet, sind einstellbare Paketfilterregeln; die habe ich aber nur benutzt, um die NAT-Portmappings auch zu erlauben, und das macht die Fritzbox automatisch. Falls ich das doch mal brauche, kann man das sicher über die Konsole manuell einrichten.

OpenVPN

Ich hab meine Familie über OpenVPN vernetzt (mit einem zentralen Root-Server als Einwahlknoten), da ist es natürlich praktisch, dass man auf der Fritzbox auch gleich OpenVPN laufen lassen kann, dann muss das kein Windows machen.
Die meisten Anleitungen (z.B. die bei TecChannel, die ich als Basis genommen habe) laden dabei beim Booten der Box die notwendigen Binärdateien sowie Zertifikate und Schlüssel per WGET von einem Webserver herunter. Das ist etwas unschön: Entweder ich leg das Zeug auf einen Webserver bei mir lokal, dann kann der auch gleich das OpenVPN machen, oder ich leg den privaten Schlüssel zu meiner VPN-Verbindung auf einen öffentlichen Webserver (örks) und hole ihn mir jedesmal unverschlüsselt (örks örks).
Zum Glück haben die neueren Boxen ja einen USB-Anschluss, an den man einen Stick einstecken kann, auf dem dann die Daten liegen...

Installation

  1. Telnet einschalten (#96*7* an einem angeschlossenen Telefon wählen)
  2. USB-Stick (oder Festplatte) an den PC anschließen
  3. mit einem Unix-Format-tauglichen Editor (ich nehme notepad++) auf dem USB-Stick eine Textdatei namens debug.cfg mit Unix-Zeilenenden (ggf. über "Format -> Konvertiere zu UNIX" ändern) erstellen mit folgendem Inhalt:
    mkdir /var/usb mount /dev/sda1 /var/usb /var/usb/startup.sh
  4. eine zweite Unix-Textdatei namens startup.sh auf dem Stick erstellen mit folgendem Inhalt: # Start des telnet-daemons echo Starting telnetd /usr/sbin/telnetd -l /sbin/ar7login # warten, bis das DSL da ist echo Waiting for internet connection while !(ping -c 1 www.google.de); do sleep 5 done # tun-Device anlegen, falls noch nicht vorhanden echo Creating TUN device mknod /var/tmp/tun c 10 200 # start OpenVPN (Dateinamen ggf. anpassen) echo Starting OpenVPN cd /var/usb/vpn ./openvpn --config vpn.conf --daemon
  5. ein Unterverzeichnis "vpn" auf dem USB-Stick anlegen und die benötigten Dateien hineinkopieren:
    • vpn.conf-Datei (ggf. Dateinamen in der startup.sh ändern, falls eure config anders heißt)
    • ggf. CA-Zertifikat, persönliches Zertifikat, persönlicher Schlüssel (falls keine statischen Schlüssel verwendet werden)
    • OpenVPN-Binary für den Kernel 2.6
  6. USB-Stick an die Fritzbox anschließen und freigeben
  7. per Telnet auf die Fritzbox verbinden, ggf. Web-Passwort eingeben
  8. im Telnet-Fenster folgendes eingeben: mkdir /var/usb mount /dev/sda1 /var/usb cat /var/usb/debug.cfg > /var/flash/debug.cfg

Erläuterungen

Jetzt ist die Fritzbox soweit vorbereitet:
Wir haben eine debug.cfg erstellt, die im Flash der Fritzbox abgelegt ist und bei jedem Reboot den USB-Stick unter /var/usb mountet und dann von dort ein Skript namens startup.sh startet, das die weiteren Aktionen ausführt.
Das hat den Vorteil, dass man die startup.sh bequem unter Windows über die USB-Freigabe bearbeiten kann (dabei immer auf das Unix-Format achten!), ohne sich auf der telnet-Konsole mit nvi oder cat oder sonstwas rumzuschlagen.
Bootet die Box mal nicht mehr, weil das Skript kaputt ist, zieht man einfach den Stick ab und hat wieder (fast) den Originalzustand - das mount in der debug.cfg schlägt dann halt fehl, das stört aber nicht weiter.
Bei einem OpenVPN-Update legt man das neue Binary einfach auf den Stick und startet die Box neu - fertig.

Ich gehe davon aus, dass eine funktionierende OpenVPN-Konfiguration vorliegt, dazu gibt es ja genug Howtos auf openvpn.net.

Test 1

Zum Testen kann man den Inhalt der startup.sh in die telnet-Konsole eintippen oder (viel einfacher) den Parameter --daemon aus der startup.sh vorübergehend entfernen und dann das Skript einfach per /var/usb/startup.sh manuell aufrufen. Am Ende des Skripts sollte OpenVPN gestartet werden und seine üblichen Meldungen ausgeben - falls es soweit kommt und dann Fehlermeldungen spotzt, liegt das an eurer vpn.conf.

Test 2

Jetzt das --daemon ggf. wieder in die startup.sh eintragen und die Fritzbox neustarten.
Nachdem der Reboot durch ist, wieder per Telnet auf die Fritzbox verbinden (das sollte jetzt funktionieren, ohne dass der telnetd per Telefon eingeschaltet wurde - das hat die startup.sh ja übernommen), ggf. Web-Passwort eingeben
Auf der Konsole ps eingeben - dort sollte ein Prozess "./openvpn --config vpn.conf --daemon" aufgelistet sein.