Fli4l-Fritz!Box VPN
From Fritz!Box
Wie kann man mit der Fritz!Box einen VPN-Tunnel zu einem Linux-Server aufbauen?
In diesem Artikel wird beschrieben, wie man mit einer Fritz!Box zu einer beliebigen OpenVPN-Gegenstelle einen dauerhaften Tunnel aufbauen kann. Teile dieses Artikels beruhen auf Albert Lauchners Veröffentlichung bei Tecchannel:
http://www.tecchannel.de/server/linux/435560/
Dort wird beschrieben, wie man zwischen zwei Fritz!Boxen einen Tunnel aufbaut, wobei eine Box als Server und eine Box als Client dient, dies entspricht dem "Roadwarrior"-Modell. Dieser Beitrag beschreibt den Aufbau zwischen zwei gleichberechtigten Gegenstellen, sollte also mit jeder beliebigen, nach dem gleichen Muster aufgebauten OpenVPN- Gegenstelle funktionieren. Hier wird das Ganze als Verbindung zwischen der Fritz!Box und einem fli4l-Router dargestellt, der somit als zentraler VPN-Einwahlserver konfiguriert werden kann, gegenüber Nortel oder Cisco VPN-Gateways eine preiswerte und einfach zu administrierende Lösung mit Standard-PCs und den weit verbreiteten Fritz!Boxen auf TI-AR7 Basis.
[edit] Welche Firmware wird unterstützt?
Die folgende Anleitung wurde für Fritz!Boxen mit Kernel 2.4.x erstellt. Mit den Firmwareversionen ab x.04.30 setzt AVM auf einen 2.6.x-er Linuxkernel. Ebenso wird eine andere uClibc verwendet. Dadurch sind die in diesem Artikel referenzierten Programmdateien mit Firmwareversionen > x.04.30 nicht mehr lauffähig. Bis aktuelle Binaries bereitgestellt werden können, darf daher keinesfalls ein Firmwareupdate auf x.04.30 oder neuer vorgenommen werden, wenn die OpenVPN-Erweiterung genutzt wird. Empfohlen wird die Version x.04.15, mit der OpenVPN und SSH problemlos laufen. Ebenso funktioniert Harald Beckers LCR-Erweiterung mit dieser Version. Version x.04.25 steht in dem Ruf, instabil zu sein, allerdings gibt es hier auch positive Rückmeldungen.. Wer auf Kindersicherung und andere neue Ausstattungsmerkmale verzichten kann, hat auch keinen wirklichen Grund zum Update.
[edit] Was wird benötigt?
Auf der einen Seite ein fli4l-Router Version 3.0.x, als Gegenstelle eine Fritz!Box beliebiger Baureihe. Außerdem werden entweder ein Internet-Anschluß mit fester IP oder ein DynDNS-Service (DynEisfair, DynDNS.org, Selfhost o.ä) für jede der beiden Gegenstellen benötigt.
[edit] Was muß konfiguriert werden?
Am fli4l wird das Basispaket mit einem Internetzugang (aus Kostengründen wohl immer ein DSL-Zugang mit Flatrate oder etwas Vergleichbares) und die Pakete httpd und openvpn benötigt.
Für die Fritz!Box brauchen wir die Box mit aktiviertem Telnetzugang. Dieser läßt sich bei aktueller Firmware über ein angeschlossenes Telefon mit der Wahl von #96*7* einschalten und mit #96*8* auch jederzeit wieder deaktivieren. Die Alternative zu dieser einfachen Möglichkeit ist das Aktivieren des Telnetzuganges über ein Pseudo-Firmwareupdate, beschrieben in diesem Wiki unter Starten von Telnet. Zusätzlich erforderlich sind ein Editor, der Dateien im Unix-Format (betrifft den Zeilenumbruch) abspeichern kann sowie die Möglichkeit, die vorkonfigurierten Dateien auf einen vom Internet zugängliche Rechner abzulegen, dies kann ein beliebige Internetseite sein oder sogar der eigene Webserver am dynamischen Anschluß. Alternativ kann auch ein Download der Dateien von tecchannel erfolgen.
[edit] Prinzipieller Aufbau
Beim fli4l-Router wird nach den Standardvorgaben der fli4l- Dokumentation zu OpenVPN eine Tunnelverbindung konfiguriert, eine Beispielkonfiguration folgt weiter unten. Die Fritz!Box wird um einige Befehlszeilen in der "/var/flash/debug.cfg" erweitert, die folgende Funktionen ausführen:
- die Datei mit dem Schlüssel für OpenVPN im Arbeitsspeicher der Fritz!Box anlegen
- eine OpenVPN-Konfiguration mit den Angaben zu Netzwerk und Tunnel schreiben
- die Programmdatei zu OpenVPN aus dem Internet nachladen
- den OpenVPN Daemon starten
[edit] Aufbau der Netze und Vergabe der IPs
Der Aufbau der Netze muß einigen Kriterien genügen. Zunächst muß sichergestellt sein, daß die beiden Netze, die per VPN verbunden werden, in unterschiedlichen IP- Bereichen liegen. Beispiel: Lautet der IP-Bereich des einen Netzes "192.168.0.0" und seine Subnetmask "255.255.255.0", so darf das andere Netz kein "192.168.0.0"-Netz sein, sondern muß beispielsweise den IP-Bereich "192.168.2.0" mit Subnetmask "255.255.255.0" haben. Da die Fritz!Box als Standard ein "192.168.178.0" verwaltet und beim fli4l das Beispielnetz "192.168.6.0" ist, kommen sich die beiden nicht ins Gehege. Weitere Bedingung: Die für den Tunnel genutzten IPs dürfen zu keinem der Netze gehören, die verbunden werden sollen, im Beispiel also weder eine "192.168.178.0" noch eine "192.168.6.0" haben. Wir verwenden hier die im OpenVPN-Paket des fli4l verwendeten IPs 192.168.200.202 und 192.168.200.201, nachzulesen unter
http://www.fli4l.de/fileadmin/doc/fli4l-3.0.1/node32.html
Die Konfiguration entspricht der bei einer Verbindung zweier fli4l-Router:
http://www.fli4l.de/fileadmin/doc/fli4l-3.0.1/node32.html#SECTION00578100000000000000
[edit] Schritte der Installation (Übersicht)
Die Installation folgt einigen wenigen und einfachen Schritten:
- Generieren einer Schlüsseldatei (keyfile für OpenVPN)
- Bereitstellen der notwendigen Programmdatei
- Zwei DynDNS-Domains oder feste IPs
- Erstellen der fli4l-Konfiguration
- Anpassen der Netzwerkparameter für die Fritz!Box
- Abspeichern im Unixformat (ohne Carriage-return Zeichen am Ende)
- Ablegen der angepaßten Konfigurationsdateien auf beliebigem Webspace
- Öffnen des Ports im Paketfilter der Fritz!Box
- Download der Konfiguration auf die Fritz!Box und Test der Konfiguration
- Dauerhaftes Hinterlegen der Konfiguration auf der Fritz!Box
[edit] Generieren einer Schlüsseldatei (keyfile für OpenVPN)
Zunächst benötigen wir ein OpenVPN keyfile, das z.B. einfach im Web erzeugt werden kann, aber auch direkt auf dem fli4l-Router. Es gibt sicher einige Webseiten, die das anbieten, hier weise ich auf
http://www.the-construct.com/functions/create_secret.php
hin, die zum Download angebotene Datei wird auf dem lokalen Rechner gespeichert, im Beispiel unter dem Namen "my-openvpn.secret" und hat z.B. folgenden Inhalt:
# # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 25443410582d1a09145561b73d4d3593 3e27216904142bfe0802489ef663b0cb de1e6dca4f25e92b020218dd3a643052 b086bb1b5602455ac3a6a12152e59a1b ef391131ca667dcb1b445c53fee3ea06 f9bade0c10dcc55abae7aa7eca3aa515 04534accacbe5bf1c85bb55b4e221fe9 b565223954f95a9ae920c2d35b5b649f daca5941235467c69fab393b2bedd04e 38d6b61428fe4fa05dc021284237bf0e f3943bffb0dfd9ff736b7c4a13daf399 0a5790415e81c048dbe2620ac70a3af2 db7f42290ca700f621020b4911fc1e9a a7deab281b9524c4faa0e220ff460a8b 505ff1b28d506d88d64b483379d425db 87a3af99ab1b3cb243a4aab702845edc -----END OpenVPN Static key V1-----
Der eigentliche Key ist natürlich immer unterschiedlich. Auf dem fli4l-Router geht das mit dem Befehl
openvpn --genkey --secret my-openvpn.secret
Danach findet sich der Schlüssel in der Datei "my-openvpn.secret".
Achtung: Die Schlüsseldateien auf der Fritz!Box und auf dem fli4l-Router müssen identisch sein. Man erzeugt also auf dem einen oder anderen Wege die Datei und bringt den Inhalt per Copy&Paste an die richtigen Stellen. Die Datei wird im UNIX-Format erstellt und muß auch so bleiben, sonst funktioniert die VPN-Verbindung nicht.
[edit] Bereitstellen der notwendigen Programmdatei
TecChannel bietet das OpenVPN-binary zum Download unter folgendem URL an:
http://www.tecchannel.de/download/435560/openvpn
Auch bei The Construct lassen sich die vorkompilierten Programme herunterladen:
http://www.the-construct.com/download/files.zip
Hier sind sowohl Binaries für Kernel 2.4 als auch für Kernel 2.6 enthalten.
Vielen Dank für diesen Service!
[edit] Zwei DynDNS-Domains oder feste IPs
Wie man sich eine DynDNS- oder DynEisfair-Domain reserviert und diese in der Fritz!Box konfiguriert, ist an anderer Stelle ausreichend beschrieben, ich gehe hier von zwei verfügbaren Domains aus: "my-fli4ldomain.eisfair.net" und "my-fritzboxdomain.eisfair.net". Die entsprechende Konfiguration für die Fritz!Box findet sich unter
http://dyndns.eisfair.net/fritzbox-dyneisfair.txt
[edit] Erstellen der fli4l-Konfiguration
Man muß fli4l nach der Anleitung auf der Downloadseite und der Dokumentation herunterladen und auspacken sowie die Grundkonfiguration entsrechend seines Internetzuganges und der zur Verfügungstehenden Hardware konfigurieren. Selbstverständlich muß das OpenVPN heruntergeladen und entpackt werden. Beim Entpacken mit Winzip unbedingt den Hinweis zur Automatischen CRLF/LF Konvertierung beachten, diese muß in Winzip ausgeschaltet sein. Der Total-Commander beherrscht das Auspacken von "tar.gz"-Archiven einwandfrei. Die Konfigurationsdatei von OpenVPN muß folgende Variablen enthalten und ggfs. ergänzt werden:
OPT_OPENVPN='yes' OPENVPN_FEATURES='std' OPENVPN_WEBGUI='yes' OPENVPN_N='1' # configuration of tun-device OPENVPN_1_NAME='fbox' OPENVPN_1_REMOTE_HOST='my-fritzboxdomain.eisfair.net' OPENVPN_1_REMOTE_PORT='10010' OPENVPN_1_LOCAL_PORT='10011' OPENVPN_1_SECRET='my-openvpn.secret' OPENVPN_1_TYPE='tunnel' OPENVPN_1_REMOTE_VPN_IP='192.168.200.202' OPENVPN_1_LOCAL_VPN_IP='192.168.200.201' OPENVPN_1_ROUTE_N='1' OPENVPN_1_ROUTE_1='192.168.178.0/24' # Portforwarding by OpenVPN OPENVPN_1_FORWARD_LIST_N='1' OPENVPN_1_FORWARD_LIST_1='ACCEPT BIDIRECTIONAL' OPENVPN_1_INPUT_LIST_N='1' OPENVPN_1_INPUT_LIST_1='if:VPNDEV:any tmpl:dns ACCEPT'
Ebenso ist die Schlüsseldatei "my-openvpn.secret" im
Konfigurationsverzeichnis unter \etc\openvpn abzulegen,
als Beispiel der ganze (Standard-)Pfad:
C:\fli4l-3.0.1\config\etc\openvpn
Für weitere Konfigurationsmöglichkeiten sei auf die sehr umfangreiche Dokumentation zu OpenVPN auf fli4l verwiesen:
http://www.fli4l.de/fileadmin/doc/fli4l-3.0.1/node32.html
Die obige Datei kann per Copy&Paste verwendet werden, anzupassen ist mindestens die Variable
OPENVPN_1_REMOTE_HOST='my-fritzboxdomain.eisfair.net'
bei der statt "my-fritzboxdomain.eisfair.net" der DynDNS- Domainname einzutragen ist, der auf der Fritz!Box konfiguriert wurde. Eventuell sind bei anderer Netzwerkkonfiguration noch die IP-Bereiche des fernen Netzes bzw. des Tunnels anzupassen.
[edit] Anpassen der Netzwerkparameter für die Fritz!Box
Folgende Werte müssen in der nachfolgenden Musterdatei individuell angepaßt werden:
- der OpenVPN-Key, - der wie oben beschrieben schon erzeugte Dateiinhalt einfach wird einfach hineinkopiert
- die Domain, von der die Programmdatei nachgeladen wird, - hier "www.meine-domain.de"
- der Name der DynDNS-Domain, - hier "my-fli4ldomain.eisfair.net"
- den IP-Bereich des entfernten Netzes miz Subnetmask, - hier "192.168.6.0 255.255.255.0"
Die Datei kann direkt so per Copy&Paste verwendet werden, die gerade beschriebenen Anpassungen müssen natürlich noch vorgenommen werden.
# # # # # start telnet daemon /usr/sbin/telnetd -l /sbin/ar7login # # # # # go online while !(ping -c 1 www.meine-domain.de); do sleep 5 done # # # # # prepare OpenVPN cd /var/tmp # # # # # create tunnel device for OpenVPN mkdir /dev/misc mkdir /dev/misc/net mknod /dev/misc/net/tun c 10 200 # # # # # write 'my-openvpn.secret' to file cat > /var/tmp/my-openvpn.secret << 'OVPN-KEYFILE' # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 25443410582d1a09145561b73d4d3593 3e27216904142bfe0802489ef663b0cb de1e6dca4f25e92b020218dd3a643052 b086bb1b5602455ac3a6a12152e59a1b ef391131ca667dcb1b445c53fee3ea06 f9bade0c10dcc55abae7aa7eca3aa515 04534accacbe5bf1c85bb55b4e221fe9 b565223954f95a9ae920c2d35b5b649f daca5941235467c69fab393b2bedd04e 38d6b61428fe4fa05dc021284237bf0e f3943bffb0dfd9ff736b7c4a13daf399 0a5790415e81c048dbe2620ac70a3af2 db7f42290ca700f621020b4911fc1e9a a7deab281b9524c4faa0e220ff460a8b 505ff1b28d506d88d64b483379d425db 87a3af99ab1b3cb243a4aab702845edc -----END OpenVPN Static key V1----- OVPN-KEYFILE # # # # # write 'my-openvpn.conf' to file cat > /var/tmp/my-openvpn.conf << 'OVPN-CONF' # # # # # interface net config and params ifconfig 192.168.200.202 192.168.200.201 dev tun dev-node /dev/misc/net/tun tun-mtu 1500 float mssfix persist-key persist-tun persist-local-ip mlock fragment 1300 # # # # # set compression comp-lzo # # # # # set auth-style cipher BF-CBC auth SHA1 # # # # # remote server address remote my-fli4ldomain.eisfair.net # # # # # key-file path secret /var/tmp/my-openvpn.secret # # # # # set protocol and port proto udp lport 10010 rport 10011 # # # # # keep tun alive ping 30 ping-restart 120 # # # # # check update for dyneisfair name resolv-retry infinite # # # # # debuglevel verb 2 # # # # # start daemon daemon # # # # # VPN route add route 192.168.6.0 255.255.255.0 OVPN-CONF # # # # # load binary file cd /var/tmp wget http://www.meine-domain.de/fbox/openvpn # # # # # make them executable chmod +x /var/tmp/openvpn chmod 0600 /var/tmp/my-openvpn.conf chmod 0600 /var/tmp/my-openvpn.secret # # # # # start OpenVPN ./openvpn --config ./my-openvpn.conf &
[edit] Abspeichern im Unixformat (ohne Carriage-return Zeichen am Ende)
Die Datei muß auf jeden Fall im UNIX-Format gespeichert werden. Das geht mit einem entsprechenedne Editor auch unter Windows (z.B. Ultraedit, Crimson Editor, tIDE Editor) oder man kann die mit einem DOS-Editor editierte Datei auf einem Lunix/UNIX-Rechner abspeichern und mit einem Tool wie "dtou" oder "dos2unix" vom DOS- ins Unix-Format wandeln.
[edit] Ablegen der angepaßten Konfigurationsdateien auf beliebigem Webspace
Per FTP, SCP oder SMB die angepaßte Musterdatei als "debug.cfg" auf dem zur Verfügung stehenden Webspace ablegen.
[edit] Öffnen des Ports im Paketfilter der Fritz!Box
Loggen sie sich per telnet auf die Fritz!Box ein und führen die nachfolgenden Anweisungen aus:
Kopieren Sie die Datei "/var/flash/ar7.cfg" in das Temporärverzeichnis:
cd /var/tmp cp /var/flash/ar7.cfg .
Laden Sie die Datei in den Editor:
nvi ar7.cfg
Suchen Sie in der Datei nach dem Abschnitt
dslifaces {
enabled = yes;
name = "internet";
dsl_encap = dslencap_inherit;
ppptarget = "internet";
und scrollen von dort bis zum zugehörigen Abschnitt "forwardrules". Dieser muß um folgende Zeile ergänzt werden:
"tcp 0.0.0.0:10010 0.0.0.0:10010",
Ebenso kann hier auch schon der Port für eine SSH-Verbindung geöffnet werden:
"tcp 0.0.0.0:22 0.0.0.0:22",
Dies muß zwingend auf die beschriebene Art und Weise erfolgen, da der Flashspeicher eine direktes Editieren nicht zuläßt. Wenn ihnen der nvi nicht ganz geheuer ist, so können sie die Datei auch in einem UNIX-fähigen Editor unter Windows bearbeiten und danach wieder per wget auf die Fritz!Box laden. Aus dem Verzeichnis /var/tmp wird dann ar7.cfg wieder in den Flash-Speicher geschrieben:
cp ar7.cfg /var/flash/ar7.cfg
Achtung: Bitte nie direkt per "wget" in den Flashspeicher herunterladen!
Nach einem Neustart bleibt der Port für OpenVPN bzw. zur Fernwartung dann offen.
Ein kleiner Trick, um den Abschnitt "forwardrules" leichter zu finden: Esrtellen sie im normalen Webinterface der Fritz!Box unter -> Internet -> Portforwarding eine beliebige selbstdefinierte Portforwarding-Regel. Diese findet sich beim Editieren in der "ar7.cfg" genau in dem Abschnitt, in dem die vorstehenden Ergänzungen gemacht werden müssen.
[edit] Kernel 2.6
Bei einigen Firmwareversion mit Kernel 2.6 hat AVM die Optionen im Universal-Binary busybox eingeschränkt und der Editor vi bzw. nvi funktionieren nicht mehr. Hier muss man sich etwas umständlich helfen, da man keine Änderungen auf der Box selber vornehmen kann. Man lässt sich die Dateien mittels cat im Terminalfenster anzeigen:
cat /var/flash/ar7.cfg
bringt den Inhalt per Copy&Paste in den Editor seiner Wahl und nimmt dort die notwendigen Änderungen vor, dann im UNIX-Format abspeichern! Nach dem Speichern wird die Datei auf den zur Verfügung stehenden Speicherplatz im Web hochgeladen. Danach holt man sich diese Konfigurationsdatei per wget wieder auf die Fritz!Box und kopiert sie wieder an ihren vorgesehenen Platz:
cd /var/tmp wget http://www.meinserver.de/fbox/ar7.cfg cp ar7.cfg /var/flash/ar7.cfg
[edit] Download der Konfiguration auf die Fritz!Box und Test der Konfiguration
Holen sie sich die erstellte Datei "debug.cfg" per Internet-Download auf die Fritz!Box. Hierzu loggen sie sich per telnet auf die Fritz!Box ein und geben die nachfolgenden Kommandos ein:
cd /var/tmp wget http://www.meinserver.de/fbox/debug.cfg
Danach die Datei ausführbar machen:
chmod 0755 debug.cfg
und ausführen
./debug.cfg
Klappte der Download und läuft der Prozeß openvpn, so sieht die Ausgabe von
ps | grep openvpn
folgendermaßen aus:
# ps | grep openvpn
939 root 2548 S ./openvpn --config ./my-openvpn.conf
1774 root 304 S grep openvpn
#
Sofern der fli4l am anderen Ende schon läuft, kann man die Konfiguration mal testen, indem die lokale IP des Tunnels und danach die IP des entfernten Tunnelendes angepingt wird:
# ping -c 2 192.168.200.202 PING 192.168.200.202 (192.168.200.202): 56 data bytes 64 bytes from 192.168.200.202: icmp_seq=0 ttl=255 time=10.0 ms 64 bytes from 192.168.200.202: icmp_seq=1 ttl=255 time=0.0 ms #
# ping -c 2 192.168.200.201 PING 192.168.200.201 (192.168.200.201): 56 data bytes 64 bytes from 192.168.200.201: icmp_seq=0 ttl=255 time=10.0 ms 64 bytes from 192.168.200.201: icmp_seq=1 ttl=255 time=10.0 ms #
Kommen die Antworten zurück, testet man, ob das hinter dem Tunnel liegende Netzwerk erreichbar ist. Die angepingte IP muß natürlich existieren und aktiv sein, am besten also die IP des fli4l-Routers eintragen:
# ping -c 2 192.168.6.1 PING 192.168.6.1 (192.168.6.1): 56 data bytes 64 bytes from 192.168.6.1: icmp_seq=0 ttl=255 time=10.0 ms 64 bytes from 192.168.6.1: icmp_seq=1 ttl=255 time=10.0 ms #
Danach kann die Konfiguration fest abgespeichert werden.
[edit] Dauerhaftes Hinterlegen der Konfiguration auf der Fritz!Box
Holen sie sich die erstellte Datei "debug.cfg" per Internet-Download auf die Fritz!Box:
cd /var/tmp wget http://www.meinserver.de/fbox/debug.cfg
Kopieren sie die Datei in den Flashspeicher:
cp debug.cfg /var/flash/debug.cfg
Beim nächsten Neustart werden die in der Datei hinterlegten Befehle abgearbeitet.
Hinweise:
Durch diese Modifikation geht der Anspruch auf Support für die Fritz!Box durch AVM verloren.
Für die vorstehend beschriebenen Änderungen wird keinerlei Garantie auf Funktionsfähigkeit übernommen. Ich hafte für keinerlei Schäden an Hard- oder Software, die durch vorstehende Modifikationen an passender oder unpassender Hardware entstehen. Ebenso schließe ich die Haftung für jegliche Folgeschäden aus.
Ergänzungen und Meinungen hierzu sind jederzeit willkommen, bitte auf meiner Diskussionseite melden. --Goodgirl 23:29, 16 Jun 2006 (CEST)
Categories: VPN | OpenVPN

