OpenVPN: Konfiguration von Server und Client

OpenVPN eignet sich zum Aufbau eines Virtuellen Privaten Netzwerks(VPN). Die Daten werden dabei über eine mit TLS verschlüsselte Verbindung übertragen. Im folgenden Beitrag wird erklärt, wie Server und Client eingerichtet werden können. Die Beschreibung bezieht sich auf Ubuntu 12.04, sollte sich jedoch auch ohne Probleme auf andere Distributionen übertragen lassen.

Server

Im ersten Schritt wird zunächst der Server konfiguriert. Doch bevor damit begonnen werden kann, müssen alle benötigten Pakete installiert werden.

$ sudo apt-get install bridge-utils openvpn

Da der OpenVPN Server im Bridge-Modus betrieben werden soll, ist eine Anpassung der Netzwerkkonfiguration in der Datei /etc/network/interfaces notwendig. Dabei wird eine Bridge mit der IP-Adresse Konfiguriert und die Physische Netzwerkschnittstelle zu gewiesen.

Ausgehend von folgendem Beispiel ...

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
iface eth0 inet static
        address         192.168.0.2
        netmask         255.255.254.0
        gateway         192.168.0.1

... sollte die Konfiguration nach der Umstellung der folgenden ähnlich sein.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
iface eth0 inet manual
        up ip link set $IFACE up promisc on
        down ip link set $IFACE down promisc off

auto br0
iface br0 inet static
        address         192.168.0.2
        netmask         255.255.254.0
        gateway         192.168.0.1
        bridge_ports    eth0

Sind alle Änderungen durchgeführt kann die Netzwerkkonfiguration neu eingelesen werden. Achtung: Dieser Schritt sollte nur durchgeführt werden, wenn sicher gestellt werden kann, dass die Konfiguration richtig ist und für den Fall, dass die Netzwerkkonfiguration nicht stimmt und der Server nicht mehr erreichbar ist, ein Weg vorhanden den Server über eine Management Konsole oder ähnliches zu erreichen.

$ sudo /etc/init.d/networking restart

Ist dies geschafft, kann das System für die Erstellung der SSL-Zertifikate vorbereitet werden. Die meisten Systeme bringen dafür schon die entsprechenden Skripte mit. Durch den Befehl auf der letzten Zeile wird es möglich alle weiteren Schritte als normaler Nutzer durchzuführen.

$ sudo mkdir /etc/openvpn/easy-rsa/
$ sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
$ sudo chown -R $USER /etc/openvpn/easy-rsa/

Im vorliegenden Fall gab es ein Problem, dass die OpenSSL Version nicht richtig erkannt wird. Dies lässt sich jedoch durch eine Anpassung der Datei /etc/openvpn/easy-rsa/whichopensslcnf behebe. Hierfür wird, die Zeile 10 die original wie folgt aussieht, ...

elif $OPENSSL version | grep -E "1\.0\.([[:digit:]][[:alnum:]])" > /dev/null; then

... wie folgt geändert.

elif $OPENSSL version | grep -E "1\.0\.([[:digit:]])" > /dev/null; then

Bevor mit der Erstellung fortgefahren werden kann muss die Datei /etc/openvpn/easy-rsa/vars angepasst werden. Dabei sind neben der Schlüsselgröße folgende Werte interessant.

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_EMAIL=mail@host.domain
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

Anschließend werden die Initialen Zertifikate und Schlüssel erstellt.

Achtung: Der Befehl ./clean-all löscht alle eventuell schon vorhandenen Schlüssel. Eine Sicherung dieser bietet sich an.

$ cd /etc/openvpn/easy-rsa/
$ source ./vars
$ ./clean-all
$ ./build-dh
$ ./pkitool --initca

Ist dies geschafft wird das Zertifikat für den Server erstellt und an die entsprechende Stelle kopiert.

Achtung: Der Name der Datei dh4096.pem ist von der gewählten Schlüssellänge abhängig.

$ ./pkitool --server server
$ cd keys/
$ openvpn --genkey --secret ta.key
$ sudo cp server.crt server.key ca.crt dh4096.pem ta.key /etc/openvpn/

Danach ist es Zeit die Beispielkonfiguration zu kopieren und als Vorlage zu verwenden.

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gunzip server.conf.gz

Im folgenden sind ein paar Optionen der Datei server.conf aufgeführt, auf die während der Konfiguration ein genauerer Blick geworfen werden sollte.

local 192.168.0.2
port 1194

dev tap0

script-security 2
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"

dh dh4096.pem ; je nach größe des Schlössels anpassen

;server 10.8.0.0 255.255.255.0
server-bridge 192.168.0.2 255.255.255.0 192.168.0.100 192.168.0.200
push "route 192.168.0.2 255.255.255.0"
push "dhcp-option DNS 192.168.0.2" ; IP des DNS servers angeben
push "dhcp-option DOMAIN example.org" ; Suchpfad
tls-auth ta.key 0 ; Das Geheimnis
user nobody
group nogroup

Wie in der Konfiguration zu erkennen ist, wird ein Skript up.sh und ...

#!/bin/sh

BR=$1
DEV=$2
MTU=$3
/sbin/ifconfig $DEV mtu $MTU promisc up
/sbin/brctl addif $BR $DEV

... down.sh benötigt, die Beide unter /etc/openvpn liegen und ausführbar sein müssen.

#!/bin/sh

BR=$1
DEV=$2

/sbin/brctl delif $BR $DEV
/sbin/ifconfig $DEV down

Damit das Routing funktioniert muss es aktiviert werden. Dies kann entweder mit folgendem Befehl temporär bis zum nächsten Neustart erfolgen.

$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Oder es wird der entsprechende Wert in der Datei /etc/sysctl.conf angepasst. Bei dieser Methode muss jedoch der Server neu gestartet werden, damit die Änderung wirksam wird.

net.ipv4.ip_forward=1

Zum Schluss muss noch der OpenVPN Dienst gestartet bzw. neu gestartet werden.

$ sudo service openvpn restart

Client

Bevor mit der eigentlich Konfiguration auf dem Client begonnen wird, muss der Schlüssel noch auf dem Server erstellt werden. Dazu ist eine Anpassung der Datei /etc/openvpn/easy-rsa/vars notwendig. Es sollte mindestens der Wert für KEY_NAME angepasst werden.

Anschließend ist die Erstellung des Client-Schlüssels möglich.

$ cd /etc/openvpn/easy-rsa/
$ source ./vars
$ ./pkitool home

War dieser Vorgang erfolgreich müssen die Dateien ca.crt, home.crt, home.key und ta.key aus dem /etc/openvpn/easy-rsa/keys/ Verzeichnis auf den Client unter /etc/openvpn kopiert werden. Alle weiteren Schritte werden dann auf dem Client ausgeführt.

Auch hier kann eine Vorlage kopiert werden.

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn

Anschließend muss die Datei /etc/openvpn/client.conf angepasst werden. Dabei sollten zunächst folgenden Werten besondere Aufmerksamkeit gelten.

dev tap
remote vpn.example.org 1194

cert home.crt
key home.key

tls-auth ta.key 1

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Das Skript /etc/openvpn/update-resolv-conf sollte nur verwendet werden, wenn der DNS Server im VPN Netz verwendet werden soll. Zum Schluss muss auch hier der OpenVPN Dienst neu gestartet werden.

$ sudo service openvpn restart

Troubleshooting

Wichtig ist, dass beim Aufbau der Verbindung nichts überstürzt wird. Der Verbindungsaufbau brauch einen kurzen Moment. Sollte es dennoch zu Problem kommen, steht die Datei /var/log/syslog zur Verfügung. Sie wird standardmäßig für das Logging verwendet und sollte auf dem Server und auf dem Client bei der Lösungssuche behilflich sein.

Verwandte Artikel