Sitemap | Nicht eingeloggt

Layout: V2_DayTime
V2_DayTime
| V2
V2
| V2 Dark
V2 Dark
| Alle

DE

Tux OpenVPN Logo

OpenVPN-Server einrichten

Was ist ein VPN Server?

VPN bedeutet: Virtual Private Network.
Hier ein Auszug aus Wikipedia:
Das konventionelle VPN dient dazu, Teilnehmer eines privaten (in sich geschlossenen) Netzes an ein anderes privates Netz zu binden.
Sobald also ein Computer eine VPN-Verbindung aufbaut, ist der Vorgang vergleichbar mit dem Umstecken seines Netzwerkkabels von seinem ursprünglichen Netz an ein anderes (per VPN zugeordnetes) Netz.
So kann beispielsweise ein Mitarbeiter von Zuhause aus Zugriff auf das Firmennetz erlangen, gerade so, als sässe er mittendrin. Aus Sicht der VPN-Verbindung wird dafür das ursprüngliche Netz auf die Funktion eines Verlängerungskabels reduziert, das den VPN-Teilnehmer ausschliesslich mit dem zugeordneten Netz verbindet. Technisch gesehen geht die Verbindung hin zu einem VPN-Gateway, der Anschlussstelle des zugeordneten Netzes. Dafür muss das VPN-Gateway von dem ursprünglichen Netz aus erreichbar sein. Gibt es auf dem Weg dorthin weitere dazwischen liegende Netze, dann werden auch diese bildlich gesehen zum Bestandteil des Verlängerungskabels. Dieser Vorgang, dass ein VPN-Teilnehmer (VPN-Partner) zum Teilnehmer des zugeordneten Netzes wird, funktioniert unabhängig von der physischen Topologie und den verwendeten Netzwerkprotokollen selbst dann, wenn das zugeordnete Netz von einer vollkommen anderen Art ist.

Der sich daraus ergebende Nutzen eines VPNs kann je nach verwendetem VPN-Protokoll durch eine Verschlüsselung ergänzt werden, die eine abhör- und manipulationssichere Kommunikation zwischen den VPN-Partnern ermöglicht.

Voraussetzungen

Dokumentation

Mehr Infos über OpenVPN und die Einstellungen dafür findet man wenn man hier klickt (englisch).

Installation

Bitte ein Terminal öffnen und den Befehl ausführen:

sudo apt-get install openvpn

Links

Ubuntu Wiki -> OpenVPN

Wikipedia -> OpenVPN

Konfiguration des Zertifikaterstellers

Scripts zum Erstellen der Zertifikate an eine angenehmere Stelle kopieren:

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

Ins Verzeichnis wechseln:

cd /etc/openvpn/easy-rsa

Konfigurationsdatei Vars editieren:

sudo nano vars

Folgende Zeilen editieren in die hier angezeigten Werte:

export KEY_CONFIG=$EASY_RSA/openssl-1.0.0.cnf

export EASY_RSA="/etc/openvpn/easy-rsa"

Zudem auch die folgenden Zeilen mit Deinen gewünschten Angaben editieren (zu finden ganz am Ende der Datei):

export KEY_COUNTRY="CH"
export KEY_PROVINCE="SG"
export KEY_CITY="Jona"
export KEY_ORG="VPNname"
export KEY_EMAIL="admin@email.tld"
export KEY_EMAIL=admin@email.tld
export KEY_CN="ddnsdomainname.ddns.net"
export KEY_NAME="VPNname"
export KEY_OU="VPNname"

Diese Zeilen Nicht ändern:

export PKCS11_MODULE_ PATH=changeme
export PKCS11_PIN=1234

Ersteller-Zertifikat generieren

Wir navigieren jetzt in das Verzeichnis /etc/openvpn/easy-rsa:

Damit man in das keys Verzeichnis wechselnd und überhaupt Keys generieren darf ist es nötig direkt eine Rootshell zu öffnen:

sudo su

Vars zur Verwendung einlesen (sourcen):

source vars

Der nächste Befehl löscht alle Dateien aus dem Keys Verzeichnis (Nur das erste Mal ausführen!!):

./clean-all

Dieser Befehl generiert die Diffie-Hellman Schlüssel:

./build-dh

Der nächste Befehl generiert das Aussteller-Zertifikat:

./build-ca

Und schlussendlich wird mit dem Zertifikat der eigenliche Serverschlüssel generiert:

./build-key-server VPNname

Adminkonsole wieder verlassen:

exit

Konfiguration des eigentlichen OpenVPN-Server

Öffne die OpenVPN Konfigurationsdatei auf dem Server:

sudo nano /etc/openvpn/server.conf

...Und füge diesen Inhalt ein:

dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/VPNname.crt
key /etc/openvpn/easy-rsa/keys/VPNname.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
status /var/log/openvpn-status.log
verb 3
client-to-client
push "redirect-gateway def1"
push "dhcp-option DNS ge.wünschte.dns.ip"
push "dhcp-option DNS ge.wünschte.weitere.dns.ip"
log-append /var/log/openvpn
comp-lzo

Routing einrichten

sudo nano /etc/sysctl.conf

Zeile Kommentar (#) entfernen:

net.ipv4.ip_forward=1

Aktivieren:

sysctl -p /etc/sysctl.conf

Weiterleitung der VPN Pakete ans Netzwerkinterface:

iptables -A INPUT -i tun+ -j ACCEPT

iptables -A FORWARD -i tun+ -j ACCEPT

Weiterleitung des Verkehrs zu Internet und ins interne Netz:

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -F POSTROUTING

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Permanent einrichten:

Jetzige Konfig sichern:

iptables-save > /etc/iptables.up.rules

Datei zur Ausführung beim Netzwerkstart erstellen:

nano /etc/network/if-pre-up.d/iptables

...und mit diesem Inhalt füllen:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

Noch ausführbar machen:

chmod +x /etc/network/if-pre-up.d/iptables

Portweiterleitung

Damit der OpenVPN Server erreichbar ist in Deinem Netz, musst Du den spezifizierten Port (in diesem Beispiel 1194 UDP oder TCP, je nachdem was man wählt) auf die interne ServerIP weiterleiten.

Client Konfiguration

Clientzertifikate erstellen

cd /etc/openvpn/easy-rsa

sudo su

source vars

./build-key client1

Vorgegebene Werte (von Vars) übernehmen und Passwort leer lassen.

Danach aus der Rootshell ausloggen mit:

exit

Wenn man später weitere Clientzertifikate erstellen möchte, kann man die obigen Schritte einfach wiederholen. Also vars "sourcen" und dann build-key ausführen.

Die Dateien ca.crt, client1.ca und client1.key müssen jetzt vom Server auf das Endgerät kopiert werden. Ich verwende dafür scp:

sudo scp -p keys/ca.crt keys/client1.crt keys/client1.key username@zielmaschine:/zielordner

Mit diesem Befehl wird der gesamte Inhalt des Ordners keys auf eine andere Maschine kopiert:
sudo scp -rp /etc/openvpn/easy-rsa/keys username@zielmaschine:/zielordner
Bitte sei sehr vorsichtig mit diesem Befehl, die Zertifikate etc. sind streng vertraulich!

OpenVPN-Client-Konfigurationsdatei erstellen

Die benötigte Konfigurationsdatei mit der Endung .ovpn kann auf dem Client selber erstellt werden. Es ist eine einfache Textdatei mit diesem Inhalt:

dev tun
client
proto udp
remote deine.erreichbare.domain.oder.ip 1194
ca ca.crt
cert client1.crt
key client1.key
resolv-retry infinite
route-method exe
route-delay 30
route-metric 512
route 0.0.0.0 0.0.0.0
nobind
persist-key
persist-tun
comp-lzo
verb 3

Es werden für die jeweiligen Clients immer diese Dateien benötigt:
ca.crt, client1.key, client1.crt und client1_config.ovpn

Einrichtung des Clients auf...

Android

Zuerst lädst Du die offizielle OpenVPN App aus dem AppStore herunter. Hier siehst Du die Suche nach openvpn. Bitte installiere diese App wie hier abgebildet.

Android Client 1

Wenn die App OpenVPN Connect geöffnet wird klickst Du auf die drei Punkte (orange markiert) um das Menu der App zu öffnen. Klicke dann auf Import und nochmals auf Import Profile from SD card.

Android Client 2

Suche jetzt auf Deinem Gerät nach dem Ordner mit den nötigen Dateien (wie oben erwähnt client1.crt, client1.key, ca.crt und die selber, für das Gerät erstellte client.ovpn) und klicke auf die .ovpn-Datei und danach auf das jetzt aktive select. Danach wird das Profil als eingerichtet angezeigt. Wenn Du jetzt auf Connect klickst, wird eine Sicherheitsmeldung angezeigt. Du musst sie akzeptieren.

Android Client 3

Wenn die Verbindung geklappt hat, kannst Du einen Dienst wie Whatismyip aufrufen und kontrollieren ob die IP, die erkannt wird, die externe IP Deines Servernetzes ist:

Android Client 4

Wenn die externe IP Deines VPNServers angezeigt wird, hat die Verbindung geklappt!

Ubuntu

Dieser Befehl installiert das Plugin für den Ubuntu Network Manager:

sudo apt-get install network-manager-openvpn

Nach der Installation muss der NetworkManager neu gestartet werden:

sudo service network-manager restart


Jetzt in den Einstellungen die Netzwerkeinstellungen öffnen:

Ubuntu Client 1

Hier auf das + klicken um eine weitere Verbindung einzurichten:

Ubuntu Client 2

Jetzt VPN wählen und auf Erstellen klicken:

Ubuntu Client 3

Hier OpenVPN und dann Erzeugen wählen:

Ubuntu Client 4

Jetzt zuoberst die Verbindung benennen und die jeweiligen Dateien auf der Festplatte suchen und eintragen. Wie immer werden hier die Dateien ca.crt, client1.crt und client1.key (die client.ovpn wird beim Einrichten automatisch erstellt) benötigt. Beim Gateway bitte die von Aussen erreichbare Domain oder IP eintragen:

Ubuntu Client 5

Die Verbindung wird jetzt als eingerichtet angezeigt und kann auch mit klick auf AUS/AN aktiviert werden:

Ubuntu Client 6

Bequemer kann man die Verbindung aktivieren indem man in der Menuleiste die Netzwerkverbindung anklickt und dann, wie auf dem Bild über "VPN-Verbindungen" fährt und dann die gewünschte VPN Verbindung auswählt:

Ubuntu Client 7


Bitte in der Menuleiste die Netzwerkverbindung anklicken und "Verbindungen bearbeiten" wählen:

Ubuntu Client 8

Hier hinzufügen wählen:

Ubuntu Client 9

Jetzt OpenVPN suchen und wählen:

Ubuntu Client 10

...und auf Erzeugen klicken:

Ubuntu Client 11

Jetzt zuoberst die Verbindung benennen und die jeweiligen Dateien auf der Festplatte suchen und eintragen. Wie immer werden hier die Dateien ca.crt, client1.crt und client1.key (die client.ovpn wird beim Einrichten automatisch erstellt) benötigt. Beim Gateway bitte die von Aussen erreichbare Domain oder IP eintragen:

Ubuntu Client 5

Hier habe ich festgestellt, dass ich unter "Erweitert -> Allgemein: LZO-Komprimierung verwenden" aktivieren musse, damit die Verbindung funktioniert.

Jetzt wird die Verbindung als eingerichtet angezeigt:

Ubuntu Client 12

Die Verbindung aktivieren kann man indem man in der Menuleiste die Netzwerkverbindung anklickt und dann, wie auf dem Bild über "VPN-Verbindungen" fährt und dann die gewünschte VPN Verbindung auswählt:

Ubuntu Client 7

Clientzertifikate wiederrufen / ungültig machen

cd /etc/openvpn/easy-rsa

sudo su

source vars

./revoke-full client1

Jetzt kopieren wir die crl.pem Datei in ein Verzeichnis, dass der Server lesen kann:

cp keys/crl.pem /etc/openvpn/

Serverkonfiguration anpassen, damit die ungültigen Zertifikate nicht mehr funktioneren

Diese Änderung muss nur einmal gemacht werden!

In der Serverconfiguration:

sudo nano /etc/openvpn/server.conf

...folgende Linie anfügen:

crl-verify /etc/openvpn/crl.pem

Von jetzt an kann der Client mit dem ungültigen Zertifikat nicht mehr einloggen!

Benötigte Zertifikate und Schlüssel

Die Client-Zertifikate (clientx.crt) werden auf dem Server benötigt um Zertifikate zu wiederrufen / ungültig machen!
Deshalb macht es Sinn, die .crts auf dem Server zu belassen.

Dateiname Gebraucht von Zweck Geheim
ca.crt Server und allen Endgeräten Root CA Zertifikat Nein
ca.key Nur Schlüsselsignierende Maschine Root CA Schlüssel JA
dh{n}.pem Nur Server Diffie Hellman Parameter Nein
server.crt Nur Server Server Zertifikat Nein
server.key Nur Server Server Schlüssel JA
client1.crt Nur Client1 Client1 Zertifikat Nein
client1.key Nur Client1 Client1 Schlüssel JA
client2.crt Nur Client2 Client2 Zertifikat Nein
client2.key Nur Client2 Client2 Schlüssel JA
client3.crt Nur Client3 Client3 Zertifikat Nein
client3.key Nur Client3 Client3 Schlüssel JA

Infos zum Dokument
Author: Christoph Iseli
Datum: 24.03.2015
Letzte Änderung: 16.05.2015

0 Kommentare

Einen neuen Kommentar hinzufügen

Info: Wenn Du eingeloggt bist, musst Du keine Userdaten mehr eingeben.

Ort:
(Optional)

Kommentar:

Impressum
Programmierung: Christoph Iseli | Design: Christoph Iseli
Webseitencode: Darf frei kopiert / verwendet werden (Downloads) | Inhalt: Darf frei verwendet werden, solange ein Link auf diese Seite mitgegeben wird.