Fondamentaux de l’exécution d’OpenVPN dans Docker sur Ubuntu

Êtes-vous inquiet de la manière dont vous pouvez accéder librement à Internet sans beaucoup de restrictions ni d’insécurités liées aux données? Ne vous inquiétez plus ! Commencez à héberger votre serveur VPN en utilisant OpenVPN dans Docker.

Avec les technologies Docker et OpenVPN, vous pouvez configurer et exécuter votre serveur VPN en un rien de temps. Et dans ce tutoriel, vous apprendrez les fondamentaux de l’exécution d’un serveur OpenVPN hébergé dans un conteneur Docker.

Restez à l’écoute et gardez votre serveur VPN sécurisé avec OpenVPN Docker !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous suivez, vous aurez besoin des éléments suivants :

  • A Linux-based operating system (OS) – This tutorial uses Ubuntu v22.04, but other Linux distributions will work.
  • Docker installé et en cours d’exécution – Ce tutoriel utilise Docker v20.10.17.

Création d’un conteneur Docker pour OpenVPN

Containeriser, c’est comme empaqueter le code et toutes ses dépendances en tant qu’unité logicielle standard pour exécuter votre application rapidement et de manière fiable. Il existe plusieurs façons de créer un conteneur Docker OpenVPN. Vous pouvez soit construire le conteneur à partir de zéro, soit télécharger un conteneur prêt à l’emploi depuis le Docker Hub.

Mais dans ce tutoriel, vous utiliserez un fichier d’image Docker OpenVPN existant. Les conteneurs prêts à l’emploi offrent plusieurs avantages car ils sont soigneusement testés contre diverses vulnérabilités avec le soutien d’une vaste communauté de développeurs. De plus, ces conteneurs vous permettent de gagner du temps et d’éviter de réinventer la roue.

Pour créer un conteneur Docker OpenVPN :

1. Ouvrez votre terminal et exécutez la commande OVPN_DATA ci-dessous, qui ne fournit pas de sortie mais définit un nom de volume de données à ovpn-data-test pour la variable OVPN_DATA.

OVPN_DATA="ovpn-data-test"

2. Ensuite, exécutez la commande docker volume create suivante pour créer un volume de données avec le –name que vous avez défini dans la variable $OVPN_DATA.

Cette commande ne fournit pas de sortie mais crée un conteneur de volume de données pour OpenVPN où toutes les données, fichiers de configuration et certificats sont stockés.

docker volume create --name $OVPN_DATA

3. Enfin, exécutez la commande docker run suivante pour télécharger et installer l’image Docker OpenVPN avec les étapes suivantes :

  • Spécifiez l’espace de stockage (-v) à l’intérieur du conteneur qui est séparé du reste du système de fichiers du conteneur. Dans ce cas, l’image Docker OpenVPN est stockée dans le répertoire /etc/openvpn.
  • Spécifiez le mécanisme de journalisation (--log-driver) qui conserve les informations sur les conteneurs et les services en cours d’exécution (none).
  • Instruit Docker à supprimer automatiquement (–rm) le conteneur lorsqu’il existe déjà.

Assurez-vous de remplacer (YourPublicIP.com) par l’adresse IP publique de votre serveur (hôte) ou par son nom de domaine (si vous en avez un) via le protocole UDP. Mais notez que vous pouvez également utiliser le protocole TCP.

TCP est un protocole orienté connexion, tandis que UDP est un protocole sans connexion

docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm kylemanna/openvpn ovpn_genconfig -u udp://YourPublicIP.com
Installing OpenVPN on Docker container

Notez que si vous avez l’intention d’utiliser l’auto-hébergement ou une adresse IP publique, vous devez effectuer un transfert de port sur votre routeur/modem.

Sécurisation du client OpenVPN avec des certificats

Vous avez installé avec succès le client Docker OpenVPN sur votre machine, alors bravo ! Mais avant d’utiliser OpenVPN, vous devez d’abord configurer le client OpenVPN.

Juste parce que vous travaillez sur OpenVPN ne signifie pas que vous devez ouvrir votre serveur VPN au monde entier. Vous aurez besoin de certificats pour sécuriser votre client OpenVPN :

1. Exécutez la commande docker run ci-dessous pour générer et récupérer les certificats CA et client. Cette commande crée des conteneurs OpenVPN en cours d’exécution (-it) à partir de l’image spécifiée à l’intérieur du conteneur principal.

Dans la plupart des cas, la génération des certificats de serveur CA prend du temps, selon les ressources de la machine que vous utilisez.

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

Tapez oui, puis appuyez sur Entrée, comme indiqué ci-dessous, pour initialiser le système OpenVPN PKI.

Initiating the OpenVPN PKI system

2. Ensuite, fournissez et confirmez un nouveau mot de passe pour le certificat CA, puis appuyez sur Entrée. Notez le mot de passe quelque part en sécurité car vous en aurez besoin plus tard lors de la configuration et de la génération d’un certificat client.

Setting a new CA certificate password

3. Définissez un nom unique pour votre certificat CA, puis appuyez sur Entrée.

Naming the new CA certificate

4. Maintenant, saisissez la passphrase CA que vous avez définie à l’étape deux pour vérifier que la demande correspond à la signature.

Checking \the request matches the signature

5. Saisissez à nouveau votre passphrase pour générer une clé privée.

Generate a private key by entering the CA passphrase

6. Ensuite, exécutez la commande ci-dessous pour démarrer le service serveur OpenVPN sur Docker pour configurer un client OpenVPN, où:

  • L’option -p définit le port (1194) qui écoute et initie la connexion entre le serveur et le client.

Vous pouvez changer le port 1194 selon vos préférences si vous n’êtes pas à l’aise avec le port OpenVPN par défaut.

  • L’argument –cap-add=NET_ADMIN applique les capacités Linux supplémentaires en modifiant les interfaces réseau que Docker ne donne pas par défaut.
docker run -v $OVPN_DATA:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn
Setting the port OpenVPN will listen to

7. Une fois le port défini, exécutez la commande docker run ci-dessous pour effectuer ce qui suit:

  • Générer le certificat client et télécharger le fichier de configuration client (.ovpn) depuis le conteneur Docker vers le serveur hôte. Le certificat généré est sans mot de passe, comme spécifié dans l’argument no-pass de la commande.
  • Définir le nom du fichier du certificat OpenVPN et de l’identification du client sur CLIENTAPP. Le certificat est stocké dans le répertoire utilisateur de l’hôte, pas dans le conteneur Docker.
docker run -v $OVPN_DATA:/etc/openvpn --log-driver=none --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTAPP nopass

Entrez votre phrase secrète, comme indiqué ci-dessous, pour terminer la génération du certificat.

Generating the VPN client certificate

8. Ensuite, exécutez la commande ci-dessous pour générer et télécharger le fichier de configuration de connexion OpenVPN (ovpn_getclient) depuis le conteneur vers le serveur hôte.

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

9. Accédez au répertoire user/home sur votre serveur hôte (machine Linux) et transférez le fichier .ovpn (CLIENTAPP.ovpn) vers votre appareil Android.

10. Enfin, lancez votre application client OpenVPN Connect sur votre appareil Android.

Appuyez sur PARCOURIR sous l’onglet FICHIER et sélectionnez le fichier .ovpn (CLIENTAPP.ovpn) que vous avez transféré sur votre appareil Android. Cela ajoute un nouveau profil au client OpenVPN Connect.

Importing the .ovpn file to the OpenVPN Connect client

Après une connexion réussie, vous verrez le résultat ci-dessous.

Verifying successful connection to the VPN server

Accès à l’interface utilisateur Web OpenVPN

Vous vous inquiétez du nombre de commandes que vous avez dû utiliser pour accéder à votre serveur VPN ? Pourquoi ne pas essayer une interface utilisateur Web simple ?

OpenVPN offre un ensemble d’outils d’installation et de configuration basés sur le Web qui permettent un déploiement rapide de solutions d’accès distant VPN. La trousse à outils est fournie dans un seul package appelé serveur d’accès OpenVPN.

Pour accéder à l’interface utilisateur Web OpenVPN, vous devez installer le package :

1. Exécutez la commande suivante docker pull pour télécharger et installer le dernier conteneur Docker OpenVPN (openvpn-as) depuis le Linux Server Docker Hub (linuxserver).

docker pull linuxserver/openvpn-as
Downloading OpenVPN Access Server Docker container

2. Une fois téléchargé, exécutez la commande docker create ci-dessous pour créer un nouveau conteneur Docker nommé openvpn-as avec les éléments suivants :

  • -v /home/docker/openvpn-as/config: /config – Définit le répertoire pour stocker les fichiers de configuration.
  • --restart=always – Assure que le conteneur démarre toujours au démarrage du système. Vous pouvez choisir de ne pas ajouter cet argument si vous ne souhaitez pas que le conteneur redémarre.
  • -e PGID=1001 -e PUID=1001 – Définit l’ID utilisateur pour éliminer les problèmes de permission entre le serveur hôte et le conteneur.
  • –net=host –privileged – Indique comment le serveur d’accès OpenVPN s’exécute dans le conteneur.
docker create --name=openvpn-as --restart=always -v /home/docker/openvpn-as/config:/config -e INTERFACE=eth0 -e PGID=1001 -e PUID=1001 -e TZ=Africa/Nairobi --net=host --privileged linuxserver/openvpn-as
Creating a new Docker container (openvpn-as)

3. Ensuite, exécutez la commande docker start ci-dessous pour accéder à l’interface web OpenVPN via le conteneur Docker du serveur OpenVPN Access que vous avez créé à l’étape deux.

docker start openvpn-as
Starting the OpenVPN access server Docker container

4. Enfin, ouvrez votre navigateur web préféré et accédez à l’interface web OpenVPN avec votre adresse IP locale (par exemple, https://VotreIP:943/admin). Remplacez VotreIP par l’adresse IP réelle de votre serveur.

Vous serez accueilli par la page de connexion du serveur OpenVPN Access si tout se passe bien, comme indiqué ci-dessous.

Entrez admin et le mot de passe pour le Nom d’utilisateur et le Mot de passe, puis cliquez sur Se connecter pour accéder au tableau de bord du serveur OpenVPN Access.

Notez que le nom d’utilisateur et le mot de passe par défaut sont admin et password, respectivement. Vous pouvez modifier les informations d’identification selon vos préférences.

Accessing the OpenVPN Access Server web UI

Après vous être connecté, vous verrez le tableau de bord du serveur OpenVPN Access ci-dessous.

Accessing the OpenVPN Access Server dashboard

Configuration du DNS pour une connexion plus rapide et sécurisée

À ce stade, votre serveur OpenVPN Access fonctionne correctement. Mais pour améliorer les performances de votre serveur VPN, vous devez configurer le DNS.

Pour configurer le DNS, vous devez accéder à l’interface web du serveur OpenVPN et mettre à jour les paramètres DNS avec Google ou vos adresses DNS préférées. Google propose les serveurs DNS les plus rapides disponibles, que vous utiliserez dans votre serveur OpenVPN Access.

1. Cliquez sur Paramètres VPN (panneau de gauche) sous l’onglet CONFIGURATION sur le tableau de bord de votre serveur OpenVPN Access.

Faites défiler jusqu’à la section Paramètres DNS et activez l’option Utiliser des serveurs DNS spécifiques pour les clients, comme indiqué ci-dessous.

Enabling custom OpenVPN DNS addresses

2. Ensuite, mettez à jour le Serveur DNS primaire (8.8.8.8) et le Serveur DNS secondaire (8.8.8.4) avec les adresses DNS de Google ci-dessous, et cliquez sur Enregistrer les paramètres pour sauvegarder les modifications.

Setting custom OpenVPN DNS addresses

3. Après avoir enregistré les modifications, cliquez sur Mettre à jour le serveur en cours d’exécution pour redémarrer le serveur afin que les modifications prennent effet.

Updating the server settings

4. Maintenant, accédez au Serveur d’accès OpenVPN (par exemple, https://VotreIP:943/admin) sur votre machine Linux. Remplacez VotreIP par l’adresse IP de votre serveur. Si la configuration fonctionne correctement, vous verrez la même page ci-dessous.

Connectez-vous avec les identifiants par défaut (admin et mot de passe) pour le nom d’utilisateur et le mot de passe.

Logging in to OpenVPN Access Server

5. Cliquez sur les icônes de plateforme pour télécharger l’application cliente et cliquez sur Vous-même (profil verrouillé par l’utilisateur) pour télécharger le fichier client .ovpn.

Downloading the .ovpn config file and client app

6. Enfin, lancez le client OpenVPN que vous avez téléchargé et importez le fichier .ovpn comme vous l’avez fait dans la dernière étape de la « Sécurisation du client OpenVPN avec des certificats », comme indiqué ci-dessous.

Connecting to the OpenVPN server

Conclusion

Héberger votre serveur VPN ne devrait jamais être une tâche complexe, encore moins sécuriser la connexion de votre serveur. Heureusement, OpenVPN Docker est juste au coin de la rue pour sauver la situation. Et dans ce tutoriel, vous avez appris à installer, configurer et configurer OpenVPN en utilisant Docker dans Ubuntu. Vous avez également abordé la sécurisation de l’accès à OpenVPN dans un conteneur Docker avec OpenVPN CA et des certificats client.

En dehors de l’accès à votre serveur OpenVPN via une interface en ligne de commande, vous disposez désormais d’une manière visuelle de le faire via l’interface web d’OpenVPN Access Server. Vous avez réalisé un déploiement rapide de VPN en générant des fichiers de configuration client pour les applications clientes OpenVPN.

Pourquoi ne pas capitaliser sur cette nouvelle connaissance en créant des services de tunnel VPN pour vos applications à l’aide de WireGuard VPN ? Explorez le monde des possibilités illimitées en utilisant des services VPN auto-hébergés !

Source:
https://adamtheautomator.com/openvpn-in-docker/