WireGuard : VPN site-a-site pour remplacer votre MPLS

Guide WireGuard site-a-site : installation, configuration peers, routage inter-VLAN. Remplacez votre MPLS avec ce VPN open source haute performance.

WireGuard : VPN site-a-site pour remplacer votre MPLS

Chez BOTUM, quand un client nous demande comment relier ses bureaux de façon sécurisée sans payer une fortune en MPLS, la réponse est presque toujours la même : WireGuard. Ce protocole VPN moderne est une révolution — 4 000 lignes de code contre 100 000 pour OpenVPN, des performances qui dépassent IPSec dans la plupart des cas réels, et une configuration qui tient sur une page. Ce guide vous montre comment déployer un VPN site-à-site complet entre deux ou trois bureaux, avec un serveur hub central.

Pourquoi WireGuard plutôt qu'OpenVPN ou IPSec ?

La question revient souvent dans nos missions d'audit réseau. OpenVPN existe depuis 2001 et fait le travail, mais son code massif et son protocole TLS en couche génèrent une latence mesurable. IPSec est puissant mais sa configuration est un enfer — je l'ai vu bloquer des projets pendant des semaines. WireGuard, lui, tourne directement dans le kernel Linux depuis la version 5.6 (2020).

  • Performance : WireGuard utilise ChaCha20-Poly1305, plus rapide qu'AES sur les processeurs sans AES-NI (comme beaucoup de VMs)
  • Simplicité : une paire de clés publique/privée, un fichier de config, c'est tout
  • Sécurité : surface d'attaque minimaliste — 4 000 lignes auditées vs 100 000+ pour OpenVPN
  • Reconnexion : WireGuard reprend en millisecondes après une coupure réseau (idéal pour les nomades)
  • Kernel-space : pas de TUN/TAP userspace, latence réduite, débit maximal
  • Cryptographie moderne : Curve25519, ChaCha20, Poly1305, BLAKE2s — pas d'algorithmes faibles

⚠️ Avertissement : WireGuard est un excellent choix pour les entreprises, mais il ne cache pas les métadonnées (IPs sources/destinations). Si l'anonymat total est requis, regardez Tor ou i2p. Pour une infrastructure d'entreprise, WireGuard est parfait.

Architecture WireGuard VPN site-à-site avec hub central et tunnels chiffrés
Architecture hub-and-spoke : le serveur central route le trafic entre les bureaux

Architecture et prérequis

On va déployer un modèle hub-and-spoke : un serveur central (votre VPS ou serveur dédié) qui reçoit les connexions des différents sites. C'est la topologie la plus simple à maintenir et la plus robuste en production.

  • Serveur Hub : VPS Ubuntu 22.04+ avec IP publique fixe, 1 vCPU / 512 MB RAM suffit
  • Bureau A : serveur Ubuntu/Debian avec accès Internet (NAT OK, IP dynamique OK)
  • Bureau B : idem
  • Ports : UDP 51820 ouvert sur le Hub (firewall/groupe de sécurité cloud)
  • Accès root ou sudo sur toutes les machines

Installation WireGuard

Sur Ubuntu 22.04 / 24.04

WireGuard est dans les dépôts officiels depuis Ubuntu 20.04. L'installation prend 30 secondes :

# Sur TOUTES les machines (Hub + Bureau A + Bureau B)
sudo apt update && sudo apt install -y wireguard wireguard-tools

# Vérifier la version
wg --version
# → wireguard-tools v1.0.20210914 - https://www.wireguard.com

Générer les paires de clés

Chaque machine a sa propre paire de clés. Ne jamais partager la clé privée — elle ne quitte jamais la machine.

# Sur CHAQUE machine, générer la paire de clés
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

# Sécuriser la clé privée
sudo chmod 600 /etc/wireguard/privatekey

# Afficher les clés (à noter précieusement)
echo "Clé privée : $(sudo cat /etc/wireguard/privatekey)"
echo "Clé publique : $(sudo cat /etc/wireguard/publickey)"

# Générer une Pre-Shared Key (PSK) pour sécurité supplémentaire
# (optionnel mais recommandé — à faire sur le Hub)
wg genpsk | sudo tee /etc/wireguard/presharedkey
sudo chmod 600 /etc/wireguard/presharedkey
Terminal Linux configuration WireGuard wg0.conf sur fond noir
Configuration du fichier wg0.conf — chaque ligne a son importance

Configuration du serveur Hub

Le Hub est le cœur du réseau. Il accepte les connexions des deux bureaux et route le trafic entre eux. Remplacez , et par vos vraies clés.

sudo nano /etc/wireguard/wg0.conf
[Interface]
# Clé privée du serveur Hub
PrivateKey = <CLE_PRIVEE_HUB>
# IP du tunnel WireGuard pour ce serveur
Address = 10.10.0.1/24
# Port d'écoute
ListenPort = 51820
# Activer le forwarding IP (routage inter-sites)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; sysctl -w net.ipv4.ip_forward=1
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 : Bureau A ───────────────────────────────────────
[Peer]
# Clé publique du Bureau A
PublicKey = <CLE_PUBLIQUE_BUREAU_A>
# PSK optionnelle pour double protection
PresharedKey = <PSK_BUREAU_A>
# IP WireGuard allouée au Bureau A + son réseau LAN
AllowedIPs = 10.10.0.2/32, 192.168.1.0/24
# Keepalive pour maintenir le tunnel à travers les NAT
PersistentKeepalive = 25

# ─── Peer : Bureau B ───────────────────────────────────────
[Peer]
PublicKey = <CLE_PUBLIQUE_BUREAU_B>
PresharedKey = <PSK_BUREAU_B>
AllowedIPs = 10.10.0.3/32, 192.168.2.0/24
PersistentKeepalive = 25

Activez le forwarding IP de façon permanente (sinon le routage s'arrête au reboot) :

# Rendre le forwarding permanent
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Démarrer WireGuard
sudo systemctl enable --now wg-quick@wg0

# Vérifier le statut
sudo wg show
sudo systemctl status wg-quick@wg0

Configuration Bureau A

sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <CLE_PRIVEE_BUREAU_A>
# IP WireGuard de ce bureau dans le tunnel
Address = 10.10.0.2/24
# DNS optionnel via tunnel
DNS = 1.1.1.1

[Peer]
# Clé publique du Hub
PublicKey = <CLE_PUBLIQUE_HUB>
PresharedKey = <PSK_BUREAU_A>
# IP publique du Hub et port
Endpoint = <IP_PUBLIQUE_HUB>:51820
# Routes à envoyer dans le tunnel :
# - réseau WireGuard 10.10.0.0/24
# - réseau LAN du Bureau B
AllowedIPs = 10.10.0.0/24, 192.168.2.0/24
PersistentKeepalive = 25
# Démarrer + activer au démarrage
sudo systemctl enable --now wg-quick@wg0

# Test de connectivité
ping -c 3 10.10.0.1    # Hub
ping -c 3 10.10.0.3    # Bureau B
ping -c 3 192.168.2.1  # Gateway Bureau B
Schéma routage multi-site WireGuard hub-and-spoke avec réseaux LAN
Flux de routage : Bureau A → Hub → Bureau B via tunnels chiffrés

Configuration Bureau B

Même logique que Bureau A, en changeant les adresses :

[Interface]
PrivateKey = <CLE_PRIVEE_BUREAU_B>
Address = 10.10.0.3/24

[Peer]
PublicKey = <CLE_PUBLIQUE_HUB>
PresharedKey = <PSK_BUREAU_B>
Endpoint = <IP_PUBLIQUE_HUB>:51820
# Routes : tunnel WireGuard + LAN Bureau A
AllowedIPs = 10.10.0.0/24, 192.168.1.0/24
PersistentKeepalive = 25

Monitoring et dépannage

WireGuard est silencieux par nature — il ne logge presque rien. Ces commandes vous donnent l'état en temps réel :

# Statut complet du tunnel (peers, handshakes, trafic)
sudo wg show

# Affichage détaillé avec timestamps
sudo wg show all dump

# Surveiller le trafic en temps réel
sudo watch -n 1 wg show

# Voir les routes actives
ip route show table all | grep wg0

# Test de latence
ping -c 10 10.10.0.3
traceroute 192.168.2.10

# Logs système (si problème)
journalctl -u wg-quick@wg0 -f

# Redémarrer le tunnel sans perdre la config
sudo wg-quick down wg0 && sudo wg-quick up wg0
Monitoring WireGuard terminal statistiques handshake et trafic en temps réel
wg show : vérifier les handshakes — si > 3 min, le tunnel est peut-être mort

Sécurisation avancée

Firewall UFW côté Hub

N'exposez que le strict nécessaire sur le Hub :

# Autoriser uniquement WireGuard UDP (et SSH depuis une IP spécifique)
sudo ufw allow 51820/udp comment 'WireGuard'
sudo ufw allow from <IP_ADMIN> to any port 22 comment 'SSH admin'
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable

# Vérifier les règles
sudo ufw status verbose

Rotation des clés

Bonne pratique : rotation des PSK tous les 90 jours. Un script cron peut automatiser ça :

#!/bin/bash
# /usr/local/bin/rotate-wg-psk.sh
NEW_PSK=$(wg genpsk)
# Mettre à jour le fichier de config pour Bureau A
sed -i "s/PresharedKey = .*/PresharedKey = $NEW_PSK/" /etc/wireguard/wg0.conf
# Redémarrer WireGuard sans coupure
wg syncconf wg0 <(wg-quick strip wg0)
echo "$(date) - PSK rotated" >> /var/log/wireguard-maintenance.log
Dashboard monitoring réseau VPN statistiques connexions actives et bande passante
Tableaux de bord réseau : monitorer vos tunnels WireGuard avec Grafana + Prometheus

Cas d'usage réels BOTUM

En production, nous utilisons WireGuard dans plusieurs configurations chez nos clients PME :

  • Remplacement MPLS : économie de 80-90% sur les coûts de liaisons inter-sites
  • Accès sécurisé télétravail : chaque employé a son propre peer WireGuard
  • Isolation réseau IoT : tunnel dédié pour les équipements industriels
  • Backup de liaisons : WireGuard comme failover si la liaison principale tombe
  • Accès admin serveurs cloud : remplace les bastions complexes

Prochaines étapes

Votre VPN site-à-site WireGuard est maintenant opérationnel. Pour aller plus loin :

  • Installer un firewall OPNsense ou PFSense devant le Hub pour filtrage avancé
  • Configurer un SD-WAN DIY avec WireGuard + OPNsense pour la priorisation QoS
  • Ajouter une interface de monitoring avec wg-easy (interface web pour WireGuard)
  • Automatiser la rotation des clés avec des scripts cron
  • Explorer la segmentation VLANs pour isoler les réseaux par fonction
📥 Guide PDF complet

Téléchargez ce guide en PDF pour le consulter hors ligne.

⬇ Télécharger le guide (PDF)

🚀 Aller plus loin avec BOTUM

Ce guide couvre les bases. En production, chaque environnement a ses spécificités. Les équipes BOTUM accompagnent les organisations dans le déploiement, la configuration avancée et la sécurisation de leur infrastructure. Si vous avez un projet, parlons-en.

Discuter de votre projet →
📋 Série Infrastructure Proxmox : Voir la série complète →
Série Infrastructure Proxmox