blog.bartlweb - a technologist's external brain

VPN auf HostEurope-vHosts

Durch das Fehlen des PPP-Kernelmoduls auf den vHosts von HostEurope fällt der Einsatz von PPTP als VPN-Variante leider aus. Abhilfe schafft OpenVPN allerdings nur im Tun-Modus, da ein ebenfalls fehlendes Bridging-Modul den Einsatz der bridged-Variante unterbindet. Der Vorteil des Tun-Modus - er funktioniert auch mit den oben genannten Einschränkungen. Der Nachteil des Tun-Modus - es kann sich immer nur ein Benutzer zur selben Zeit verbinden.

Die folgende Anleitung beschreibt die Konfiguration von OpenVPN im Tun-Modus auf einem Ubuntu-Server.

OpenVPN installieren

Zunächst müssen Sie OpenVPN und OpenSSL auf Ihrem Server installieren.

apt-get install openvpn
apt-get install openssl

Jetzt müssen Sie den OpenVPN-Dienst noch so einrichten, dass dieser beim Booten automatisch mitgestartet wird.

sudo update-rc.d openvpn defaults

Keys und Zertifikate erstellen

Die Authentifizierung und Verschlüsselung des Datenverkehrs basiert bei OpenVPN auf Zertifikaten. Damit OpenVPN startet und wir uns verbinden können müssen die entsprechenden Zertifikate erzeugt werden.

Voraussetzungen schaffen

Kopieren Sie sich zunächst die Vorlage easy-rsa aus der Dokumentation in die OpenVPN-Konfiguration.

cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

Im nächsten Schritt passen wir die Parameter für das Zertifikat entsprechend unseren Anforderungen an. Bearbeiten Sie dazu die Datei /etc/openvpn/easy-rsa/2.0/vars. Im ersten Schritt tauschen Sie die Zeile export D=pwd gegen die folgende aus.

export D=/etc/openvpn/easy-rsa

Danach geben Sie Ihre Werte für das Zertifikat an.

export KEY_COUNTRY="AT"
export KEY_PROVINCE="Vienna"
export KEY_CITY="Vienna"
export KEY_ORG="bartlweb.net"
export KEY_EMAIL="webmaster@bartlweb.net"

Jetzt können Sie die Einstellungen als Variablen im System setzen. Dazu nutzen wir den Punkt-Befehl.

 . /etc/openvpn/easy-rsa/2.0/vars

Key für den Server erstellen

Für die Erstellung des eigentlichen Zertifikats müssen wir zunächst die Certificate Authority erstellen.

/etc/openvpn/easy-rsa/2.0/build-ca

Danach erstellen wir die Keys für den Server, denn wir hier server nennen. Hier ist zu beachten, dass sie im Erstellen-Dialog bei Common Name ebenfalls den Servernamen (hier server) angeben und die beiden Fragen Sign the certificate? [y/n] und 1 out of 1 certificate requests certified, commit? [y/n] mit ja beantworten.

/etc/openvpn/easy-rsa/2.0/build-key-server server

Keys für die Clients erstellen

Für jeden Client der sich mit unserem OpenVPN-Server verbinden will wird am besten ein eigenes Zertifikat erstellt. So kann später gezielt einzelnen Clients der Zugriff wieder entzogen werden.

/etc/openvpn/easy-rsa/2.0/build-key <clientname>

In unserem Fall gibt es nur einen Client mit dem Namen client1.

/etc/openvpn/easy-rsa/2.0/build-key client1

Zertifikate generieren

Sobald alle Keys erstellt wurden, können wir die benötigten Zertifikate erstellen.

/etc/openvpn/easy-rsa/2.0/build-dh

Der Client benötigt später die folgenden Dateien um sich mit dem OpenVPN-Client am Server anmelden zu können. Kopieren Sie diese am besten mittels sftp oder ssh vom Server auf Ihren Client.

  • /etc/openvpn/easy-rsa/2.0/keys/ca.crt
  • /etc/openvpn/easy-rsa/2.0/keys/client1.crt
  • /etc/openvpn/easy-rsa/2.0/keys/client1.key

OpenVPN-Server konfigurieren

Nun können wir den OpenVPN-Server entsprechend für den TUN-Modus konfigurieren. Erstellen Sie dazu die Konfigurationsdatei /etc/openvpn/openvpn.conf mit dem folgenden Inhalt.

dev tun
proto tcp
port 1194
 
tun-mtu 1500
mssfix 1400
 
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
 
user nobody
group nogroup
server 10.8.0.0 255.255.255.0
 
persist-key
persist-tun
 
client-to-client
 
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
 
comp-lzo

In diesem Fall bekommt der Client eine IP-Adresse aus dem Netzwerk 10.8.0.0 (Konfiguriert über den Parameter server). Beachten Sie, dass eine VPN-Verbindung nur dann funktioniert, wenn die VPN-Verbindung eine andere Netzwerkadresse als das lokale Netzwerk nutzt.

Über den zusätzlichen Parameter push "dhcp-option DNS 8.8.8.8" können Sie dem OpenVPN-Client den DNS-Server für die Verbindung vorgeben. Ohne Angabe wird der lokal in den Netzwerkeinstellungen konfigurierte DNS-Server verwendet.

Konfiguration beim Start von OpenVPN laden

Damit unsere Konfiguration openvpn auch beim Start von OpenVPN geladen wird, müssen Sie diese im Parameter AUTOSTART der Datei /etc/default/ entweder die Konfiguration openvpn oder den Wert all angeben.

AUTOSTART="all"

NAT konfigurieren

Zuletzt müssen am Server noch einige Einstellungen für das NATing vorgenommen werden. Dies erreichen wir über iptables-Einträge die leider die Eigenschaft haben bei einem Neustart zurückgesetzt zu werden. Daher nutzen wir ein if-pre-up.d-Skript um die Einträge nach einem Neustart wieder automatisch zu setzen.

Erstellen Sie die Datei iptables unter /etc/network/if-pre-up.d mit folgendem Inhalt.

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules
exit 0

Nun setzen wir die eigentlichen Regeln.

echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -F -t nat

Vergewissern Sie sich im zweiten Befehl dieselbe Netzwerkadresse wie in der Konfiguration unter dem Parameter server anzugeben. Sobald die Befehle erfolgreich ausgeführt worden sind, kann die aktuelle iptables-Konfiguration per iptables-save gespeichert werden.

iptables-save /etc/iptables.rules

Nach einem Neustart des OpenVPN-Dienstes ist unser Server bereit für die erste Verbindung.

OpenVPN-Client konfigurieren

Den Client für Windows und Linux können Sie direkt über die Website von OpenVPN unter http://openvpn.net/index.php/download/community-downloads.html beziehen. Für OS X empfiehlt sich Tunnelblick: http://code.google.com/p/tunnelblick/.

Auch der Client hat eine Konfigurationsdatei namens openvpn.conf, die den folgenden Inhalt enthält.

dev tun
client
proto tcp
 
remote x.y.z.w 1194
 
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
 
ca ca.crt
cert client1.crt
key client1.key
 
comp-lzo
verb 3

Ersetzen Sie beim Parameter remote den Wert x.y.z.w durch die IP-Adresse Ihres Servers. Überprüfen Sie auch die Dateinamen für die Zertifikate bei den Parametern ca, cert und key.

Zusätzlich zur Konfiguration benötigen Sie die folgenden Zertifikate (wenn nicht bereits in einem vorherigen Schritt schon auf den Client kopiert) von Ihrem Server.

  • /etc/openvpn/easy-rsa/2.0/keys/ca.crt
  • /etc/openvpn/easy-rsa/2.0/keys/client1.crt
  • /etc/openvpn/easy-rsa/2.0/keys/client1.key

Mit dieser Konfiguration nutzt Ihr Client die OpenVPN-Verbindung für sämtliche Anfragen (also regulären Internet-Verkehr). Allerdings wird weiterhin der DNS-Server der am Client eingestellt ist benutzt. Wenn dieser eine öffentliche IP hat, finden die Anfragen allerdings über die VPN-Verbindung statt.

Dieser Artikel hat Dir deinen Tag gerettet?

... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? Oder einfach nur Dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Anerkennung honorierst:

Zahlung mit PayPal oder Kreditkarte.

Hinweis zur Verwendung

Die Übermittlung einer Zahlung ist eine persönliche Anerkennung Ihrerseits an den Entwickler (Christian Bartl, Privatperson). Eine Zahlung ist nicht zweckgebunden und es ist keine Gegenleistung zu erwarten. Bitte beachten Sie, dass für eine übermittelte Zahlung keine Quittung ausgestellt werden kann.

Über den Autor

Christian Bartl

Christian Bartl Requirements Engineer
& Solution Architect für Online und Mobile

Als Technologie-Enthusiast und begeisterter Programmierer entwickle ich in meiner Freizeit Websites, Software und IT-Lösungen, die mir selbst und anderen den Alltag vereinfachen.

mehr auf christian.bartl.me

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste! - Ich freue mich über deine Anmerkung, Kritik oder Frage.

Kommentar schreiben

Der hier angegebene Name wird gemeinsam mit deinem Kommentar auf der Website veröffentlicht.

Deine E-Mail-Adresse wird zur einmaligen Benachrichtigung bei Veröffentlichung des Kommentars genutzt.

Benachrichtigung per E-Mail über Antworten auf meinen Kommentar erhalten.

Bitte tippe die Zahlenkombination "8483" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.