Sie sind hier:  /  Netzwerk  /  VPN  /  OpenVPN: Routing

Deutsch  /  English

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