Fli4l-Fritz!Box VPN

From Fritz!Box
Jump to: navigation, search

AVM Wiki >> Tipps+Tricks >> Fli4l-Fritz!Box VPN @ whmf   -   IRC-Chat   -   hu nl it English
Community Modelle Zubehör Environment Konfiguration Shell-Befehle Software Freetz Lexikon Tipps+Tricks Bilder

Hardware-Tipps System-Tipps Netzwerk-Tipps Telefonie-Tipps Software-Tipps Sonstige Tipps Todo

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.


Contents

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.


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.


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.


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


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


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


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.


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!


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


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.


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 &
   

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.


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.


Ö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.

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


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.


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)