OpenVPN in Docker in 2 Sekunden starten

Hallo, Habr-Bewohner! Hattet ihr jemals das Gefühl, in eine andere Stadt, ein anderes Land oder auf einen anderen Kontinent verreisen zu wollen? Ich habe dieses Bedürfnis recht häufig, weshalb das Bedürfnis, einen VPN-Server zu haben, den man überall in ein paar Sekunden starten kann, sehr ausgeprägt war. In diesem Artikel möchte ich über mein Projekt erzählen, das ich ins Leben gerufen habe, als ich nach einer fertigen Lösung suchte, in diesem Fall einem Docker-Image, das es ermöglichen würde, schnell einen OpenVPN-Server mit minimalen Einstellungen und einem akzeptablen Sicherheitsniveau aufzusetzen.

OpenVPN in Docker in 2 Sekunden starten

Vorgeschichte

Die Möglichkeit, den Dienst auf jeder Maschine zu starten: sei es ein physischer Server, ein virtueller privater Server oder gar der Containerraum innerhalb eines anderen Containerverwaltungssystems — war von entscheidender Bedeutung. Mein Blick fiel sofort auf Docker. Erstens gewinnt dieser Dienst an Popularität, sodass immer mehr Anbieter fertige Lösungen mit seiner Vorinstallation anbieten; zweitens gibt es ein zentrales Repository für Images, von dem aus man den Dienst mit einem einzigen Terminalbefehl herunterladen und starten kann. Der Gedanke, dass ein ähnliches Projekt bereits existieren sollte, ging mir durch den Kopf und ich suchte hartnäckig danach. Doch die meisten Projekte, die ich fand, waren entweder zu kompliziert (man musste ein Container für die dauerhafte Datenspeicherung erstellen und das Container mit der Anwendung mehrfach mit unterschiedlichen Parametern starten), oder sie hatten keine vernünftige Dokumentation, oder waren ganz aufgegeben. Nachdem ich nichts Annehmbares gefunden hatte, begann ich mit der Arbeit an meinem Projekt. Vor mir lagen schlaflose Nächte mit Dokumentation studieren, Code schreiben und Debugging, aber letztendlich erblickte mein Dienst das Licht der Welt und leuchtete in allen Farben der monochromen LED-Anzeige meines Routers. Daher bitte ich um eure wohlwollende Aufnahme — Docker-OpenVPN. Ich habe sogar ein Logo entworfen (oben, vor dem Schnitt), aber urteilen Sie bitte nicht zu streng, denn ich bin kein Designer (mehr). Als ich dieses Projekt umsetzte, stellte ich die Geschwindigkeit der Bereitstellung, die minimalen Einstellungen und ein akzeptables Sicherheitsniveau in den Vordergrund. Durch Ausprobieren fand ich einen optimalen Ausgleich dieser Kriterien, allerdings musste ich an einigen Stellen auf Geschwindigkeit verzichten, um die Sicherheit zu gewährleisten, und für minimale Einstellungen zahlte ich mit Portabilität: In der aktuellen Konfiguration kann ein einmal erstellter Container auf einem Server nicht auf einen anderen übertragen und dort gestartet werden. Zum Beispiel werden alle Client- und Serverzertifikate beim Start des Dienstes generiert, und das dauert etwa 2 Sekunden. Allerdings musste die Generierung der Datei für den Diffie-Hellman-Schlüssel in die Build-Zeit verlagert werden: Sie wird während des Builds des Docker-Images erstellt und kann bis zu 10 Minuten dauern. Ich würde sehr gerne eine Sicherheitsüberprüfung einer solchen Lösung von der hochgeschätzten Gemeinschaft erhalten.

Starten

Um den Dienst zu starten, benötigen wir ein paar Dinge:

  1. Server: physisch oder virtuell. Theoretisch könnte man im Docker-in-Docker-Modus starten, aber ich habe diese Option nicht umfassend getestet;
  2. Docker selbst. Viele Hosting-Anbieter bieten fertige Lösungen mit Docker "an Bord" an;
  3. Öffentliche IP-Adresse.

Wenn alle Voraussetzungen gegeben sind, müssen wir nur noch den folgenden Befehl in die Konsole Ihres Servers eingeben:

docker run --cap-add=NET_ADMIN 
-it -p 1194:1194/udp -p 80:8080/tcp 
-e HOST_ADDR=$(curl -s https://api.ipify.org) 
alekslitvinenk/openvpn

Der aufmerksame Leser könnte bemerkt haben, dass die IP-Adresse des Servers automatisch mit Hilfe von ipify.orgbestimmt wird. Sollte dies aus irgendwelchen Gründen nicht funktionieren, können Sie die Adresse manuell angeben. Wenn alle vorherigen Schritte korrekt ausgeführt wurden, sollten wir in der Konsole etwas Ähnliches sehen:

Sun Jun 9 08:56:11 2019 Initialisierungssequenz abgeschlossen
Sun Jun 9 08:56:12 2019 Client.ovpn-Datei wurde generiert
Sun Jun 9 08:56:12 2019 Konfigurationsserver gestartet, laden Sie Ihre client.ovpn-Konfiguration unter http://example.com/ herunter
Sun Jun 9 08:56:12 2019 HINWEIS: Nachdem Sie Ihre Client-Konfiguration heruntergeladen haben, wird der HTTP-Server abgeschaltet!

Wir sind fast am Ziel: Jetzt müssen wir kopieren example.com (In Ihrem Fall wird dies die Adresse Ihres Servers sein) und in die Adresszeile des Browsers einfügen. Nachdem Sie die Eingabetaste gedrückt haben, wird die client.ovpn-Datei heruntergeladen, und der HTTP-Server wird in die Unendlichkeit verschwinden. Wenn diese Lösung Zweifel aufwirft, können Sie den folgenden Trick verwenden: Führen Sie den vorherigen Befehl aus und fügen Sie die Flags hinzu zp und das Passwort. Jetzt, wenn Sie den generierten Link in das Browserfenster einfügen — erhalten Sie ein ZIP-Archiv mit dem Passwort. Wenn Sie eine Datei mit der Client-Konfiguration haben, können Sie jeden geeigneten Client verwenden. Ich benutze Tunnelblick für Mac.

Video Tutorial

Dieses Video-Tutorial enthält eine detaillierte Anleitung zur Bereitstellung des Dienstes auf DigitalOcean.

Video abspielen
P.S. Wenn Sie dieses Projekt nützlich finden, geben Sie bitte einen Stern auf GitHub, forken Sie es und erzählen Sie Ihren Freunden davon. Beiträge und Sicherheitsaudits sind ebenfalls sehr willkommen.P.P.S. Wenn dieser Artikel auf Habr veröffentlicht wird, plane ich, den nächsten darüber zu schreiben, wie ich Docker-in-Docker und Docker-in-Docker-in-Docker gestartet habe, warum ich das getan habe und was dabei herauskam.
EDIT1:
  1. Ich habe Fehler in der Veröffentlichung korrigiert,
  2. In Beantwortung der Kommentare wollte ich diese Informationen hierhin auslagern: Das Flag —privileged ist notwendig für die Arbeit mit iptables.

EDIT2:

  1. Ich habe den Befehl zum Starten des Images verbessert: Jetzt benötigt er das Flag —privileged nicht mehr.
  2. Ich habe einen Link zu einem russischsprachigen Video-Tutorial hinzugefügt: youtu.be/A8zvrHsT9A0

Quelle: habr.com

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster