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.
Environnement
Section intitulée « Environnement »| 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. |
1. Installation
Section intitulée « 1. Installation »sudo apt install wireguard2. Générer les clés du serveur
Section intitulée « 2. Générer les clés du serveur »wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.keysudo chmod 600 /etc/wireguard/server_private.key3. Configurer l’interface serveur
Section intitulée « 3. Configurer l’interface serveur »/etc/wireguard/wg0.conf :
[Interface]Address = 10.10.10.1/24ListenPort = 51820PrivateKey = <contenu de server_private.key>PostUp = nft add rule inet filter forward ip saddr 10.10.10.0/24 acceptPostDown = 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/32Activer le forwarding IP (nécessaire pour router le trafic) :
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.confsudo sysctl -p4. Démarrer le service
Section intitulée « 4. Démarrer le service »sudo systemctl enable --now wg-quick@wg0sudo wg show5. Configurer un client
Section intitulée « 5. Configurer un client »Sur le client, générer sa propre paire de clés, puis :
[Interface]Address = 10.10.10.2/32PrivateKey = <clé privée du client>DNS = 10.10.10.1
[Peer]PublicKey = <clé publique du serveur>Endpoint = vpn.exemple.fr:51820AllowedIPs = 10.10.10.0/24 # ou 0.0.0.0/0 pour router tout le trafic via le VPNPersistentKeepalive = 25PersistentKeepalive maintient le mapping NAT ouvert côté client — indispensable si le client est lui-même derrière un NAT/routeur.
6. Ouvrir le port sur le pare-feu
Section intitulée « 6. Ouvrir le port sur le pare-feu »nft add rule inet filter input udp dport 51820 acceptVérification
Section intitulée « Vérification »sudo wg showping 10.10.10.1 # depuis le client, une fois le tunnel monté