Diese Anleitung beschreibt die Installation und Konfiguration für einen lauffähigen OpenVPN Server auf einem Debian 8 (jessie) Server.
Diese Anleitung ist in folgende Schritte unterteilt:
- OpenVPN installieren
- Zertifizierungsstelle und Öffentlichen Schlüssel erstellen
- Zertifikate und Privater Schlüssel erstellen
- Diffie Hellman Parameter erstellen
- Zertifikate und Schlüssel verschieben
- Benutzer Zertifikat löschen/Benutzer löschen
- VPN-Server konfigurieren
- iptables / Firewall Regeln
- OpenVPN Server starten und zum VPN-Server verbinden
Hintergrundinformationen:
- Der Debian Server hat die lokale Lan-IP-Adresse: 192.168.55.16 | DNS IP: 192.168.55.1
- Der OpenVPN Server hat und verteilt IP-Adressen aus: 10.8.0.0/24
- Der OpenVPN Server heißt: xyzserver
- Der Benutzer lautet: benutzer1
Punkt 1 | OpenVPN installieren
OpenVPN installieren:
apt-get install openvpn easy-rsa
Punkt 2 | Zertifizierungsstelle und Öffentlichen Schlüssel erstellen
Die Easy-RSA Scripte nach /etc/openvpn kopieren und einen Ordner für die Keys erstellen:
cp -r /usr/share/easy-rsa/ /etc/openvpn mkdir /etc/openvpn/easy-rsa/keys
Bevor man den Öffentlichen Schlüssel (Public Key) generiert, muss man einige Variablen des easy-rsa Scriptes anpassen. Hier ein Beispiel der relevanten Werte:
Datei: /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="DE" export KEY_PROVINCE="NRW" export KEY_CITY="Düsseldorf" export KEY_ORG="Privat GmbH" export KEY_EMAIL="info@examplee.de"
Die Zertifizierungsstelle und der Öffentliche Schlüssel kann folgendermaßen erstellt werden:
cd /etc/openvpn/easy-rsa/ . /etc/openvpn/easy-rsa/vars . /etc/openvpn/easy-rsa/clean-all . /etc/openvpn/easy-rsa/build-ca
Diese Scripte fordern Sie auf eine Reihe von Werten/Daten anzugeben. Wenn die richtigen Werte in der „/etc/openvpn/easy-rsa/vars“ eben eingestellt wurden, dann einfach nur mit Enter alles bestätigen.
Punkt 3 | Zertifikate und Privaten Schlüssel erstellen
Mit der Zertifizierungsstelle kann man nun den Privaten Schlüssel (private key) erstellen. Wichtig ist hierbei, das „xyzserver“ mit dem Hostnamen bzw. mit den Namen des OpenVPN-Servers ersetzt wird:
. /etc/openvpn/easy-rsa/build-key-server xyzserver
Wie gerade eben kommt wieder diese Abfrage der Daten, soweit alles richtig in „vars“ eingetragen worden ist, kann hier einfach mit Enter alles bestätigt werden. Das „challenge password“ und „optional company name“ sind optionale Daten und können leer gelassen werden. Am Ende muss noch „Sign the certificate“ und „1 out of 1 certificate requests certified, commit?“ mit Yes bestätigt werden.
Mit dem Private Schlüssel können wir nun Zertifikate für die VPN-Clients erstellen. Hierbei wieder darauf Achten, das „benutzer1“ mit den Namen des ersten OpenVPN-Clients ersetzt wird:
. /etc/openvpn/easy-rsa/build-key benutzer1
Damit wird ein eindeutiger Schlüssel generiert, der den Benutzer identifiziert. Wenn man sich wieder neu auf den Server einlogt und man einen Benutzer hinzufügen möchte, dann muss folgendes noch einmal eingegeben werden:
cd /etc/openvpn/easy-rsa/ . /etc/openvpn/easy-rsa/vars . /etc/openvpn/easy-rsa/build-key benutzername
Punkt 4 | Diffie Hellman Parameter erstellen
mehr dazu findet man bei Wikipedia > http://de.wikipedia.org/wiki/Diffie-Hellman-Schl%C3%BCsselaustausch
Die „Diffie Hellman“ Parameter generieren (ist ein Verfahren zur Authentifizierung und des Schlüsselaustausches):
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
Punkt 5 | Zertifikate und Schlüssel verschieben
In dem Ordner „/etc/openvpn/easy-rsa/keys/“ findet man nun alle generierten Zertifikate und Schlüssel.
Folgende Zertifikate, Schlüssel und Configs müssen später auf den Client PC kopiert werden:
- ca.crt
- benutzer1.crt
- benutzer1.key
- client.conf
Die Zertifikate und Schlüssel für den Server, die nach „/etc/openvpn“ kopiert werden müssen, lauten:
- ca.crt
- ca.key
- dh2048.pem
- xyzserver.crt – kann evtl. anders heißen, sprich hier sollte der Name auftauchen, der oben anstatt von xyzserver eingegeben wurde.
- xyzserver.key – kann evtl. anders heißen, sprich hier sollte der Name auftauchen, der oben anstatt von xyzserver eingegeben wurde.
Hiermit werden die Zertifikate und Schlüssel dementsprechend nach „/etc/openvpn“ kopiert. Auch hier wieder „xyzserver“ mit dem Hostnamen bzw. mit den Namen des OpenVPN-Servers ersetzen:
cd /etc/openvpn/easy-rsa/keys cp ca.crt ca.key dh2048.pem xyzserver.crt xyzserver.key /etc/openvpn
Punkt 6 | Benutzer Zertifikat wieder löschen/Benutzer löschen
Wenn man einen OpenVPN-Benutzer/Zugang löschen möchte, dann einfach folgendes ausführen (benutzer1 muss natürlich wieder ersetzt werden):
. /etc/openvpn/easy-rsa/vars . /etc/openvpn/easy-rsa/revoke-full benutzer1
Punkt 7 | VPN-Server konfigurieren
Wir nehmen die Beispiel Konfiguration von OpenVPN, entpacken diese und verschieben diese in den richtigen Ordner:
cd /usr/share/doc/openvpn/examples/sample-config-files gunzip -d server.conf.gz cp server.conf /etc/openvpn/ cp client.conf ~/ cd ~/
Zunächst müssen noch in der „server.conf“ die Zertifikat und Key-Namen (in dem Beispiel „xyzserver“) geändert werden:
Datei: /etc/openvpn/server.conf
# (see "pkcs12" directive in man page). ca ca.crt cert xyzserver.crt key xyzserver.key  # This file should be kept secret
Nun bearbeiten wir die „client.conf“ und setzen unseren OpenVPN Servernamen/Serverip:
Datei: ~/client.conf
# The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote vpn.beispiel.de 1194
danach müssen in der gleichen Datei noch die Zertifikatnamen angepasst werden, in unserem Beispiel „benutzer1.crt“ und „benutzer1.key“:
# SSL/TLS parms. # See the server config file for more # description.  It's best to use # a separate .crt/.key file pair # for each client.  A single ca # file can be used for all clients. ca ca.crt cert benutzer1.crt key benutzer1.key
Wenn ein Client bei dem Internetanbieter Unitymedia ist, muss dieser Client in seiner client.conf noch folgendes hinzufügen:
link-mtu 1432
Nun muss die Konfigurationsdatei auf den Client PC kopiert werden. Dieser Schritt muss für jeden Benutzer wiederholt werden, sprich jeder Benutzer bekommt im Prinzip seine eigene „client.conf“ Datei.
Punkt 7.1 | Benutzerdefinierte Einstellungen:
Sitution: Der OpenVPN Server ist in der Firma installiert. Die Clients sollen in das Interne Netz können um zum Beispiel Netzwerkprogramm zu öffnen oder sonstige Dienste nutzen zu können. Wenn das gewünscht ist, muss noch folgendes in die „server.conf“ eingetragen werden:
Damit man auch in andere Netze kann (in meinem Beispiel 192.168.55.X und dem Subnetz: 255.255.255.0), muss folgendes angepasst werden:
# address pool (10.8.0.0/255.255.255.0) # back to the OpenVPN server. push "route 192.168.55.0 255.255.255.0"
Um nun noch DNS-Namen aus dem 192.168.55.X Netz auflösen zu können, muss natürlich auch ein DNS-Server eingetragen werden:
# The addresses below refer to the public # DNS servers provided by opendns.com. push "dhcp-option DNS 192.168.55.1"
Punkt 8 | iptables / Firewall Regeln
iptables/Firewall so anpassen das die Verbindungen erlaubt werden:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -o venet0:0 -j SNAT --to 192.168.55.16
Hier ggf. die Netzwerkschnittstelle anpassen, bei OpenVZ müsste es meist „venet0:0“ sein, bei KVM usw. „eth0“!
Um Pakete weiterleiten zu können, dann noch in der Datei:
nano /etc/sysctl.conf
folgendes auskommentieren:
net.ipv4.ip_forward=1
und ein
echo 1 > /proc/sys/net/ipv4/ip_forward
Punkt 9 | OpenVPN Server starten und zum VPN-Server verbinden
Um den VPN-Server zu starten, führt man unter Debian 8 folgendes aus:
systemctl start openvpn@server
Hinweis: mit @server wird die Konfigurationsdatei „server.conf“ gestartet, die sich im /etc/openvpn Ordner befindet.
Möchte man nun das OpenVPN auch beim Systemstart startet, muss noch folgedens ausgeführt werden:
systemctl enable openvpn@server
Auf den Client PC muss nun ein VPN Client installiert werden. Benutzt man einen Windows System und den OpenVPN-Client von openvpn.net, muss dieser als Admin installiert werden und auch immer als Administrator gestartet werden. Zudem muss die Datei „client.conf“ in „client.ovpn“ umbenannt werden und alle Dateien (benutzer1.crt, benutzer1.key, ca.crt und client.ovpn) in den OpenVPN Config Ordner (bei mir c:\Programme\OpenVPN\config\) kopiert werden.
Danach das Programm OpenVPN starten [ALS ADMINISTRATOR] (unten neben der Uhr erscheint ein Symbol), rechte Maustaste und auf verbinden klicken.
Danke für deine Anleitung.
Habe das ganze auf einem Raspberry gemacht – kann mich per anroid-phone zwar verinden aber erreiche trotzdem keine lokale Ressource .-(
Funktionirt die Namensauflösung (DNS), kann man irgendwas direkt mit der IP anpingen?