OpenVPN-Anwendung: Routing zwischen drei Netzwerken
Als Beispiel für das Routing zwischen Netzwerken über eine Point-to-Point-Verbindung beschreibe ich hier meine OpenVPN-Konfiguration, mit der ich drei Heimnetzwerke miteinander verbunden habe. Alle drei VPN-Knoten laufen bei mir unter Linux, unter Windows unterscheiden sich beispielsweise die Pfadangaben und auch die Bezeichnungen der Netzwerkschnittstellen.
1. Zertifikate erzeugen
Sollen sich mehrere Clients an einem OpenVPN-Server anmelden können, ist man gezwungen die sowieso sichereren Zertifikate zu verwenden. Also muss man zu Beginn eine Zertifizierungsstelle und die Zertifikate für Client und Server erstellen. Das vorgehen hierzu ist im Internet gut Dokumentiert und somit verzichte ich hier darauf, die nötigen Schritte aufzuzeigen. Stattdessen hier nochmals der Verweis zum OpenVPN-Forum, welches auch ein kleines Wiki bietet, in dem unter anderem die Erstellung einer CA mit EasyRSA behandelt wird.
2. Installation von OpenVPN
Sind die Zertifikate erzeugt kann man sich sogleich an die Installation und Konfiguration von OpenVPN machen. Unter Linux sollte die Installation kein Problem darstellen, da OpenVPN in den Repositories der großen Distributionen zur Verfügung steht. Für Mac OS gibt es mit Tunnelblick einen einfachen und kostenlosen OpenVPN-Client, unter Windows greift man am besten zu OpenVPN GUI. Will man OpenVPN beispielsweise auf der Fritz!Box installieren, muss man sich auf ein paar Bastelarbeiten gefasst machen. Die nötigen Informationen sind im IP-Phone-Forum zu finden, welches als Treffpunkt der Fritz!Box-Modding Szene gilt.
3. Serverkonfiguration für erste Tests
Hier zuerst eine einfache Server-Beispielkonfiguration für erste Tests, danach folgen ein paar Erklärungen dazu.
; TLS-Konfiguration ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh2048.pem ; Diese Pfade müssen angepasst werden ; Netzwerkkonfiguration port 1194 proto udp dev tun0 ; Servermode-Konfiguration mode server topology p2p server 192.168.200.0 255.255.255.0 ; Tunnelkonfiguration comp-lzo keepalive 10 120 ping-timer-rem
TLS-Konfiguration
Der Abschnitt TLS-Konfiguration enthält die Pfade zu den Zertifikaten des Servers und der CA, dazu den privaten Schlüssel des Servers und eine die sogenannten Diffie-Hellman-Parameter. OpenVPN nutzt den Diffie-Hellman-Schlüsselaustausch zur verbeinbarung der Sitzungsschlüssel. Die Diffie-Hellman-Parameter sind lange Zufallszahlen, deren Berechnung viel Zeit erfordert, weshalb man diese nicht vor jedem Verbindungsaufbau erzeugt sondern auf eine entsprechend vorher erstellte Datei verweist. Die Erstellung wird auf den oben genannten Seiten zur Zertifikatserstellung beschrieben.
Netzwerkkonfiguration
Dieser Abschnitt definiert die Netzwerkparameter der VPN-Verbindung. OpenVPN soll auf Port 1194 UDP auf Anfragen lauschen und außerdem soll die Netzwerkschnittstelle tun0 für den Tunnel verwendet werden.
Servermode-Konfiguration
Hier wird OpenVPN als Point-to-Point-Server konfiguriert, der für die Point-to-Point Verbindungen IP-Adresse aus dem Netz 192.168.200.0/24 verwendet.
Achtung, der neue Modus "topology p2p" kann jedoch bisher nicht unter Windows verwendet werden, soll OpenVPN auf einer Windowsmaschine verwendet werden, kann "topology p2p" nicht verwendet werden.
Tunnelkonfiguration
OpenVPN soll die übertragenen Daten Verschlüsseln (comp-lzo) und die Verbindung durch automatisches Senden kleiner Datenpakete alle 10 Sekunden aufrecht erhalten. Schlägt dies über eine Zeit von über 120 Sekunden fehl, wird die Verbindung neu aufgebaut.
4. Clientkonfiguration für erste Tests
Den Client konfiguriert man entsprechend als Gegenstelle.
; TLS-Konfiguration ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/client.crt key /etc/openvpn/keys/client.key tls-client ; Netzwerkkonfiguration dev tun0 port 1194 proto udp remote meine-domain.dyndns.org nobind ; Client-Konfiguration client pull ; Tunnelkonfiguration keepalive 10 120 comp-lzo
TLS-Konfiguration
Auf dem Client sind keine DH-Parameter notwendig, allerdings muss der Client bei Nutzung des UDP-Protokolls definiert werden.
Netzwerkkonfiguration
Es soll eine Verbindung zu Port 1194 UDP des Rechners mit dem Domainnamen meine-domain.dyndns.org aufgebaut werden. Die Verbindung wird nicht an eine bestimmte IP-Adresse oder einen bestimmten Port gebunden werden.
Client-Konfiguration und Tunnelkonfiguration
OpenVPN arbeitet als Client und "pullt" ggf. Konfigurationsoptionen von dem Gateway. Auch der Client versucht, die Verbindung aufrecht zu erhalten. Ist auf dem Server die Kompression aktiviert, ist diese Konfigurationsoption zwangsläufig auch auf dem Client nötig.
5. Test der Verbindung
Je nach System und Netzwerkaufbau ist vor dem Verbindungsaufbau das Einrichten einer Portfreigabe (Port-Forwarding) notwendig. Danach startet man OpenVPN zuerst auf dem Server und dann auf dem Client.
OpenVPN startet man nun auf beiden Seite mit dem Aufruf von:
openvpn --config /pfad/zur/konfigurationsdatei
Meldet OpenVPN den erfolgreichen Aufbau der Verbindung, ist bereits eine sichere Kommunikation zwischen Client und Server über die IP-Adressen des Tunnels möglich. Nun kann man auf Basis dieser simplen Konfigurationarbeiten und zum Beispiel Routen zwischen den Netzwerken erstellen.
6. Routing einrichten
Hier zeige ich beispielhaft die Einrichtung des Routings. Hat man auf dem Client die Option "pull" aktiviert, konfiguriert man die Routen am Besten auf dem Server.
Soll der Client Zugriff auf ein Netz des Servers bekommen, gestatltet sich die Konfiguration sehr einfach. Man sendet dazu einfach den Befehl zur Routensetzung mit "push" an den Client, welcher die Route dann nach erfolgreichem Verbindungsaufbau in die Routing-Tabelle einfügt:
push "route 192.168.1.0 255.255.255.0"
Soll dagegen eine Route in ein Clientnetz eingerichtet werden, ist etwas mehr Konfiguration erforderlich. Insbesondere dann, wenn der Server mehreren Clients zur Verfügung steht. Dies werde ich hier jedoch nicht genauer behandeln
Damit der Server erst bei bestehender Verbindung die Routen im Betriebssystem setzt, muss zusätzlich zur Option "route" die Option "iroute" gesetzt werden:
iroute 192.168.1.0 255.255.255.0
route 192.168.1.0 255.255.255.0
IP-Forwarding aktivieren
Je nach eingesetztem Betriebssystem ist es notwendig, die Weiterleitung von IP-Paketen im Betriebssystem zu aktivieren, damit diese die Pakete zwischen den Netzen routet.
Unter Linux aktiviert man das IP-Forwarding beispielsweise mit dem Kommando:
sysctl -w net.ipv4.ip_forward=1