// Serveur & self-hosting

WireGuard : monter un VPN simple et rapide

Accéder à son serveur maison depuis n’importe où, chiffrer sa connexion sur un Wi-Fi public, relier plusieurs machines comme si elles étaient sur le même réseau local : c’est le rôle d’un VPN. Longtemps, monter un VPN rimait avec configuration OpenVPN interminable. WireGuard a changé la donne. Intégré au noyau Linux, tenant en quelques lignes de configuration et réputé pour ses performances, il est devenu la référence moderne. Ce guide explique son fonctionnement, détaille l’installation côté serveur et côté client, et le compare à OpenVPN.

WireGuard, comment ça marche ?

WireGuard crée un tunnel chiffré entre deux machines ou plus. Chaque machine du tunnel s’appelle un peer (pair), et chacune possède une paire de clés cryptographiques : une clé privée gardée secrète, une clé publique partagée avec les autres peers.

Le principe est d’une élégante simplicité : un peer déclare la clé publique des autres peers qu’il autorise, et la plage d’adresses IP associée à chacun. Il n’y a pas de notion classique de « client » et « serveur » au niveau du protocole — juste des peers qui se connaissent. En pratique, on désigne « serveur » le peer qui a une adresse IP publique fixe et qui reste joignable en permanence.

WireGuard crée une interface réseau virtuelle (généralement wg0) sur chaque machine. Une fois le tunnel monté, ces interfaces communiquent via un sous-réseau privé (par exemple 10.0.0.0/24) comme si les machines étaient côte à côte, où qu’elles soient physiquement.

Installer WireGuard

Sur Debian ou Ubuntu, le paquet est disponible directement :

# Installer WireGuard et ses outils
sudo apt update && sudo apt install wireguard

# Vérifier que le module est disponible
wg --version

L’installation fournit deux commandes clés : wg pour piloter les tunnels, et wg-quick pour monter/démonter une interface à partir d’un fichier de configuration.

Générer les clés

Chaque peer a besoin de sa paire de clés. On les génère avec wg genkey et wg pubkey. Commençons par le serveur :

# Se placer dans le dossier de config et restreindre les droits
cd /etc/wireguard
umask 077

# Générer la clé privée puis en dériver la clé publique
wg genkey | tee serveur_prive.key | wg pubkey > serveur_public.key

Répétez l’opération pour chaque client (sur le serveur ou sur la machine cliente) :

wg genkey | tee client_prive.key | wg pubkey > client_public.key

La clé privée ne quitte jamais sa machine — Seules les clés publiques s’échangent entre peers. Une clé privée exposée compromet tout le tunnel : le umask 077 ci-dessus garantit que les fichiers ne sont lisibles que par leur propriétaire. Ne les copiez jamais dans un dépôt Git ni dans un canal non chiffré.

Configurer le serveur

Le serveur se décrit dans /etc/wireguard/wg0.conf. Il définit sa propre interface, puis liste les clients autorisés dans des sections [Peer] :

[Interface]
# Adresse du serveur dans le réseau du tunnel
Address = 10.0.0.1/24
# Port d'écoute (UDP)
ListenPort = 51820
# Clé privée du serveur (contenu de serveur_prive.key)
PrivateKey = <CLE_PRIVEE_SERVEUR>

# Activer le routage NAT pour donner accès à Internet aux clients
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Clé publique du client (contenu de client_public.key)
PublicKey = <CLE_PUBLIQUE_CLIENT>
# IP autorisée pour ce client dans le tunnel
AllowedIPs = 10.0.0.2/32

Pour que le serveur route le trafic entre ses interfaces, activez le forwarding IP :

# Activer le forwarding immédiatement puis de façon permanente
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

On démarre ensuite le tunnel et on l’active au boot :

# Monter l'interface wg0
sudo wg-quick up wg0

# L'activer automatiquement au démarrage du serveur
sudo systemctl enable wg-quick@wg0

# Vérifier l'état du tunnel et des peers
sudo wg show

N’oubliez pas d’ouvrir le port UDP 51820 sur votre pare-feu et, le cas échéant, de rediriger ce port sur votre box vers le serveur.

Configurer le client

Le fichier client suit la même logique, en inversant les rôles. Sur la machine cliente, dans /etc/wireguard/wg0.conf :

[Interface]
# Adresse du client dans le tunnel
Address = 10.0.0.2/24
# Clé privée du client
PrivateKey = <CLE_PRIVEE_CLIENT>
# Serveur DNS à utiliser une fois connecté
DNS = 1.1.1.1

[Peer]
# Clé publique du serveur
PublicKey = <CLE_PUBLIQUE_SERVEUR>
# Adresse publique et port du serveur
Endpoint = mon-serveur.fr:51820
# Router TOUT le trafic par le tunnel (0.0.0.0/0)
AllowedIPs = 0.0.0.0/0
# Maintenir la connexion à travers les NAT/pare-feu
PersistentKeepalive = 25

La directive AllowedIPs est le levier central côté client. Avec 0.0.0.0/0, tout le trafic passe par le VPN : c’est le mode « VPN complet » pour chiffrer toute sa navigation. Si vous voulez seulement accéder à votre réseau maison sans y router votre navigation, indiquez uniquement le sous-réseau concerné, par exemple AllowedIPs = 10.0.0.0/24, 192.168.1.0/24.

On active le tunnel côté client de la même façon :

sudo wg-quick up wg0

Accéder à son réseau à distance

C’est l’usage le plus gratifiant : depuis un café ou en déplacement, vous rejoignez votre réseau domestique comme si vous étiez chez vous. Une fois le tunnel monté, un serveur maison en 192.168.1.50 (un NAS, une instance Proxmox, un service auto-hébergé) devient joignable directement par son IP locale, à condition d’avoir inclus le sous-réseau 192.168.1.0/24 dans les AllowedIPs du client et d’avoir le forwarding actif côté serveur.

Sur smartphone, l’application officielle WireGuard lit un fichier de configuration ou un QR code. Générez-le en une ligne pour appairer un mobile en quelques secondes :

# Afficher la config client sous forme de QR code à scanner
qrencode -t ansiutf8 < client.conf

Cette combinaison — serveur maison + WireGuard — est la brique de base d’un self-hosting mobile. Elle se marie naturellement avec un reverse proxy Nginx pour exposer proprement les services que vous rendez ainsi accessibles.

WireGuard vs OpenVPN

OpenVPN reste très répandu, mais WireGuard le surclasse sur plusieurs plans.

CritèreWireGuardOpenVPN
Taille du code~4 000 lignesPlusieurs centaines de milliers
ConfigurationQuelques lignesLongue et complexe
PerformancesExcellentes (dans le noyau)Bonnes, mais en espace utilisateur
ReconnexionInstantanée (sans état)Plus lente
CryptographieModerne, imposéeConfigurable (risque d’erreur)
Maturité / auditRécent mais auditéÉprouvé de longue date

La base de code réduite de WireGuard n’est pas qu’une coquetterie : elle facilite l’audit de sécurité et réduit la surface d’attaque. Son fonctionnement « sans état » lui permet de survivre à un changement de réseau (Wi-Fi vers 4G) sans couper la connexion. OpenVPN garde l’avantage d’une flexibilité de configuration supérieure et d’une compatibilité avec certains équipements anciens, mais pour un nouveau projet, WireGuard est presque toujours le meilleur choix.

En bref

WireGuard rend le VPN accessible : des clés, un fichier de configuration par peer, et un tunnel chiffré performant. Générez vos paires de clés, décrivez le serveur et vos clients, ajustez AllowedIPs selon que vous voulez tout router ou seulement joindre votre réseau maison. En quelques minutes, vous disposez d’un accès distant sécurisé à votre infrastructure, où que vous soyez.

À lire ensuite