Ratgeber für Reseller

Netze sicher verbinden mit Fritzbox und VPN

19.05.2011 von Albert Lauchner
Mit der FritzBox lassen sich zwei Netzwerke über eine DSL-Leitung zu einem einzigen zusammenschalten. Alle Geräte können so auf alle Ressourcen zugreifen. Angreifer haben durch die VPN-Verschlüsselung keine Chance.
Foto: AVM

Ein Virtual Private Network ist das Mittel der Wahl, wenn man Daten zwischen zwei räumlich getrennten Netzwerken über das Internet austauschen will. Das VPN verschlüsselt die Informationen beim Sender, schickt sie über eine unsichere öffentliche Internetleitung und entschlüsselt sie auf der Gegenseite wieder. Dabei stellt das VPN sicher, dass die Daten auf dem Transport weder mitgelesen noch verändert werden können und dass sie von einem autorisierten Sender stammen.

Theoretisch kann man zwei Rechner, die sich an zwei Standorten mit DSL-Anschluss befinden, auch mit den VPN-Bordmitteln von Windows XP und Linux verbinden. Doch dabei treten diverse Probleme auf, da beispielsweise das NAT in den DSL-Routern die Absenderadressen modifiziert und somit die geschützten Pakete verändert. Doch selbst wenn die VPN-Verbindung über die Netzwerkgrenzen mit dem PC endlich klappt: Spätestens wenn man mit der Spielekonsole aus einem Netzwerk auf die MP3-Sammlung im anderen Netz zugreifen will, ist Schluss mit der lokalen VPN-Installation auf dem Client.

Die weitaus intelligentere Lösung ist, die Netzwerkkopplung und das VPN-Management komplett in den DSL-Router zu verlagern. In diesem Beitrag beschreiben wir eine derartige VPN-Verbindung über die Fritz Box von AVM. Darüber können dann alle Netzwerkgeräte des einen Standorts über eine abgesicherte Verbindung auf alle Netzwerkgeräte des anderen Standorts zugreifen. Da der Router die Kopplung regelt, muss auf den Netzwerk-Devices keine Konfiguration geändert oder Software installiert werden. Die Teilnehmer bemerken den Unterschied zwischen lokalen und entfernten Gegenstellen nicht einmal.

DSL-Upload als Bremse

Einen Unterschied beim Zugriff auf lokale und entfernte Netzwerkressourcen gibt es dennoch: die Geschwindigkeit oder besser gesagt, den Datendurchsatz. Hierbei ist die DSL-Leitung der limitierende Faktor. Verbindet man etwa zwei Standorte über VPN, die beide noch über DSL2000 an das Internet angebunden sind, so ist in beide Richtungen die DSL-Uploadgeschwindigkeit mit 192 Kbit/s die Obergrenze. Damit lässt sich zwar prima ein Multiplayer-Game zwischen zwei PCs oder Konsolen spielen. Auch das Öffnen eines Office-Dokuments geschieht in einer vertretbaren Zeit. Doch wer beispielsweise mit seinem WLAN-Noxon-Client auf die MP3-Sammlung der Dreambox im anderen Netzwerk zugreifen will, wird höchstens bei MP3s mit 128 Kbit/s glücklich.

Selbst die Anzeige eines gut gefüllten Verzeichnisses auf einem Rechner der Gegenseite wird mit DSL2000 zur Geduldsprobe. Was ein "dir" auf der Commandline mit fünf Netzwerkpaketen und rund 5 KB Traffic erledigt, kann im Windows-Explorer schon einmal 100 KB an Datenverkehr erzeugen. Wer mit dem Explorer im Dateibaum navigiert, muss daher bei jedem Klick mit fünf Sekunden Denkpause rechnen. Da bei der VPN-Kopplung der Upload auf der Serverseite die Geschwindigkeit bestimmt, sollte man beim professionellen Einsatz zumindest dort den DSL-Upload auf 384 oder 576 Kbit/s erhöhen.

Darüber hinaus haben wir auch im Langzeitbetrieb mit der im Folgenden vorgestellten Lösung nur positive Erfahrungen gemacht. Einmal auf der Fritz Box eingerichtet, kann man an beiden Standorten beliebige Netzwerkgeräte hinzufügen - alle Geräte im Gesamtnetz können sofort mit ihnen kommunizieren.

SSL-VPN mit OpenVPN

Für die Kopplung der beiden Netzwerke über die Fritz Box haben wir uns für die Open-Source-Software "OpenVPN" entschieden. OpenVPN setzt auf das SSL/TLS-Protokoll und ist damit weitaus einfacher zu konfigurieren als IPSec, aber ebenso sicher. Zudem existieren von OpenVPN neben fertigen Binaries für Windows- und Linux-PCs auch Versionen für den MIPS-4KEc-Prozessor der Fritz Box. Wichtigstes Argument war jedoch, dass sich eine aktive Community im ip-phone-forum schon seit längerem mit diesem Thema beschäftigt und bei Problemen gerne weiterhilft.

Im Prinzip ist die Installation der VPN-Verbindung recht einfach: Auf beiden Fritz Box-Routern sind lediglich das OpenVPN-Binary, eine gemeinsame Keydatei zur Verschlüsselung und eine Konfigurationsdatei zur Steuerung der OpenVPN-Netzwerkparameter nötig. Allerdings ergibt sich dabei noch ein kleines Problem. Es gibt nur eine Stelle in der Fritz Box, an der Daten permanent gespeichert werden können und auch nach einem Reboot wieder zur Verfügung stehen: die Konfigurationsdatei "debug.cfg" im Verzeichnis "/var/flash".

Wer noch eine fabrikneue Fritz Box besitzt, benötigt daher erst einmal einen telnet-Zugang zur Box, um auf die debug.cfg zugreifen zu können. Da wir in der debug.cfg umfangreiche Daten ablegen werden (unter anderem den gemeinsamen Key), empfehlen wir, auch gleich einen FTP-Server mit zu installieren. Zwar könnte man alle nötigen Änderungen auch mit dem integrierten vi-Editor vom telnet-Prompt aus erledigen, aber damit sind Fehler vorprogrammiert. Deutlich bequemer ist es, die debug.cfg per "FTP" auf den PC zu kopieren, dort zu bearbeiten und dann wieder per "FTP" zurückzukopieren.

OpenVPN - Einwahl unter Windows und Linux
Von hier aus wird getestet, ob wir alles richtig gemacht haben.
OpenVPN - Einwahl unter Windows und Linux
Wir können uns einwählen und die Adressen 192.168.150.50 und 192.168.50.1 anpingen.
OpenVPN - Einwahl unter Windows und Linux
Mit dem Netzwerk-Manager lässt sich die Client-Verbindung schnell einrichten.
OpenVPN - Einwahl unter Windows und Linux
Das hinzufügen einer VPN-Verbindung ist wirklich ein Kinderspiel.
OpenVPN - Einwahl unter Windows und Linux
Wenn Sie den Netzwerk-Manager verwenden, haben Sie schnell Zugriff auf die sichere Einwahl.
OpenVPN - Einwahl unter Windows und Linux
Diese Methode funktioniert eben so gut, wie über die Kommandozeile.
OpenVPN - Einwahl unter Windows und Linux
Mit nur zwei Mausklicks wählt sich der Client ein.
OpenVPN - Einwahl unter Windows und Linux
Unter Windows ist die Einwahl ebenfalls ein voller Erfolg.
OpenVPN - Einwahl unter Windows und Linux
Mit dieser Methode haben Sie einen Schnellzugriff auf die VPN-Verbindung.

Vorbereitung

Vor dem Zusammenschalten der Netzwerke muss man sich noch ein paar Gedanken über die verwendeten IP-Adressen machen. Standardmäßig verwendet die Fritz Box das private Class-C-Subnetz 192.168.178. Alle Netzwerkgeräte erhalten also vom DHCP-Server der Box eine Adresse, die mit 192.168.178 beginnt, die Box selbst liegt normalerweise auf 192.168.178.1. Da wir zwei Netzwerke zusammenschalten wollen, dürfen diese allerdings nicht im selben Subnetz liegen, da es sonst beispielsweise zu doppelten IP-Adressen kommt. Daher muss man zumindest eines der Netze auf einen anderen Adressraum legen.

Gehen Sie dazu in die Webkonfiguration der Fritz Box. Den entsprechenden Eintrag finden Sie unter "System/Netzwerkeinstellungen/IP-Adresse". In diesem Beitrag liegt das eine Netz historisch bedingt auf 192.168.100, das zweite auf 192.168.1. In Ihrer Wahl sind Sie im Bereich 192.168 frei, Sie sollten jedoch nicht die 192.168.200 benutzen, da unsere Konfiguration Adressen daraus für interne Routing-Zwecke benötigt.

Noch ein letzter Tipp: Wenn Sie Netzwerkgeräte mit fester IP-Adresse im Einsatz haben (Printserver, Multimedia-Clients), sollten Sie deren Adressen umstellen, bevor Sie das Subnetz in der Fritz Box ändern. Nach dem Wechsel des Subnetzes sind die Geräte sonst über Ihre alte IP-Adresse nicht mehr erreichbar.

Key-Datei erzeugen

OpenVPN bietet verschiedenste Möglichkeiten wie feste Key-Dateien und Zertifikate, um die Verbindung über das Internet abzusichern. Für unsere Zwecke ist ein einfacher statischer (preshared) Key vollkommen ausreichend, da wir keine Verwaltungsfunktionen für große Netzwerke wie etwa ein Schlüsselmanagement benötigen.

Bevor wir mit der Installation beginnen, benötigen wir den gemeinsamen Schlüssel für alle VPN-Teilnehmer. OpenVPN arbeitet zur Verschlüsselung mit einer 2048-Bit-Key-Datei. Um den Rechenaufwand gering zu halten, nutzt die Software davon lediglich 128 Bit für die Verschlüsselung nach dem Blowfish-Algorithmus und 160 Bit für die HMAC-SHA1-Signatur der Pakete. Nach gegenwärtigem Stand ist diese Verschlüsselung aber auch mittelfristig nicht zu brechen.

Workshop OpenVPN
Das OpenVPN-Projekt steht unter der GPL.
Workshop OpenVPN
Das Kopieren der Beispiele nach /etc/openvpn erleichtert die weitere Konfiguration.
Workshop OpenVPN
TecChannel hat den Schlüssel auf 2048 erhöht und die Landes-Informationen angepasst.
Workshop OpenVPN
Ein Zertifikat ist schnell und mittels nur drei Befehlen erstellt.
Workshop OpenVPN
Der Server-Schlüssel ist ebenso schnell angefertigt wie das Master-Zertifikat.
Workshop OpenVPN
Je nach Hardware kann die Erzeugung dieses Schlüssels (Diffie Hellmann) eine Weile in Anspruch nehmen.
Workshop OpenVPN
Die Beispiel-Datei ist ein guter Ausgangspunkt und ausgezeichnet dokumentiert.
Workshop OpenVPN
Mit dieser Einstellung teilen wir dem Client mit, dass er den gesamten Datenverkehr durch das Virtual Private Network abhandeln soll.
Workshop OpenVPN
Soll jeglicher Datenverkehr durch das VPN gehen, sind Einstellungen am Netzwerk notwendig.
Workshop OpenVPN
Der Administrator muss dafür sorgen, dass sich Server und Client verstehen. Ist die Kompression am Server (comp-lzo) aktiviert, muss der Client das wissen.
Workshop OpenVPN
Von hier aus wird getestet, ob wir alles richtig gemacht haben.
Workshop OpenVPN
Wir können uns einwählen und die Adressen 192.168.150.50 und 192.168.50.1 anpingen.
Workshop OpenVPN
Mit dem Netzwerk-Manager lässt sich die Client-Verbindung schnell einrichten.
Workshop OpenVPN
Das hinzufügen einer VPN-Verbindung ist wirklich ein Kinderspiel.
Workshop OpenVPN
Wenn Sie den Netzwerk-Manager verwenden, haben Sie schnell Zugriff auf die sichere Einwahl.
Workshop OpenVPN
Diese Methode funktioniert eben so gut, wie über die Kommandozeile.
Workshop OpenVPN
Mit nur zwei Mausklicks wählt sich der Client ein.
Workshop OpenVPN
Unter Windows ist die Einwahl ebenfalls ein voller Erfolg.
Workshop OpenVPN
Mit dieser Methode haben Sie einen Schnellzugriff auf die VPN-Verbindung.
Workshop OpenVPN
Ein error 23 sagt uns, dass das Zertifikat gesperrt wurde. Ausgesperrt ist der Anwender allerdings noch nicht.
Workshop OpenVPN
Dieses Zertifikat darf sich nun nicht mehr einwählen und wird abgelehnt.
Workshop OpenVPN
Derzeit ist nur der Nutzer tecchannel auf dem VPN-Server eingewählt.

Server-Fritz-Box einrichten

Beim Zusammenschalten von zwei Netzwerken über DSL wird eine Fritz Box als Server, die andere als Client konfiguriert. Auf beiden läuft zwar die identische Software. Doch der Server verhält sich nach dem Start der Box passiv und wartet auf eine Verbindungsanfrage, während der Client aktiv die Verbindung zum Server aufbaut. Darüber hinaus gibt es keinen Unterschied, die Netzwerkteilnehmer können Daten selbstverständlich in beiden Richtungen austauschen.

OpenVPN benötigt zum Start eine Konfigurationsdatei, in die alle relevanten Parameter eingetragen sind. Im Folgenden sehen Sie bereits die komplette Konfigurationsdatei der Server-Box.

dev tun0
dev-node /dev/misc/net/tun
ifconfig 192.168.200.2 192.168.200.1
tun-mtu 1500
float
mssfix

#Pfad zum Key File
secret /var/tmp/secret.key

#Protokoll auf TCP und Port 1194
proto tcp-server
port 1194

#Protokollierung auf 4
verb 4

#Routen setzen, bei route Subnetz des Clients
# bei push Subnetz des eigenen Servers eintragen
route 192.168.1.0 255.255.255.0
push "route 192.168.100.0 255.255.255.0"

#Verbindung erhalten
ping 15
push "ping 15"
ping-restart 120
push "ping-restart 120"

Speichern Sie diese Konfigurationsdatei in einer temporären Textdatei. Die Konfiguration des Servers müssen Sie lediglich an zwei Stellen anpassen. In der Zeile "route 192..." tragen Sie die Subnetzadresse des späteren Clientnetzwerks (mit einer ".0" am Ende) ein. In die darunter liegende Zeile "push..." geben Sie analog das eigene Subnetz der Server-Fritz-Box ein. Der push-Befehl sendet die Konfigurationszeile an alle Clients, die sich anmelden. Durch die gepushte Route wird das Servernetz für den Client zugänglich. Umgekehrt sorgt der lokale route-Befehl dafür, dass die Rechner im eigenen Netz auf Ressourcen im Clientnetz zugreifen können.

Alles in die debug.cfg

Nun haben wir zwar die passende Server-Konfigurationsdatei und die Key-Datei auf dem PC in einem temporären Verzeichnis liegen. Doch irgendwie müssen diese Daten auf die Fritz Box und dort auch nach einem Reboot oder Stromausfall erhalten bleiben. Der Clou an dem von uns gewählten Weg ist nun, alle notwendigen Informationen in die debug.cfg der Box zu schreiben. Beim Booten soll dann die Box diese Daten aus der debug.cfg extrahieren und sie in die für OpenVPN benötigten Dateien speichern. Erst dann wird OpenVPN gestartet.

Im Folgenden gehen wir davon aus, dass auf der Fritz Box bereits der telnet-Daemon und der FTP-Server laufen. Mit deren Hilfe kopieren Sie nun die debug.cfg zur Bearbeitung auf den PC. Dabei müssen wir lediglich einen kleinen Umweg über eine temporäre Datei einschlagen, da AVM den direkten FTP-Lesezugriff auf Dateien im Flashspeicher verwehrt.

Loggen Sie sich daher per telnet auf die Box ein und erzeugen Sie mit
cat /var/flash/debug.cfg > /var/tmp/debug.cfg
eine temporäre Arbeitskopie. Diese kopieren Sie dann via FTP auf den PC und öffnen sie mit einem Editor zur Bearbeitung.

Noch ein letzter Hinweis, bevor es richtig losgeht. Windows und Linux nutzen unterschiedliche ASCII-Zeichen für den Zeilenumbruch in Textdateien. Daher benötigen Sie unbedingt einen Editor, der auch im Unix-Format speichern kann (nur LF am Zeilenende). Falls Sie noch keinen passenden Editor besitzen, empfehlen wir Ihnen für diesen Zweck die Freeware "Notepad2", die Sie auf der Webseite www.flos-freeware.ch/notepad2.html herunterladen können. Speichern Sie immer alle Textdateien (Skripte, debug.cfg, Konfigurationsdateien) nach der Bearbeitung am PC im Unix-Format, bevor Sie sie auf die Fritz!Box zurückkopieren. Sonst erhalten Sie die merkwürdigsten Fehler.

debug.cfg erweitern

Bislang sollte Ihre debug.cfg so aussehen (Passwort und Usernamen sind mit "x" überschrieben):

# # # # # # # # # Start des telnet-daemons
/usr/sbin/telnetd -l /sbin/ar7login

while !(ping -c 1 www.tecchannel.de); do
sleep 7
done

# # # # # # # # # Installation FTP-Server
cd /var/tmp
wget http://www.tecchannel.de/download/432803/bftpd.conf
wget http://www.tecchannel.de/download/432803/bftpd
chmod +x bftpd
chmod 777 bftpd.conf

# Hier den Usernamen und den Passwort-Hash für den FTP-Server eintragen
echo "xxxxx:xxxxxxxxxx:0:0:root:/:null" >> /var/tmp/passwd
/var/tmp/bftpd -d -c /var/tmp/bftpd.conf

Die Datei erweitern wir nun am Ende um ein Segment, das den Key zur VPN-Verschlüsselung enthält und diesen beim Booten mit dem cat-Befehl in die Datei /var/tmp/sekret.key schreibt. An die Stelle der x-Zeichen kopieren Sie Ihren vorab erzeugten Key.

# write 'secret.key' to file
cat > /var/tmp/secret.key << 'ENDSECRETKEY'


#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END OpenVPN Static key V1-----

ENDSECRETKEY

Serverkonfiguration einfügen

Analog fügen wir jetzt die Server-Konfigurationsdatei am Ende in die debug.cfg ein.

# write 'server.ovpn' to file
cat > /var/tmp/server.ovpn << 'END-SERVER-OVPN'
#
dev tun0
dev-node /dev/misc/net/tun
ifconfig 192.168.200.2 192.168.200.1
tun-mtu 1500
float
mssfix

#Pfad zum Key File
secret /var/tmp/secret.key

#Protokoll auf TCP und Port 1194
proto tcp-server
port 1194

#Protokollierung auf 4
verb 4

#Routen setzen, bei route Subnetz des Clients
# bei push Subnetz des eigenen Servers eintragen
route 192.168.1.0 255.255.255.0
push "route 192.168.100.0 255.255.255.0"

#Verbindung erhalten
ping 15
push "ping 15"
ping-restart 120
push "ping-restart 120"

END-SERVER-OVPN

Vergessen Sie nicht, die cat-Befehle am Anfang und die Label "ENDSECRETKEY" bzw. "END-SERVER-OVPN" am Ende einzufügen. Diese Zeilen sind dafür zuständig, dass die Box die Information beim Booten in die Dateien "/var/tmp/secret.key und /var/tmp/server.ovpn" schreibt.

Software nachladen

Jetzt ist zwar die Konfiguration der Server-Fritz Box erledigt, es fehlt aber noch die eigentliche OpenVPN-Software. Diese findet mit ihren zwei Megabyte im Flashspeicher der Box keinen Platz mehr. Deshalb haben wir sie bei tecChannel.de auf unserem Webserver abgelegt. Die Box lädt sie bei jedem Bootvorgang über ein wget in ihr reichlich bemessenes RAM und führt sie dort aus. Für diesen Zweck müssen wir noch ein paar wenige Codezeilen an die debug.cfg anhängen:

# Programmdatei nachladen
wget http://www.tecchannel.de/download/435560/openvpn

# ausführbar machen
chmod +x /var/tmp/openvpn
chmod 0600 /var/tmp/server.ovpn
chmod 0600 /var/tmp/secret.key

# OpenVPN als Daemon starten
./openvpn --config ./server.ovpn &

Nachdem Sie auch diese Zeilen an das Ende der debug.cfg angehängt haben, speichern Sie die Datei im Unix-Format und kopieren sie per FTP in den "/var/tmp"-Ordner Ihrer Box. Der Umweg ist nötig, da sich die Box auch beim direkten Schreibzugriff auf den Flashspeicher zickig zeigt. Anschließend loggen Sie sich per telnet ein und kopieren die Datei an ihren eigentlichen Bestimmungsort im permanenten Flashspeicher:
cp /var/tmp/debug.cfg /var/flash/debug.cfg
Starten Sie dann die Box mit "reboot" neu. Wenn Sie sich jetzt per telnet einloggen und sich alle laufenden Prozesse mit "ps" anzeigen lassen, sollte OpenVPN laufen.

Server - die komplette debug.cfg

Falls der Start von OpenVPN nicht funktionieren sollte, vergleichen Sie Ihre debug.cfg nochmals mit der komplett dargestellten Startdatei. Eine Hilfe zur Fehlersuche finden Sie am Ende des Beitrags auf der Seite "Erster Test":

# # # # # # # # # Start des telnet-daemons
/usr/sbin/telnetd -l /sbin/ar7login


while !(ping -c 1 www.tecchannel.de); do
sleep 7
done


# # # # # # # # # Installation FTP-Server
cd /var/tmp
wget http://www.tecchannel.de/download/432803/bftpd.conf
wget http://www.tecchannel.de/download/432803/bftpd
chmod +x bftpd
chmod 777 bftpd.conf

# Hier den Usernamen und den Passwort-Hash für den FTP-Server eintragen
echo "xxxxxxxxxxxxx:0:0:root:/:null" >> /var/tmp/passwd
/var/tmp/bftpd -d -c /var/tmp/bftpd.conf


# set hostname to fritz.box
hostname fritz.box

# load VPN-Server (OpenVPN)


# change dir
cd /var/tmp

# write 'secret.key' to file
cat > /var/tmp/secret.key << 'ENDSECRETKEY'
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END OpenVPN Static key V1-----

ENDSECRETKEY

# write 'server.ovpn' to file
cat > /var/tmp/server.ovpn << 'END-SERVER-OVPN'
#
dev tun0
dev-node /dev/misc/net/tun
ifconfig 192.168.200.2 192.168.200.1
tun-mtu 1500
float
mssfix

#Pfad zum Key File
secret /var/tmp/secret.key

#Protokoll auf TCP und Port 1194
proto tcp-server
port 1194

#Protokollierung auf 4
verb 4

#daemon

#Routen setzen, bei route Subnetz des Clients
# bei push Subnetz des eigenen Servers eintragen route 192.168.1.0 255.255.255.0
push "route 192.168.100.0 255.255.255.0"

#Verbindung erhalten
ping 15
push "ping 15"
ping-restart 120
push "ping-restart 120"


END-SERVER-OVPN

# load files
wget http://www.tecchannel.de/download/435560/openvpn


# make them executable
chmod +x /var/tmp/openvpn
chmod 0600 /var/tmp/server.ovpn
chmod 0600 /var/tmp/secret.key

# start OpenVPN
./openvpn --config ./server.ovpn &

Server finalisieren

Eine letzte Aufgabe auf der Server-Box bleibt noch zu erledigen. Der OpenVPN-Server wartet auf TCP-Port 1194 auf Anfragen von Clients. Bislang blockt die Firewall der Fritz Box aber noch alle Pakete ab. Über das Webinterface kann man zwar die Firewall öffnen und eine Portweiterleitung an PCs einstellen. Jedoch akzeptiert die Box keinen Eintrag für Pakete an sich selbst. Daher müssen wir dieses Loch in der Firewall von Hand erzeugen.

Die Firewall-Regeln sind in der Datei "/var/flash/ar7.cfg" abgelegt. Entweder Sie kopieren sich diese Datei analog der debug.cfg auf Ihren PC und bearbeiten sie dort (mit "cat" temporäre Datei erzeugen, "FTP" auf PC bearbeiten, "FTP" zurück zur Box, mit "cp" in das Flash kopieren). Oder Sie bearbeiten die Datei mit dem vi-Editor direkt. Wenn Sie dabei den Befehl "nvi" benutzen, können Sie die ar7.cfg auch direkt im Flash öffnen.

Suchen Sie in der ar7.cfg nach einem Block, der mit "forwardrules" beginnt und mit "shaper =" endet. Tragen Sie dort folgende Zeile zusätzlich ein:
"tcp 0.0.0.0:1194 192.168.100.1:1194 0 #OpenVPN",
Verwenden Sie bei der zweiten IP-Adresse die eigene Adresse der Server-Fritz-Box. Vergessen Sie keinesfalls das abschließende Komma, falls Sie den Eintrag nicht an das Ende des Blocks stellen. In diesem Fall müssen Sie allerdings in der darüber liegenden Zeile ein Komma und am Ende des Blocks den Strichpunkt einfügen.

DynDNS einrichten

Ein letztes Problem stellt sich noch: Da der Server an einer DSL-Leitung angeschlossen ist, besitzt er keine feste IP-Adresse. Doch wie soll später der VPN-Client dann Kontakt aufnehmen? Hier bietet sich Dynamic DNS als Lösung an.

Dazu legt man sich bei einem der Dynamic-DNS-Anbieter zunächst einen kostenlosen Account zu. Mit dessen Zugangsdaten loggt sich die Server-Fritz-Box in regelmäßigen Abständen und nach jeder Adressänderung durch den DSL-Provider ein. Die Box meldet dabei dem Dynamic-DNS-Anbieter ihre neue IP-Adresse, die der Anbieter dann in seinem DNS-Server aktualisiert. So kann er den Domain-Namen immer in die jeweils aktuelle IP-Adresse auflösen.

Einer der bekanntesten Anbieter dieser Lösung findet sich unter www.dyndns.org. Man muss beim Erzeugen eines neuen Accounts lediglich darauf achten, die kostenlose Version von Dynamic DNS zu wählen.

Hat man beispielsweise die Subdomain "tecchannel22" bei dyndns.org angemeldet, ist die Fritz Box unter tecchannel22.dyndns.org jederzeit aus dem Internet erreichbar, da der DNS-Server von dyndns.org diesen Namen zur jeweils aktuellen DSL-IP-Adresse auflöst.

Auf der Fritz Box finden Sie die Konfiguration zum automatischen Update der IP-Adresse im Webmenü unter "Internet / Dynamic DNS".

Client-Fritz-Box einrichten

Die Konfiguration der Client-Box gestaltet sich einfacher, da man hier keinen dyndns-Account einrichten muss. Auch sind keine Änderungen an der Firewall nötig, weil die Client-Box ja selbst aktiv die Verbindung initiiert. Im Prinzip sind wieder die bekannten drei Blöcke in der debug.cfg nötig: Key-Datei herausschreiben, Konfigurationsdatei herausschreiben, Software nachladen und starten.

Das Vorgehen entspricht dem für die Server-Box. Als einfachsten Ansatz empfehlen wir wieder, erst den FTP-Server zu installieren und das Editieren am PC zu erledigen. Der einzige Unterschied zur Server-Box-Installation liegt in der Konfigurationsdatei, die auf der Clientseite ein paar zusätzliche Einträge benötigt.

ifconfig 192.168.200.1 192.168.200.2
dev tun
dev-node /dev/misc/net/tun
tun-mtu 1500
mssfix
persist-tun
persist-key

#Remote Adresse des Servers angeben
#muss entsprechend geaendert werden
remote tecchannel22.dyndns.org

#Pfad zum Key File
secret /var/tmp/secret.key

#Protokoll auf TCP und Port 1194
#Änderungen müssen auf Client- und Server-Seite gleich sein
proto tcp-client
port 1194


#Da die Verbindung alle 24 Stunden getrennt wird
#soll regelmäßig kontrolliert werden ob die Verbindung noch steht
ping 15
ping-restart 120

#Der DynDNS-Name soll alle 60 Sekunden neu aufgelöst werden
#da OpenVPN sonst ständig versucht über die alte IP
#zu verbinden
resolv-retry 60

#Protokollierungseinstellung
#4 ist optimaler Modus
verb 4

#Daemon sollte erst eingeschaltet werden wenn die
#Konfiguration passt
daemon

#Routen setzen, bei route Subnetz der Server-Box
# bei push Subnetz der eignen Client-Box eintragen

route 192.168.100.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"

In der Konfigurationsdatei für den Client sind lediglich drei Zeilen anzupassen.

Sehr schön haben die Entwickler von ip-phone-forum, auf deren Vorarbeit dieser Beitrag beruht, das Problem der DSL-Zwangstrennung auf der Server- und der Client-Seite in dieser Konfigurationsdatei gelöst. Ein Ping-Paket prüft alle 15 Sekunden die Erreichbarkeit des VPN-Servers. Kommt für 120 Sekunden keine Antwort, startet sich der OpenVPN-Client neu. Ändert sich also die Adresse des Servers oder des Clients durch die DSL-Zwangstrennung und bricht dadurch die Verbindung ab, baut die Fritz Box sie automatisch nach zwei Minuten mit den neuen IP-Adressen wieder auf.

Komplette Client-debug.cfg

Hier finden Sie die komplette debug.cfg für die Client-Box. Beachten Sie, dass das Script die Konfiguration in die Datei "/var/tmp/client.ovpn" schreibt. Somit unterscheidet sich der Parameter beim Start der OpenVPN-Software auf dem Client von der Serverversion in der letzten Zeile des Listings.

# # # # # # # # # Start des telnet-daemons
/usr/sbin/telnetd -l /sbin/ar7login

while !(ping -c 1 www.tecchannel.de); do
sleep 7
done

# # # # # # # # # Installation FTP-Server
cd /var/tmp
wget http://www.tecchannel.de/download/432803/bftpd.conf
wget http://www.tecchannel.de/download/432803/bftpd
chmod +x bftpd
chmod 777 bftpd.conf

# Hier den Usernamen und den Passwort-Hash für den FTP-Server eintragen
echo "xxxxx:xxxxx:0:0:root:/:null" >> /var/tmp/passwd
/var/tmp/bftpd -d -c /var/tmp/bftpd.conf


# set hostname to fritz.box
hostname fritz.box

# load VPN-Server (OpenVPN)


# change dir
cd /var/tmp

# write 'secret.key' to file
cat > /var/tmp/secret.key << 'ENDSECRETKEY'
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END OpenVPN Static key V1-----

ENDSECRETKEY

# write 'client.ovpn' to file
cat > /var/tmp/client.ovpn << 'END-CLIENT-OVPN'
ifconfig 192.168.200.1 192.168.200.2
dev tun
dev-node /dev/misc/net/tun
tun-mtu 1500
mssfix
persist-tun
persist-key

#Remote Adresse des Servers angeben
#muss entsprechend geaendert werden
remote tecchannel22.dyndns.org

#Pfad zum Key File
secret /var/tmp/secret.key

# Check ob Äenderung in Firewall nötig
#Protokoll auf TCP und Port 1194
#Änderungen müssen auf Client- und Server-Seite gleich sein
proto tcp-client
port 1194


#da die Verbindung alle 24 Stunden getrennt wird
#soll regelmäßig kontrolliert werden ob die Verbindung noch steht
ping 15
ping-restart 120

#der DynDNS-Name soll alle 60 Sekunden neu aufgelöst werden
#da OpenVPN sonst ständig versucht über die alte IP
#zu verbinden
resolv-retry 60

#Protokollierungseinstellung
#4 ist optimaler Modus
verb 4

#Daemon sollte erst eingeschaltet werden wenn die
#Konfiguration passt
daemon

#Routen setzen, bei route Subnetz der Server-Box
# bei push Subnetz der eignen Client-Box eintragen
route 192.168.100.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"


END-CLIENT-OVPN

# load files

cd /var/tmp


wget http://www.tecchannel.de/download/435560/openvpn


# make them executable
chmod +x /var/tmp/openvpn
chmod 0600 /var/tmp/client.ovpn
chmod 0600 /var/tmp/secret.key

# start OpenVPN
./openvpn --config ./client.ovpn &

Erster Test

Nach dem Neustart der Client-Box sollte die VPN-Verbindung sofort stehen. Zum Test wechseln Sie auf einem PC im Client-Netz auf die Commandline. Von dort sollten Sie mit dem Befehl "ping" jeden PC im Server-Netzwerk erreichen. Auch vom Server-Netzwerk aus sollte jeder PC im Client-Netzwerk sofort anpingbar sein.

Haben Sie mit der Verbindung Probleme, prüfen Sie zunächst auf beiden Boxen mit einem "ps", ob OpenVPN überhaupt läuft. Falls nicht, starten Sie OpenVPN mit den Parametern der debug.cfg manuell. Dann sollten Sie im Fehlerfall eine aussagekräftige Meldung erhalten.

Läuft OpenVPN zwar, erreichen Sie aber dennoch keinen PC im Fremdnetz, pingen Sie zunächst per telnet von einer Box die andere an. Haben Sie hierbei Probleme, prüfen Sie die Firewall-Regel auf der Server-Box und die route- sowie push-Anweisungen in beiden Konfigurationsdateien.

Klappt der Ping über die Netzwerkgrenzen, können Sie sich mit freigegebenen Laufwerken auf den PCs im Fremdnetz verbinden. Treten hierbei noch Probleme auf, sind meist die Zugriffsrechte von Windows oder die Windows-Firewall die Ursachen.

Fazit

Die direkte VPN-Kopplung per Fritz Box verbindet zwei getrennte Netzwerke zu einem. Jedes Gerät hat sofort Zugriff auf alle Komponenten im Gesamtnetz. Durch die VPN-Verschlüsselung ist gewährleistet, dass dabei die Sicherheit nicht auf der Strecke bleibt.

Egal ob simpler Dateiaustausch, Zugriff auf einen gemeinsamen E-Mail- oder SQL-Applikationsserver oder auch nur ein schnelles Spiel über das Netz: Die Möglichkeiten für die abgesicherte WAN-Verbindung sind grenzenlos. Wunder kann allerdings die Fritz!Box nicht vollbringen. Bei niedriger DSL-Uploadgeschwindigkeit wird mancher Zugriff zur Geduldsprobe. (Albert Lauchner, tecChannel.de/)