OpenVPN-Verbindungen aufbauen: Teil 2 - Ubuntu Server einrichten
Tutorial-Serie über das Konfigurieren von OpenVPN. Teil 2 erklärt das Einrichten von OpenVPN auf einem Ubuntu Server, welcher auch das Surfen über den Server ermöglicht.
Im Artikel OpenVPN-Verbindungen aufbauen: Teil 1 - Heimischen Router mit Android verbinden bin auf die Einrichtung von einem OpenVPN-Servers auf einem Router und einem Android-Smartphone eingegangen. In diesem Artikel möchte ich auf die Einrichtung eines OpenVPN-Servers auf einem Ubuntu Server eingehen. Natürlich könnt ihr in dieser Anleitung auch die Zertifikats- und Schlüsselerstellung für euren Router benutzen, denn diese gestaltet sich wesentlich einfach als unter Windows.
OpenVPN-Server auf Ubuntu installieren
Als Basis für diesen Artikel dient ein Ubuntu Server, in der momentan aktuellen Version 13.10, welcher als virtuelle Maschine (VM) läuft. Für den einfacheren Zugriff via Putty wurde auf der VM, während der Installation, zusätzlich der OpenSSH Server installiert. Zur Einrichtung verbinden wir uns via Putty (oder einem anderen SSH Clienten) auf unseren Ubuntu Server.
Für einen OpenVPN-Server benötigen wir als erstes das OpenVPN-Package, welches wir mit folgendem Befehl installieren:
sudo apt-get install openvpn Um die Zertifikate und Co. zu erstellen, benutzen wir das "easy-rsa" - Paket. Wir entscheiden uns für den release/2.x – Branch. Den Branch ziehen wir uns lässig via git. Um das zu bewerkstelligen zu können, installieren wir uns das git-Package:
sudo apt-get install git-core
Um Git müssen wir uns nicht weiter kümmern. Wer sich für einen Aufbau eines Git-Servers interessiert, kann sich gerne meinen Artikel über das Einrichten von Git-Server und Gitweb anschauen.
Im nächsten Schritt clonen wir das “easy-rsa” - Repository in in das Konfigurationsverzeichnis von OpenVPN (/etc/openvpn)
sudo git clone https://github.com/OpenVPN/easy-rsa.git -b "release/2.x" /etc/openvpn/easy-rsa-2.x
Zertifikats- und Schlüsselerstellung mit “easy-rsa”
Das Repository wurde heruntergeladen und wir wechseln in das Verzeichnis für die Schlüsselerstellung
cd /etc/openvpn/easy-rsa-2.x/easy-rsa/2.0/
Im nächsten Schritt bearbeiten wir unsere Variablen-Datei “vars”:
sudo vi vars
Die angepassten Variablen können wir einfach am Ende der Datei einfügen, da vorhandene Werte durch unsere überschrieben werden:
# Land
export KEY_COUNTRY="DE"
# Bundesland
export KEY_PROVINCE="Saxony"
# Stadt
export KEY_CITY="Dresden"
# Organisation
export KEY_ORG="xuad"
# E-Mail-Adresse
export KEY_EMAIL="info@xuad.net"
# DynDNS-Adresse
export KEY_CN="subdomain.xuad.net"
# Schluesselname
export KEY_NAME="xuad"
# Organisationseinheit / Abteilung
export KEY_OU="development"

Bei KEY_CN sollte man die Adresse des DDNS-Providers (DynDNS, FreeDNS, oder Subdomain) angeben, welche auf die IP des Servers zeigt. Da unsere Variablen gesetzt sind, können wir die “vars”-Datei als Quelle festlegen.
source ./vars
Die folgenden Befehle werden mit sudo -E ausgeführt. Das bedeutet das die gesetzten Variablen trotz sudo gesetzt bleiben. Wir löschen vorhandene Zertifikate und Schlüssel (falls vorhanden):
sudo -E ./clean-all
Im nächsten Schritt wird die Zertifizierungsstelle erstellt:
sudo -E ./build-ca
Da wir die Informationen schon per Variablen gesetzt haben, bestätigen wir alles mit Enter. Darauf folgend erstellen wir das Zertifikatspaket für unseren Server:
sudo -E ./build-key-server server
Wieder alles per Enter bestätigen, auch “A challenge password” und “An optional company name”. Die Zertifizierungssignierung bestätigen wir mit einem "y", sowie die Anforderung des Zertifikats (1 out of 1 certificate requests certified, commit? [y/n]). Im Anschluss erstellen wir noch die Zertifikatspakete für unsere Clients. Als Beispiel nehmen wir unser Android-Telefon.
sudo -E ./build-key android
Das selbe Spiel wie bei "build-key-server" und ihr habt euer Zertifikat und dazugehörenden Schlüssel für euren Client. Zum Abschluss der Zertifizierungserstellungsorgie, wird die Diffie-Hellman-Datei erstellt:
sudo -E ./build-dh
Nach einer kurzen Berechnungsdauer steht uns die "dh2048.pem" im Keys-Verzeichnis, zur freien Verfügung, bereit.
OpenVPN-Server konfigurieren
Da wir alle Zertifikate, Schlüssel und die DH-Parameter-Datei erstellt haben, können wir endlich den OpenVPN-Server einrichten. Wir kopieren dazu die Beispiel-Konfiguration aus dem share-Verzeichnis in unser Konfigurationsverzeichnis.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/data/server.conf.gz /etc/openvpn/
Als nächstes entpacken wir die Konfiguration ...
sudo gunzip /etc/openvpn/server.conf.gz
... und öffnen die entpackte Konfigurationsdatei (server.conf):
sudo vi server.conf
Da die Einstellungen von uns überschrieben werden können, setzen wir unsere eigenen Daten an das Ende der Datei:
# VPN-Port
port 1195
# Dienst laueft aus Sicherheitsgruenden unter eigenen Benutzer und Gruppe
user nobody
group nogroup
# Verlinkung der Dateien
ca ./easy-rsa-2.x/easy-rsa/ca.crt
cert ./easy-rsa-2.x/easy-rsa/server.crt
key ./easy-rsa-2.x/easy-rsa/server.key
dh ./easy-rsa-2.x/easy-rsa/dh2048.pem
# Direktes Surfen ueber VPN
push "redirect-gateway def1 bypass-dhcp"
# IP-Adresse des DNS 192.168.1.1 (In diesem Fall die IP des Routers)
push "dhcp-option DNS 192.168.1.1"
```bash vi sudo /etc/sysctl.conf ```
Wer die Sicherheit erhöhen möchte und den Dienst mit einem anderen Benutzer und Gruppe betreiben möchte, legt einfach einen neuen Benutzer und eine neue Gruppe an:
sudo addgroup --system --no-create-home --disabled-login --group openvpn
sudo adduser --system --no-create-home --disabled-login --ingroup openvpn openvpn
... und ersetzt diese mit nobody und nogroup
# Dienst laueft aus Sicherheitsgruenden unter eigenen Benutzer und Gruppe
user openvpn
group openvpn
Die Konfiguration des OpenVPN-Servers ist abgeschlossen. Der Dienst kann neugestartet werden und die neue Konfiguration neu eingelesen werden:
sudo /etc/init.d/openvpn restart
Damit wir über den VPN-Tunnel surfen können, müssen wir noch alle Verbindungen zur Netzwerkschnittstelle umleiten. Dazu öffnen wir die “sysctl.conf”:
vi sudo /etc/sysctl.conf
und aktivieren das IP4-Forwarding (Kommentarzeichen entfernen):
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Bei einem IP6-Netzwerk muss der Kommentar der Zeile ""#net.ipv6.conf.all.forwarding=1" entfernt werden. Diese Einstellung ist erst nach einem Neustart aktiv. Da wir den Server nicht neustarten wollen, aktivieren wir das Forwarding sofort:
sudo echo "1" > /proc/sys/net/ipv4/ip_forward
Für das setzen der Route auf die Netzwerkkarte müssen wir noch die Kennung herausfinden, dass ist meist eth0. Mit dem Befehl “ifconfig” sehen wir genau, welche Kennung unsere Netzwerkkarte hat. Dieses sieht bei meiner eingerichteten VM folgendermaßen aus:
xuad (/etc/openvpn) > ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.1.50 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe57:c93a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77071 errors:0 dropped:0 overruns:0 frame:0
TX packets:44430 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:44633467 (44.6 MB) TX bytes:5843367 (5.8 MB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6272 (6.2 KB) TX bytes:6272 (6.2 KB)
Anschließend setzen wir die Route:
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
Nach einem Neustart werden diese Einstellungen leider gelöscht . Das wollen wir natürlich nicht hinnehmen und installieren uns das Paket “iptables-persistent”:
sudo apt-get install iptables-persistent Praktisch ist, dass wir gleich gefragt werden, ob die momentanen Routen gespeichert werden sollen. Das beantworten wir natürlich mit "Yes".

Die gespeicherten Routen findet man für IP4 unter: "/etc/iptables/rules.v4" und IP6 unter: "/etc/iptables/rules.v6".
Jetzt sollte der Server einsatzbereit sein und ihr könnt den Clienten einrichten. Wie das bei einem Android-Telefon funktioniert ist im Teil 1 ausführlich beschrieben. Sollte der OpenVPN-Server nicht ordentlich funktionieren, dann schaut einfach mal in folgende Log-Dateien:
sudo less /var/log/syslog
sudo less /var/log/daemon.log
Quellen:
http://wiki.ubuntuusers.de/OpenVPN