Sécurité

Serveur WireGuard : guide d'installation et de configuration pour Linux et Windows

12 mai 2026·7 min lecture

Qu'est-ce que WireGuard ?

WireGuard est un protocole VPN open-source intégré au noyau Linux depuis la version 5.6 (disponible aussi sur Windows, macOS, Android et iOS). Sa conception est minimaliste : moins de 4 000 lignes de code, cryptographie moderne (Curve25519, ChaCha20-Poly1305, BLAKE2s) et configuration reproductible basée sur des paires de clés. Contrairement à OpenVPN ou IPsec, il ne nécessite pas d'infrastructure de certificats et le handshake prend des millisecondes.

Pourquoi l'utiliser en IoT ?

Les passerelles IoT déployées sur le terrain se connectent depuis des réseaux opérateurs avec NAT ou CGNAT — elles n'ont pas d'IP publique fixe et ne sont pas directement accessibles. Avec WireGuard, chaque appareil établit un tunnel chiffré vers un serveur central avec une IP statique. Le système central voit toutes les passerelles comme si elles étaient sur le même réseau local, sans ouvrir de ports vers l'extérieur.

WireGuard permet d'établir des tunnels VPN chiffrés avec un footprint minimal et une configuration reproductible. Ce guide couvre l'installation et la configuration d'un serveur WireGuard sous Linux (Ubuntu/Debian) et Windows 10/11 : génération de clés, fichier wg0.conf, activation du service et vérification du handshake avec le pair. Le même serveur prend en charge plusieurs pairs simultanés sans dégradation des performances.

Visualisation · Handshake WireGuard — serveur ↔ pair client

Architecture du tunnel

Le tunnel WireGuard est point-à-point : un serveur central (votre instance sur AWS, GCP ou on-premise) agit comme pair statique avec une IP publique fixe, et le pair distant est le client dynamique qui initie la connexion. Cela crée un canal d'accès chiffré pour la configuration à distance, le diagnostic ou tout service nécessitant une communication sécurisée entre les deux extrémités.

ComposantRôle WireGuardIP du tunnel (exemple)
Serveur VPN (Linux / Windows)Pair statique (ListenPort actif)10.8.0.1/24
Pair / client distantPair dynamique (initie la connexion)10.8.0.2/32

Étape 1 — Installer WireGuard sur le serveur

Linux (Ubuntu / Debian)

Sur un serveur Ubuntu 22.04 ou Debian 12 (recommandé) :

sudo apt update && sudo apt install -y wireguard
sudo modprobe wireguard   # charge le module noyau

Vérifiez que le module est disponible :

lsmod | grep wireguard
# wireguard              90112  0

Windows 10 / 11

Téléchargez l'installateur officiel depuis wireguard.com/install ou via winget :

# Option A — winget (Windows 10 v1709+ / Windows 11)
winget install WireGuard.WireGuard

# Option B — installateur graphique
# Téléchargez le .msi depuis wireguard.com/install et exécutez-le en tant qu'Administrateur

Vérifiez que wg.exe est disponible en ouvrant PowerShell ou CMD :

wg --version
# wireguard-windows v0.5.3

Étape 2 — Générer la paire de clés sur le serveur

Linux (Ubuntu / Debian)

# Génère la clé privée du serveur
wg genkey | sudo tee /etc/wireguard/server_private.key
# Dérive la clé publique
sudo cat /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
sudo chmod 600 /etc/wireguard/server_private.key

Sauvegardez la clé publique du serveur en lieu sûr — vous devrez la partager avec chaque pair qui se connecte.

Windows 10 / 11

wg.exe est installé dans C:\Program Files\WireGuard\. Exécutez PowerShell en tant qu'Administrateur :

cd "C:Program FilesWireGuard"

# Génère la clé privée du serveur
.wg.exe genkey | Set-Content server_private.key

# Dérive la clé publique
Get-Content .server_private.key | .wg.exe pubkey | Set-Content server_public.key

Alternative GUI : dans l'application WireGuard, cliquez sur 'Add Tunnel' → 'Add empty tunnel'. L'application génère la paire de clés automatiquement et affiche la clé publique. Ajoutez simplement Address, ListenPort et les blocs [Peer].

Étape 3 — Créer le fichier de configuration du serveur

Linux (Ubuntu / Debian)

Créez /etc/wireguard/wg0.conf avec le contenu suivant (remplacez les valeurs entre < >) : (/etc/wireguard/wg0.conf)

[Interface]
PrivateKey = <contenu de server_private.key>
Address = 10.8.0.1/24
ListenPort = 51820

# Active le forwarding IP pour le routage entre pairs
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Index AMI gateway IoT / embedded device — unité 001
PublicKey = <clé publique de l'Index AMI — générée à l'étape 4>
AllowedIPs = 10.8.0.2/32

Note : le port UDP 51820 doit être ouvert dans le pare-feu du serveur. Sur AWS : règle entrante UDP 51820 dans le Security Group. Sur GCP : règle de pare-feu VPC avec protocole UDP et port 51820.

Windows 10 / 11

Le format wg0.conf est identique à Linux. Windows ne nécessite pas les lignes PostUp/PostDown (routage manuel si nécessaire) :

[Interface]
PrivateKey = <contenido de server_private.key>
Address = 10.8.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <clave pública del peer — generada en Paso 4>
AllowedIPs = 10.8.0.2/32

Importez le fichier comme service Windows (PowerShell ou CMD en tant qu'Administrateur) :

# Installe le tunnel comme service Windows
wireguard /installtunnelservice "C:WireGuardwg0.conf"
# Le service démarre automatiquement avec le nom : WireGuardTunnel$wg0

Ouvrez le port UDP 51820 dans le Pare-feu Windows (PowerShell en tant qu'Administrateur) :

New-NetFirewallRule -DisplayName "WireGuard VPN" `
  -Direction Inbound -Protocol UDP `
  -LocalPort 51820 -Action Allow

Étape 4 — Ajouter le pair au serveur

Lorsque le pair vous envoie sa clé publique, ajoutez un bloc [Peer] à la fin du fichier wg0.conf du serveur :

[Peer]
# Nom descriptif du pair (commentaire optionnel)
PublicKey = <clé publique du pair>
AllowedIPs = 10.8.0.2/32

Rechargez la configuration sans redémarrer le service :

Linux (Ubuntu / Debian)

sudo wg syncconf wg0 <(wg-quick strip wg0)

Windows 10 / 11

Ouvrez l'interface WireGuard → sélectionnez le tunnel wg0 → modifiez le fichier et ajoutez le bloc [Peer] → appliquez les modifications.

Étape 5 — Démarrer l'interface et vérifier le handshake

Linux (Ubuntu / Debian)

Sur le serveur :

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Vérifiez l'état de l'interface :

sudo wg show

# Sortie attendue :
interface: wg0
  public key: <clé publique du serveur>
  private key: (hidden)
  listening port: 51820

peer: <clé publique de l'Index AMI>
  endpoint: <IP 4G de l'Index AMI>:XXXXX
  allowed ips: 10.8.0.2/32
  latest handshake: 3 seconds ago
  transfer: 1.23 KiB received, 2.45 KiB sent

Le champ latest handshake avec une valeur récente (moins de 3 minutes) confirme que le tunnel est actif. S'il n'apparaît pas, consultez la section de résolution des problèmes.

Windows 10 / 11

Si vous avez installé le service avec /installtunnelservice, le tunnel démarre automatiquement. Pour le contrôle manuel depuis PowerShell :

sc start WireGuardTunnel$wg0
# o para detenerlo:
sc stop WireGuardTunnel$wg0

Alternative GUI : ouvrez WireGuard depuis la barre des tâches ou le menu Démarrer et activez l'interrupteur du tunnel wg0.

Vérifiez l'état du tunnel avec wg.exe (doit être dans le PATH ou utilisez le chemin complet) :

wg show
# interface: wg0
#   public key: ...
#   listening port: 51820
# peer: ...
#   latest handshake: 3 seconds ago

Étape 6 — Vérifier la connectivité de bout en bout

Depuis le serveur, effectuez un ping vers l'IP du tunnel de l'Index AMI :

ping 10.8.0.2
# PING 10.8.0.2 (10.8.0.2): 56 data bytes
# 64 bytes from 10.8.0.2: icmp_seq=0 ttl=64 time=8.3 ms

Une latence inférieure à 15 ms sur LTE est normale. Si votre application de gestion tourne sur le même serveur, elle peut déjà atteindre le pair directement via 10.8.0.2.

Résolution des problèmes

SymptômeCause probableSolution
Pas de handshake après 2 minPort UDP 51820 bloquéOuvrez UDP 51820 dans le pare-feu / security group du serveur
Handshake OK mais pas de pingRoutes ou AllowedIPs mal configurésVérifiez que AllowedIPs du pair inclut l'IP de destination
Le tunnel tombe après 3–5 min sans traficLe NAT 4G expire la session UDPAssurez-vous que PersistentKeepalive = 25 sur le pair Index AMI
Clé publique invalideCaractères coupés lors de la copieLa clé fait exactement 44 caractères base64 ; copiez-la intégralement

Topologie en maille (plusieurs Index AMI)

Pour des déploiements avec plus d'un Index AMI, ajoutez un bloc [Peer] supplémentaire par unité dans le wg0.conf du serveur. Chaque Index AMI reçoit une IP de tunnel unique (10.8.0.2, 10.8.0.3, …). Le serveur agit comme hub central — les Index AMI n'ont pas besoin de visibilité entre elles.

[Peer]
# Index AMI gateway IoT / embedded device — unité 002
PublicKey = <clé publique unité 002>
AllowedIPs = 10.8.0.3/32

[Peer]
# Index AMI gateway IoT / embedded device — unité 003
PublicKey = <clé publique unité 003>
AllowedIPs = 10.8.0.4/32

Linux (Ubuntu / Debian)

Appliquez les changements à chaud sans redémarrer le service :

sudo wg addconf wg0 /etc/wireguard/wg0.conf
# ou si vous ajoutez le pair directement :
sudo wg set wg0 peer <public key> allowed-ips 10.8.0.3/32

Windows 10 / 11

Sur Windows, les modifications à chaud avec wg addconf ne sont pas disponibles directement. Pour ajouter un pair, modifiez wg0.conf, arrêtez le service avec sc stop WireGuardTunnel$wg0 (ou depuis la GUI), puis redémarrez-le.

Prochaines étapes

Avec le serveur actif et le handshake vérifié, le tunnel chiffré est opérationnel. Le pair distant est accessible de façon sécurisée via son IP de tunnel depuis n'importe quel point du réseau. Si le bus RS485 du pair présente des défauts de communication, consultez le guide de diagnostic RS485 sur le terrain.