Einführung
In diesem Tutorial wird erklärt, wie Sie einen OpenVPN -Container mithilfe von https://docker.com [Docker] einrichten und ausführen.
OpenVPN bietet eine Möglichkeit, virtuelle private Netzwerke (VPNs) mithilfe der TLS-Verschlüsselung (Evolution of SSL) zu erstellen. OpenVPN schützt den Netzwerkverkehr vor Abhör- und Man-in-the-Middle-Angriffen (MITM). Über das private Netzwerk kann ein Gerät, z. B. ein Laptop oder ein Mobiltelefon, das in einem unsicheren WiFi-Netzwerk ausgeführt wird, sicher mit einem Remote-Server verbunden werden, der den Datenverkehr dann an das Internet weiterleitet. Private Netzwerke können auch verwendet werden, um Geräte über das Internet sicher miteinander zu verbinden.
Docker bietet eine Möglichkeit, die Prozess- und Konfigurationsdaten des OpenVPN-Servers zu kapseln, um die Verwaltung zu vereinfachen. Das Docker OpenVPN image ist vorgefertigt und enthält alle notwendigen Abhängigkeiten, um den Server in einer vernünftigen und stabilen Umgebung auszuführen. Es sind Skripte enthalten, um den Standard-Anwendungsfall erheblich zu automatisieren. Auf Wunsch ist jedoch eine vollständige manuelle Konfiguration möglich. Ein Docker-Volumencontainer wird verwendet, um auch die Konfigurations- und EasyRSA-PKI-Zertifikatdaten zu speichern.
Docker Registry ist ein zentrales Repository für offizielle und von Benutzern entwickelte Docker-Images. Das in diesem Lernprogramm verwendete Bild ist ein vom Benutzer bereitgestelltes Bild, das unter kylemanna/openvpn verfügbar ist. Das Image wird auf den Cloud-Build-Servern von Docker Registry unter Verwendung der Quelle aus dem Repository GitHub project zusammengestellt. Der mit Github verknüpfte Cloud-Server-Build bietet die Möglichkeit, das Docker-Image zu überwachen, damit Benutzer die Docker-Quelldatei und den zugehörigen Code (http://blog.docker.com/2013/11/introducing-trusted-builds/) überprüfen können. Vertrauenswürdiger Build]. Wenn der Code im GitHub-Repository aktualisiert wird, wird ein neues Docker-Image erstellt und in der Docker-Registrierung veröffentlicht.
Beispielanwendungsfälle
-
Sichere Weiterleitung zum Internet, wenn Sie sich in einem nicht vertrauenswürdigen öffentlichen (WiFi) Netzwerk befinden
-
Privates Netzwerk zum Anschließen eines mobilen Laptops, Bürocomputers, Heim-PCs oder Mobiltelefons
-
Privates Netzwerk für sichere Dienste hinter NAT-Routern, die nicht über NAT-Traversal-Funktionen verfügen
Tore
-
Richten Sie den Docker-Daemon unter Ubuntu 14.04 LTS ein
-
Richten Sie einen Docker Volume Container ein, der die Konfigurationsdaten enthält
-
Generieren Sie eine EasyRSA PKI-Zertifizierungsstelle
-
Extrahieren Sie automatisch generierte Client-Konfigurationsdateien
-
Konfigurieren Sie eine ausgewählte Anzahl von OpenVPN-Clients
-
Behandeln Sie das Starten des Docker-Containers beim Booten
-
Einführung in fortgeschrittene Themen
Voraussetzungen
-
Linux-Shell-Kenntnisse. In diesem Handbuch wird weitgehend davon ausgegangen, dass der Benutzer in der Lage ist, Linux-Daemons im herkömmlichen Sinne einzurichten und auszuführen
-
Root-Zugriff auf einem Remote-Server
-
Für dieses Tutorial wird ein DigitalOcean 1 CPU / 512 MB RAM Droplet unter Ubuntu 14.04 vorausgesetzt. Docker erleichtert das Ausführen des Images auf jeder Linux-Distribution auf dem Host
-
Jeder virtuelle Host funktioniert, solange auf dem Host QEMU / KVM- oder Xen-Virtualisierungstechnologie ausgeführt wird. * OpenVZ wird nicht funktionieren *
-
Sie benötigen Root-Zugriff auf dem Server. In diesem Handbuch wird davon ausgegangen, dass der Benutzer als nicht privilegierter Benutzer mit aktiviertem sudo ausgeführt wird. Lesen Sie das Digital Ocean-Tutorial zur Benutzerverwaltung unter Ubuntu 14.04 wenn benötigt
-
Ein lokales Clientgerät wie ein Android-Telefon, ein Laptop oder ein PC. Fast alle Betriebssysteme werden über verschiedene OpenVPN-Clients unterstützt
Schritt 1 - Docker einrichten und testen
Docker bewegt sich schnell und die LTS-Richtlinie (Long Term Support) von Ubuntu hält nicht mit. Um dies zu umgehen, installieren wir einen PPA, der uns die neueste Version von Docker liefert.
Fügen Sie den Signaturschlüssel für das Upstream-Docker-Repository-Paket hinzu. Der Befehl "+ apt-key" verwendet erweiterte Berechtigungen über "+ sudo". In diesem Fall wird möglicherweise eine Kennwortabfrage für das Kennwort des Benutzers angezeigt:
curl -L https://get.docker.com/gpg | sudo apt-key add -
-
Hinweis: * Geben Sie bei Bedarf Ihr sudo-Passwort am blinkenden Cursor ein.
Fügen Sie das Upstream-Docker-Repository zur Systemliste hinzu:
echo deb http://get.docker.io/ubuntu docker main | sudo tee /etc/apt/sources.list.d/docker.list
Aktualisieren Sie die Paketliste und installieren Sie das Docker-Paket:
sudo apt-get update && sudo apt-get install -y lxc-docker
Fügen Sie Ihren Benutzer der Gruppe "+ docker " hinzu, um die Kommunikation mit dem Docker-Daemon als normaler Benutzer zu ermöglichen, wobei "+" Ihr Benutzername ist. * Beenden und erneut anmelden, damit die neue Gruppe wirksam wird *:
sudo usermod -aG docker
Nach dem * erneuten Anmelden * überprüfen Sie die Gruppenzugehörigkeit mit dem Befehl + id +
. Die erwartete Antwort sollte "+ docker +" wie im folgenden Beispiel enthalten:
uid=1001(test0) gid=1001(test0) groups=1001(test0),27(sudo),999(docker)
Optional: Führen Sie "+ bash " in einem einfachen Debian Docker-Image aus (" - rm ", um den Container nach dem Beenden zu bereinigen, und " -it +" für interaktive Aktionen), um die Docker-Operation auf dem Host zu überprüfen:
docker run --rm -it debian:jessie bash -l
Erwartete Antwort von Docker, wenn die Bilder abgerufen und der Container eingerichtet werden:
Unable to find image 'debian:jessie' locally
debian:jessie: The image you are pulling has been verified
511136ea3c5a: Pull complete
36fd425d7d8a: Pull complete
aaabd2b41e22: Pull complete
Status: Downloaded newer image for debian:jessie
root@de8ffd8f82f6:/#
Sobald Sie sich im Container befinden, wird die Eingabeaufforderung "+ root @: / # +" angezeigt, die darauf hinweist, dass sich die aktuelle Shell in einem Docker-Container befindet. Überprüfen Sie die Version von Debian, die im Container ausgeführt wird, um sicherzustellen, dass sie sich vom Host unterscheidet:
cat /etc/issue.net
Erwartete Antwort für den OpenVPN-Container zum Zeitpunkt des Schreibens:
Debian GNU/Linux jessie/sid
Wenn Sie eine andere Version von Debian sehen, ist das in Ordnung.
Verlassen Sie den Container, indem Sie "+ logout +" eingeben. Die Eingabeaufforderung des Hosts sollte erneut angezeigt werden.
Schritt 2 - Richten Sie den Easy RSA PKI Certificate Store ein
Dieser Schritt bereitet normalerweise denjenigen Kopfzerbrechen, die mit OpenVPN oder Diensten, die PKI verwenden, vertraut sind. Glücklicherweise vereinfachen Docker und die Skripte im Docker-Image diesen Schritt, indem sie Konfigurationsdateien und alle erforderlichen Zertifikatsdateien für uns generieren.
Erstellen Sie einen Volume-Container. In diesem Lernprogramm wird die Umgebungsvariable "+" verwendet, um das Kopieren und Einfügen zu vereinfachen. Stellen Sie dies auf alles ein, was Sie möchten. Der Standardwert " ovpn-data +" wird für einzelne OpenVPN Docker-Container-Server empfohlen. Durch Festlegen der Variablen in der Shell wird die Zeichenfolgensubstitution wirksam, um zu verhindern, dass der Benutzer sie für jeden Schritt im Lernprogramm manuell ersetzt:
="ovpn-data"
Erstellen Sie einen leeren Docker-Volume-Container mit "+ busybox +" als minimalem Docker-Image:
docker run --name -v /etc/openvpn busybox
Initialisieren Sie den Container "", der die Konfigurationsdateien und Zertifikate enthält, und ersetzen Sie "" durch Ihren vollqualifizierten Domänennamen. Der Wert "++" sollte der vollständig qualifizierte Domänenname sein, den Sie für die Kommunikation mit dem Server verwenden. Dies setzt voraus, dass die DNS settings bereits konfiguriert sind. Alternativ kann auch nur die IP-Adresse des Servers verwendet werden. Dies wird jedoch nicht empfohlen.
docker run --volumes-from --rm kylemanna/openvpn ovpn_genconfig -u udp://:1194
Generieren Sie die EasyRSA PKI-Zertifizierungsstelle. Sie werden aufgefordert, eine Passphrase für den privaten CA-Schlüssel einzugeben. Wähle einen guten aus und erinnere dich daran. Ohne die Passphrase ist es nicht möglich, Client-Zertifikate auszustellen und zu signieren:
docker run --volumes-from --rm -it kylemanna/openvpn ovpn_initpki
-
Beachten Sie, dass die Sicherheit des Containers "++" wichtig ist. * Er enthält alle privaten Schlüssel zum Identifizieren des Servers und aller Client-Zertifikate. Denken Sie daran und kontrollieren Sie den Zugriff nach Bedarf. Die Standard-OpenVPN-Skripte verwenden eine Passphrase für den CA-Schlüssel, um die Sicherheit zu erhöhen und das Ausstellen gefälschter Zertifikate zu verhindern.
Weitere Informationen zum Sichern des Zertifikatspeichers finden Sie in der * Schlussfolgerung * unten.
Schritt 3 - Starten Sie den OpenVPN-Server
Um den Docker-Container, der den OpenVPN-Serverprozess ausführt, automatisch zu starten (weitere Informationen finden Sie unter https://docs.docker.com/articles/host_integration/[Docker Host Integration), erstellen Sie eine https://www.digitalocean.com/community/tutorials / das-upstart-ereignissystem-was-es-ist-und-wie-man-es benutzt
sudo vim /etc/init/docker-openvpn.conf
Inhalte, die in + / etc / init / docker-openvpn.conf +
abgelegt werden sollen:
description "Docker container for OpenVPN server"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
exec docker run --volumes-from ovpn-data --rm -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
end script
Starten Sie den Prozess mit dem Upstart-Init-Mechanismus:
sudo start docker-openvpn
Überprüfen Sie anhand der Spalte "+ STATUS", ob der Container gestartet wurde und nicht sofort abstürzt:
test0@tutorial0:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3ca41324e1d kylemanna/openvpn:latest "ovpn_run" 2 seconds ago Up 2 seconds 0.0.0.0:1194->1194/udp focused_mestorf
Schritt 4 - Generieren Sie Client-Zertifikate und Konfigurationsdateien
In diesem Abschnitt erstellen wir ein Client-Zertifikat mit der PKI-Zertifizierungsstelle, die wir im letzten Schritt erstellt haben.
Stellen Sie sicher, dass "++" entsprechend ersetzt wird (dies muss kein vollqualifizierter Domänenname sein). Der Client-Name wird verwendet, um den Computer zu identifizieren, auf dem der OpenVPN-Client ausgeführt wird (z. B. "Heim-Laptop", "Arbeits-Laptop", "nexus5" usw.).
Das Tool "+ easyrsa " fordert Sie zur Eingabe des CA-Kennworts auf. Dies ist das Passwort, das wir oben mit dem Befehl ` ovpn_initpki +` festgelegt haben. Erstellen Sie das Client-Zertifikat:
docker run --volumes-from --rm -it kylemanna/openvpn easyrsa build-client-full nopass
Nachdem jeder Client erstellt wurde, ist der Server bereit, Verbindungen anzunehmen.
Die Clients benötigen die Zertifikate und eine Konfigurationsdatei, um eine Verbindung herzustellen. Die eingebetteten Skripte automatisieren diese Aufgabe und ermöglichen es dem Benutzer, eine Konfiguration in eine einzelne Datei zu schreiben, die dann auf den Client übertragen werden kann. Ersetzen Sie "++" wie gewünscht:
docker run --volumes-from --rm kylemanna/openvpn ovpn_getclient > .ovpn
Die resultierende "+ .ovpn " - Datei enthält die privaten Schlüssel und Zertifikate, die zum Herstellen einer Verbindung zum VPN erforderlich sind. * Bewahren Sie diese Dateien sicher auf und lassen Sie sie nicht herumliegen. * Sie müssen die " *. Ovpn +" - Dateien sicher zu den Clients transportieren, die sie verwenden. Vermeiden Sie aus Sicherheitsgründen die Verwendung öffentlicher Dienste wie E-Mail oder Cloud-Speicher, wenn Sie die Dateien übertragen.
Empfohlene Übertragungsmethoden sind ssh / scp, HTTPS, USB und microSD-Karten, sofern verfügbar.
Schritt 5 - OpenVPN-Clients einrichten
Die folgenden Befehle oder Vorgänge werden auf den Clients ausgeführt, die eine Verbindung zum oben konfigurierten OpenVPN-Server herstellen.
Ubuntu- und Debian-Distributionen über natives OpenVPN
Auf Ubuntu 12.04 / 14.04 und Debian Wheezy / Jessie-Clients (und ähnlichen):
Installieren Sie OpenVPN:
sudo apt-get install openvpn
Kopieren Sie die Client-Konfigurationsdatei vom Server und legen Sie sichere Berechtigungen fest:
sudo install -o root -m 400 .ovpn /etc/openvpn/.conf
Konfigurieren Sie die Init-Skripte so, dass alle Konfigurationen, die mit "+ / etc / openvpn / *. Conf +" übereinstimmen, automatisch gestartet werden:
echo AUTOSTART=all | sudo tee -a /etc/default/openvpn
Starten Sie den Serverprozess des OpenVPN-Clients neu:
sudo /etc/init.d/openvpn restart
Arch Linux über Native OpenVPN
Installieren Sie OpenVPN:
pacman -Sy openvpn
Kopieren Sie die Client-Konfigurationsdatei vom Server und legen Sie sichere Berechtigungen fest:
sudo install -o root -m 400 .ovpn /etc/openvpn/.conf
Starten Sie den Serverprozess des OpenVPN-Clients:
systemctl start openvpn@
Optional: Konfigurieren Sie systemd so, dass + / etc / openvpn / .conf +
beim Booten gestartet wird:
systemctl enable openvpn@
MacOS X über TunnelBlick
Laden Sie TunnelBlick herunter und installieren Sie es.
Kopieren Sie "+ .ovpn +" vom Server auf den Mac.
Importieren Sie die Konfiguration, indem Sie auf die zuvor kopierte Datei "+ *. Ovpn +" doppelklicken. TunnelBlick wird aufgerufen und die Konfiguration importiert.
Öffne TunnelBlick, wähle die Konfiguration aus und wähle dann * connect *.
Android über OpenVPN Connect
Installieren Sie die OpenVPN Connect App aus dem Google Play Store.
Kopieren Sie "+ .ovpn +" auf sichere Weise vom Server auf das Android-Gerät. USB- oder microSD-Karten sind sicherer. Legen Sie die Datei auf Ihre SD-Karte, um sie leichter öffnen zu können.
Importieren Sie die Konfiguration: * Menü * → * Importieren * → * Profil von SD-Karte importieren *
Wählen Sie * Verbinden *.
Schritt 6 - Überprüfen Sie den Betrieb
Es gibt verschiedene Möglichkeiten, um zu überprüfen, ob der Datenverkehr über das VPN geleitet wird.
Webbrowser
Besuchen Sie eine Website, um die externe IP-Adresse zu ermitteln. Die externe IP-Adresse sollte die des OpenVPN-Servers sein.
Versuchen Sie Google "Was ist meine IP" oder https://icanhazip.com [icanhazip.com].
Befehlszeile
Von der Kommandozeile aus ist + wget +
oder + curl +
praktisch. Beispiel mit + curl +
:
curl icanhazip.com
Beispiel mit + wget +
:
wget -qO - icanhazip.com
Die erwartete Antwort sollte die IP-Adresse des OpenVPN-Servers sein.
Eine andere Möglichkeit besteht darin, eine spezielle DNS-Suche zu einem speziell konfigurierten DNS-Server nur für diesen Zweck durchzuführen, indem Sie "+ host " oder " dig " verwenden. Beispiel mit ` host +`:
host -t A myip.opendns.com resolver1.opendns.com
Beispiel mit + dig +
:
dig +short myip.opendns.com @resolver1.opendns.com
Die erwartete Antwort sollte die IP-Adresse des OpenVPN-Servers sein.
Zusätzliche zu überprüfende Dinge
Überprüfen Sie Ihre Netzwerkschnittstellenkonfiguration. Auf Unix-basierten Betriebssystemen ist dies so einfach wie das Ausführen von "+ ifconfig " in einem Terminal und das Suchen nach der " tunX +" - Schnittstelle von OpenVPN, wenn diese verbunden ist.
Überprüfen Sie die Protokolle. Auf Unix-Systemen überprüfen Sie "+ / var / log " auf alten Distributionen oder " journalctl +" auf systemd-Distributionen.
Fazit
Das dafür erstellte Docker-Image ist Open Source und kann viel mehr als hier beschrieben.
Das Quellrepository docker-openvpn kann überprüft und geändert werden. Pull-Anfragen für allgemeine Funktionen oder Fehlerbehebungen sind willkommen.
Erweiterte Themen wie * backup * und * static client IPs * werden im Ordner docker-openvpn/docs behandelt.
Melden Sie Fehler an docker-openvpn issue tracker.