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
Computer der auf einem Debian-Linux (wie z.B. auch Ubuntu, oder in meinem Fall Raspbian) läuft
Basicwissen über standard Linux Commandline Befehle
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
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:
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.
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.
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.
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:
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:
Hier auf das + klicken um eine weitere Verbindung einzurichten:
Jetzt VPN wählen und auf Erstellen klicken:
Hier OpenVPN und dann Erzeugen wählen:
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:
Die Verbindung wird jetzt als eingerichtet angezeigt und kann auch mit klick auf AUS/AN aktiviert werden:
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:
Bitte in der Menuleiste die Netzwerkverbindung anklicken und "Verbindungen bearbeiten" wählen:
Hier hinzufügen wählen:
Jetzt OpenVPN suchen und wählen:
...und auf Erzeugen klicken:
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:
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:
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:
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
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.