Führen Sie OpenVPN in Docker in 2 Sekunden aus

Hallo Habrowsk-Bürger! Haben Sie jemals eine Situation erlebt, in der Sie wirklich virtuell in eine andere Stadt, ein anderes Land oder einen anderen Kontinent reisen möchten? Ich habe ein solches Bedürfnis ziemlich oft, daher war die Möglichkeit, einen eigenen VPN-Server zu haben, der in wenigen Sekunden überall gestartet werden kann, ziemlich groß. In diesem Artikel möchte ich über mein Projekt sprechen, das ich geplant hatte, als ich nach einer vorgefertigten Lösung suchte, in diesem Fall Docker Ein Image, mit dem Sie den OpenVPN-Server mit einem Minimum an Einstellungen und einem akzeptablen Sicherheitsniveau schnell anheben können.


Hintergrund

Die Möglichkeit, den Dienst auf einem beliebigen Computer auszuführen: sei es ein physischer Server oder ein virtueller privater Server oder überhaupt der Containerraum in einem anderen Containerverwaltungssystem - war von entscheidender Bedeutung. Mein Blick fiel sofort auf den Docker. Erstens wird dieser Dienst immer beliebter, und daher bieten immer mehr Anbieter mit seiner Vorinstallation schlüsselfertige Lösungen an. Zweitens gibt es ein zentrales Repository mit Bildern, von dem Sie den Dienst mit einem einzigen Befehl im Terminal herunterladen und starten können. Die Idee, dass ein solches Projekt bereits existieren sollte, besuchte mich und ich suchte beharrlich. Aber die meisten Projekte, die ich fand, waren entweder zu umständlich (es war notwendig, einen Container für die permanente Datenspeicherung zu erstellen und den Container mehrmals mit einer Anwendung mit unterschiedlichen Parametern auszuführen), entweder ohne vernünftige Dokumentation oder vollständig aufgegeben. Ich fand nichts Akzeptables und begann Arbeiten Sie an Ihrem Projekt. Vor uns lagen schlaflose Nächte, in denen Dokumentation studiert, Code geschrieben und Fehler behoben wurden, aber am Ende sah mein Dienst das Licht und spielte in allen Farben des monochromen LED-Panels des Routers. Also, bitte lieben und bevorzugen - Docker-OpenVPN . Ich habe mir sogar ein Logo ausgedacht (oben vor dem Schnitt), aber beurteile es nicht streng, da ich (bereits) kein Designer bin. Bei der Implementierung dieses Projekts habe ich mich auf die Bereitstellungsgeschwindigkeit, ein Minimum an Einstellungen und ein akzeptables Sicherheitsniveau konzentriert. Durch Versuch und Irrtum fand ich das optimale Gleichgewicht dieser Kriterien. An einigen Stellen musste ich jedoch die Bereitstellungsgeschwindigkeit für die Sicherheit opfern und die Portabilität für ein Minimum an Einstellungen bezahlen: In der aktuellen Konfiguration kann der auf einem Server erstellte Container nicht übertragen und auf einem anderen ausgeführt werden. Beispielsweise werden alle Client- und Serverzertifikate beim Start des Dienstes generiert. Dies dauert ca. 2 Sekunden. Die Generierung der Defi Hellman-Datei musste jedoch in der Erstellungszeit entfernt werden: Sie wird während der Erstellung des Docker-Images erstellt und kann bis zu 10 Minuten dauern. Ich würde sehr gerne ein Sicherheitsaudit einer solchen Lösung von einer angesehenen Community erhalten.

Starten

Um den Dienst zu starten, benötigen wir einige Dinge:
  1. Server: physisch oder virtuell. Theoretisch können Sie im Docker-in-Docker-Modus ausgeführt werden, aber ich habe diese Option nicht ausführlich getestet.
  2. Eigentlich Docker. Viele Hosting-Anbieter bieten vorgefertigte Lösungen mit Docker "on board" an.
  3. Die öffentliche IP-Adresse.
Wenn alle Details vorhanden sind, müssen wir den folgenden Befehl in der Konsole Ihres Servers ausführen:
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 
Ein aufmerksamer Leser könnte darauf achten, dass die IP-Adresse des Servers automatisch über ipify.org ermittelt wird . Wenn dies aus irgendeinem Grund nicht funktioniert, können Sie die Adresse manuell angeben. Wenn alle vorherigen Schritte korrekt ausgeführt wurden, sollte in der Konsole etwas Ähnliches angezeigt werden:
 Sun Jun 9 08:56:11 2019 Initialization Sequence Completed Sun Jun 9 08:56:12 2019 Client.ovpn file has been generated Sun Jun 9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/ Sun Jun 9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down! 
Wir sind dem Ziel nahe: Jetzt müssen wir example.com kopieren (in Ihrem Fall gibt es die Adresse Ihres Servers) und in die Adressleiste des Browsers einfügen. Nachdem Sie die Eingabetaste gedrückt haben, wird die Datei client.ovpn heruntergeladen und der http-Server selbst gerät in Vergessenheit. Wenn diese Lösung zweifelhaft ist, können Sie den folgenden Trick verwenden: Führen Sie den vorherigen Befehl aus und fügen Sie die zp- Flags und das Kennwort hinzu. Wenn Sie nun den generierten Link in das Browserfenster einfügen, erhalten Sie ein Zip-Archiv mit einem Kennwort. Wenn Sie eine Datei mit Client-Konfiguration haben, können Sie jeden geeigneten Client verwenden. Ich benutze Tunnelblick für Mac.

Video-Tutorial

Dieses Video-Tutorial enthält detaillierte Anweisungen zum Bereitstellen des Dienstes für DigitalOcean. PS Wenn Sie dieses Projekt nützlich finden, geben Sie ihm bitte ein Sternchen auf dem GitHub, gabeln Sie es und teilen Sie es Ihren Freunden mit. Mitwirkende und Sicherheitsüberprüfungen sind ebenfalls herzlich willkommen. PPS Wenn dieser Artikel über Habr geschrieben wird, habe ich vor, Folgendes darüber zu schreiben, wie ich Docker-in-Docker und Docker-in-Docker-in-Docker gestartet habe, für das, was ich getan habe und was daraus entstanden ist.
EDIT1:
  1. Korrigierte Fehler in der Veröffentlichung,
  2. Als Antwort auf Kommentare habe ich beschlossen, diese Informationen hier zu platzieren: --privilegiertes Flag wird für die Arbeit mit iptables benötigt

EDIT2:
  1. Verbesserter Befehl zum Starten von Bildern: Jetzt ist das Flag --privileged nicht mehr erforderlich
  2. Es wurde ein Link zum russischsprachigen Video-Guide hinzugefügt : youtu.be/A8zvrHsT9A0

Source: https://habr.com/ru/post/de458606/


All Articles