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.