OpenVPN ist eine openSource Software die es ermöglicht hochgradig verschlüsselte VPN-Verbindungen zu errichten. Die Konfiguration von openVPN ist zwar umfangreich jedoch relativ einfach. Man muss sowohl die Server- als auch die Client-Seite betrachten.
Unter Ubuntu installiert man openVPN ganz einfach mit apt-get install openvpn
.
Die Konfiguration folgt dem Beispiel: OpenVPN Damit eine Verschlüsselung überhaupt möglich ist müssen zunächst die SSL-Zertifikate mit zugehöriger CA erstellt werden.
Zu erst kopiert man sich die Beispielkonfiguration aus dem usr/share Verzeichnis
# sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ # sudo gunzip /etc/openvpn/server.conf.gz # sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa2
Um die CA zu erstellen navigiert man in /etc/openvpn/easy-rsa2 und legt zu erst einmal mit
sudo mkdir keys
das Verezeichnis für alle Keys an. In der Datei vars muss man nun die Einträge für die CA bearbeiten, man passt dazu die folgenden Zeilen nach seinen Anforderungen an:
export KEY_COUNTRY=DE export KEY_PROVINCE=NRW export KEY_CITY=Düsseldorf export KEY_ORG=”Vpntest” export KEY_EMAIL=”onlyspam@myhomepage.net”
Das Einlesen der vars geschieht mit
source ./vars
Danach mit
# sudo -E ./clean-all
bereinigen und mit
# sudo -E ./build-ca
die CA erstellen. Hier kann man sich mit Enter durchklicken. Beim Common Name (CN) sollte man den Namen seiner Organisation oder seiner Projektes angeben.
Zertifikat und Schlüssel für den Server werden mit
# sudo -E ./build-key-server server
erstellt. Wenn alle Angaben in der varss richtig gesetzt sind kann man hier mit Enter durchklicken. Beim Common Name sollte man den Namen des Servers angeben. Ein Challenge Passwort sollte man nicht vergeben, da man dies sonst bei jedem Start des Servers eingeben muss, damit der openVPN Server gestartet werden kann.
Zum Abschluss muss noch zwei mal mit Y bestätigt werden.
Es müssen dann noch die Diffie-Hellmann-Paramter erstellt werden, die geschieht wiederrum mit
# sudo -E ./build-dh
und kann je nach Prozessor einige Zeit dauern.
Nun liegen alle benötigten Schlüssel und Zertifikate im Verzeichnis keys/.
Die gesamte Konfiguration des Servers erfolgt über die Datei /etc/openvpn/server.conf.
Hier werden die Serverparameter angegeben und die Konfiguration der Clients.
Regeln, die auf den Clients angewendet werden sollen (Netzrouten, DNS/WINS-Umleitungen und Gateways), werden mit Pushbefehlen der Form Push „Befehl“
angegeben.
Zunächst muss man die Speicherorte der Zertifikate und des Diffie-Hellmann-Files angepasst werden. Hierzu muss man in der Konfiguration die Zeilen die auf die entsprechenden Files verweisen wie folgt anpassen:
ca ./easy-rsa2/keys/ca.crt cert ./easy-rsa2/keys/server.crt key ./easy-rsa2/keys/server.key # This file should be kept secret dh ./easy-rsa2/keys/dh1024.pem
Das Zertifikat des Servers server.crt und der Key server.key heissen nur dann so, wenn auch der Common Name des Servers so gewählt wurde. Dies muss bei anderer Benennung entsprechend angepasst werden.
Will man, dass der Server bei mehreren Netzwerkkarten nur auf einer bestimmten Netzwerkkarte horcht muss man dies mittels IP-Adresse anpassen. Hierzu trägt man zu Beginn des Files folgende Zeile ein, wenn man beispielsweise möchte, dass der Server auf der Adresse 123.123.123.123 horcht:
local 123.123.123.123
Jedes weitere Interface wird entsprechend hinzugefügt.
Natürlich will man einen VPN-Server nutzen um damit sicher auf ein privates Netzwerk zugreiffen zu können.
Standardmäßig hat der openVPN-Server ein eigenes LAN, nämlich 10.8.0.0 in dem sich er selbst unter 10.8.0.1 befindet und alle verbundenen Clients. Ab Adresse 10.8.0.6 stehen alle Adressen den Clients zur Verfügung. Im Beispiel möchten wir den Clients den Zugriff auf das LAN 192.168.178.0/24 ermöglichen. Hierzu fügen wir in folgende Zeile hinzu:
push "route 192.168.178.0 255.255.255.0"
Natürlich können beliebig viele LANs und Subnetze zugewiesen werden.
Verwendet IP-Forwarding (Routing), so muss man zuerst im Kernel die IP-Forwarding Funktionen aktivieren. Temporär macht man dies mit dem Befehl
# sudo sysctl -w net/ipv4/ip_forward=1
Will man dies dauerhaft aktivieren, so trägt man in die /etc/sysctrl.conf die Zeile
net.ipv4.ip_forward=1
ein.
Falls das Standardgateway des Netzes nicht auf dem gleichen Server läuft muss man auf dem Router eine Route hinzufügen, die den VPN-Server als Gateway für das LAN 10.8.0.0 spezifiziert. Nutzt man zum Beispiel im LAN kein Gateway, da es nur zu Internen Kommunikation genutzt wird und nicht nach außen zugänglich ist (Das Gatway für das Internet als in einem anderen Netz liegt), muss man auf jedem anderen Rechner im Netzwerk eine Route auf den VPN Server festlegen. In diesem Beispiel wollen wir, dass ein Linux-Server in dem privaten Netzwerk die Route ins Netz 10.8.0.0 findet. Hierzu fügen wir auf diesem Server eine statische Route hinzu. Temporär mit
# sudo route add -net 10.8.0.0 netmask 255.255.255.0 gw vpn.server.i.p
Um die Route nach einem Neustart noch verwenden zu können müssen wir sie in die /etc/rc.local des Computers eintragen, indem wir den gleichen Befehl ohne sudo
dort eintragen.
Will man erreichen, dass der VPN-Tunnel den gesamten Traffic des Clients abwickelt, so muss man dies in der Push-configuration festlegen., Hierzu entfernt man einfach das Kommentarzeichen der Zeile
;push "redirect-gateway def1 bypass-dhcp"
. Damit die Route ins Internet gefunden werden kann müssen noch die IP-Tables angepasst werden. Vorraussetzung dafür ist die Installtion des Pakets iptables (Siehe http://wiki.ubuntuusers.de/iptables2)
Um die Regeln zu temporär einzurichten reichen die drei Befehle:
# sudo iptables -A FORWARD -o eth0 -i tun0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT # sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Achtung: Die letzte Regel aktiviert für alle Verbindungen die über das Interface eth0 aufgebaut werden NAT, was zu ungewünschten Verhalten führen kann!. Beim Betrieb einer Firewall oder eines Routers (IP_Forwarding) auf dem Server muss die Konfiguration entsprechend verändert werden.
Da diese Regeln nach einem Neustart verloren gehen trägt man sie einfach wieder ohne sudo
in die /etc/rc.local ein.
Mach beachte hierbei, dass im ersten Befehl der Parameter von -s das Netz des VPN-Servers sein muss, und das Interface -i der Tunnel Adapter tun0 oder das TAP-Interface tap1, je nach Konfiguration.
Nachdem der Server Konfiguriert wurde starten wir ihn mit
# sudo service openvpn restart
neu.
Auch die Clients müssen Zertifikate besitzen um authentifiziert werden zu könnnen. Die Zertifikate für die Clients werden wie folgt im Ordner /etc/openvpn/easy-rsa2/ erstellt.:
#exportiere variablen der CA source ./vars #Setze den namen des neuen Zertifikates export KEY_CN=[Name des neuen Zertifikates] #Jetzt wird das zertifikat erstellt. Dies kann mit oder ohne Passwort erfolgen. #Mit Passwort ./pkitool --pass [Name des neuen Zertfikates] #oder ohne Passwort ./pkitool [Name des neuen Zertfikates]
erstellt.
Nach Abschluss der Aktion liegen die Zertifikate im Ordner /keys.
Es gibt für nahezu jedes Betriebssystem einen OpenVPN Client, ein Übersicht über diese bekommt man hier: https://community.openvpn.net/openvpn/wiki/RelatedProjects
Für den Betreib des Clients braucht man 4 Dateien (Hier mit Beispielnamen):
Die Zertifikate muss man natürlich vorher auf dem Server erstellt haben. Die Konfigurationsdatei des Clients findet man auf dem VPN-Server unter /usr/share/doc/openvpn/examples/sample-config-files/client.conf. Diese sollte man sich ins openvon Verzeichnis kopieren. Nun muss man diese Datei geringfügig anpassen: Die Remotadresse des Servers muss angegeben werden, also die öffentliche Adresse auf der der Server horcht (Siehe Serverkonfig). Angenommen unser Server hat die Adresse 176.9.72.244, dann tragen wir ein:
remote 176.9.72.244 [Port]
Natürlich kann man hier auch Domainnamen verwenden. Danach muss man noch die Zertfikatspfade anpassen. Da die Dateien alle im gleichen Verzeichnis liegen sollten tragen wir ein:
ca ca.crt cert nutzer01.crt key nutzer01.key
Danach kann man den openVPN Client starten. Nahezu alle GUIs zeigen beim Verbindungsaufbau einen LOG an, so dass man Fehler schnell erkennen kann.
Nun testen man am besteen noch, ob man alles gewünscht erreicht: Auf der lokalen Maschine teste man mittels PING im Terminal oder Windows-CMD einfach, ob man
erreicht. Funktioniert das alles so hat man die Konfiguration erfolgreich abgeschlossen.
Bei Verwendung dieses Wikis erklären Sie sich mit dem Haftungsausschluss, Nutzungsbedingungen und der Datenschutzerklärung dieses Wikis einverstanden. Impressum.