VPNs stehen seit jeher im Ruf, kompliziert und umständlich in der Konfiguration zu sein. OpenVPN zeigt, dass es auch anders geht: Mit einem Fünfzeiler bauen Sie einen sicheren Tunnel über das Internet auf.
Nach wie vor scheuen sich viele Anwender, zum externen Zugriff auf das heimische Netz ein VPN einzusetzen, obwohl dessen Nutzwert außer Frage steht. Das Argument: Ein virtuelles privates Netz sei zu umständlich und zu kompliziert einzurichten. Das mag für viel Implementationen auf IPsec-Basis durchaus zutreffen, gilt jedoch nur bedingt für OpenVPN [1].
Zugegeben: Wegen des erheblichen Funktionsumfangs und der damit verbundenen Fülle an möglichen Fehlerquellen sorgt die Software vor allem bei Einsteigern oft für Verwirrung. Tatsächlich aber lässt sich mithilfe von OpenVPN mit nur wenigen Schritten ein funktionierendes VPN aufbauen, wie dieser Artikel im Folgenden zeigt. Da es die Software nicht nur für Linux gibt, sondern auch für Mac und Windows, eignet sich OpenVPN obendrein hervorragend zum Verbinden heterogener Netze oder Hosts.
Generelles
VPN steht für für Virtual Private Network, was den Zweck recht gut erklärt. Funktional handelt es sich dabei um einen verschlüsselten Tunnel durchs Internet, innerhalb dessen die Kommunikation stattfindet. Dafür erstellt die Software beim Start ein eigenes Device (unter Linux heißt es tunX) das es zur Kommunikation verwendet. Innerhalb des Tunnels gelten die Regeln und Gesetzmäßigkeiten eines normalen LAN, auch was den Einsatz von IP-Adressen aus privaten Adressbereichen betrifft. Zur Verschlüsselung verwendet OpenVPN das als sicher eingestufte OpenSSL [2] mit frei wählbaren Algorithmen, das selbst militärischen Sicherheitsstandards genügt.
Neben der sicheren Verbindung bringt der Einsatz von VPN einen weiteren Vorteil: Er erschließt die komplette Infrastruktur des angeschlossenen Netzes und stellt sie dem per Tunnel angeschlossenen Client so dar, als ob dieser vor Ort damit verbunden wäre. Entsprechend gestattet das VPN den Zugriff auf alle m lokalen Netz laufenden Dienste wie Mailserver, Fileserver oder Proxy. Dank der verschlüsselten Verbindung besteht auch keine Notwendigkeit, die Kommunikation noch einmal extra abzusichern. Eine korrekte Konfiguration vorausgesetzt, stellt das VPN also ein enormes Sicherheitsplus für jeden übers Internet erreichbaren Server dar: Sie können die von außen erreichbaren Dienste auf ein Minimum reduzieren.
OpenVPN installieren
OpenVPN findet sich in den Repositories aller gängigen Distributionen, sodass Sie es mit dem Paketmanager Ihres Systems einrichten. Bei den hier vorgestellten Anwendungsszenarien spielt die konkrete Version keine Rolle. Hilfestellung erhalten Sie, wie bei den meisten Unix-Programmen üblich, mit openvpn --help oder man openvpn.
Eine globale Konfigurationsdatei, wie sie andere Services nutzen, fehlt bei OpenVPN. Vielmehr legen Sie für jede der Verbindungen eine eigene Konfiguration an, die alle relevanten Informationen enthält. Das gilt sowohl für die Client- als auch die Serverseite. Das Setup befindet sich unter Linux im Verzeichnis /etc/openvpn/, unter Windows in C:\Programme\OpenVPN\config\
Server-Konfiguration
OpenVPN bietet für beinahe jeden erdenklichen Anwendungsfall die richtige Lösung, die sich in der Konfiguration zwar oft nur marginal unterscheidet, in ihrer Wirkung dafür sehr. Ein häufig anzutreffendes Szenario stellt der so genannte Road Warrior dar: Es geht davon aus, dass Sie sich über das Internet mit einem mobilen Gerät an einen Host oder ein Netz anschließen, um beispielsweise Daten zu transferieren oder Mails abzuholen. Das serverseitige Minimal-Setup dazu zeigt Listing 1.
Listing 1
# /etc/openvpn/config.conf (Server) port 5000 proto tcp-server dev tun secret /etc/openvpn/preshared_key.txt ifconfig 192.168.10.1 192.168.10.2
Zeile 2 legt den Port fest, auf dem OpenVPN lauscht, Zeile 3 das Protokoll und die Rolle (Server), mit dem es arbeitet. Zeile 4 nennt das Device, das OpenVPN beim Start generiert und zur Datenübertragung nutzt. Zeile 5 legt als Authentifizierungsmethode einen Preshared Key fest. Diesen generieren Sie mittels der Eingabe
$ sudo openvpn --genkey --secret preshared_key.txt
im Terminal. Anders als beim TLS-Authentifizierungsverfahren nutzen Sender und Empfänger bei dieser Methode den selben Schlüssel. Kopieren Sie ihn nach dem Erstellen ins Standard-Konfigurationsverzeichnis von OpenVPN und setzten Sie die Benutzerrechte auf 400. Verteilen Sie den Schlüssel danach an alle Clients, die via VPN auf den Server zugreifen dürfen. Als Speicherort dient dort das Verzeichnis, in dem sich auch die Konfigurationsdatei befindet.
Die Anweisung ifconfig in Zeile 6 des Listings gibt an, welche IP-Adresse OpenVPN zur Kommunikation im Tunnel verwendet. Das “linke” Netz (im Beispiel 192.168.10.1) ist dabei immer das eigene, das “rechte” (192.168.10.2) das des Verbindungspartners.
Für einen ersten Testlauf des Servers tippen Sie nach dem Speichern der Konfiguration in der Konsole das Kommando:
$ sudo openvpn --verb 3 --config /etc/openvpn/config.conf<c>
Der Start via Terminal ist zunächst deswegen sinnvoll, weil das Programm Fehler direkt anzeigt, was beim Laden via Init-Skript nicht der Fall wäre. Der Schalter --verb aktiviert das Logging (Abbildung 1), in unentbehrliches Mittel zur Fehleranalyse. Je höher die dahinter angegebene Zahl, desto präziser erfolgt die Ausgabe.

–verb bewirkt beim Start, dass OpenVPN je nach Log-Level mehr oder weniger präzise Zustandsmeldungen anzeigt.” width=”300″ height=”131″ />
Abbildung 1: Der Schalter--verb bewirkt beim Start, dass OpenVPN je nach Log-Level mehr oder weniger präzise Zustandsmeldungen anzeigt. Erscheint nach dem Start des Servers die Meldung Listening for incoming TCP connection on [undef]:5000, dann ist die Konfiguration zumindest soweit in Ordnung, dass die Software den Start nicht abbricht. Der Befehl sudo ifconfig zeigt jetzt das zusätzliche Device tun0. Nach erfolgreichem Testlauf beenden Sie den Server mit [Strg]+[C] und starten ihn zukünftig via
# /etc/init.d/openvpn start
Ersetzen Sie im obigen Kommando die Anweisung start durch status, zeigt OpenVPN seinen aktuellen Betriebszustand. Ein stop beendet den Tunnel.
Steht der VPN-Server hinter einem Router, gilt es, auf diesem ein Portforwarding einzurichten, damit sich der Server von Außen erreichen lässt. Anders als bei IPsec benötigt der Router jedoch kein VPN-Passthrough.
Client-Konfiguration
Wie erwähnt benötigt auch der Client die OpenVPN-Software, um sich mit dem Server zu verbinden. Die Konfiguration ähnelt jener des Servers, enthält jedoch einige zusätzliche Einträge, wie Listing 2 zeigt.
Listing 2
# /etc/openvpn/config.conf (Client) remote <Öffentliche_IP_des_Servers> proto tcp-client port 5000 dev tun ifconfig 192.168.10.2 192.168.10.1 secret /etc/openvpn/preshared_key.txt
Die Anweisung remote in Zeile 2 der Konfiguration teilt dem Client mit, mit welchem Server er sich verbinden soll. Steht der Server in Ihrem Heimnetz, empfiehlt es sich anstelle einer IP-Adresse einen statischen Domainnamen zu verwenden – Näheres erläutert der Kasten “Bleibende Werte”.
Bleibende Werte
Die meisten DSL-Anbieter trennen bestehende Verbindungen nach 24 Stunden und weisen dann eine neue IP-Adresse zu. Steht Ihr VPN-Server im Heimnetz, ergibt sich daraus für den Client das Problem, dass er die neue IP nicht kennt und entsprechend auch keine Verbindung dorthin aufbauen kann. Abhilfe schaffen Anbieter wie DynDNS [3], die dynamische IP-Adressen mit festen Domainnamen verknüpfen. Beinahe alle Router besitzen ein Modul, dass es erlaubt, beim IP-Wechsel den DNS-Anbieter automatisch darüber zu informieren und DNS-Einträge entsprechend anzupassen (Abbildung 2). Sofern er online ist, erreichen Ihren VPN-Server entsprechend immer über den Domainnamen, beispielsweise meinnetz.dyndns.org.

Abbildung 2: Die meisten Router erlauben via Webfrontend die Konfiguration dynamischer DNS-Dienste wie DynDNS. Bezieht das Gerät vom Provider eine neue IP-Adresse, teilt es diese dem Anbieter mit.
Die Client-Konfiguration speichern Sie mit der Erweiterung .conf im Verzeichnis /etc/openvpn/. Nur dann erkennt OpenVPN beim Start über das Init-Skript, dass es sich um eine Konfiguration handelt, und berücksichtigt sie entsprechend. Analog zum Server starten Sie das Programm aber zunächst mit dem Aufruf
$ sudo openvpn --verb 3 --config /etc/openvpn/config.conf
Es erscheint eine Initialisierungssequenz, die mit der Ausgabe von Initialization Sequence Completed abschließt (Abbildung 3).

Initialization Sequence Completed, wurde der Tunnel zum Server erfolgreich etabliert.” width=”300″ height=”187″ />
Abbildung 3: Erscheint beim Start des Clients die MeldungInitialization Sequence Completed, wurde der Tunnel zum Server erfolgreich etabliert. Um den erfolgreichen Aufbau der Verbindung zu prüfen, geben Sie in der Konsole in unserem Beispiel ping 192.168.10.1 ein. Erscheint als Antwort eine Meldung wie 64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=24.6 ms, steht die Kommunikation zwischen den Geräten.
Allerdings gibt es bei dieser Konfiguration eine Einschränkung: Sie erreichen Dienste am Ende des Tunnels nur durch explizite Eingabe der IP-Adresse. Möchten Sie dagegen den gesamten Datenverkehr durch den Tunnel leiten, erweitern Sie die Client-Konfiguration um die Anweisung redirect-gateway def1. Damit erstellt OpenVPN ein Default-Gateway über das TUN-Device. Diese Vorgehensweise empfiehlt sich immer dann, wenn Sie Ihre Netzwerkumgebung wie von zuhause gewohnt nutzen möchten. Beim Beenden des Tunnels setzt die Software das Routing wieder auf den Ursprungszustand zurück.
Allerdings erreichen Sie in dieser Konstellation ausschließlich Dienste, die direkt auf dem VPN-Server laufen. Der Durchgriff ins Internet oder auf andere Rechner im Netz gelingt zunächst nicht. Hier hilft DNAT: das Maskieren der eigenen Adresse mit einer, die der Server vergibt. Um es zu aktivieren, geben Sie in der Konsole des Servers zunächst
# echo "1" > /proc/sys/net/ipv4/ip_forward
ein, was die Forwarding-Funktion im Kernel einschaltet. Der folgende Aufruf
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
aktiviert das Masquerading und sorgt für einen reibungslosen Datentransfer. Der Befehl sudo iptables -t nat -L zeigt die neue Regel an.
Da OpenVPN beim Start die Namensauflösung nicht automatisch anpasst, kommt es zu Problemen, wenn in Ihrer /etc/resolv.conf ein Nameserver steht, den die andere Seite des Tunnels nicht kennt. Verwenden Sie beispielsweise einen per DHCP vergebenen Nameserver Ihres Routers, ist dieser nach dem Ändern der Default-Route nicht mehr erreichbar. Der Resolver am Ende des Tunnels sucht vergebens danach.
Für dieses Problem gibt es zwei Lösungen. Die erste besteht darin, einen öffentlich zugänglichen DNS mit in die /etc/resolv.conf einzutragen, beispielsweise von Google (8.8.8.8 und 8.8.4.4). Vertrauen Sie den frei zugänglichen Diensten nicht, richten Sie im VPN-Server einen eigenen ein. Am einfachsten geschieht das mit dem DNS-Proxy Dnsmasq, der in den Repositories aller gängigen Distributionen zur Installation bereitsteht. Nach der Installation starten Sie ihn mit dem Aufruf sudo /etc/init.d/dnsmasq start. Damit die Namensauflösung klappt, gilt es nun noch, die IP-Adresse des VPN-Servers nach dem Schema nameserver IP-Adresse> in die /etc/resolv.conf einzutragen.
Windows-Client
Prinzipiell funktioniert das Einrichten eines OpenVPN-Clients unter Windows genauso wie unter Linux – allerdings gilt es einige Feinheiten zu beachten (siehe Listing 3).
Listing 3
# Client-Konfiguration (Windows) remote IP_Adresse/Domainnamen_Server proto tcp-client dev tun ifconfig 192.168.10.2 192.168.10.1 route-method exe redirect-gateway def1 secret preshared_key.txt port 5000
Damit OpenVPN in der Lage ist, die Routen anzupassen, benötigt es den Eintrag route-method exe aus Zeile 7. Anders als unter Linux benötigen die Konfigurationsdateien unter Windows die Endung .ovpn, damit das Programm sie als solche erkennt. Die Verbindungen verwalten Sie mit mit der grafischen Oberfläche openvpn-gui-1.0.3.exe, die Sie im Verzeichnis C:\Programme\OpenVPN\bin\ finden. Nach dem Aufruf nistet sie sich als rotes Netzwerk-Symbol in den System-Tray ein. Ein Rechtsklick darauf zeigt die vorhandenen Verbindungspartner an. Sie aktivieren die gewünschte Verbindung mit Connect (Abbildung 4). Ein Konsolenstart ist nicht notwendig, da beim Verbinden ein Statusfenster (Abbildung 4) hinreichend über den Verbindungszustand oder eventuelle Fehler informiert.

Abbildung 4: Per Rechtsklick auf das OpenVPN-Icon erreichen Sie unter Windows die eingerichteten Verbindungspartner.
Auch unter Windows gilt es, die DNS-Einstellungen manuell an die neuen Gegebenheiten anzupassen. Rechtsklicken Sie dazu auf das TAP-Device in der Netzwerkverwaltung und wählen Sie aus dem Kontextmenü Eigenschaften. In der Übersicht wechseln Sie zu Internetprotokoll TCP/IP und klicken auf den Schalter Eigenschaften. Nun aktivieren Sie im Konfigurationsfenster die Checkbox folgende DNS-Serveradressen verwenden: und geben den gewünschten Nameserver ein (Abbildung 5).

Abbildung 5: Damit die Namensauflösung auch bei etabliertem VPN-Tunnel klappt, gilt es, den DNS-Eintrag manuell zu konfigurieren.
Aktion Sicherer Server
Als besonders hilfreich erweist sich der Einsatz von OpenVPN bei von außen erreichbaren Servern – bekanntlich stellt jeder exponierte Dienst eine potenzielle Gefahrenquelle dar. Um die Anzahl der öffentlich erreichbaren Dienste auf ein Minimum zu reduzieren, binden Sie einfach die IP-Adresse oder das Device, auf dem der jeweilige Service lauscht, an den VPN-Tunnel. Diese Vorgehensweise bietet sich bei allen Serverdiensten an, die keinen öffentlich Zugang benötigen – beispielsweise SMB, SSH, POP3 oder SMTP.
Um beispielsweise Samba an das TUN-Device zu binden, erweitern Sie die Konfigurationsdatei /etc/smb.conf in der Rubrik [global] um die Einträge:
interfaces = tun0 bind interfaces only = Yes
Ein Restart des Servers (/etc/init.d/smb restart) aktiviert die geänderte Konfiguration.
Ähnlich einfach binden Sie den SSH-Server ans VPN-Device. Öffnen Sie die Konfigurationsdatei /etc/ssh/sshd_config und tragen Sie hinter ListenAddress die IP-Adresse des TUN-Devices ein.
Glossar
-
IPsec
-
IP Security (RFC 2401/4301). Sicherheitsprotokoll für die Kommunikation über IP-Netze, das im Gegensatz zu SSL direkt auf der Vermittlungsschicht von TCP/IP arbeitet.
-
DNAT
-
Destination Network Address Translation. Übersetzt im Gegensatz zum herkömmlichen NAT (eigentlich: Source NAT) die Ziel-Adressen und -ports.
Infos
[1] OpenVPN: http://www.openvpn.net
[2] OpenSSL: http://www.openssl.org
[3] DynDNS: http://www.dyndns.com





