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.
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.
| Composant | Rôle WireGuard | IP du tunnel (exemple) |
|---|---|---|
| Serveur VPN (Linux / Windows) | Pair statique (ListenPort actif) | 10.8.0.1/24 |
| Pair / client distant | Pair 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ôme | Cause probable | Solution |
|---|---|---|
| Pas de handshake après 2 min | Port UDP 51820 bloqué | Ouvrez UDP 51820 dans le pare-feu / security group du serveur |
| Handshake OK mais pas de ping | Routes ou AllowedIPs mal configurés | Vérifiez que AllowedIPs du pair inclut l'IP de destination |
| Le tunnel tombe après 3–5 min sans trafic | Le NAT 4G expire la session UDP | Assurez-vous que PersistentKeepalive = 25 sur le pair Index AMI |
| Clé publique invalide | Caractères coupés lors de la copie | La 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.