Inhalt

4. OpenVPN konfigurieren

Wie schon bei den Verschlüsselungsarten möchte ich auch hier wieder darauf hinweisen, dass das Kapitel 1 Einführung unbedingt gelesen werden sollte. In diesem werden die in dieser Konfiguration benutzten Verbindungen und IP-Nummern beschrieben.

Die Konfiguration erfolgt in dem Verzeichnis /etc/openvpn. Man kann mehrere Konfigurationen für verschiedene VPNs benutzen. Welche Konfigurationsdatei benutzt werden soll, wird OpenVPN beim Starten übergeben. In diesem Beispiel benutze ich als Dateinnamen vpn.conf. In dieser Datei wird die Konfiguration vorgenommen. Die Optionen in der Konfiguration sind (fast alle) äquivalent zu Parametern die man OpenVPN beim Aufruf mit übergeben kann. D.h. man bräuchte theoretisch gesehen keine Konfigurationsdatei, sondern könnte alles per Startparameter übergeben. Die meisten Einstellungen sind Optional und haben Standardwerte. Anm.: eine genauere Beschreibung der Optionen finden Sie in Kapitel 5 und natürlich in der Manual-Page von OpenVPN (man openvpn).

Gestartet wird OpenVPN in meinen Beispielen immer in der Eingabeaufforderung mit Übergabe der Konfigurationsdatei als Parameter (siehe 4.2.1.3). Unter Linux kann es vorkommen, dass beim Starten das Device nicht gefunden wird. Dieses Problem kann wie folgt behoben werden:
mknod /dev/net/tun c 10 200
modprobe tun

Wenn eine Firewall benutzt wird, sollte das Port 1194 oder das Netzwerkdevice freigeschaltet werden.
iptables -A INPUT -i tun+ -j ACCEPT

Zunächst sollte eine einfache, ungesicherte Verbindung zwischen zwei Rechnern aufgebaut werden. Hierdurch kann man feststellen ob es zu Firewall- und/oder Device-Problemen kommt oder nicht:
Gateway: openvpn --remote IP-CLIENT --dev tun1 --ifconfig 11.0.0.1 11.0.0.2 --verb 5
Client: openvpn --remote IP-GATEWAY --dev tun1 --ifconfig 11.0.0.2 11.0.0.1 --verb 5

Ob die Verbindung zustande gekommen ist erkennt man an der Meldung Initialization Sequence Completed. Die Verbindung kann dann durch gegenseitiges Anpingen getestet werden:
Gateway: ping 11.0.0.2
Client: ping 11.0.0.1

4.1 Die Datei 'vpn.conf'

Ich möchte nochmals daran erinnern, dass der Name der Konfigurationsdatei frei wählbar ist. Man kann auch mehrere Dateien, für verschiedene VPN-Verbindungen, verwenden. Ich beschreibe hier nur die wichtigsten Optionen. Ein Kommentar beginnt mit '#' oder ';'.

4.2 Statischer Schlüssel

Wenn man einen statischen Schlüssel (siehe 3.1) benutzt ist die Konfiguration recht simpel. Wir benutzen einen einfachen IP-Tunnel und dafür das Device tun.

4.2.1 Client-Gateway-Verbindung

Bei dieser Art der Verbindung können nur Daten zwischen den beiden Rechnern ausgetauscht werden. Auf eventuell vorhandene Netzwerke hinter dem VPN-Gateway der Zentrale kann nicht zugegriffen werden! Der Client könnte natürlich auch ein anderer VPN-Gateway sein. Hierdurch können z.B. Zertifikate, sicher von Gateway zu Gateway kopiert werden. Mein Client ist in diesem Beispiel ein Windows-Rechner. Die Konfiguration auf Windows-Rechnern ist gleich der von Linux-Rechnern bis auf den Unterschied, dass Pfadangaben mit doppeltem Backslash geschrieben werden. Für Windows gibt es noch ein paar zusätzliche Optionen (siehe Manualpage)
Als Tunnel wird ein IP-Tunnel aufgebaut. Durch diesen können nur Daten auf IP-Basis gesendet werden. Dies ist für die meisten Fälle ausreichend.

4.2.1.1 vpn.conf der Zentrale (bzw. des Gateways):

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd /etc/openvpn

# Device f. IP-Tunnel
dev tun

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Netzwerkkonfiguration (IP Zentrale - IP Zweigstelle)
ifconfig 11.0.0.1 11.0.0.2

# Authentisierung
secret private/static_key.txt

4.2.1.2 vpn.conf  der Zweigstelle (bzw. des Clients):

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd C:\\Programme\\OpenVPN\\config

# IP der Gegenstelle
remote 193.158.2.160

# Device f. IP-Tunnel
dev tun

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Netzwerkkonfiguration (IP Zweigstelle - IP Zentrale)
ifconfig 11.0.0.2 11.0.0.1

# Authentisierung
secret private\\static_key.txt

Die wichtigsten benutzten Schlüsselwörter haben folgende Bedeutung:
Die IPs, die mit ifconfig gesetzt werden, müssen in einem Subnet mit der Maske 255.255.255.252 liegen - also es müssen zwei benachbarte Nummern sein.

4.2.1.3 OpenVPN starten

Gestartet wird OpenVPN in Linux und Windows über die Kommandozeile mit dem Parameter --config um die Konfigurationsdatei zu übergeben.

Linux:
openvpn --config /etc/openvpn/vpn.conf
.
Windows:
C:\Programme\OpenVPN\bin\openvpn --config C:\Programme\OpenVPN\config\vpn.conf
Unter Windows genügt auch ein Klick mit der rechten Maustaste auf die Konfigurationsdatei. Dann kann man mit dem zweiten Eintrag im Kontextmenü OpenVPN starten. Hierzu muss die Datei jedoch die Endung .OVPN (also vpn.conf.ovpn) besitzen!

Anm.:
die weiteren Beispiele werden alle auf Zertifikaten aufbauen. Sie sind jedoch alle auch, durch entsprechende Änderung in der Konfiguration, mit einem statischen Schlüssel möglich.

4.3 Zertifikatbasiert

Im vorigen Abschnitt habe ich eine Client-Gateway-Verbindung mit einem statischen Schlüssel eingerichtet. Ab nun werde ich für die Beispiele nur noch Zertifikate benutzen. Wenn man zum Schutz für seine Private Keys ein Passwort verwendet hat, wird dieses beim Start abgefragt.

4.3.1 Client-Gateway-Verbindung

Diese Verbindungsart ist die selbe wie in 4.2.1. Es wird nur statt dem statischen Schlüssel eine zertifikatbasierte Authentisierung benutzt. Die Gegenstelle ist wieder ein Windows-Rechner.

4.3.1.1 vpn.conf der Zentrale (Gateway):

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd /etc/openvpn

# Device f. IP-Tunnel
dev tun

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Netzwerkkonfiguration (IP Zentrale - IP Zweigstelle)
ifconfig 11.0.0.1 11.0.0.2

# Auth.-Server
tls-server

# Zertifikate
ca certs/cacert.pem
cert certs/ServerCert.pem
key private/ServerKey.pem

# Diffie Hellman Parameter
dh certs/dh1024.pem

# Debug-Level
verb 5

4.3.1.2 vpn.conf des Clients:

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd C:\\Programme\\OpenVPN\\config

# IP der Gegenstelle
remote 193.158.2.160

# Device f. IP-Tunnel
dev tun

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Netzwerkkonfiguration (IP Zweigstelle - IP Zentrale)
ifconfig 11.0.0.2 11.0.0.1

# Auth.-Client
tls-client

# Zertifikate im PKCS12-Format
pkcs12 certs\\ClientP12.pem

# Debug-Level
verb 5

Die neuen benutzten Optionen dienen nun der Authentisierung. Zusätzlich habe ich noch mit verb den Debug-Modus aktiviert. Hierdurch bekommen wir ausführlichere Informationen beim Starten von OpenVPN. Mit tls-server und tls-client wird festgelegt wer bei der Authentisierung der Server  bzw. der Client ist. ca, cert, key und pkcs12 verweisen auf die Zertifikate. Die Optionen haben folgende Bedeutung:

4.3.2 Client-Netzwerk-Verbindung

Bisher hatten wir nur einfache Client-Gateway-Verbindungen getestet. D.h. es kann sich immer nur ein Client mit dem Gateway verbinden. Außerdem ist ein Zugriff auf das hinter dem Gateway liegene Firmennetzwerk nicht möglich.
Nun kommt es aber häufig vor, dass ein oder mehrere Roadwarrior Zugriff auf das Firmennetz bekommen sollen. D.h. der Gateway muss mehr als einen Client akzeptieren. Weiterhin wird er nun gleichzeitig als DHCP-Server dienen und den Roadwarriors IP-Nummern zuweisen. Vorraussetzung dafür, dass die Routen stimmen ist, das der VPN-Gateway auch der Gateway der Clients im Netzwerk ist! Ansonsten müssen auf den Clients oder dem bei den Clients eingetragenem Gateway die entsprechenden Routen gesetzt werden.

4.3.2.1 vpn.conf der Zentrale (Gateway):

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd /etc/openvpn

# Device f. IP-Tunnel
dev tun0

# Server
tls-server
server 192.168.2.0 255.255.255.0
mode server

# Zum 'merken' der IP-Nummern
ifconfig-pool-persist /etc/openvpn/ipp.txt


# Port und Protokoll
port 1194
proto udp

# Client eine neue Route zuweisen
push "route 192.168.0.0 255.255.255.0"

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Authentifizierungsmethode
auth SHA1

# Zertifikate
ca certs/cacert.pem
cert certs/ServerCert.pem
key private/ServerKey.pem

# Diffie Hellman Parameter
dh certs/dh1024.pem

# Verschlüsselungsmethode
cipher AES-256-CBC

# Script bei Verbindung
#up /etc/openvpn/vpnup

# Kompression einschalten
comp-lzo

# Debug-Level
verb 5

4.3.2.2 vpn.conf des Clients

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd C:\\Programme\\Kommunikation\\OpenVPN\\config

# Device f. IP-Tunnel
dev tun0

# Client
tls-client
pull

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Gegenstelle
remote 193.158.2.1607

# Authentifizierungsmethode
auth SHA1

# Zertifikate
ca certs\\cacert.pem
cert certs\\ClientCert.pem
key private\\ClientKey.pem

# Verschlüsselungsmethode
cipher AES-256-CBC

# Kompression einschalten
comp-lzo

# Debug-Level
verb 5
Der VPN-Gateway der Zentrale bekommt nun mitgeteilt, dass er im Servermodus läuft und DHCP-Server für das Netzwerk 192.168.2.0/24 ist. In der Datei ipp.txt werden die IPs gespeichert um Clients bei weiteren Verbindungen möglichst immer die selben zuzuweisen. Er selbst bekommt hierbei die 192.168.2.1. Bei erfolgreicher Verbindung wird auch eine neue Route (push "route ...") an den Client gesendet, damit dieser das Netzwerk findet. Um Traffic zu sparen habe ich noch die Komprimierung (comp-lzo) eingeschaltet.
Die Eigenschaften tls-client und pull können auch durch den Eintrag client ersetzt werden.

Wenn Sie sich nun nach dem Verbindungsaufbau auf dem Client seine Routingtabelle anschauen (route -n) werden sie bemerken, dass sich dort die per push übergebene Route befindet. Der Client kann nun auf die Rechner im Netz 192.168.0.0/24 zugreifen und umgekehrt. Gelegentlich kann es zu Problemen mit verschiedenen Diensten kommen. In diesem Fall sollten Sie statt dem udp das tcp-Protokoll verwenden. Dies wird durch folgende Änderungen der Konfigdateien erreicht:

vpn.conf der Zentrale (Gateway):

# Port und Protokoll
port 1194
;proto udp
proto tcp-server

# Paketgroessen
tun-mtu 1500
;fragment 1300
mssfix

vpn.conf des Clients

# Port und Protokoll
port 1194
proto tcp-client

# Paketgroessen
tun-mtu 1500
;fragment 1300
mssfix
Zu beachten ist, dass der Name für das Protokoll auf dem VPN-Gateway tcp-server und auf dem Client tcp-client lauten muss.

4.3.3 Netzwerk-Netzwerk Verbindung

In diesem Beispiel sollen nun zwei Netzwerke über zwei VPN-Gateways miteinander verbunden werden, so dass alle Rechner miteinander kommunizieren können. Wichtig ist hierbei, dass die Routen stimmen. Ich gehe davon aus, dass bei den Clients im Netzwerk die VPN-Gateways

folgt

4.3.4 Ethernet-Tunnel

Bisher benutzte ich immer das tun-Device und baute damit einen IP-Tunnel auf. Dadurch werden nur IP-Pakete übermittelt, die an eine IP-Adresse auf der jeweils anderen Seite eines Knotens gerichtet sind. Dies hat Vor- und Nachteile. Hauptvorteil ist die geringe Netzwerkbelastung. Es werden nur Daten übermittelt (geroutet) die gezielt an einen anderen Rechner gesendet wurden. Broadcast-Anfragen oder gar andere Protokolle sind nicht möglich. Wenn dies jedoch erwünscht bzw. notwendig ist, kann man das tap-Device benutzen und mit diesem einen Ethernet-Tunnel aufbauen. D.h. es werden nicht mehr nur IP-Pakete über den Tunnel geroutet, sondern das ganze Netzwerk. Dadurch sind u.a. DHCP-Anfragen möglich und es können andere Netzwerkprotokolle übermittelt werden. Ein Rechner der eine solche Verbindung aufbaut wird also fest in das vorhandene Netzwerk integriert. Dadurch werden natürlich bedeutend mehr Daten über den Tunnel gesendet als bei dem IP-Tunnel.

4.3.4.1 vpn.conf der Zentrale (Gateway):

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd /etc/openvpn

# Device f. IP-Tunnel
dev tap

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Netzwerkkonfiguration
mode server
ifconfig 11.0.0.1 255.255.255.0

# Auth.-Server
tls-server

# Zertifikate im PKCS12-Format
pkcs12 certs/ServerP12.pem

# Diffie Hellman Parameter
dh certs/dh1024.pem

# Debug-Level
verb 5

4.3.4.2 vpn.conf eines Clients:

# OpenVPN soll ins Konfig-Verzeichnis wechseln
cd /etc/openvpn

# IP der Gegenstelle
remote erde

# Device f. IP-Tunnel
dev tap

# Port und Protokoll
port 1194
proto udp

# Paketgroessen
tun-mtu 1500
fragment 1300
mssfix

# Netzwerkkonfiguration
ifconfig 11.0.0.2 255.255.255.0

# Auth.-Client
tls-client

# Zertifikate im PKCS12-Format
pkcs12 certs/ClientP12.pem

# Debug-Level
verb 5

Und wieder die Bedeutung der wichtigsten neuen bzw. geänderten Schlüsselwörter:

Wichtig ist hier, dass auch an eventuelle Firewall-Einstellungen gedacht wird. Hier wird ja nicht mehr das tun- sondern das tap-Device benutzt (iptables -A INPUT -i tun+ -j ACCEPT). Nun können mehrere Clients gleichzeitig Verbindung zum Gateway aufbauen. Jeder besitzt eine eigene IP-Adresse.


Inhalt