Votre propre Internet privé avec Nanocl et WireGuard
· leone
Vous voulez accéder rapidement et en toute sécurité à votre réseau privé depuis n’importe où ? Vous en avez assez des VPN tiers ? WireGuard et Nanocl vous permettent de lancer votre propre serveur VPN en quelques minutes, sans expertise avancée en administration système !
Dans ce guide, vous apprendrez à :
- Configurer un serveur VPN WireGuard sur une machine Linux
- Utiliser Docker et Nanocl pour un déploiement simple et fiable
- Vous connecter à vos services internes en toute sécurité depuis n’importe où
Nanocl et WireGuard vous permettent de publier et de découvrir vos services internes en toute sécurité, avec un minimum d’administration.
Commençons et reprenez le contrôle de votre confidentialité !
Prérequis
- Un serveur Linux doté d’une adresse IP publique
- Il hébergera votre VPN WireGuard et servira de passerelle sécurisée.
- Docker installé
- Docker exécute les services dans des conteneurs isolés.
- Nanocl installé
- Nanocl simplifie l’orchestration des conteneurs et inclut un proxy et un serveur DNS.
Installer Docker
Suivez le guide officiel d’installation Docker pour votre distribution Linux. C’est simple et rapide !
Installer Nanocl
Téléchargez et installez le binaire CLI Nanocl avec cette commande :
curl -fsSL https://download.next-hat.com/scripts/get-nanocl.sh | shCréez ensuite un groupe Nanocl et installez les services internes :
sudo groupadd nanocl
sudo usermod -aG nanocl $USER
newgrp nanocl
nanocl installDéployer WireGuard (votre VPN privé)
Passons au déploiement ! Nous utiliserons l’image populaire linuxserver/wireguard .
Un Statefile préconfiguré est disponible sur notre registre Nanocl .
Il récupère les utilisateurs à créer dans les variables d’environnement.
Créez un fichier .env avec le contenu suivant :
WG_USERS=myuserVous pouvez ajouter plusieurs utilisateurs séparés par des virgules :
WG_USERS=user1,user2,user3Enregistrez le Statefile 0.18 ci-dessous sous wireguard.yml, puis appliquez-le avec :
WG_USERS=myuser nanocl state apply -s ./wireguard.ymlLe manuel de ce Statefile est accessible avec :
nanocl state man -s ./wireguard.ymlVoici le contenu du fichier :
ApiVersion: v0.18
Args:
- Name: namespace
Kind: String
Default: wireguard
- Name: puid
Kind: String
Default: 1000
- Name: pgid
Kind: String
Default: 1000
- Name: dns
Kind: String
Default: "1.1.1.1"
- Name: config-path
Kind: String
Default: /opt/containers/wireguard
Namespace: ${{ Args.namespace }}
Cargoes:
- Name: wgsrv
PortBindings:
51820/udp:
- HostPort: "51820"
Dns:
# Nanocl replaces $$INTERNAL_GATEWAY with the selected network gateway.
- $$INTERNAL_GATEWAY
- ${{ Args.dns }}
Containers:
- Name: wireguard
Image: lscr.io/linuxserver/wireguard:latest
Cmd:
- -c
- SERVERURL=$NANOCL_NODE_ADDR sh /init
Env:
- PUID=${{ Args.puid }}
- PGID=${{ Args.pgid }}
# Set this to your desired users, they will be created automatically
# When the container start
# You can add multiple users separated by comma
- PEERS=${{ Envs.WG_USERS }}
- PERSISTENTKEEPALIVE_PEERS=all
HostConfig:
CapAdd:
- NET_ADMIN
Binds:
- ${{ Args.config-path }}/config:/config
Sysctls:
net.ipv4.ip_forward: "1"Personnalisez l’espace de noms, PUID, PGID, le serveur DNS et le chemin de configuration en les passant en arguments, par exemple :
WG_USERS=myuser nanocl state apply -s ./wireguard.yml -- --config-path /my/custom/path --puid 1001 --pgid 1001 --dns 8.8.8.8Pour obtenir la configuration de votre client WireGuard, exécutez :
cat /opt/containers/wireguard/config/myuser/myuser.confExemple de configuration :
[Interface]
Address = 10.13.13.2
PrivateKey = 4Kgkxcu27g9s69OSYmSbh6jmvu8kCC8h12XxqrI3uH4=
ListenPort = 51820
DNS = 10.13.13.1
[Peer]
PublicKey = O/xFv4cFdrSok+Ujm9r5J6Laf1PcQv0A4u2T8BWQBQ8=
PresharedKey = ZOKnf2Zp30WVuTYgcFO7M0QH5C0c3/XTYqCevC69vOg=
Endpoint = 92.161.136.52:51820
AllowedIPs = 0.0.0.0/0, ::/0Utilisez ce fichier pour vous connecter à votre serveur WireGuard
depuis tout appareil (Windows, Mac, Linux ou mobile) avec le client officiel WireGuard.
Déployer les services internes
Vous pouvez maintenant déployer vos services internes avec Nanocl.
Ils seront accessibles via le VPN WireGuard.
Par exemple, déployons un service simple qui renvoie les en-têtes HTTP.
ApiVersion: v0.18
Namespace: global
Cargoes:
- Name: deploy-example
Containers:
- Name: web
Image: ghcr.io/next-hat/nanocl-get-started:latest
Env:
- APP=EXAMPLE
Resources:
- Name: dns.my-domain.internal
Kind: ncdns.io/rule/v0.10
Data:
Network: Internal
Entries:
- Name: my-domain.internal
IpAddress: Internal
- Name: my-domain.internal
Kind: ncproxy.io/rule/v0.15
Data:
Rules:
- Domain: my-domain.internal
Network: Internal
Locations:
- Path: /
Target:
Key: global.deploy-example.c
Port: 9000Une fois connecté au VPN, ouvrez http://my-domain.internal .

Bonnes pratiques de sécurité
- Limitez le port UDP 51820 aux IP de confiance à l’aide de votre pare-feu.
- Gardez vos clés privées secrètes : ne les partagez jamais !
- Mettez régulièrement à jour les images Docker, Nanocl et WireGuard.
- Surveillez les journaux du serveur pour repérer les activités suspectes.
Conseils de dépannage
- Si le conteneur WireGuard ne démarre pas, recherchez les erreurs dans les journaux Nanocl.
- Vérifiez que votre pare-feu autorise le trafic UDP sur le port 51820.
- Vérifiez que le chemin de configuration existe et est accessible en écriture.
- Utilisez
nanocl psetnanocl cargo list --namespace your_namespacepour vérifier les instances actives.
Visualiser votre installation

Prochaines étapes
Bravo, vous possédez désormais votre propre serveur VPN performant ! Partagez ce guide, publiez votre réussite et aidez d’autres personnes à reprendre le contrôle de leur confidentialité !