GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So installieren und hosten Sie einen OpenVPN-Server mit Docker

Übersicht

Dieser Beitrag behandelt das Verfahren zum Installieren und Hosten eines OpenVPN-Servers mit Docker. Das bedeutet, dass wir Docker verwenden können, um den OpenVPN-Server zu installieren und als Dienst auszuführen, Client-Verbindungskonfigurationen und Zertifikate zu generieren, mit denen wir anschließend mehrere Clients auf unserem VPN-Server verbinden können. Diese Methode funktioniert auf jeder Linux-Distribution, auf der Docker installiert ist und ausgeführt wird.

HINWEIS – Dieses Setup ist für eine passwortlose Umgebung, was bedeutet, dass der Client nicht den Benutzernamen und das Passwort verwendet, um sich mit dem Server zu verbinden, sondern Client-Zertifikate verwendet, um sich zu verbinden.

Wenn Ihnen die Lösung nicht gefällt oder Sie eine andere Methode bevorzugen, haben wir den gleichen Prozess auch mit Wireguard und Docker abgedeckt. Sie können es in diesem Beitrag nachlesen.

Voraussetzungen:

– Docker installiert und ausgeführt – falls nicht installiert, sehen Sie in diesem Beitrag nach Installationsanweisungen für Docker unter Debian und Ubuntu

– Docker-Container, den wir verwenden werden – LINK (bei Bedarf auch nach weiteren Informationen suchen)

OpenVPN-Server-Docker-Container-Installation

1. Der erste Schritt besteht darin, einen Datenvolumencontainer für OpenVPN zu erstellen, damit alle Daten, Konfigurationsdateien und Zertifikate gespeichert werden können. Es wird empfohlen, das Präfix „ovpn-data-“ hinzuzufügen und dann am Ende ein weiteres gewünschtes Wort hinzuzufügen. Als Beispiel sollte es so aussehen – ovpn-data-example. Und Sie ersetzen das Wort Beispiel durch was auch immer Sie wollen.

Führen Sie also im Terminal den Befehl aus:

OVPN_DATA="ovpn-data-example"

Jetzt erstellen wir den Datenvolumen-Container:

docker volume create --name $OVPN_DATA

Hinweis – Wenn Sie Docker nicht die erhöhten Rechte auf Ihrem Linux-Host hinzugefügt haben, müssen Sie jedes Mal sudo hinzufügen, wenn Sie Docker-Befehle ausführen möchten.

2. Laden Sie dann die OpenVPN-Docker-Image-Datei mit dem Argument herunter, um sie so einzustellen, dass sie die öffentliche IP-Adresse Ihres Servers (Host) oder Ihren Domänennamen über das UDP-Protokoll verwendet (kann auch das TCP-Protokoll verwenden):

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://VPN.SERVERNAME.COM

Ersetzen Sie VPN.SERVENAME.COM durch Ihre öffentliche IP-Adresse oder durch einen Domänennamen, den Sie registriert haben und der auf Ihren Server verweist. Dies ist die Einrichtung, wenn Sie Ihren Server in einer Cloud hosten (z. B. auf AWS, Azure, UpCloud, Digital Ocean, Linode usw.).

Für die Selbsthosting-Option zu Hause – dies gilt auch, wenn Sie eine statische öffentliche IP-Adresse haben, und Sie müssen eine Portweiterleitung auf Ihrem Router (Modem) durchführen, um auf Ihren Host (Server) zu verweisen. Wenn Sie keine statische IP-Adresse haben, müssen Sie ein dynamisches DNS verwenden.

Generieren und Abrufen von CA-Zertifikaten und Client-Zertifikaten

3. Jetzt müssen wir unser PKI-System initiieren, um das CA-Zertifikat für unseren Server und auch Client-Zertifikate zu generieren:

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn ovpn_initpki

Folge den Anweisungen. Wenn Sie OpenVPN auf einem Cloud-Server mit begrenzten Ressourcen (z. B. 1 CPU und 1 GB RAM) installieren möchten, kann es eine Weile dauern, bis das CA-Serverzertifikat generiert wird (ca. 15 Minuten).

Wenn Sie die PKI für OpenVPN starten, werden Sie zuerst aufgefordert, ein Passwort für das CA-Zertifikat anzugeben.

WICHTIGER HINWEIS – Notieren Sie sich irgendwo die CA-Passphrase, Sie benötigen sie später während des Einrichtungsvorgangs und jedes Mal, wenn Sie ein Client-Zertifikat generieren.

Als nächstes werden Sie aufgefordert, einen Namen für die Zertifizierungsstelle anzugeben. Sie können alles eingeben.

Der CA-Generierungsprozess wird eine Weile dauern.

Sobald der Vorgang abgeschlossen ist, wird ein privater Schlüssel generiert und Sie werden erneut aufgefordert, die zuvor eingegebene CA-Passphrase anzugeben. Sie werden 2 Mal nach dem Passwort gefragt.

Das generierte CA-Zertifikat ist für die nächsten 3 Jahre gültig.

Starten Sie den OpenVPN-Serverdienst

4. Führen Sie den Docker-Befehl aus, um den OpenVPN-Container zu starten:

docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn

Hinweis – das Argument im Befehl -p 1194:1194/udp – ebenfalls ein wichtiger Bestandteil dieses Setups. Dieses Argument legt unser OpenVNP fest, auf welchem ​​Port es lauschen und verwenden soll, um die Kommunikation zwischen dem Server und dem Client herzustellen. Im obigen Befehl ist die Verwendung von Port 1194 eingestellt (linke Nummer für den Docker-Container und rechte Nummer für den Hostserver), da OpenVPN standardmäßig die Portnummer 1194 über das UDP-Protokoll verwendet. Ändern Sie diese Nummer, wenn Sie eine andere Portnummer verwenden möchten.

Generieren Sie das Client-Zertifikat und extrahieren Sie die Client-Konfigurationsdatei aus dem Container zum Hosten

5. Führen Sie diesen Befehl aus, um ein Zertifikat für ein Clientgerät zu generieren:

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass

Das Argument CLIENTNAME im obigen Befehl können Sie durch das ersetzen, was Sie möchten. Das ist für den Dateinamen des Zertifikats und für die Client-Identifikation. Der Befehl generiert auch ein passwortloses Zertifikat. Das Zertifikat wird im Home-Verzeichnis des Benutzers im Dateisystem des Hosts abgelegt (Benutzername, mit dem Sie sich über SSH auf dem Host anmelden), NICHT im Docker-Container.

Beim Generieren der Client-Zertifikate fordert OpenVPN Sie auf, die CA-Passphrase anzugeben.

HINWEIS – Generierte Zertifikate, wie auf den Bildern zu sehen, sind 3 Jahre ab dem Zeitpunkt ihrer Erstellung gültig.

6. Führen Sie diesen Befehl aus, um die OpenVPN-Verbindungskonfigurationsdatei zu kompilieren und sie vom Docker-Container auf den Hostserver abzurufen

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn

Danach benötigen Sie einen FTP-, SFTP- oder SCP-Client, um sich mit Ihrem Host-Server zu verbinden und die OpenVPN-Datei herunterzuladen und zu verwenden, um sich mit Ihrem VPN-Server zu verbinden.

Verbinden Sie sich mit Ihrem OpenVPN-Server

Um sich mit Ihrem VPN-Server zu verbinden, müssen Sie den OpenVPN-Client installieren. Es gibt Client-Apps für Windows und Android – OpenVPN connect. In der App einfach die openvpn-Datei als neues Profil importieren und verbinden.

Es gibt natürlich den Client für Linux. Der Netzwerkmanager unter Linux unterstützt OpenVPN, fordert jedoch dazu auf, alle Zertifikate separat zu importieren. Der Einfachheit halber schlage ich daher vor, auch den App-Client zu installieren. Auf Debian- und Ubuntu-Distributionen:

$ sudo apt install openvpn

Navigieren Sie nach der Installation zum Speicherort der Zertifikatsdatei und führen Sie den folgenden Befehl aus:

$ sudo openvpn ./CLIENTNAME.ovpn

Das erfolgreiche Verbindungsergebnis sollte so aussehen

Achten Sie darauf, die entsprechenden Ports zu Ihrem Server zu öffnen

Auch ein wichtiger Hinweis, damit dies funktioniert. Wenn Sie vorhaben, dies in einer Cloud zu hosten oder wenn Sie eine Firewall auf Ihrem Server installiert haben, müssen Sie Ports öffnen und zulassen, die Sie Ihrem OpenVPN-Server zugewiesen haben.

In diesem Fall befindet sich der Server in der Cloud und ich musste die Ports 1194 für das UDP-Protokoll auf der Firewall öffnen.

Mehrere Clients verbinden

Mit diesem Setup können Sie mehrere Clients verbinden. Eine Methode besteht darin, ein Zertifikat auf mehreren Geräten zu verwenden, aber die Methode ist weniger sicher. Dazu müssten Sie auf die Konfigurationsdatei des OpenVPN-Servers zugreifen, die sich im Docker-Container befindet, und das Argument hinzufügen:

duplicate-cn

Ich empfehle für jeden Client ein neues separates Zertifikat auszustellen/generieren. Um dies zu erreichen, müssen Sie einige Befehle wiederholen:

Starten Sie das Docker-Volume für OpenVPN erneut.

OVPN_DATA="ovpn-data-example"
docker volume create --name $OVPN_DATA

Generieren Sie dann ein neues Client-Zertifikat, aber verwenden Sie einen anderen Namen anstelle von CLIENTNAME:

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass

und natürlich die OpenVPN-Konfigurationsdatei abrufen und die Datei herunterladen:

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn

Zusammenfassung

Wir haben den Prozess behandelt, wie man OpenVPN mit Docker installiert, OpenVPN mit Docker hostet, das PKI-System ausführt, das CA-Zertifikat und das Client-Zertifikat generiert und wie man eine Verbindung herstellt. Ich persönlich mag dieses Setup, erstens wegen der Benutzerfreundlichkeit, Verwaltung und weil das Setup sowohl auf Server- als auch auf Clientseite ziemlich hohe Sicherheit bietet. Alle Requisiten und Anerkennung an KyleManna für die Erstellung eines so großartigen Docker-Images.


Docker
  1. So installieren und konfigurieren Sie OpenVPN Server unter Debian 10

  2. So installieren Sie NFS-Client und -Server unter Ubuntu 20.04

  3. Installieren Sie den Wireguard VPN-Server mit Docker

  4. So installieren Sie Jenkins mit Docker

  5. Wie und warum man einen Remote-Docker-Host verwendet

So installieren und konfigurieren Sie den Apache-Webserver mit virtuellem Host unter Debian 10

So installieren und verwenden Sie Docker Compose unter Ubuntu 20.04

So installieren und verwenden Sie Docker Compose unter Ubuntu 22.04

So installieren und verwenden Sie Docker unter Ubuntu 22.04

So installieren Sie Docker und Docker Compose unter Linux

So installieren Sie Docker unter Rocky Linux und AlmaLinux