Accueil

WireGuard : VPN simple et performant

Security
Difficulte: Intermediate
4 min de lecture

Tutoriel pour installer et configurer WireGuard, une solution VPN moderne, simple et performante pour sécuriser vos connexions réseau.

Retour aux tutoriels

L'essentiel

  • WireGuard pèse environ 4 000 lignes de code contre ~100 000 pour OpenVPN et tourne dans le noyau Linux (intégré depuis la version 5.6) : plus rapide, plus simple à auditer, mais en UDP uniquement, sans repli TCP pour traverser un pare-feu restrictif.
  • La suite cryptographique est figée, sans négociation : ChaCha20 pour le chiffrement, Poly1305 pour l'authentification, Curve25519 pour l'échange de clés et BLAKE2s pour le hachage. La configuration se réduit à un échange de clés publiques, comme avec SSH.
  • Générez les clés dans /etc/wireguard après un umask 077 (wg genkey | sudo tee server_private.key puis cat server_private.key | wg pubkey) ; le serveur écoute sur ListenPort = 51820 et déclare un bloc [Peer] par client, avec sa clé publique et un AllowedIPs = 10.0.0.2/32.
  • Pour faire passer tout le trafic du client dans le tunnel, AllowedIPs = 0.0.0.0/0 côté client ne suffit pas : il faut aussi le NAT côté serveur (PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE) et net.ipv4.ip_forward=1 appliqué par sudo sysctl -p, sinon le tunnel monte mais le client n'a plus d'Internet.
  • sudo wg-quick up wg0 monte l'interface et systemctl enable wg-quick@wg0 la relance au démarrage ; sudo wg affiche le dernier handshake de chaque pair, c'est le premier diagnostic. Côté client derrière un NAT, PersistentKeepalive = 25 maintient la session ouverte.
Qu'est-ce que WireGuard ?
WireGuard est une technologie VPN (Virtual Private Network) extrêmement simple, rapide et moderne. Elle vise à remplacer les protocoles plus anciens et complexes comme IPsec et OpenVPN. Avec une base de code beaucoup plus petite, elle est plus facile à auditer et offre des performances de premier ordre, tout en utilisant des algorithmes cryptographiques de pointe.

Pourquoi utiliser WireGuard ?

  • Simplicité : La configuration ressemble à celle de SSH : on échange simplement des clés publiques.
  • Performance : Étant intégré au noyau Linux, il est beaucoup plus rapide que les solutions VPN qui tournent en espace utilisateur comme OpenVPN.
  • Sécurité : Utilise des algorithmes modernes et réputés (ChaCha20, Poly1305, Curve25519).
  • Stabilité : Idéal pour les connexions mobiles, il gère très bien les changements de réseau (ex: passer du Wi-Fi à la 4G).

Prérequis

  • Un serveur Linux (Ubuntu 20.04+ ou Debian 10+ sont parfaits car WireGuard est inclus dans leur noyau).
  • Accès root ou privilèges sudo.
  • Une adresse IP publique statique sur le serveur.

Installation

Sur les distributions récentes, l'installation est très simple.

sudo apt-get update
sudo apt-get install -y wireguard

Configuration Serveur

Étape 1 : Générer les clés

Chaque pair (le serveur et chaque client) a besoin d'une paire de clés (privée et publique).

# Se placer dans le répertoire de configuration
cd /etc/wireguard/

# Générer la clé privée du serveur, et la rendre lisible uniquement par root
umask 077
wg genkey | sudo tee server_private.key

# Dériver la clé publique à partir de la clé privée
sudo cat server_private.key | wg pubkey | sudo tee server_public.key

Faites de même pour chaque client que vous souhaitez connecter. Pour cet exemple, nous en créons une pour `client1` :

wg genkey | sudo tee client1_private.key
sudo cat client1_private.key | wg pubkey | sudo tee client1_public.key

Étape 2 : Créer le fichier de configuration du serveur

Créez le fichier /etc/wireguard/wg0.conf. Le nom `wg0` correspond à l'interface réseau virtuelle qui sera créée.

sudo nano /etc/wireguard/wg0.conf

Collez la configuration suivante, en l'adaptant :

[Interface]
# Adresse IP privée du serveur sur le réseau VPN
Address = 10.0.0.1/24
# Port d'écoute pour les connexions entrantes
ListenPort = 51820
# Clé privée du serveur (à coller ici)
PrivateKey = COLLER_LE_CONTENU_DE_server_private.key

# Ces lignes activent le NAT pour que les clients puissent accéder à Internet via le serveur
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Ceci est la configuration du client1
# Clé publique du client1
PublicKey = COLLER_LE_CONTENU_DE_client1_public.key
# IP privée qui sera assignée à ce client sur le réseau VPN
AllowedIPs = 10.0.0.2/32

Étape 3 : Activer le forwarding IP

Pour que le serveur puisse router le trafic des clients vers Internet, il faut activer le forwarding IP.

sudo nano /etc/sysctl.conf

Décommentez la ligne net.ipv4.ip_forward=1. Puis appliquez la modification :

sudo sysctl -p

Démarrer le VPN

L'outil `wg-quick` permet de gérer facilement les interfaces WireGuard.

# Démarrer l'interface wg0
sudo wg-quick up wg0

# Activer le démarrage automatique au boot du serveur
sudo systemctl enable [email protected]

Configuration Client

Sur la machine cliente, installez WireGuard, puis créez un fichier de configuration /etc/wireguard/wg0.conf.

[Interface]
# Adresse IP privée du client
Address = 10.0.0.2/24
# Clé privée du client
PrivateKey = COLLER_LE_CONTENU_DE_client1_private.key

[Peer]
# Clé publique du serveur
PublicKey = COLLER_LE_CONTENU_DE_server_public.key
# IP publique et port du serveur
Endpoint = IP_PUBLIQUE_DU_SERVEUR:51820
# AllowedIPs = 0.0.0.0/0 permet de router TOUT le trafic du client via le VPN
AllowedIPs = 0.0.0.0/0
# Garde la connexion active
PersistentKeepalive = 25

Démarrez l'interface sur le client avec sudo wg-quick up wg0. Vous êtes connecté !

Vérifier la connexion
Sur le serveur, la commande sudo wg vous montrera l'interface, la clé publique et les informations sur les pairs connectés, y compris le dernier "handshake".

Conclusion

WireGuard a révolutionné le monde des VPN par sa simplicité et ses performances. Sa méthode de configuration, basée sur l'échange de clés publiques, est à la fois intuitive et très sécurisée. Pour des connexions point-à-point ou pour un accès à distance sécurisé, c'est aujourd'hui l'une des meilleures solutions disponibles, et son intégration dans le noyau Linux en fait un standard de facto.

MR

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Questions fréquentes

Quelle est la différence entre WireGuard et OpenVPN ?
WireGuard est intégré au noyau Linux, ce qui le rend nettement plus rapide et avec une latence plus faible qu'OpenVPN, qui fonctionne en espace utilisateur. WireGuard a une base de code de ~4000 lignes contre ~100 000 pour OpenVPN, ce qui le rend plus facile à auditer. En revanche, OpenVPN supporte TCP (utile pour contourner les pare-feux) tandis que WireGuard utilise uniquement UDP.
WireGuard est-il sécurisé ?
Oui, WireGuard utilise des algorithmes cryptographiques modernes et éprouvés : ChaCha20 pour le chiffrement, Poly1305 pour l'authentification, Curve25519 pour l'échange de clés, et BLAKE2s pour le hachage. Sa petite base de code facilite l'audit de sécurité. Il est intégré au noyau Linux depuis la version 5.6.
Comment ajouter un nouveau client WireGuard ?
Générez une paire de clés pour le client (wg genkey | tee private.key | wg pubkey > public.key), créez sa configuration avec l'adresse IP du tunnel et la clé privée, puis ajoutez un bloc [Peer] dans la configuration du serveur avec la clé publique du client et l'IP autorisée. Rechargez l'interface avec wg syncconf.
Comment router tout le trafic Internet via WireGuard ?
Dans la configuration du client, définissez AllowedIPs = 0.0.0.0/0, ::/0 dans la section [Peer]. Côté serveur, assurez-vous que le NAT (masquerading) est activé avec iptables dans les directives PostUp/PostDown, et que le forwarding IP est activé (net.ipv4.ip_forward = 1 dans sysctl).

Partager ce tutoriel

Cet article vous a plu ?

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Commentaires

Recommandé pour vous

Article de fond sur le sujet

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.