
Docker IPsec VPN Server — Mis à jour !
Serveur VPN IPsec basé sur Docker prenant en charge IPsec/L2TP, Cisco IPsec et IKEv2 avec génération automatique d'identifiants et configuration client multiplateforme.
English | 简体中文 | 繁體中文 | Русский
Serveur VPN IPsec sur Docker
Image Docker pour exécuter un serveur VPN IPsec, avec IPsec/L2TP, Cisco IPsec et IKEv2.
Basé sur Alpine 3.23 ou Debian 12 avec Libreswan (logiciel VPN IPsec) et xl2tpd (démon L2TP).
Un VPN IPsec chiffre votre trafic réseau, afin que personne entre vous et le serveur VPN ne puisse espionner vos données lorsqu'elles transitent par Internet. Cela est particulièrement utile lors de l'utilisation de réseaux non sécurisés, par exemple dans les cafés, les aéroports ou les chambres d'hôtel.
Fonctionnalités :
- Génère automatiquement les identifiants VPN et la configuration IKEv2 au premier démarrage
- Prend en charge IKEv2 avec des chiffrements puissants et rapides (par exemple AES-GCM)
- Génère des profils VPN pour configurer automatiquement les appareils iOS, macOS et Android
- Prend en charge Windows, macOS, iOS, Android, Chrome OS et Linux comme clients VPN
- Inclut un script d'assistance pour gérer les utilisateurs et certificats IKEv2
- Construit et publié automatiquement via GitHub Actions
- Données persistantes via un volume Docker
- Multi-architectures :
linux/amd64,linux/arm64,linux/arm/v7
Également disponible :
- VPN : IPsec sans Docker, WireGuard, OpenVPN, Headscale
- IA : Self-Hosted AI Stack pour LLM locaux, chat, RAG, voix et outils IA
- 📚 Livres : The Self-Hosted AI Builder’s Guide, Privacy Tools in the Age of AI
Démarrage rapide
Utilisez cette commande pour configurer un serveur VPN IPsec sur Docker :```bash
docker run
--name ipsec-vpn-server
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
Vos identifiants de connexion VPN seront générés aléatoirement. Voir [Récupérer les identifiants de connexion VPN](#retrieve-vpn-login-details).
Vous pouvez également [configurer un VPN IPsec sans Docker](https://github.com/hwdsl2/setup-ipsec-vpn). Pour en savoir plus sur l’utilisation de cette image, lisez les sections ci-dessous.
## Communauté
- 📬 [Abonnez-vous aux mises à jour du projet](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn) (1 à 2 e-mails/mois) — obtenez des guides gratuits de déploiement VPN et IA (PDF)
- 💬 Rejoignez la communauté [r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/) pour des discussions
- ⭐ Mettez une étoile au dépôt si vous le trouvez utile — cela aide d’autres à le découvrir
## Prérequis
- Un serveur Linux avec une adresse IP publique ou un nom DNS
- Docker installé
- Ports VPN ouverts dans votre pare-feu (UDP 500 et 4500)
- Vous pouvez également utiliser [Podman](https://docs.podman.io) pour exécuter cette image, après avoir créé un alias pour `docker`
**Remarque :** Les utilisateurs avancés peuvent utiliser cette image sur macOS avec [Docker for Mac](https://docs.docker.com/desktop/setup/install/mac-install/). Avant d’utiliser le mode IPsec/L2TP, vous devrez peut-être redémarrer le conteneur une fois avec `docker restart ipsec-vpn-server`. Cette image ne prend pas en charge Docker for Windows.
## Téléchargement
Obtenez la version fiable depuis le [registre Docker Hub](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/) :```bash
docker pull hwdsl2/ipsec-vpn-server
Alternativement, vous pouvez télécharger depuis Quay.io :```bash docker pull quay.io/hwdsl2/ipsec-vpn-server docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server
Plateformes prises en charge : `linux/amd64`, `linux/arm64` et `linux/arm/v7`.
Les utilisateurs avancés peuvent [compiler à partir du code source](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#build-from-source-code) sur GitHub.
### Comparaison des images
Deux images pré-construites sont disponibles. L'image par défaut basée sur Alpine ne fait qu'environ 19 Mo.
| | Basée sur Alpine | Basée sur Debian |
| ----------------- | ------------------------ | ------------------------------ |
| Nom de l'image | hwdsl2/ipsec-vpn-server | hwdsl2/ipsec-vpn-server:debian |
| Taille compressée | ~ 19 Mo | ~ 62 Mo |
| Image de base | Alpine Linux 3.23 | Debian Linux 12 |
| Plateformes | amd64, arm64, arm/v7 | amd64, arm64, arm/v7 |
| Version Libreswan | 5.4 | 5.4 |
| IPsec/L2TP | ✅ | ✅ |
| Cisco IPsec | ✅ | ✅ |
| IKEv2 | ✅ | ✅ |
**Remarque :** Pour utiliser l'image basée sur Debian, remplacez chaque `hwdsl2/ipsec-vpn-server` par `hwdsl2/ipsec-vpn-server:debian` dans ce README. Ces images ne sont actuellement pas compatibles avec les systèmes Synology NAS.
<details>
<summary>
Je souhaite utiliser l'ancienne version 4 de Libreswan.
</summary>
Il est généralement recommandé d'utiliser la dernière [Libreswan](https://libreswan.org/) version 5, qui est la version par défaut de ce projet. Cependant, si vous souhaitez utiliser l'ancienne version 4 de Libreswan, vous pouvez compiler l'image Docker à partir du code source :```bash
git clone https://github.com/hwdsl2/docker-ipsec-vpn-server
cd docker-ipsec-vpn-server
# Specify Libreswan version 4
sed -i 's/SWAN_VER=5\..*/SWAN_VER=4.15/' Dockerfile Dockerfile.debian
# To build Alpine-based image
docker build -t hwdsl2/ipsec-vpn-server .
# To build Debian-based image
docker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian .
Comment utiliser cette image
Variables d'environnement
Remarque : Toutes les variables de cette image sont facultatives, ce qui signifie que vous n'avez pas besoin de saisir de variable et que vous pouvez disposer d'un serveur VPN IPsec prêt à l'emploi ! Pour ce faire, créez un fichier env vide à l'aide de touch vpn.env, puis passez à la section suivante.
Cette image Docker utilise les variables suivantes, qui peuvent être déclarées dans un fichier env (voir exemple) :```
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
Cela créera un compte utilisateur pour la connexion VPN, qui pourra être utilisé par vos multiples appareils[\*](#important-notes). La clé PSK IPsec (clé pré-partagée) est spécifiée par la variable d'environnement `VPN_IPSEC_PSK`. Le nom d'utilisateur VPN est défini dans `VPN_USER`, et le mot de passe VPN est spécifié par `VPN_PASSWORD`.
Des utilisateurs VPN supplémentaires sont pris en charge et peuvent être éventuellement déclarés dans votre fichier `env` comme ceci. Les noms d'utilisateur et mots de passe doivent être séparés par des espaces, et les noms d'utilisateur ne peuvent pas contenir de doublons. Tous les utilisateurs VPN partageront la même clé PSK IPsec.```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2
Les variables ci-dessus concernent uniquement les modes IPsec/L2TP et IPsec/XAuth (« Cisco IPsec »). Pour IKEv2, consultez Configurer et utiliser un VPN IKEv2.
Remarque : Dans votre fichier env, NE mettez PAS "" ou '' autour des valeurs, et n'ajoutez pas d'espace autour de =. N'utilisez PAS ces caractères spéciaux dans les valeurs : \ " '. Une clé PSK IPsec sécurisée doit contenir au moins 20 caractères aléatoires.
Remarque : Si vous modifiez le fichier env après que le conteneur Docker a déjà été créé, vous devez supprimer puis recréer le conteneur pour que les modifications prennent effet. Reportez-vous à Mettre à jour l'image Docker.
Variables d'environnement supplémentaires
Les utilisateurs avancés peuvent éventuellement spécifier un nom DNS, un nom de client et/ou des serveurs DNS personnalisés.
Découvrez comment spécifier un nom DNS, un nom de client et/ou des serveurs DNS personnalisés.
Les utilisateurs avancés peuvent éventuellement spécifier un nom DNS pour l'adresse du serveur IKEv2. Le nom DNS doit être un nom de domaine entièrement qualifié (FQDN). Exemple :``` VPN_DNS_NAME=vpn.example.com
Vous pouvez spécifier un nom pour le premier client IKEv2. Utilisez un seul mot, sans caractères spéciaux à l’exception de `-` et `_`. La valeur par défaut est `vpnclient` si rien n’est spécifié.```
VPN_CLIENT_NAME=your_client_name
Par défaut, les clients sont configurés pour utiliser le DNS public de Google lorsque le VPN est actif. Vous pouvez spécifier un ou plusieurs serveurs DNS personnalisés pour tous les modes VPN. Exemple :``` VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1
Pour plus de détails et une liste de certains fournisseurs DNS publics populaires, consultez [Utiliser des serveurs DNS alternatifs](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md).
Par défaut, aucun mot de passe n’est requis lors de l’importation de la configuration client IKEv2. Vous pouvez choisir de protéger les fichiers de configuration client à l’aide d’un mot de passe aléatoire.```
VPN_PROTECT_CONFIG=yes
Remarque : Les variables ci-dessus n'ont aucun effet pour le mode IKEv2, si IKEv2 est déjà configuré dans le conteneur Docker. Dans ce cas, vous pouvez supprimer IKEv2 et le reconfigurer à l'aide d'options personnalisées. Reportez-vous à Configurer et utiliser le VPN IKEv2.
Démarrer le serveur VPN IPsec
Créez un nouveau conteneur Docker à partir de cette image (remplacez ./vpn.env par votre propre fichier env) :```bash
docker run
--name ipsec-vpn-server
--env-file ./vpn.env
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
Dans cette commande, nous utilisons l'option `-v` de `docker run` pour créer un nouveau [volume Docker](https://docs.docker.com/storage/volumes/) nommé `ikev2-vpn-data`, et le monter dans `/etc/ipsec.d` dans le conteneur. Les données liées à IKEv2 telles que les certificats et les clés seront conservées dans le volume, et plus tard, lorsque vous aurez besoin de recréer le conteneur Docker, il suffira de spécifier à nouveau le même volume.
Il est recommandé d'activer IKEv2 lors de l'utilisation de cette image. Cependant, si vous préférez ne pas activer IKEv2 et utiliser uniquement les modes IPsec/L2TP et IPsec/XAuth (« Cisco IPsec ») pour vous connecter au VPN, supprimez la première option `-v` de la commande `docker run` ci-dessus.
**Remarque :** Les utilisateurs avancés peuvent également [exécuter sans mode privilégié](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#run-without-privileged-mode).
### Récupérer les informations de connexion VPN
Si vous n'avez pas spécifié de fichier `env` dans la commande `docker run` ci-dessus, `VPN_USER` prendra par défaut la valeur `vpnuser` et `VPN_IPSEC_PSK` ainsi que `VPN_PASSWORD` seront générés aléatoirement. Pour les récupérer, consultez les journaux du conteneur :```bash
docker logs ipsec-vpn-server
Recherchez ces lignes dans la sortie :``` Connect to your new VPN with these details:
Server IP: your_vpn_server_ip IPsec PSK: your_ipsec_pre_shared_key Username: your_vpn_username Password: your_vpn_password
La sortie inclura également les détails pour le mode IKEv2, s'il est activé.
(Facultatif) Sauvegardez les identifiants de connexion VPN générés (le cas échéant) dans le répertoire courant :```bash
docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./
Utilisation de docker-compose```bash
cp vpn.env.example vpn.env
Edit vpn.env if needed, then:
docker compose up -d docker logs ipsec-vpn-server
Exemple de `docker-compose.yml` (déjà inclus) :```yaml
volumes:
ikev2-vpn-data:
services:
vpn:
image: hwdsl2/ipsec-vpn-server
restart: always
env_file:
- ./vpn.env
ports:
- "500:500/udp"
- "4500:4500/udp"
privileged: true
hostname: ipsec-vpn-server
container_name: ipsec-vpn-server
volumes:
- ikev2-vpn-data:/etc/ipsec.d
- /lib/modules:/lib/modules:ro
Prochaines étapes
Lisez ceci dans d'autres langues : English, 简体中文, 繁體中文, Русский.
Faites en sorte que votre ordinateur ou appareil utilise le VPN. Veuillez vous référer à :
Configurer et utiliser le VPN IKEv2 (recommandé)
Configurer les clients VPN IPsec/L2TP
Configurer les clients VPN IPsec/XAuth (« Cisco IPsec »)
Lisez 📖 le livre VPN pour accéder à du contenu supplémentaire.
Profitez de votre propre VPN ! ✨🎉🚀✨
Remarques importantes
Utilisateurs Windows : pour le mode IPsec/L2TP, une modification ponctuelle du registre est requise si le serveur ou le client VPN se trouve derrière un NAT (par ex. routeur domestique).
Le même compte VPN peut être utilisé par plusieurs de vos appareils. Cependant, en raison d'une limitation d'IPsec/L2TP, si vous souhaitez connecter plusieurs appareils depuis le même NAT (par ex. routeur domestique), vous devez utiliser le mode IKEv2 ou IPsec/XAuth.
Si vous souhaitez ajouter, modifier ou supprimer des comptes utilisateur VPN, mettez d'abord à jour votre fichier env, puis vous devez supprimer et recréer le conteneur Docker en suivant les instructions de la section suivante. Les utilisateurs avancés peuvent monter par liaison le fichier env.
Pour les serveurs dotés d'un pare-feu externe (par ex. EC2/GCE), ouvrez les ports UDP 500 et 4500 pour le VPN. Utilisateurs Aliyun, voir #433.
Les clients sont configurés pour utiliser Google Public DNS lorsque le VPN est actif. Si un autre fournisseur DNS est préféré, lisez cette section.
Mettre à jour l'image Docker
Pour mettre à jour l'image et le conteneur Docker, commencez par télécharger la dernière version :```bash docker pull hwdsl2/ipsec-vpn-server
Si l’image Docker est déjà à jour, vous devriez voir :```
Status: Image is up to date for hwdsl2/ipsec-vpn-server:latest
Sinon, il téléchargera la dernière version. Pour mettre à jour votre conteneur Docker, notez d'abord vos informations de connexion VPN. Supprimez ensuite le conteneur Docker avec docker rm -f ipsec-vpn-server. Enfin, recréez-le en suivant les instructions de la section Comment utiliser cette image.
Configurer et utiliser le VPN IKEv2
Le mode IKEv2 présente des améliorations par rapport à IPsec/L2TP et IPsec/XAuth (« Cisco IPsec »), et ne nécessite ni PSK IPsec, ni nom d'utilisateur, ni mot de passe. En savoir plus ici.
Tout d'abord, consultez les journaux du conteneur pour afficher les détails d'IKEv2 :```bash docker logs ipsec-vpn-server
**Remarque :** Si vous ne trouvez pas les détails IKEv2, il se peut que IKEv2 ne soit pas activé dans le conteneur. Essayez de mettre à jour l'image Docker et le conteneur en suivant les instructions de la section [Mise à jour de l'image Docker](#update-docker-image).
Lors de la configuration IKEv2, un client IKEv2 (avec le nom par défaut `vpnclient`) est créé, et sa configuration est exportée vers `/etc/ipsec.d` **à l'intérieur du conteneur**. Pour copier le(s) fichier(s) de configuration vers l'hôte Docker :```bash
# Check contents of /etc/ipsec.d in the container
docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# Example: Copy a client config file from the container
# to the current directory on the Docker host
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./
Étapes suivantes : Configurez vos appareils pour utiliser le VPN IKEv2.
Apprenez à gérer les clients IKEv2.
Vous pouvez gérer les clients IKEv2 à l'aide du script d'assistance. Voir les exemples ci-dessous. Pour personnaliser les options du client, exécutez le script sans arguments.```bash
Add a new client (using default options)
docker exec -it ipsec-vpn-server ikev2.sh --addclient [client name]
Export configuration for an existing client
docker exec -it ipsec-vpn-server ikev2.sh --exportclient [client name]
List existing clients
docker exec -it ipsec-vpn-server ikev2.sh --listclients
Show usage
docker exec -it ipsec-vpn-server ikev2.sh -h
**Remarque :** Si vous rencontrez l'erreur « executable file not found », remplacez `ikev2.sh` ci-dessus par `/opt/src/ikev2.sh`.
</details>
<details>
<summary>
Apprenez à modifier l'adresse du serveur IKEv2.
</summary>
Dans certaines circonstances, vous devrez peut-être modifier l'adresse du serveur IKEv2. Par exemple, pour passer à un nom DNS, ou après un changement d'adresse IP du serveur. Pour modifier l'adresse du serveur IKEv2, ouvrez d'abord [un shell bash dans le conteneur](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#bash-shell-inside-container), puis [suivez ces instructions](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md#change-ikev2-server-address). Notez que les journaux du conteneur n'afficheront pas la nouvelle adresse du serveur IKEv2 tant que vous n'aurez pas redémarré le conteneur Docker.
</details>
<details>
<summary>
Supprimez IKEv2 et reconfigurez-le avec des options personnalisées.
</summary>
Dans certaines circonstances, vous devrez peut-être supprimer IKEv2 et le reconfigurer avec des options personnalisées.
**Avertissement :** Toute la configuration IKEv2, y compris les certificats et les clés, sera **définitivement supprimée**. Cette action **est irréversible** !
**Option 1 :** Supprimez IKEv2 et reconfigurez-le à l'aide du script d'assistance.
Notez que cela remplacera les variables que vous avez spécifiées dans le fichier `env`, telles que `VPN_DNS_NAME` et `VPN_CLIENT_NAME`, et que les journaux du conteneur n'afficheront plus d'informations à jour pour IKEv2.```bash
# Remove IKEv2 and delete all IKEv2 configuration
docker exec -it ipsec-vpn-server ikev2.sh --removeikev2
# Set up IKEv2 again using custom options
docker exec -it ipsec-vpn-server ikev2.sh
Option 2 : Supprimer ikev2-vpn-data et recréer le conteneur.
- Notez tous vos détails de connexion VPN.
- Supprimez le conteneur Docker :
docker rm -f ipsec-vpn-server. - Supprimez le volume
ikev2-vpn-data:docker volume rm ikev2-vpn-data. - Mettez à jour votre fichier
envet ajoutez des options IKEv2 personnalisées telles queVPN_DNS_NAMEetVPN_CLIENT_NAME, puis recréez le conteneur. Reportez-vous à Comment utiliser cette image.
Utilisation avancée
Voir Utilisation avancée.
- Utiliser des serveurs DNS alternatifs
- Exécuter sans mode privilégié
- Sélectionner les modes VPN
- Activer la confidentialité persistante parfaite IKEv2
- Accéder à d'autres conteneurs sur l'hôte Docker
- Spécifier l'adresse IP publique du serveur VPN
- Attribuer des adresses IP statiques aux clients VPN
- Personnaliser les sous-réseaux VPN
- Prise en charge IPv6
- Fractionnement de tunnel
- À propos du mode réseau hôte
- Activer les journaux Libreswan
- Vérifier l'état du serveur
- Compiler à partir du code source
- Shell Bash dans le conteneur
- Monter le fichier env en liaison
- Déployer le contrôle de congestion Google BBR
Détails techniques
Deux services sont en cours d'exécution : Libreswan (pluto) pour le VPN IPsec, et xl2tpd pour la prise en charge L2TP.
La configuration IPsec par défaut prend en charge :
- IPsec/L2TP avec PSK
- IKEv1 avec PSK et XAuth (« Cisco IPsec »)
- IKEv2
Ports requis : 500/udp et 4500/udp (IPsec)
Licence
Remarque : Les composants logiciels contenus dans l'image pré-construite (tels que Libreswan et xl2tpd) sont soumis aux licences respectives choisies par leurs détenteurs de droits d'auteur respectifs. Comme pour toute utilisation d'image pré-construite, il incombe à l'utilisateur de l'image de s'assurer que toute utilisation de cette image est conforme aux licences pertinentes pour tous les logiciels qu'elle contient.
Copyright (C) 2016-2026 Lin Song 
Basé sur le travail de Thomas Sarlandie (Copyright 2012)

Cette œuvre est sous licence Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 non transposé
Attribution requise : veuillez inclure mon nom dans toute œuvre dérivée et me faire savoir comment vous l'avez améliorée !