WireGuard : le VPN moderne qui tient en 4000 lignes de code
Un protocole VPN intégré au noyau Linux, dix fois plus simple à configurer qu'OpenVPN, et nettement plus rapide sur mobile comme sur serveur.
OpenVPN fonctionne, mais sa base de code dépasse les 100 000 lignes, hérite de vingt ans de compatibilité descendante, et sa configuration multiplie les fichiers (certificats, clés, .ovpn, scripts). WireGuard part d'une feuille blanche en 2015 avec un objectif clair : un protocole VPN moderne, dont la base de code tient en environ 4000 lignes — assez petite pour qu'un chercheur en sécurité l'audite intégralement en quelques jours, ce qui a été fait plusieurs fois.
WireGuard est un protocole VPN intégré directement au noyau Linux depuis la version 5.6 — pas un daemon userspace comme OpenVPN, un module noyau, ce qui explique une partie de son gain de performance. La configuration se résume à un fichier texte par pair, avec des clés publiques/privées façon SSH plutôt qu'une infrastructure de certificats X.509 complexe.
Installation sur le serveur
sudo apt install wireguard
# Générer la paire de clés du serveur
wg genkey | tee server_private.key | wg pubkey > server_public.key[Interface]
PrivateKey = CLÉ_PRIVÉE_SERVEUR
Address = 10.10.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = CLÉ_PUBLIQUE_CLIENT
AllowedIPs = 10.10.0.2/32AllowedIPs sous [Peer] définit à la fois la route acceptée pour ce client et un filtre de sécurité — seul le trafic depuis cette IP source, avec cette clé, est accepté. Contraste net avec OpenVPN où l'authentification et le routage sont deux systèmes séparés à configurer indépendamment.
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0Configuration côté client
[Interface]
PrivateKey = CLÉ_PRIVÉE_CLIENT
Address = 10.10.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = CLÉ_PUBLIQUE_SERVEUR
Endpoint = vpn.mondomaine.fr:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25AllowedIPs = 0.0.0.0/0 route tout le trafic du client à travers le VPN — pour un tunnel partiel (accès seulement au réseau interne, pas tout le trafic Internet), remplacer par la plage du réseau local uniquement, par exemple 10.10.0.0/24, 192.168.1.0/24.
PersistentKeepalive = 25 envoie un paquet vide toutes les 25 secondes — nécessaire pour les clients derrière un NAT (quasiment tous les mobiles), sinon la connexion se referme silencieusement après quelques minutes d'inactivité.
Interface de gestion : wg-easy
Éditer des fichiers .conf et régénérer des clés pour chaque nouvel appareil devient vite fastidieux. wg-easy ajoute une interface web pour gérer les clients sans toucher au terminal.
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:latest
restart: always
environment:
WG_HOST: vpn.mondomaine.fr
PASSWORD: motdepasseadmin
volumes:
- ./wg-easy-data:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1L'interface (http://votre-serveur:51821) génère un QR code par client à scanner directement depuis l'app mobile WireGuard — plus besoin de transférer manuellement un fichier de config.
Performance : pourquoi c'est plus rapide
WireGuard utilise une suite cryptographique moderne et fixe (ChaCha20 pour le chiffrement, Curve25519 pour l'échange de clés) — pas de négociation de cipher suite à la connexion comme TLS/OpenVPN, ce qui élimine une bonne partie de la latence d'établissement. Combiné à son implémentation noyau plutôt qu'userspace, les benchmarks constatent généralement 2 à 4 fois plus de débit qu'OpenVPN sur le même matériel, avec une latence additionnelle quasi imperceptible.
| Critère | WireGuard | OpenVPN |
|---|---|---|
| Lignes de code | ~4 000 | ~100 000+ |
| Implémentation | Noyau Linux | Userspace |
| Débit typique | Proche du natif | 20-40% plus lent |
| Configuration | Fichier texte, clés simples | Certificats X.509, PKI |
| Roaming (changement réseau) | Transparent | Reconnexion nécessaire |
| Audit de sécurité | Petite surface, auditée | Grande surface, historique CVE |
Le roaming transparent mérite d'être souligné : passer du wifi à la 4G sans que la connexion WireGuard ne se coupe, parce que le protocole ne maintient pas d'état de session au sens TCP classique — chaque paquet est authentifié indépendamment.
Filtrage et exposition du port
sudo ufw allow 51820/udpWireGuard tourne exclusivement en UDP — pas d'option TCP, contrairement à OpenVPN qui peut basculer en TCP pour traverser des pare-feux restrictifs. Sur un réseau qui bloque l'UDP sortant (certains réseaux d'entreprise ou publics verrouillés), OpenVPN garde un avantage réel de contournement grâce à son mode TCP sur le port 443, indiscernable du trafic HTTPS normal.
WireGuard n'est pas un remplacement universel d'OpenVPN — sur un réseau qui filtre l'UDP, OpenVPN en mode TCP reste la seule option viable. Mais pour la majorité des usages — accéder à son réseau domestique, sécuriser une connexion sur wifi public, monter un VPN d'équipe — la simplicité de configuration et le gain de performance en font le choix par défaut sur un pare-feu UFW déjà en place.