Aujourd’hui, on va parler VPN. Mais pas de ces VPN commerciaux qui promettent l’anonymat et la liberté numérique tout en gardant soigneusement tes logs dans une cave en Europe de l’Est.
Non, ici, on parle d’un vrai VPN, auto-hébergé, sur Docker, pour sécuriser l’accès à ton infra privée et connecter tes services sans jamais exposer leur IP publique.
Et la bonne nouvelle ? C’est simple, efficace, et ça se fait en quelques commandes.
Pourquoi OpenVPN et pourquoi en Docker ?
Pourquoi OpenVPN ?
Parce que c’est libre, robuste et flexible. Il tourne partout (Windows, Linux, Android, MacOS, routeurs, grille-pain connectés). Il offre un chiffrement solide et il te permet de contrôler totalement tes connexions.
Pourquoi Docker ?
• Pas besoin de polluer ton serveur avec une installation système.
• Facile à sauvegarder et à migrer.
• Isolation propre, moins de risques de foutre en l’air ta config réseau.
L’Objectif
👉 On va déployer OpenVPN dans un conteneur Docker, pour permettre aux clients de se connecter en toute sécurité et d’accéder aux autres services Docker hébergés sur le serveur, sans jamais ouvrir ces derniers sur Internet.
En gros, c’est un VPN maison qui agit comme un bastion sécurisé, un tunnel privé pour accéder à tes autres services.
Installation d’OpenVPN en Docker
1. Prérequis
Assure-toi que ton serveur a Docker et Docker Compose d’installés.
apt update && apt install -y docker.io docker-compose
systemctl enable --now docker
Vérifie que tout est bien installé :
docker --version
docker-compose --version
2. Configuration du Docker Compose
On va créer un fichier docker-compose.yml avec la config OpenVPN :
version: '3.7'
services:
openvpn:
image: kylemanna/openvpn
container_name: openvpn
restart: unless-stopped
ports:
- "1194:1194/udp"
cap_add:
- NET_ADMIN
volumes:
- /docker-vol/openvpn:/etc/openvpn
environment:
- OVPN_SERVER=vpn.mondomaine.com
📌 Explication des paramètres :
• 1194:1194/udp → On expose le port 1194 UDP, standard pour OpenVPN.
• cap_add: NET_ADMIN → Permet à Docker de gérer les interfaces réseau.
• volumes → Stocke la config et les certificats sur le serveur hôte.
• OVPN_SERVER → L’adresse publique où le serveur VPN sera accessible.
3. Initialiser le VPN
On génère la configuration de base :
docker-compose run --rm openvpn ovpn_genconfig -u udp://vpn.mondomaine.com
Puis, on initialise les certificats :
docker-compose run --rm openvpn ovpn_initpki
🚀 À ce stade, OpenVPN est installé et prêt à tourner.
4. Lancer le serveur OpenVPN
On démarre le service en mode daemon :
docker-compose up -d
Vérifie qu’il tourne bien :
docker ps
Et checke les logs en cas de souci :
docker logs -f openvpn
Gérer les clients VPN
Créer un certificat client
Chaque utilisateur a besoin de son propre fichier .ovpn.
export CLIENTNAME="mon-client"
docker-compose run --rm openvpn easyrsa build-client-full $CLIENTNAME nopass
📥 Récupérer le fichier .ovpn :
docker-compose run --rm openvpn ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn
Il suffit maintenant d’importer ce fichier dans un client OpenVPN (PC, mobile, routeur…) et de se connecter.
Révoquer un client
Si un client est compromis ou que tu veux lui bloquer l’accès :
docker-compose run --rm openvpn ovpn_revokeclient $CLIENTNAME
Si tu veux supprimer complètement les fichiers associés, ajoute remove à la commande :
docker-compose run --rm openvpn ovpn_revokeclient $CLIENTNAME remove
Autoriser les clients à communiquer entre eux
Par défaut, OpenVPN isole les clients les uns des autres. Pour leur permettre de communiquer (et donc accéder aux autres conteneurs Docker du serveur), il faut modifier la config serveur.
- Édite le fichier /docker-vol/openvpn/openvpn.conf
nano /docker-vol/openvpn/openvpn.conf
- Ajoute cette ligne :
client-to-client
- Redémarre OpenVPN :
docker-compose restart
Test et connexion
💻 Sur ton client VPN, importe le fichier .ovpn, connecte-toi et teste la connexion :
ping 10.8.0.1
Si tout fonctionne, tu peux accéder aux autres services Docker du serveur sans qu’ils soient ouverts publiquement.
Conclusion
🔥 Et voilà, tu as maintenant un serveur OpenVPN auto-hébergé sous Docker, qui te permet d’accéder en toute sécurité à ton infrastructure privée, sans exposer directement tes autres services.
💡 Avantages :
✅ Aucun service (autre que le VPN) n’est ouvert sur Internet.
✅ Un accès sécurisé à toute ton infra, où que tu sois.
✅ Une gestion facile grâce à Docker.
Si tu veux aller plus loin :
• Ajouter Pi-hole pour bloquer pubs et trackers via le VPN.
• Configurer multi-factor authentication (MFA) pour plus de sécurité.
• Mettre en place des règles spécifiques par utilisateur.
🛠️ Prochaine étape : Automatiser tout ça avec un script pour gérer les utilisateurs plus facilement !
Un souci ? Un retour ? Dis-moi ce que tu en penses en commentaire !