Aller au contenu

Serveur WireGuard de A à Z

Objectif : un serveur VPN permettant à un ou plusieurs postes clients de rejoindre un réseau via un tunnel chiffré. Contexte théorique dans VPN — WireGuard.

Installation Physique, VM (VMware, Proxmox, Hyper-V…) ou VPS cloud — WireGuard n’a pas d’exigence particulière liée au type d’hébergement, hormis un accès réseau public (IP fixe ou DNS dynamique) pour l’Endpoint.
Système d’exploitation (serveur) Debian/Ubuntu (apt install wireguard, ce tutoriel) — support natif dans le noyau Linux ≥ 5.6 ; sur un noyau plus ancien, un module DKMS (wireguard-dkms) est nécessaire. Transposable à Fedora/RHEL (dnf) ou Arch (pacman, déjà inclus dans le noyau officiel).
Système d’exploitation (client) Applications officielles disponibles pour Windows, macOS, Linux, iOS et Android — la configuration [Interface]/[Peer] de ce tutoriel s’importe telle quelle dans chacune (fichier .conf ou QR code sur mobile).
Prérequis matériels Très légers grâce à l’implémentation en espace noyau : 1 vCPU / 512 Mo à 1 Go de RAM suffisent pour quelques dizaines de clients à usage bureautique. Le débit réel dépend surtout de la bande passante réseau et du CPU disponible pour le chiffrement (ChaCha20), pas du nombre de tunnels.

Accès nécessaire : une session SSH (ou console) ouverte sur le serveur, avec un compte disposant des droits sudo.

Mettre à jour le système avant toute installation :

Fenêtre de terminal
sudo apt update && sudo apt upgrade -y

Vérifier le support noyau et les paquets nécessaires :

Fenêtre de terminal
# WireGuard est intégré au noyau Linux depuis la version 5.6 — vérifier la version :
uname -r
# Si le noyau est plus ancien que 5.6, un module DKMS supplémentaire est requis :
sudo apt install wireguard-dkms -y
# wireguard-tools (commandes wg / wg-quick) : généralement pas installé par défaut
dpkg -l | grep wireguard-tools
# nftables, utilisé pour les règles PostUp/PostDown plus bas — souvent déjà présent
# sur les distributions récentes, à vérifier :
which nft || sudo apt install nftables -y

Si wireguard-tools n’apparaît pas dans le résultat, l’étape 1 ci-dessous l’installera.

Fenêtre de terminal
sudo apt install wireguard -y
Fenêtre de terminal
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
sudo chmod 600 /etc/wireguard/server_private.key

/etc/wireguard/wg0.conf :

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = <contenu de server_private.key>
PostUp = nft add rule inet filter forward ip saddr 10.10.10.0/24 accept
PostDown = nft delete rule inet filter forward ip saddr 10.10.10.0/24 accept
# Un bloc [Peer] par client
[Peer]
PublicKey = <clé publique du client>
AllowedIPs = 10.10.10.2/32

Activer le forwarding IP (nécessaire pour router le trafic) :

Fenêtre de terminal
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Fenêtre de terminal
sudo systemctl enable --now wg-quick@wg0
sudo wg show

Sur le client, générer sa propre paire de clés, puis :

[Interface]
Address = 10.10.10.2/32
PrivateKey = <clé privée du client>
DNS = 10.10.10.1
[Peer]
PublicKey = <clé publique du serveur>
Endpoint = vpn.exemple.fr:51820
AllowedIPs = 10.10.10.0/24 # ou 0.0.0.0/0 pour router tout le trafic via le VPN
PersistentKeepalive = 25

PersistentKeepalive maintient le mapping NAT ouvert côté client — indispensable si le client est lui-même derrière un NAT/routeur.

Fenêtre de terminal
nft add rule inet filter input udp dport 51820 accept
Fenêtre de terminal
sudo wg show
ping 10.10.10.1 # depuis le client, une fois le tunnel monté