So richten Sie eine OpenVPN Verbindung ein

Wollten Sie schon immer einen eigenen VPN Server einrichten? Damit Sie wissen, dass die VPN Verbindung auch wirklich sicher ist, um unliebsame VPN-Sperren zu umgehen oder einfach nur anonym zu surfen? Dann haben wir hier eine passende Anleitung für Sie. Lernen Sie innerhalb weniger Minuten, wie Sie mit einem Linux System eine Client Verbindung unter OpenVPN einrichten.


Es gibt einige Gründe, wozu man eine eigene VPN-Verbindung nutzen kann, hier noch einmal ein ganz praktischer: Wenn Sie beispielsweise einen vServer in den USA mieten und diesen wie hier erklärt konfiguriert, so ist es möglich unbeschränkt auf Angebote zuzugreifen, welche normalerweise nur in den USA zugänglich sind (Netflix, etc.). Oftmals ist die Einrichtung eines solchen vServers günstiger als die Nutzung eines VPN Dienstes, zudem werden diese VPN Zugänge nicht von Dienstanbietern geblockt.

Vorbereitung

Was benötigen Sie, um loszulegen?

  • vServer eines Providers (mit TUN/TAP Unterstützung und einer statischen IP-Adresse)
  • Ein Heimnetzwerk (mit LAN und DMZ) (nehmen wir einfachheitshalber einmal an, dass die Netzwerkzonen die Netzadressen 10.1.0.0/24 und 10.2.0.0/24 haben, je nach eigener Infrastruktur sind diese IP-Adressen anzupassen)
  • Unbeschränkten UDP Internetzugriff / Anbindung an den Server
  • Einen freien Port (etwa den Standardport: 443)

Einrichtung

Nachdem Sie über alle notwendigen Ressourcen verfügen, kann mit der eigentlichen Einrichtung begonnen werden.
Dazu schalten Sie sich auf den Server auf (über SSH) und führen zunächst folgenden Befehl zum Updaten der Package-Liste aus:

sudo apt-get update

Je nachdem wann Sie das letzte Mal diese Liste aktualisiert haben, kann die Ausführung des Befehls eine Weile dauern.
Ist der Vorgang abgeschlossen können Sie mit der notwendigen Softwareinstallation fortfahren:

sudo apt-get install openvpn openssl -y

Wie man dem Befehl entnehmen kann, wird nach Ausführung sowohl OpenVPN als auch OpenSSL installiert. Beide Komponente sind notwendig, um später eine verschlüsselte VPN Verbindung einzurichten. Haben Sie bereits eines oder sogar beide Packages installiert, so können Sie diese aktualisieren und ebenfalls nutzen.

Nachdem die beiden Packages installiert sind, bietet es sich an, zunächst mit der Konfiguration der Verschlüsselung zu beginnen — zur Erleichterung lässt sich die OpenSource Software „easy-rsa“ nutzen. Das Tool dient zur simplen Konfiguration einer PKI (Private Key Infrastructure), CA über ein Command-Line-Interface (CLI).

Dazu laden Sie zunächst von Github das entsprechende Tool herunter, entpacken und speichern es in einem dafür vorgesehenen Ordner:

sudo wget --no-check-certificate -O ~/easy-rsa.tar.gz https://github.com/OpenVPN/easy-rsa/
sudo tar xzf ~/easy-rsa.tar.gz -C ~/
sudo mkdir -p /etc/openvpn/easy-rsa3/
sudo cp ~/easy-rsa/easy-rsa/3.0/* /etc/openvpn/easy-rsa/3.0/

Die noch vom Download vorhandenen Dateien und Ordner können Sie anschließend löschen:

sudo rm -rf ~/easy-rsa sudo rm -rf ~/easy-rsa.tar.gz

Da die Dateien in /etc/openvpn/easy-rsa3/ abgelegt sind, müssen Sie in diesen Ordner wechseln und die Standard-Konfigurationsdatei kopieren, um sie anschließend anzupassen:

sudo cp -u -p openssl-1.0.0.cnf openssl.cnf

Verschlüsselung anpassen (mit 2048-Bit Verschlüsselung):

sudo sed -i 's|export KEY_SIZE=1024|export KEY_SIZE=2048|' /etc/openvpn/easy-rsa/3.0/vars

Anpassung innerhalb der PKI:

sudo su
. /etc/openvpn/easy-rsa/3.0/vars
. /etc/openvpn/easy-rsa/3.0/clean-all
export EASY_RSA="${EASY_RSA:-.}"
"$EASY_RSA/pkitool" --initca $*
export EASY_RSA="${EASY_RSA:-.}"
"$EASY_RSA/pkitool" --server server

# Schlüssel der Clients generieren
export KEY_CN="$CLIENT"
export EASY_RSA="${EASY_RSA:-.}"
"$EASY_RSA/pkitool" $CLIENT
. /etc/openvpn/easy-rsa/3.0/build-dh

Damit ist die Konfiguration der Zertifikate/Schlüssel abgeschlossen. Nun muss nur noch einiges an dem OpenVPN Server konfiguriert werden und die Schlüssel richtig platziert werden. Dazu nutzen Sie am besten wie zuvor auch die default Vorlagen, welche bereits auf Ihrem System sind.

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
cd /etc/openvpn/easy-rsa/3.0/keys
cp ca.crt ca.key dh2048.pem server.crt server.key /etc/openvpn
cd /etc/openvpn

Die Datei server.conf enthält wichtige Einstellungen, wie etwa den Standard-Gateway, das zu verwendende Zertifikat oder DNS-Server.
In diesem Fall passen Sie den Schlüssel etwas an (Bitlänge), legen einen default Gateway fest, setzten den Port auf 443 und nutzen die DNS-Server von Google zur Namensauflösung.

sed -i 's|dh dh1024.pem|dh dh2048.pem|' server.conf
sed -i 's|;push "redirect-gateway def1 bypass-dhcp"|push "redirect-gateway def1 bypass-dhcp"|' server.conf
sed -i "s|port 1194|port 443|" server.conf
sed -i 's|;push "dhcp-option DNS 8.8.8.8"|push "dhcp-option DNS 8.8.8.8"|' server.conf
sed -i 's|;push "dhcp-option DNS 8.8.4.4"|push "dhcp-option DNS 8.8.4.4"|' server.conf

Nun sind Sie mit der Serverkonfiguration fast fertig, wir aktivieren allerdings noch ip_forward und verhindern Meldungen on der sysctl Datei.

sed -i 's|#net.ipv4.ip_forward=1|net.ipv4.ip_forward=1|' /etc/sysctl.conf
echo 1 > /proc/sys/net/ipv4/ip_forward

Das Tool „iptables“ kann zusätzliche Sicherheit bieten, da sich dort eine genaue Route festlegen lässt — zunächst installieren Sie es über:

apt-get install iptables

Anschließend können Routen festgelegt werden, in Ihrem Fall sehen diese wie folgt aus (Weiterleitung an den korrekten Port):
$IP muss in diesem Beispiel mit Ihrer IP-Adresse ersetzt werden!

iptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-port 443
sed -i "1 aiptables -t nat -A PREROUTING -p udp -d $IP --dport 53 -j REDIRECT --to-port 443" /etc/rc.local
iptables -t nat -A POSTROUTING -s 10.3.0.0/24 ! -d 10.3.0.0/24 -j SNAT --to $IP
sed -i "1 aiptables -t nat -A POSTROUTING -s 10.3.0.0/24 ! -d 10.3.0.0/24 -j SNAT --to $IP" /etc/rc.local

Die Konfiguration des Servers ist nun vollständig abgeschlossen. Man kann die Routen beliebig anpassen und dadurch verschiedene Netze/Systeme erreichen.

Nach einem Neustart des OpenVPN Dienstes kann dieser bereits Verbindungen entgegennehmen.

/etc/init.d/openvpn restart

Um eine Verbindung herzustellen, benötigt der Client allerdings entsprechende Konfigurationsdateien und die Zertifikate. Alle benötigten Dateien lassen sich mit folgenden Befehlen auf dem Server erstellen (ID kann dabei beliebig benannt werden und stellt ihr eigenes Erkennungsmerkmal dar):

cd /etc/openvpn/easy-rsa/3.0/
source ./vars
export KEY_CN="ID"
export EASY_RSA="${EASY_RSA:-.}"
"$EASY_RSA/pkitool" ID
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/ID.ovpn
sed -i "/ca ca.crt/d" ~/ID.ovpn
sed -i "/cert client.crt/d" ~/ID.ovpn
sed -i "/key client.key/d" ~/ID.ovpn
echo "" >> ~/ID.ovpn
cat /etc/openvpn/easy-rsa/3.0/keys/ca.crt >> ~/ID.ovpn
echo "" >> ~/ID.ovpn
echo "" >> ~/ID.ovpn
cat /etc/openvpn/easy-rsa/3.0/keys/ID.crt >> ~/ID.ovpn
echo "" >> ~/ID.ovpn
echo "" >> ~/ID.ovpn
cat /etc/openvpn/easy-rsa/3.0/keys/ID.key >> ~/ID.ovpn
echo "" >> ~/ID.ovpn

Nach Ausführung der Befehle finden sich die Konfigurationsdateien und Zertifikate im Home-Ordner des Servers. Überträgt man diese nun auf einen Client, so kann man eine VPN-Verbindung vornehmen.

Unter Windows lässt sich beispielsweise das Programm „Securepoint SSL VPN“ nutzen. Für Linux bietet sich der openvpn Client an. Und mac-Nutzer können Tunnelblick als Tool nutzen.

Es lassen sich mehere Zertifikate pro Server erstellen, indem man die oben gezeigte Erstellung der Konfigurationsdateien mehrfach ausführt. Je nach Konfiguration ist es auch möglich, dass die eingewählten Clients sich untereinander erreichen können. Der OpenVPN kann also zur sicheren Verbindung von IT-Systemen genutzt werden, welche sich tatsächlich an völlig unterschiedlichen Orten befinden.


Bildquelle: Imilian/Shutterstock