콘텐츠로 건너뛰기

Serveur WireGuard : guide de déploiement pour administrateurs

Déployez un serveur WireGuard rapidement et en toute sécurité grâce à notre guide complet. Suivez nos six étapes essentielles pour un VPN performant.

Serveur WireGuard : guide de déploiement pour administrateurs

Une personne connecte un câble Ethernet dans une baie de serveurs.

Un serveur WireGuard correctement configuré vous donne un VPN rapide, léger et sûr, basé sur le concept de Cryptokey Routing qui associe chaque clé publique à une plage d’adresses tunnel autorisées. Voici les six étapes concrètes pour passer de zéro à une production stable :

  • Installer les paquets wireguard et wireguard-tools sur votre distribution Linux
  • Générer les paires de clés serveur et clients (wg genkey | wg pubkey)
  • Rédiger /etc/wireguard/wg0.conf avec les sections [Interface] et [Peer]
  • Activer le forwarding IP et configurer les règles NAT (iptables ou nftables)
  • Déployer les fichiers de configuration sur chaque client (Windows, macOS, iOS, Android)
  • Vérifier l’état avec wg show, journalctl et contrôler le latest-handshake

Checklist de validation rapide : port UDP ouvert, forwarding IP actif, clés cohérentes entre serveur et clients, PersistentKeepalive activé uniquement pour les clients derrière NAT.


Points clés

Un serveur WireGuard opérationnel repose sur cinq impératifs : sécurité des clés privées, forwarding IP actif, règles NAT correctes, vérification des handshakes, et rotation régulière des clés.

Point Détails
Sécurité des clés Stockez les clés privées dans /etc/wireguard/ avec les permissions 600 et umask 077 à la génération.
Forwarding et NAT Activez net.ipv4.ip_forward = 1 dans sysctl et vérifiez les règles MASQUERADE après chaque redémarrage.
Vérification des connexions Utilisez wg show pour contrôler le latest-handshake et les compteurs RX/TX de chaque pair.
Rotation des clés Planifiez une rotation tous les 90 jours ; utilisez wg syncconf pour appliquer les changements sans interruption.
Option gérée Yundera Pour déléguer la maintenance tout en conservant la souveraineté des données, Yundera héberge WireGuard sur infrastructure française.

Table des matières

Comment installer WireGuard sur votre serveur Linux ?

WireGuard est intégré au noyau Linux depuis la version 5.6. Sur les distributions plus anciennes, le module est disponible via DKMS. Les commandes varient selon votre distribution.

Debian et Ubuntu

sudo apt update
sudo apt install wireguard wireguard-tools qrencode iptables

Sur Ubuntu 18.04 ou Debian Buster, ajoutez d’abord le dépôt backports :

sudo apt install -t buster-backports wireguard

CentOS, RHEL et Fedora

# Fedora
sudo dnf install wireguard-tools

# CentOS/RHEL 8+ (via EPEL)
sudo dnf install epel-release
sudo dnf install wireguard-tools

Sur RHEL 8, le module noyau peut nécessiter kmod-wireguard depuis ELRepo si votre noyau est antérieur à 5.6.

Arch Linux

sudo pacman -S wireguard-tools

Paquets à prévoir dans tous les cas : wireguard-tools (contient wg et wg-quick), qrencode (génération de QR codes pour clients mobiles), iptables ou nftables, et iproute2 pour la gestion des interfaces réseau.

Une fois installé, vérifiez que le module est chargé :

sudo modprobe wireguard
lsmod | grep wireguard

Conseil de pro : Sur les serveurs cloud (OVHcloud, Scaleway, Hetzner), le noyau fourni est généralement ≥ 5.6 — vous n’avez pas besoin de DKMS. Vérifiez avec uname -r avant d’installer des modules supplémentaires.


Comment générer vos clés et structurer le fichier wg0.conf ?

La structure du fichier de configuration WireGuard repose sur deux sections : [Interface] pour les paramètres locaux du serveur, et [Peer] pour chaque client distant. C’est cette séparation qui rend la gestion granulaire des connexions aussi directe.

Génération des clés

# Définir les permissions avant de créer les fichiers
umask 077

# Générer la clé privée serveur
wg genkey > /etc/wireguard/server_private.key

# Dériver la clé publique
wg pubkey < /etc/wireguard/server_private.key > /etc/wireguard/server_public.key

# Pour chaque client
wg genkey > client1_private.key
wg pubkey < client1_private.key > client1_public.key

# Optionnel : clé pré-partagée pour renforcement
wg genpsk > client1_preshared.key

L’umask 077 est non négociable : il garantit que les fichiers de clés privées ne sont lisibles que par root. Stockez-les dans /etc/wireguard/ avec les permissions 600.

Exemple complet de /etc/wireguard/wg0.conf

Voici un fichier serveur prêt à l’emploi, à adapter selon votre interface réseau externe (remplacez eth0 par ens3, enp3s0, etc.) :

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <VOTRE_CLÉ_PRIVÉE_SERVEUR>

# Remplacez eth0 par le nom de votre interface externe
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Client 1
PublicKey = <CLÉ_PUBLIQUE_CLIENT1>
PresharedKey = <CLÉ_PRESHARED_CLIENT1>
AllowedIPs = 10.200.200.2/32

Cet exemple s’appuie sur la référence ArchWiki WireGuard, qui documente les champs Address, ListenPort et les règles PostUp/PostDown pour le NAT.

Rôle de chaque champ principal

Champ Section Rôle Valeur d’exemple
PrivateKey [Interface] Clé privée de l’hôte local Générée par wg genkey
Address [Interface] Adresse IP tunnel de l’interface 10.200.0.1/24
ListenPort [Interface] Port UDP d’écoute 51820
PostUp / PostDown [Interface] Commandes shell au démarrage/arrêt Règles iptables NAT
PublicKey [Peer] Clé publique du pair distant Générée par wg pubkey
PresharedKey [Peer] Clé symétrique optionnelle (renforcement) Générée par wg genpsk
AllowedIPs [Peer] Plages IP autorisées pour ce pair 10.200.0.2/32
Endpoint [Peer] Adresse IP:port du pair (côté client) <IP_PUBLIQUE_SERVEUR>:51820
PersistentKeepalive [Peer] Intervalle keepalive (clients NAT) 25

Comment activer le routage IP et configurer le pare-feu NAT ?

Sans forwarding IP et sans règles NAT, vos clients WireGuard accèdent au tunnel mais ne peuvent pas atteindre Internet ni les autres ressources réseau. Ces deux étapes sont distinctes et toutes deux obligatoires.

Des mains ajustent les réglages d’un pare-feu matériel.

Activer le forwarding IP

Éditez /etc/sysctl.conf (ou créez /etc/sysctl.d/99-wireguard.conf) :

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

Appliquez immédiatement sans redémarrer :

sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

Règles iptables (PostUp/PostDown)

Les règles dans le bloc PostUp du fichier wg0.conf s’exécutent à chaque démarrage de l’interface. L’exemple ci-dessous accepte le trafic forwardé et applique le masquerading NAT sur l’interface externe :

# PostUp
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# PostDown (miroir exact pour nettoyage)
iptables -D FORWARD -i wg0 -j ACCEPT
iptables -D FORWARD -o wg0 -j ACCEPT
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Équivalent nftables

Si votre distribution utilise nftables par défaut (Debian 11+, Fedora 33+) :

# PostUp nftables
nft add table ip nat
nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule ip nat postrouting oifname "eth0" masquerade

# PostDown nftables
nft delete table ip nat

Ouvrir le port UDP sur le pare-feu système

# UFW (Ubuntu)
sudo ufw allow 51820/udp

# firewalld (Fedora/CentOS)
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --reload

Pour un serveur derrière un routeur NAT, configurez également la redirection du port 51820/UDP vers l’IP privée du serveur dans l’interface de votre routeur. Une IP publique statique sur le WAN est généralement nécessaire pour que les clients extérieurs puissent se connecter.

Conseil de pro : Pour valider l’absence de fuite DNS, connectez un client avec AllowedIPs = 0.0.0.0/0 et vérifiez votre IP publique avec curl ifconfig.me depuis le client. Si l’IP affichée est celle du serveur WireGuard, le routage est correct. Testez aussi resolvectl status ou cat /etc/resolv.conf pour confirmer que le DNS passe bien par le tunnel.


Comment créer et déployer les configurations clients sur toutes les plateformes ?

Chaque client WireGuard a besoin d’un fichier .conf contenant sa propre clé privée, l’adresse IP tunnel qui lui est assignée, et les informations du serveur. La documentation Quick Start détaille la création d’interfaces et la gestion des pairs.

Exemple de fichier client (Windows, macOS, Linux)

[Interface]
PrivateKey = <CLÉ_PRIVÉE_CLIENT1>
Address = 10.200.200.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <CLÉ_PUBLIQUE_SERVEUR>
PresharedKey = <CLÉ_PRESHARED_CLIENT1>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <IP_PUBLIQUE_SERVEUR>:51820
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0 route tout le trafic via le tunnel (full tunnel). Pour un split tunnel, remplacez par les plages spécifiques à atteindre, par exemple 10.200.200.0/24, 192.168.1.0/24.

Procédure d’ajout d’un peer sur le serveur

  1. Générez la paire de clés du nouveau client sur une machine sécurisée.
  2. Ajoutez un bloc [Peer] dans /etc/wireguard/wg0.conf avec la clé publique du client et son AllowedIPs.
  3. Rechargez la configuration sans couper les connexions existantes :
sudo wg syncconf wg0 <(wg-quick strip wg0)

Cette commande applique les changements à chaud, sans redémarrer l’interface. Alternativement, wg set wg0 peer <PUBKEY> allowed-ips 10.200.200.3/32 ajoute un pair dynamiquement, mais cette modification n’est pas persistée dans le fichier.

Générer un QR code pour iOS et Android

# Générer le QR depuis le fichier client
qrencode -t ansiutf8 < /etc/wireguard/client1.conf

# Ou générer une image PNG
qrencode -o client1.png < /etc/wireguard/client1.conf

L’application WireGuard sur iOS et Android peut scanner ce QR directement. C’est la méthode recommandée pour réduire les erreurs de saisie manuelle. Sur certains routeurs avec interface graphique (comme les modèles ASUS), la fonction serveur WireGuard intégrée propose l’export de profil QR directement depuis le panneau d’administration.

Notes par plateforme :

  • Windows : importez le fichier .conf via l’application WireGuard for Windows (disponible sur wireguard.com). L’interface graphique gère le démarrage automatique.
  • macOS : même procédure via l’app Mac App Store ou Homebrew (brew install wireguard-tools).
  • iOS : l’app WireGuard (App Store) importe via QR ou fichier. Accordez les permissions réseau VPN lors du premier import.
  • Android : l’app WireGuard (Play Store ou F-Droid) importe via QR. Sur Android 12+, vérifiez que la permission « VPN » est accordée dans les paramètres réseau.

Ne transmettez jamais une clé privée client par e-mail ou messagerie non chiffrée. Utilisez un canal sécurisé (partage de fichiers chiffré, accès SSH direct) ou générez les clés directement sur l’appareil client.


Comment démarrer l’interface et vérifier que tout fonctionne ?

Démarrer et activer au boot

# Démarrer l'interface
sudo wg-quick up wg0

# Arrêter l'interface
sudo wg-quick down wg0

# Activer au démarrage via systemd
sudo systemctl enable --now [email protected]

# Vérifier le statut du service
sudo systemctl status [email protected]

Diagnostics essentiels

L’utilitaire wg fournit les sous-commandes clés pour inspecter l’état en temps réel :

# Afficher l'état complet (pairs, transferts, handshakes)
sudo wg show

# Afficher la configuration active
sudo wg showconf wg0

# Logs systemd
sudo journalctl -u wg-quick@wg0 -f

# Vérifier les routes
ip route show table main | grep wg0

# Vérifier le socket UDP
ss -ulnp | grep 51820

Checklist de vérification rapide

  • sudo wg show affiche chaque pair avec son latest-handshake (un handshake récent confirme la connexion)
  • Les compteurs transfer (RX/TX) augmentent quand le client envoie du trafic
  • ip route montre une route via wg0 pour les plages configurées
  • ss -ulnp confirme que le port 51820/UDP est en écoute
  • ping 10.200.200.1 depuis le client atteint le serveur sans perte de paquets

Un latest-handshake absent ou vieux de plusieurs minutes indique un problème de connectivité, pas nécessairement une erreur de configuration. Vérifiez d’abord le pare-feu et la joignabilité du port UDP.


Quelles bonnes pratiques adopter pour un déploiement en production ?

Gestion et rotation des clés

Planifiez une rotation des clés tous les 90 jours au minimum. La procédure est non destructive : générez une nouvelle paire, mettez à jour le [Peer] correspondant sur le serveur avec wg syncconf, puis distribuez la nouvelle configuration au client avant de supprimer l’ancienne. La PresharedKey ajoute une couche symétrique post-quantique ; activez-la sur tous les pairs en production.

Pour supprimer un pair sans interruption :

sudo wg set wg0 peer <ANCIENNE_PUBKEY> remove
# Puis supprimez le bloc [Peer] dans wg0.conf

Monitoring et logging

WireGuard ne produit pas de logs verbeux par conception. Pour surveiller les connexions, interrogez périodiquement wg show et exportez les métriques latest-handshake et transfer vers un système de monitoring. Avec Prometheus, le collecteur wireguard_exporter (disponible sur GitHub) expose ces métriques au format standard. Les métriques utiles à surveiller :

  • wireguard_latest_handshake_seconds : temps depuis le dernier handshake par pair
  • wireguard_sent_bytes_total et wireguard_received_bytes_total : trafic par pair
  • Absence de handshake depuis plus de 3 minutes : signal d’alerte à configurer

Pour les déploiements avancés dans des namespaces réseau séparés, WireGuard fonctionne dans le namespace où l’interface est créée, ce qui permet d’isoler des environnements conteneurisés sans interférence avec le réseau principal.

Optimisation et sécurité

  • MTU : réglez le MTU de l’interface WireGuard à 1420 (ou 1412 pour PPPoE) pour éviter la fragmentation. Ajoutez MTU = 1420 dans la section [Interface].
  • PersistentKeepalive : activez-le uniquement pour les clients derrière NAT, avec l’intervalle recommandé de 25 secondes. Sur les clients mobiles, l’activer inutilement augmente la consommation batterie.
  • Split tunneling : définissez AllowedIPs avec précision. 0.0.0.0/0 route tout ; des plages spécifiques permettent un accès sélectif aux ressources internes sans impacter le trafic général du client.
  • Permissions fichiers : vérifiez régulièrement que /etc/wireguard/ est en 700 et que les fichiers de clés privées sont en 600, propriété de root.
  • Sauvegarde chiffrée : exportez /etc/wireguard/ dans une archive chiffrée (GPG ou age) stockée hors du serveur. Une perte de clé privée serveur nécessite de redistribuer toutes les configurations clients.

Conseil de pro : Consultez les bonnes pratiques documentées sur LinuxFr pour des retours d’expérience sur la gestion des peers en environnement multi-utilisateurs. La rotation de clés y est traitée avec des scripts d’automatisation utiles en production.


Quels sont les problèmes les plus fréquents et comment les résoudre ?

Pas de latest-handshake ou handshake bloqué

C’est le symptôme le plus courant. Causes probables et vérifications dans l’ordre :

  1. Port UDP bloqué : testez depuis l’extérieur avec nc -u <IP_SERVEUR> 51820 ou un outil comme nmap -sU -p 51820 <IP_SERVEUR>. Si le port ne répond pas, vérifiez ufw, firewalld et les règles du fournisseur cloud (groupes de sécurité AWS, règles de pare-feu OVHcloud).
  2. Mauvaise clé publique : une seule erreur de caractère empêche le handshake. Vérifiez la cohérence entre la clé publique dans le [Peer] du serveur et la clé privée du client avec echo "<CLÉ_PRIVÉE>" | wg pubkey.
  3. Forwarding désactivé : confirmez avec sysctl net.ipv4.ip_forward. Si la valeur est 0, le tunnel s’établit mais le trafic ne passe pas.

Pas d’accès réseau malgré un handshake établi

Un handshake réussi mais sans connectivité pointe vers les règles NAT ou le routage.

Vérifiez que les règles MASQUERADE sont actives :

sudo iptables -t nat -L POSTROUTING -v -n

Si la chaîne est vide, les règles PostUp ne se sont pas exécutées. Relancez wg-quick down wg0 && wg-quick up wg0 et consultez journalctl -u wg-quick@wg0 pour les erreurs.

Erreurs AllowedIPs et fuites de routage

AllowedIPs sur le serveur définit quelles adresses sources sont acceptées depuis un pair. Si un client envoie du trafic depuis une IP non listée, les paquets sont silencieusement ignorés. Sur le client, AllowedIPs définit les destinations routées dans le tunnel. Une erreur fréquente : oublier d’inclure l’adresse IP tunnel du serveur (10.200.200.1/32) dans les AllowedIPs du client en mode split tunnel.

Pour un rollback rapide, conservez une copie de wg0.conf avant chaque modification :

sudo cp /etc/wireguard/wg0.conf /etc/wireguard/wg0.conf.bak

Collecter des logs utiles

# Logs du service au démarrage
sudo journalctl -u wg-quick@wg0 --since "10 minutes ago"

# Vérifier les règles iptables actives
sudo iptables -L -v -n
sudo iptables -t nat -L -v -n

# Tracer les paquets (nécessite iptables LOG)
sudo iptables -A INPUT -p udp --dport 51820 -j LOG --log-prefix "WG-IN: "

Pourquoi envisager un serveur privé géré en France pour héberger WireGuard ?

Déployer WireGuard manuellement est accessible aux administrateurs expérimentés. Mais maintenir ce serveur dans le temps, c’est une autre charge : mises à jour de sécurité, rotation des clés, surveillance des handshakes, sauvegardes, gestion des incidents. Pour certaines équipes, déléguer cette exploitation a plus de sens que de la gérer en interne.

Un serveur privé géré comme Yundera, hébergé en France, répond à ce besoin sans sacrifier la souveraineté des données. Les données restent sur une infrastructure française, aucune donnée n’est collectée ou revendue, et l’export est garanti à tout moment.

Les scénarios où cette option est pertinente :

  • Équipes avec ressources réseau limitées : pas de compétences dédiées pour gérer les mises à jour noyau, les règles de pare-feu et la rotation des clés.
  • Conformité et souveraineté : besoin de garantir que les données transitent et sont stockées en France, avec un hébergeur soumis au droit français.
  • Déploiement rapide : une PME ou une startup qui veut un VPN opérationnel en quelques heures plutôt qu’en quelques jours, sans gérer l’infrastructure sous-jacente.
  • Catalogue d’applications : WireGuard n’est qu’une des plus de 100 applications open source disponibles sur Yundera, aux côtés du stockage de fichiers, de la galerie photos, ou encore de l’hébergement d’applications d’IA locale.

La différence avec un VPS classique : vous n’administrez pas le serveur, vous l’utilisez. La maintenance, les sauvegardes et le monitoring sont inclus.


Ce que l’expérience terrain révèle sur WireGuard en production

Les erreurs les plus coûteuses en production ne sont pas techniques au sens strict. Ce sont des oublis de configuration qui auraient pu être évités avec une checklist rigoureuse.

Le cas le plus récurrent : AllowedIPs mal défini côté serveur. Un administrateur ajoute un nouveau client, oublie de préciser son adresse tunnel dans le bloc [Peer], et passe une heure à chercher pourquoi le handshake s’établit mais le trafic ne passe pas. La réponse est dans wg show : le pair existe, mais aucune IP ne lui est autorisée.

Deuxième piège fréquent : le forwarding IP désactivé après une mise à jour système. Certaines distributions réinitialisent les paramètres sysctl lors d’une mise à jour majeure du noyau. Un script de vérification post-mise à jour qui confirme net.ipv4.ip_forward = 1 évite ce type d’incident silencieux.

Sur la politique PersistentKeepalive : 25 secondes est l’intervalle de référence pour les clients derrière NAT, mais ne l’activez pas par défaut sur tous les pairs. Les clients mobiles avec cette option active maintiennent le tunnel même en veille, ce qui se traduit par une consommation batterie mesurable. Réservez-le aux cas où le client initie rarement du trafic mais doit rester joignable depuis le serveur.

WireGuard est objectivement plus simple à opérer qu’OpenVPN ou IPsec. Moins de code, moins de surface d’attaque, des performances nettement supérieures sur les connexions à haute latence. Mais cette simplicité ne dispense pas d’une gestion rigoureuse des clés et d’un monitoring actif des handshakes. Un tunnel silencieux n’est pas forcément un tunnel sain.


Ce que l'expérience terrain révèle sur WireGuard en production — overview diagram

Votre serveur WireGuard, sans la charge opérationnelle

Vous avez suivi ce guide jusqu’ici : vous savez configurer, sécuriser et maintenir un serveur WireGuard. Si vous préférez déléguer cette exploitation tout en gardant la maîtrise de vos données, Yundera propose une alternative concrète.

Yundera

Avec Yundera, votre serveur privé est hébergé en France, géré et maintenu par nos équipes. WireGuard fait partie du catalogue d’applications open source disponibles, aux côtés de plus de 100 autres outils pour le stockage, la collaboration et la sécurité. Aucune donnée collectée, export garanti, infrastructure éthique. C’est la différence entre administrer un serveur et en avoir un qui fonctionne.

Pour les PME et les équipes qui veulent un VPN souverain sans gérer l’infrastructure, découvrez l’offre sur Yundera. Vous pouvez aussi consulter notre page dédiée aux startups et PME pour voir comment Yundera s’adapte à vos besoins spécifiques.


Sources

Recommandation

분류 Français
로그인 의견을 남기기