VPN / Sécurité
📚 Installation WireGuard VPN Serveur Client Linux — Guide Complet
Guide complet WireGuard : génération de clés, configuration serveur, profils clients, NAT, VPN site-to-site, QR code pour smartphone et diagnostic.
Pourquoi WireGuard ?
| Critère | OpenVPN | WireGuard |
|---|---|---|
| Code source | ~600 000 lignes | ~4 000 lignes (audit facile) |
| Performance | Bonne | Excellente (dans le noyau Linux) |
| Configuration | Complexe (PKI, CA, certs) | Simple (paire de clés) |
| Reconnexion | Lente (~30s) | Quasi-instantanée |
| Protocole | SSL/TLS (TCP ou UDP) | UDP uniquement (WireGuard) |
| Port par défaut | 1194 UDP | 51820 UDP |
| Intégration noyau | Non (userspace) | Oui (Linux ≥ 5.6) |
| Cas d'usage idéal | PKI existante, révocation | Accès distant simple et rapide |
WireGuard fonctionne avec des paires de clés asymétriques (similaire à SSH). Chaque pair (serveur ou client) génère sa propre paire clé privée/publique. La clé publique est échangée entre les pairs — aucune CA ni certificat nécessaire.
Étape 1 — Installation
01-install-wg.sh
#!/bin/bash # ── Debian 12 / Ubuntu 22.04+ ──────────────────────────────── apt update apt install -y wireguard wireguard-tools # Vérifier l'installation wg --version modinfo wireguard # Vérifier que le module noyau est disponible echo "[OK] WireGuard installé"
Étape 2 — Générer les clés serveur
02-gen-server-keys.sh
#!/bin/bash # Créer le répertoire de configuration mkdir -p /etc/wireguard chmod 700 /etc/wireguard cd /etc/wireguard # Générer la paire de clés du SERVEUR wg genkey | tee server_private.key | wg pubkey > server_public.key chmod 600 server_private.key # Afficher les clés (à noter) echo "Clé privée serveur : $(cat server_private.key)" echo "Clé publique serveur : $(cat server_public.key)" # Générer une clé pré-partagée (couche de sécurité supplémentaire) wg genpsk > preshared.key chmod 600 preshared.key echo "[OK] Clés serveur générées dans /etc/wireguard/"
Étape 3 — Configuration du serveur
/etc/wireguard/wg0.conf — Serveur
# ════════════════════════════════════════════ # CONFIGURATION SERVEUR WIREGUARD # Fichier : /etc/wireguard/wg0.conf # ════════════════════════════════════════════ [Interface] # Clé privée du serveur PrivateKey = <COLLER_SERVER_PRIVATE_KEY_ICI> # Adresse IP du serveur dans le tunnel VPN Address = 10.0.0.1/24 # Port d'écoute WireGuard ListenPort = 51820 # ── Activation du NAT au démarrage ─────────────────────────── # Remplacer eth0 par votre interface WAN PostUp = iptables -A FORWARD -i %i -j ACCEPT PostUp = iptables -A FORWARD -o %i -j ACCEPT PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT PostDown = iptables -D FORWARD -o %i -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # ════════════════════════════════════════════ # CLIENT 1 — Jean Dupont (laptop) # ════════════════════════════════════════════ [Peer] # Clé publique du client 1 PublicKey = <COLLER_CLIENT1_PUBLIC_KEY_ICI> # Clé pré-partagée (optionnel mais recommandé) PresharedKey = <COLLER_PRESHARED_KEY_ICI> # IP autorisée pour ce client dans le tunnel AllowedIPs = 10.0.0.2/32 # ════════════════════════════════════════════ # CLIENT 2 — Marie Martin (smartphone) # ════════════════════════════════════════════ [Peer] PublicKey = <COLLER_CLIENT2_PUBLIC_KEY_ICI> PresharedKey = <COLLER_PRESHARED_KEY_ICI> AllowedIPs = 10.0.0.3/32 # ════════════════════════════════════════════ # CLIENT 3 — Site distant (routeur) # ════════════════════════════════════════════ [Peer] PublicKey = <COLLER_SITE_DISTANT_PUBLIC_KEY_ICI> AllowedIPs = 10.0.0.4/32, 192.168.2.0/24 # IP tunnel + LAN distant
Étape 4 — Activation du routage et démarrage
04-start-server.sh
#!/bin/bash # ── Activer le routage IP (indispensable pour NAT) ──────────── echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p # ── Protéger la clé privée ──────────────────────────────────── chmod 600 /etc/wireguard/wg0.conf # ── Démarrer WireGuard ──────────────────────────────────────── wg-quick up wg0 # ── Activer au démarrage du système ────────────────────────── systemctl enable wg-quick@wg0 # ── Ouvrir le port dans UFW ─────────────────────────────────── ufw allow 51820/udp # ── Vérifier l'état ─────────────────────────────────────────── wg show echo "[OK] WireGuard démarré sur UDP 51820"
Étape 5 — Générer les clés client et le fichier de config
05-gen-client.sh
#!/bin/bash
# Générer une configuration client WireGuard
CLIENT_NAME=${1:-"client-jean"}
CLIENT_IP=${2:-"10.0.0.2"}
SERVER_IP="vpn.entreprise.fr" # IP publique ou FQDN du serveur
OUTPUT_DIR="/root/wg-clients"
mkdir -p $OUTPUT_DIR
# Générer les clés du client
CLIENT_PRIVATE=$(wg genkey)
CLIENT_PUBLIC=$(echo $CLIENT_PRIVATE | wg pubkey)
PRESHARED=$(cat /etc/wireguard/preshared.key)
SERVER_PUBLIC=$(cat /etc/wireguard/server_public.key)
echo "Clé publique client ($CLIENT_NAME) : $CLIENT_PUBLIC"
echo "→ Ajouter dans /etc/wireguard/wg0.conf section [Peer]"
echo ""
# Créer le fichier de configuration client
cat > "$OUTPUT_DIR/${CLIENT_NAME}.conf" << CLIENTEOF
[Interface]
# Clé privée du client
PrivateKey = $CLIENT_PRIVATE
# Adresse IP du client dans le tunnel
Address = ${CLIENT_IP}/24
# DNS via le tunnel (serveur DNS interne ou public)
DNS = 192.168.1.10, 8.8.8.8
[Peer]
# Clé publique du serveur WireGuard
PublicKey = $SERVER_PUBLIC
# Clé pré-partagée (sécurité supplémentaire)
PresharedKey = $PRESHARED
# Adresse et port du serveur VPN
Endpoint = ${SERVER_IP}:51820
# Tout le trafic via le VPN (0.0.0.0/0)
# Pour accès au LAN seulement : AllowedIPs = 192.168.1.0/24
AllowedIPs = 0.0.0.0/0, ::/0
# Maintien de la connexion (NAT keepalive)
PersistentKeepalive = 25
CLIENTEOF
echo "[OK] Config client générée : $OUTPUT_DIR/${CLIENT_NAME}.conf"
echo " Pour ajouter le client au serveur :"
echo " wg set wg0 peer $CLIENT_PUBLIC allowed-ips ${CLIENT_IP}/32"
echo " wg-quick save wg0"
Étape 6 — Ajouter un client à chaud (sans redémarrage)
06-add-peer-hot.sh
# Ajouter un nouveau pair sans arrêter WireGuard
CLIENT_PUBKEY="<COLLER_LA_CLE_PUBLIQUE_DU_CLIENT>"
CLIENT_IP="10.0.0.4"
PRESHARED=$(cat /etc/wireguard/preshared.key)
# Ajouter le pair dynamiquement
wg set wg0 peer $CLIENT_PUBKEY preshared-key /etc/wireguard/preshared.key allowed-ips ${CLIENT_IP}/32
# Sauvegarder la configuration (ajoute le [Peer] dans wg0.conf)
wg-quick save wg0
# Vérifier
wg show wg0
VPN site-to-site — Deux bureaux connectés
site-to-site.txt
Scénario : Bureau A (192.168.1.0/24) ←→ Bureau B (192.168.2.0/24) BUREAU A — Serveur WireGuard (IP publique : 203.0.113.1) /etc/wireguard/wg0.conf : [Interface] PrivateKey = <bureau_a_private> Address = 10.10.0.1/30 ListenPort = 51820 PostUp = ip route add 192.168.2.0/24 dev wg0 PostDown = ip route del 192.168.2.0/24 dev wg0 [Peer] PublicKey = <bureau_b_public> Endpoint = 198.51.100.2:51820 # IP publique Bureau B AllowedIPs = 10.10.0.2/32, 192.168.2.0/24 BUREAU B — Client WireGuard /etc/wireguard/wg0.conf : [Interface] PrivateKey = <bureau_b_private> Address = 10.10.0.2/30 [Peer] PublicKey = <bureau_a_public> Endpoint = 203.0.113.1:51820 # IP publique Bureau A AllowedIPs = 10.10.0.1/32, 192.168.1.0/24 PersistentKeepalive = 25
Générer un QR code pour smartphone
qrcode-mobile.sh
# Installer qrencode apt install -y qrencode # Afficher le QR code dans le terminal (scanner avec l'app WireGuard) qrencode -t ansiutf8 < /root/wg-clients/client-jean.conf # Ou générer en image PNG qrencode -t png -o /root/wg-clients/client-jean.png < /root/wg-clients/client-jean.conf echo "[OK] QR code généré — scanner avec l'application WireGuard mobile"
Commandes de diagnostic
| Commande | Description |
|---|---|
| wg show | État complet : interfaces, pairs, trafic, dernière prise de contact |
| wg show wg0 peers | Liste des pairs avec leur clé publique |
| wg show wg0 latest-handshakes | Dernière connexion de chaque pair (0 = jamais connecté) |
| wg show wg0 transfer | Trafic envoyé/reçu par pair |
| wg-quick up wg0 | Démarrer l'interface WireGuard |
| wg-quick down wg0 | Arrêter l'interface WireGuard |
| wg-quick save wg0 | Sauvegarder la config runtime dans wg0.conf |
| ip addr show wg0 | Vérifier l'adresse IP du tunnel |
| ping 10.0.0.2 | Tester la connectivité avec un client VPN |
| tcpdump -i wg0 | Capturer le trafic déchiffré dans le tunnel |
Application mobile : WireGuard est disponible sur iOS et Android. Pour connecter un smartphone, générer le fichier .conf client, créer un QR code avec
qrencode, et scanner depuis l'application WireGuard. La connexion s'établit en moins d'une seconde.Sécurité des clés : La clé privée WireGuard ne doit JAMAIS transiter en clair (email, chat). Transférer les fichiers .conf via SCP/SFTP chiffré, ou générer les clés directement sur la machine cliente et n'échanger que la clé publique.
Ressources officielles WireGuard
WireGuard.com
Site officiel — concepts, installation, whitepaper
WireGuard Installation
Guide d'installation selon votre OS
WireGuard Whitepaper
Papier technique sur la cryptographie WireGuard
WireGuard Android/iOS
Application mobile officielle
WireGuard Windows
Client officiel Windows
wg-easy
Interface web pour gérer WireGuard facilement
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google