GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment installer et héberger un serveur OpenVPN avec Docker

Aperçu

Cet article couvre la procédure d'installation et d'hébergement du serveur OpenVPN avec Docker. Cela signifie que nous allons pouvoir utiliser Docker pour installer le serveur OpenVPN et l'exécuter en tant que service, générer des configurations de connexion client et des certificats, que nous pourrons ensuite utiliser pour connecter plusieurs clients sur notre serveur VPN. Cette méthode fonctionne sur n'importe quelle distribution Linux sur laquelle Docker est installé et en cours d'exécution.

REMARQUE - Cette configuration est destinée à un environnement sans mot de passe, ce qui signifie que le client n'utilisera pas le nom d'utilisateur et le mot de passe pour se connecter au serveur, mais utilisera les certificats client pour se connecter.

Si vous n'aimez pas la solution ou si vous préférez une autre méthode, nous avons également couvert le même processus avec Wireguard et Docker. Vous pouvez le vérifier sur ce post.

Prérequis :

– Docker installé et en cours d'exécution – s'il n'est pas installé, consultez cet article pour les instructions d'installation de Docker sur Debian et Ubuntu

– Conteneur Docker que nous allons utiliser – LINK (consultez également pour plus d'informations si nécessaire)

Installation du conteneur Docker du serveur OpenVPN

1. La première étape consiste à créer un conteneur de volume de données pour OpenVPN, afin qu'il puisse stocker toutes les données, les fichiers de configuration et les certificats. Il est suggéré d'ajouter le préfixe "ovpn-data-", puis d'ajouter un autre mot que vous voulez à la fin. Pour un exemple, cela devrait ressembler à ceci - ovpn-data-example. Et vous remplacez le mot exemple par ce que vous voulez.

Donc, dans le terminal, exécutez la commande :

OVPN_DATA="ovpn-data-example"

Nous allons maintenant créer le conteneur de volumes de données :

docker volume create --name $OVPN_DATA

Remarque - si vous n'avez pas ajouté à Docker les privilèges élevés sur votre hôte Linux, vous devrez ajouter sudo chaque fois que vous souhaitez exécuter des commandes docker.

2. Téléchargez ensuite le fichier image Docker OpenVPN avec l'argument pour le configurer pour utiliser l'adresse IP publique de votre serveur (hôte) ou votre nom de domaine via le protocole UDP (peut également utiliser le protocole TCP) :

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

Remplacez VPN.SERVENAME.COM par votre adresse IP publique ou par un nom de domaine que vous avez enregistré et pointé vers votre serveur. C'est la configuration si vous hébergez votre serveur sur un cloud (comme sur AWS, Azure, UpCloud, Digital Ocean, Linode etc…).

Pour l'option d'auto-hébergement à la maison - cela s'applique également si vous avez une adresse IP publique statique, et vous devrez effectuer une redirection de port sur votre routeur (modem) pour pointer vers votre hôte (serveur). Si vous n'avez pas d'adresse IP statique, vous devrez utiliser un DNS dynamique.

Génération et récupération du certificat CA et des certificats client

3. Nous devons maintenant lancer notre système PKI afin de générer le certificat CA pour notre serveur et de générer également les certificats client :

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

Suivez les instructions. Si vous envisagez d'installer OpenVPN sur un serveur cloud disposant de ressources limitées (exemple, 1 CPU et 1 Go de RAM), la génération du certificat de serveur CA peut prendre un certain temps (cca 15 min).

Lorsque vous lancez le PKI pour OpenVPN, il vous demandera d'abord de fournir un mot de passe pour le certificat CA.

REMARQUE IMPORTANTE – Notez quelque part la phrase secrète de l'autorité de certification, vous en aurez besoin plus tard au cours du processus de configuration et à chaque fois que vous générerez un certificat client.

Ensuite, il vous demandera de fournir un nom pour l'autorité de certification. Vous pouvez entrer n'importe quoi.

Le processus de génération de l'autorité de certification prendra un certain temps.

Une fois terminé, il générera une clé privée et demandera à nouveau de fournir la phrase de passe CA que vous avez entrée précédemment. Il vous demandera 2 fois le mot de passe.

Le certificat CA généré sera valide pour les 3 prochaines années.

Démarrer le service du serveur OpenVPN

4. Exécutez la commande Docker pour démarrer le conteneur OpenVPN :

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

Remarque - l'argument dans la commande -p 1194:1194/udp - également une partie importante de cette configuration. Cet argument définira notre OpenVNP sur quel port écouter et utiliser afin d'établir la communication entre le serveur et le client. Dans la commande ci-dessus est défini pour utiliser le port 1194 (numéro de gauche pour le conteneur Docker et numéro de droite pour le serveur hôte), car OpenVPN utilise par défaut le numéro de port 1194 via le protocole UDP. Modifiez ce numéro si vous prévoyez d'utiliser un autre numéro de port.

Générer le certificat client et extraire le fichier de configuration client du conteneur à héberger

5. Exécutez cette commande pour générer un certificat pour un appareil client :

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

L'argument CLIENTNAME dans la commande ci-dessus peut être remplacé par ce que vous voulez. C'est pour le nom de fichier du certificat et pour l'identification du client. La commande générera également un certificat sans mot de passe. Le certificat sera placé dans le répertoire personnel de l'utilisateur sur le système de fichiers de l'hôte (nom d'utilisateur que vous utilisez pour vous connecter à l'hôte via SSH) PAS sur le conteneur Docker.

Lors de la génération des certificats client, OpenVPN vous demandera de fournir la phrase secrète de l'autorité de certification.

REMARQUE - Les certificats générés, comme on le voit sur les images, dureront 3 ans à partir du moment où vous les avez créés.

6. Exécutez cette commande pour compiler le fichier de configuration de connexion OpenVPN et le récupérer du conteneur Docker vers le serveur hôte

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

Après cela, vous aurez besoin d'un client FTP, SFTP ou SCP pour vous connecter sur votre serveur hôte et télécharger le fichier OpenVPN et l'utiliser pour vous connecter à votre serveur VPN.

Connectez-vous à votre serveur OpenVPN

Pour vous connecter à votre serveur VPN, vous devrez installer le client OpenVPN. Il existe des applications clientes pour Windows et Android – OpenVPN connect. Dans l'application, importez simplement le fichier openvpn en tant que nouveau profil et connectez-vous.

Il y a bien sûr le client pour Linux. Le gestionnaire de réseau sous Linux prend en charge l'OpenVPN mais il demande d'importer tous les certificats séparément. Donc, pour plus de simplicité, je suggère d'installer également le client de l'application. Sur les distributions Debian et Ubuntu :

$ sudo apt install openvpn

Une fois installé, accédez à l'emplacement où le fichier de certificat est placé et exécutez la commande :

$ sudo openvpn ./CLIENTNAME.ovpn

Le résultat de la connexion réussie devrait ressembler à ceci

Assurez-vous d'ouvrir les ports appropriés sur votre serveur

Aussi une note importante pour que cela fonctionne. Si vous envisagez de l'héberger sur un cloud ou si vous avez installé un pare-feu sur votre serveur, vous devez ouvrir et autoriser les ports que vous avez attribués à votre serveur OpenVPN.

Dans ce cas, le serveur est sur le cloud et j'avais besoin d'ouvrir les ports 1194 pour le protocole UDP sur le pare-feu.

Connecter plusieurs clients

Vous pouvez connecter plusieurs clients avec cette configuration. Une méthode consiste à utiliser un certificat sur plusieurs appareils, mais la méthode est moins sécurisée. Pour cela, vous devez accéder au fichier de configuration du serveur OpenVPN situé dans le conteneur Docker et ajouter un argument :

duplicate-cn

Je recommande d'émettre/générer un nouveau certificat séparé pour chaque client. Pour y parvenir, vous devez répéter quelques commandes :

Réinitialisez le volume docker pour OpenVPN.

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

Générez ensuite un nouveau certificat client mais utilisez un nom différent au lieu de CLIENTNAME :

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

et bien sûr récupérer le fichier de configuration OpenVPN et télécharger le fichier :

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

Résumé

Nous avons expliqué comment installer OpenVPN avec Docker, comment héberger OpenVPN avec Docker, exécuter le système PKI, générer le certificat CA et le certificat client et comment se connecter. Personnellement, j'aime cette configuration, d'abord en raison de la facilité d'utilisation, de la gestion et de la sécurité assez élevée de la configuration côté serveur et côté client. Tous les accessoires et remerciements à KyleManna pour avoir créé une image Docker aussi impressionnante.


Docker
  1. Comment installer et configurer OpenVPN Server sur Debian 10

  2. Installer le serveur VPN Wireguard avec Docker

  3. Comment installer Jenkins avec Docker

  4. Comment et pourquoi utiliser un hôte Docker distant

  5. Comment installer et utiliser Docker Compose sur CentOS

Comment installer et configurer le serveur Web Apache avec l'hôte virtuel sur Debian 10

Comment installer et utiliser Docker Compose sur Ubuntu 20.04

Comment installer et utiliser Docker Compose sur Ubuntu 22.04

Comment installer et utiliser Docker sur Ubuntu 22.04

Comment installer Docker et Docker Compose sous Linux

Comment installer Docker sur Rocky Linux et AlmaLinux