WireGuard sur Raspberry Pi 5 : guide complet étape par étape, de l'installation au test de vitesse

En bref

Guide pas à pas pour débutants pour installer un serveur WireGuard sur Raspberry Pi 5 : de la préparation et configuration aux tests de charge et à la mesure de vitesse réelle. En 2 à 3 heures, vous aurez votre VPN personnel, vérifierez la bande passante et optimiserez les performances.

WireGuard sur Raspberry Pi 5 : guide complet étape par étape, de l'installation au test de vitesse

Introduction

Dans ce guide étape par étape, vous allez configurer vous-même un serveur VPN rapide et fiable avec WireGuard sur Raspberry Pi 5, régler le routage et le chiffrement, connecter des clients depuis votre ordinateur et téléphone, tester la vitesse réelle, réaliser des tests de charge et apprendre à diagnostiquer et résoudre les problèmes courants. À la fin, vous disposerez d’un tunnel VPN personnel pour un accès sécurisé à votre réseau domestique, le chiffrement de votre trafic sur les réseaux publics et contourner les restrictions.

Pour qui est ce guide ? Pour les débutants sur Raspberry Pi, n’ayant jamais configuré de VPN, ainsi que pour ceux qui maîtrisent déjà un peu le terminal et souhaitent une instruction détaillée avec quelques astuces avancées. Nous expliquerons chaque étape en détail, avec en plus des sections optimisation pour ceux qui veulent tirer le meilleur en termes de vitesse et stabilité.

Ce qu’il faut savoir avant de commencer. Des connaissances de base sur Raspberry Pi et la volonté d’exécuter des commandes dans le terminal. Pas besoin d’une expertise poussée en Linux, mais un peu d’attention est nécessaire. Nous expliquerons tous les concepts-clés de manière simple.

Temps nécessaire. L’installation du système et des mises à jour prendra 20 à 40 minutes. La configuration basique de WireGuard et l’ajout des premiers clients, 30 à 60 minutes. La configuration du routeur et les tests, 20 à 40 minutes. Prévoir au total 2 à 3 heures si vous avancez calmement et méthodiquement.

Préparation initiale

Outils et accès nécessaires. Vous aurez besoin d’un Raspberry Pi 5, d’une alimentation USB-C de 27 W ou d’un bon adaptateur 5 V 5 A, d’une carte microSD de 32 à 128 Go de classe au moins A1, d’un câble réseau pour connecter au routeur domestique, d’un ordinateur avec le logiciel Raspberry Pi Imager installé, d’un accès au routeur pour configurer le forwarding de port, ainsi que des identifiants fournis par votre fournisseur d’accès pour vérifier le CGNAT si besoin. Un écran et un clavier sont souhaitables pour le premier démarrage, mais une configuration headless est possible sans ces périphériques.

Exigences système. Nous recommandons Raspberry Pi OS 64-bit (Bookworm ou version ultérieure), avec un noyau intégrant WireGuard par défaut. Pour des vitesses jusqu’à 1 Gbit/s, une version standard suffira. Pour de meilleures performances, préférez la connexion filaire au routeur plutôt que le Wi-Fi. Coté clients, n’importe quel client WireGuard à jour sur mobile ou desktop fera l’affaire.

Téléchargements et installations. Installez Raspberry Pi Imager sur votre ordinateur. Préparez une image minimaliste Raspberry Pi OS Lite 64-bit. Sur le Raspberry Pi, nous installerons les paquets wireguard-tools, iperf3 pour les tests, nftables ou iptables-nft pour le NAT, et qrencode pour faciliter l’ajout des clients mobiles.

Sauvegardes. Si votre carte contient déjà un système ou des données importantes, faites une image avec l’outil de votre choix. Après la configuration de WireGuard, nous vous montrerons comment sauvegarder la config pour pouvoir restaurer rapidement sur une nouvelle carte en cas de panne.

Concepts de base

Termes-clés expliqués simplement. WireGuard est un protocole VPN moderne qui crée un tunnel chiffré entre les appareils. Le serveur est votre Raspberry Pi 5, qui accepte les connexions entrantes. Le client est votre téléphone ou ordinateur portable qui se connecte au serveur. Les clés sont une paire privée et publique utilisées pour le chiffrement et l’authentification. L’interface wg0 est un adaptateur réseau virtuel par lequel passe le trafic chiffré. AllowedIPs est la liste des sous-réseaux et adresses routés via le tunnel.

Principes de fonctionnement. Chaque participant au tunnel possède des clés permanentes et une adresse dans une sous-réseau virtuel dédié, par exemple 10.6.0.0/24. Le client envoie des paquets UDP vers l’IP publique et le port du serveur. Le serveur déchiffre le trafic et le route soit vers Internet soit vers le réseau local, selon votre configuration. Les routes sont définies côté client par AllowedIPs et côté serveur par les règles de routage et NAT.

À comprendre avant de commencer. La vitesse de WireGuard dépend du CPU, du MTU, de la qualité du réseau et des routes entre fournisseurs. Le Raspberry Pi 5 est assez performant pour approcher 1 Gbit/s en LAN et obtenir plusieurs centaines de Mbps sur Internet, si le canal et le routage des fournisseurs ne brident pas. Une configuration correcte du MTU et du NAT est cruciale pour stabilité et performances.

Étape 1 : Préparation du Raspberry Pi 5 et du système d’exploitation

Objectif

Installer un système Raspberry Pi OS Lite 64-bit frais, activer SSH et définir les paramètres de base pour démarrer l’installation de WireGuard.

Instructions pas à pas

  1. Lancez Raspberry Pi Imager sur votre ordinateur. Sélectionnez Raspberry Pi OS Lite (64-bit).
  2. Choisissez la carte microSD comme support. Assurez-vous de ne pas effacer une autre carte par erreur.
  3. Cliquez sur les paramètres (icône roue dentée dans Imager). Activez «Enable SSH», choisissez «Use password authentication» ou fournissez une clé SSH publique. Saisissez un nom d’utilisateur, par exemple «pi», et un mot de passe fort d’au moins 12 caractères.
  4. Définissez un nom d’hôte, par exemple «rpi5-wg». Choisissez pays, langue et disposition clavier. Activez le Wi-Fi uniquement si le filaire n’est pas possible, entrez SSID et mot de passe. Ethernet est recommandé.
  5. Cliquez sur «Save», puis «Write». Attendez la fin de l’écriture et la vérification. Cela prend 3 à 10 minutes.
  6. Retirez la carte et insérez-la dans le Raspberry Pi 5. Branchez le câble Ethernet au routeur et l’alimentation au Raspberry Pi. Attendez le démarrage (20 à 60 secondes).
  7. Trouvez l’adresse IP du Raspberry Pi. Consultez la liste des clients dans l’interface du routeur ou utilisez un scanner réseau sur votre téléphone. En général, l’adresse ressemble à 192.168.1.xx.
  8. Connectez-vous en SSH depuis un terminal : «ssh pi@192.168.1.xx». Au premier accès, validez l’empreinte et entrez le mot de passe.
  9. Mettez à jour le système : «sudo apt update && sudo apt full-upgrade -y». Redémarrez ensuite : «sudo reboot» puis reconnectez-vous en SSH.
  10. Installez le firmware et outils récents : «sudo rpi-eeprom-update -a». Un redémarrage peut être nécessaire, faites «sudo reboot» si demandé.

⚠️ Attention : Ne coupez pas l’alimentation pendant l’écriture de la carte et la mise à jour du firmware, cela risque d’endommager le système de fichiers.

Astuce : Donnez un nom d’hôte unique à votre Raspberry Pi afin d’éviter toute confusion si vous avez plusieurs appareils sur le réseau.

✅ Vérification : La commande «uname -m» doit retourner «aarch64», et «cat /etc/os-release» afficher Raspberry Pi OS Bookworm. La connexion «ssh pi@adresse» doit fonctionner sans erreur.

Résultat attendu. Votre Raspberry Pi OS Lite 64-bit est opérationnel, SSH est accessible de manière stable, l’appareil est visible et répond sur le réseau local.

Problèmes éventuels et solutions. Si SSH n’est pas accessible, vérifiez que SSH est activé dans Imager. Si l’appareil n’est pas visible, testez le câble Ethernet et le port du routeur, essayez port différent. Si le système ne démarre pas, reformatez la carte ou essayez une autre microSD.

Étape 2 : Configuration réseau, IP statique et accès SSH

Objectif

Attribuer une IP locale fixe au Raspberry Pi 5, régler le fuseau horaire et assurer la stabilité de l’accès SSH. Cela facilitera le forwarding de port et la gestion ultérieure.

Instructions pas à pas

  1. Définissez le fuseau horaire : «sudo raspi-config», puis «Localization Options» et sélectionnez votre région. Cela améliore la gestion des logs et le diagnostic.
  2. Vérifiez l’interface réseau utilisée : «ip -4 addr». En général, Ethernet est «eth0» avec une adresse 192.168.X.Y.
  3. Attribuez une IP statique via une réservation DHCP dans l’interface du routeur. Trouvez l’appareil via son adresse MAC («ip link show eth0») et réservez un IP fixe, par exemple 192.168.1.10. C’est la méthode recommandée et facile à gérer.
  4. Si la réservation DHCP est impossible, configurez l’IP statique localement. Éditez «sudo nano /etc/dhcpcd.conf» et ajoutez : «interface eth0», «static ip_address=192.168.1.10/24», «static routers=192.168.1.1», «static domain_name_servers=1.1.1.1 8.8.8.8». Sauvegardez et relancez le service : «sudo systemctl restart dhcpcd».
  5. Testez la connexion Internet : «ping -c 3 1.1.1.1» et «ping -c 3 debian.org». Si les pings répondent, la connexion est fonctionnelle.
  6. Reconnectez-vous en SSH sur la nouvelle IP statique : «ssh pi@192.168.1.10».

Astuce : Notez l’IP locale du Raspberry Pi sur un autocollant collé sur le boîtier. Cela vous fera gagner du temps en cas de problème.

✅ Vérification : La commande «ip route» doit afficher une route par défaut via votre routeur, et «ip -4 addr show eth0» doit montrer la bonne IP statique. La connexion SSH doit être stable à cette adresse.

Résultat attendu. Votre Raspberry Pi a une IP fixe locale, l’accès Internet est fonctionnel, l’heure et le fuseau horaire sont corrects, ce qui vous permet de poursuivre l’installation de WireGuard sereinement.

Problèmes possibles et solutions. Si Internet ne fonctionne pas, vérifiez la passerelle et le DNS dans la configuration. Si l’adresse statique est en conflit, choisissez une autre dans la plage réseau.

Étape 3 : Installation de WireGuard et préparation du noyau

Objectif

Installer les outils WireGuard, vérifier la présence du noyau et du module WireGuard, préparer le système pour créer le tunnel.

Instructions pas à pas

  1. Actualisez les index de paquets : «sudo apt update».
  2. Installez WireGuard et ses outils : «sudo apt install -y wireguard wireguard-tools qrencode iperf3 nftables resolvconf». Le paquet wireguard-dkms n’est pas nécessaire avec un noyau moderne car le module est intégré.
  3. Vérifiez la présence du module : «modprobe wireguard» puis «lsmod | grep wireguard». Si vous voyez «wireguard», le module est chargé.
  4. Activez le démarrage automatique des services nécessaires : «sudo systemctl enable nftables» et «sudo systemctl enable systemd-resolved». Ce dernier est utile pour la résolution DNS correcte.
  5. Vérifiez la version des utilitaires : «wg --version». Vous devriez voir les versions de wg-quick et wireguard-tools.

⚠️ Attention : N’installez pas en parallèle iptables-legacy et nftables avec des règles conflictuelles. Dans ce guide, nous utilisons nftables qui est plus moderne et mieux intégré dans Debian Bookworm.

Astuce : Après toute mise à jour du noyau, redémarrez le Raspberry Pi avant de tester le module WireGuard pour s’assurer qu’il est bien chargé.

✅ Vérification : La commande «wg» sans argument doit renvoyer une sortie vide, sans erreur. «lsmod | grep wireguard» affiche le module. Aucune erreur ne doit apparaître lors de l’installation.

Résultat attendu. WireGuard est installé, le module noyau est chargé, les outils en ligne de commande sont disponibles, nftables est activé et prêt pour la configuration NAT.

Problèmes possibles et solutions. Si le module ne charge pas, vérifiez la version du noyau «uname -r» et mettez à jour le système. Si un paquet manque, vérifiez les sources dans «/etc/apt/sources.list» et relancez «sudo apt update».

Étape 4 : Génération de clés, plan d’adressage et configuration basique de wg0

Objectif

Générer les clés serveur, définir le plan d’adressage VPN, créer la configuration de l’interface wg0 qui lancera le tunnel serveur.

Instructions pas à pas

  1. Créez le dossier pour config et clés : «sudo mkdir -p /etc/wireguard && sudo chmod 700 /etc/wireguard».
  2. Générez les clés serveur : «umask 077; wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key > /dev/null». Cela crée les clés privées et publiques avec les bons droits.
  3. Affichez la clé privée : «sudo cat /etc/wireguard/server_private.key». Copiez-la, elle est nécessaire dans la config. La clé publique, «sudo cat /etc/wireguard/server_public.key», servira aux clients.
  4. Choisissez un sous-réseau VPN. Nous utilisons 10.6.0.0/24 avec le serveur à 10.6.0.1. C’est un réseau privé libre, qui ne rentre pas en conflit avec les LAN classiques.
  5. Créez la config d’interface : «sudo nano /etc/wireguard/wg0.conf». Collez : «[Interface]», «Address = 10.6.0.1/24», «ListenPort = 51820», «PrivateKey = VOTRE_CLÉ_PRIVÉE», «SaveConfig = true». Ne rajoutez pas encore PostUp/PostDown, le NAT sera configuré à l’étape suivante.
  6. Restreignez les permissions : «sudo chmod 600 /etc/wireguard/wg0.conf».
  7. Activez le forwarding IPv4 : «echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-sysctl.conf». Appliquez-le : «sudo sysctl --system» et vérifiez avec «sysctl net.ipv4.ip_forward» qui doit renvoyer «1».
  8. Montez l’interface pour la première fois : «sudo wg-quick up wg0». Si tout va bien, «ip addr show wg0» montrera le périphérique avec l’adresse 10.6.0.1/24.
  9. Activez le démarrage automatique : «sudo systemctl enable wg-quick@wg0».

Astuce : Le nom d’interface «wg0» est standard, mais vous pouvez le changer si besoin (wg1, wg2…) surtout si vous gérez plusieurs tunnels.

✅ Vérification : «wg show» doit afficher l’interface wg0 avec ListenPort 51820 et la clé publique du serveur. «wg-quick up wg0» ne doit renvoyer aucune erreur. «ip a» montre wg0 UP.

Résultat attendu. Le serveur WireGuard est actif, écoute le port UDP 51820, le forwarding IP est activé, et la configuration de base est prête à accueillir des clients.

Problèmes possibles et solutions. L’erreur «RTNETLINK answers: File exists» au démarrage indique normalement des routes conflictuelles de tests antérieurs. Faites «sudo wg-quick down wg0» puis «sudo wg-quick up wg0». Si «Cannot find device wg0», vérifiez le module et la config.

Étape 5 : Routage, NAT et redirection de port sur le routeur

Objectif

Configurer le NAT via nftables pour que les clients accèdent à Internet via le serveur, et ouvrir le port UDP 51820 sur le routeur pour rendre le serveur accessible depuis l’extérieur.

Instructions pas à pas

  1. Repérez l’interface externe du Raspberry Pi : «ip route get 1.1.1.1». Dans la réponse, cherchez «dev eth0» ou similaire, c’est votre interface externe (par exemple «eth0»).
  2. Créez un fichier de règles nftables de base : «sudo nano /etc/nftables.conf». Collez : «flush ruleset», puis «table inet wg { chain prerouting { type nat hook prerouting priority -100; } chain input { type filter hook input priority 0; policy accept; } chain forward { type filter hook forward priority 0; policy accept; } chain output { type filter hook output priority 0; policy accept; } chain postrouting { type nat hook postrouting priority 100; } }». Sauvegardez.
  3. Ajoutez la règle MASQUERADE pour le trafic sortant des clients : dans la chaîne «postrouting», insérez «oifname "eth0" ip saddr 10.6.0.0/24 counter masquerade». Veillez à remplacer «eth0» par votre interface externe.
  4. Chargez les règles : «sudo nft -f /etc/nftables.conf». Vérifiez avec «sudo nft list ruleset». Vous devez voir la table inet wg et la règle MASQUERADE.
  5. Pour que ces règles s’appliquent au lancement de WireGuard, ajoutez dans «/etc/wireguard/wg0.conf», sous [Interface] : «PostUp = nft -f /etc/nftables.conf», «PostDown = nft flush ruleset». Cette méthode simple va appliquer les règles à la montée et les vider à la descente de l’interface. En pratique, il est mieux de gérer un fichier config permanent et ne pas tout flush, mais ça convient pour commencer.
  6. Relancez l’interface : «sudo wg-quick down wg0 || true && sudo wg-quick up wg0». Revérifiez avec «nft list ruleset» et «wg show».
  7. Ouvrez le port 51820/UDP sur le routeur. Connectez-vous à l’interface web du routeur, trouvez la section transfert de port ou NAT, créez une règle : port externe 51820 UDP vers IP interne du Raspberry Pi (ex : 192.168.1.10) port 51820 UDP. Enregistrez.
  8. Vérifiez que le port est bien à l’écoute sur Raspberry Pi : «sudo ss -ulnpt | grep 51820». Vous devriez avoir une ligne UDP avec «*:51820».

⚠️ Attention : Si votre fournisseur utilise du CGNAT, le forwarding de port depuis Internet ne fonctionnera pas. Contactez votre fournisseur pour une IP publique dédiée ou utilisez d’autres solutions comme un VPS relais avec redirection de trafic, ou config WireGuard en mode client-serveur transit.

Astuce : Si votre routeur prend en charge UPnP, désactivez-le pour le port 51820 afin d’éviter les conflits avec le forwarding statique.

✅ Vérification : Depuis le réseau local, lancez «nc -u -zv 192.168.1.10 51820». Le résultat doit être «succeeded» ou absence d’erreur «Permission denied». Pour tester depuis l’extérieur, utilisez votre téléphone en réseau mobile, connectez le client et vérifiez le handshaking avec «wg show».

Résultat attendu. Le NAT est actif, le trafic client est masqué derrière l’IP du Raspberry Pi, le port UDP 51820 est ouvert, et le serveur est joignable depuis Internet si vous avez une IP publique.

Problèmes possibles et solutions. Si Internet ne passe pas via VPN, vérifiez ip_forward=1 et la règle MASQUERADE. Si vous n’accédez pas de l’extérieur, contrôlez la présence d’un double NAT (modem fournisseur + routeur) et configurez un bridge ou une redirection complémentaire.

Étape 6 : Ajout des clients (téléphone, PC), QR code et test initial

Objectif

Créer les configurations clients, les ajouter au serveur comme peers, connecter téléphone et ordinateur portable, et vérifier que le trafic passe par le tunnel.

Instructions pas à pas

  1. Générez les clés du client1 : «wg genkey | tee client1_private.key | wg pubkey | tee client1_public.key». Pour la sécurité, faites-le sous votre utilisateur habituel et protégez les fichiers avec droits 600.
  2. Déterminez l’IP publique ou le nom DNS du serveur. Si votre IP est dynamique, configurez un DDNS sur le routeur. Pour les tests, vous pouvez utiliser temporairement l’IP publique actuelle obtenue avec «curl ifconfig.me» depuis le Raspberry Pi.
  3. Créez le fichier «client1.conf» sur le Raspberry Pi avec : «[Interface]», «PrivateKey = CLÉ_PRIVÉE_CLIENT», «Address = 10.6.0.2/32», «DNS = 1.1.1.1». Puis «[Peer]», «PublicKey = CLÉ_PUBLIQUE_SERVEUR», «Endpoint = VOTRE_IP_OU_DNS:51820», «AllowedIPs = 0.0.0.0/0, ::/0», «PersistentKeepalive = 25». Cette config route tout le trafic du client via VPN.
  4. Ajoutez le client sur le serveur : ouvrez «sudo nano /etc/wireguard/wg0.conf», ajoutez à la fin : «[Peer]», «PublicKey = CLÉ_PUBLIQUE_CLIENT», «AllowedIPs = 10.6.0.2/32». Sauvegardez.
  5. Appliquez la config : «sudo wg addconf wg0 <(wg-quick strip wg0)» ou redémarrez l’interface «sudo wg-quick down wg0 && sudo wg-quick up wg0».
  6. Générez un QR code pour le client mobile : «qrencode -t ansiutf8 < client1.conf». Le terminal affichera le QR. Sur l’application WireGuard iOS ou Android, choisissez «Créer depuis QR code» et pointez la caméra vers le terminal.
  7. Sur l’ordinateur portable, installez l’application officielle WireGuard, importez «client1.conf» et enregistrez le profil.
  8. Connectez le client. Activez le tunnel sur le téléphone et cliquez sur «Activate» sur le PC. Sur le serveur, tapez «sudo wg show» ; vous devez voir des «latest handshake» et des compteurs de trafic croissants.

Astuce : Pour utiliser le VPN uniquement pour accéder au réseau domestique, sans router tout le trafic Internet via le tunnel, remplacez AllowedIPs par «10.6.0.0/24, 192.168.1.0/24» et supprimez «0.0.0.0/0». C’est le split-tunneling.

✅ Vérification : Depuis le téléphone, allez sur des sites d’affichage d’adresse IP. Vous devez voir l’adresse IP externe de votre connexion domestique. Les pings vers 10.6.0.1 et 192.168.1.1 fonctionnent si l’accès LAN est autorisé.

Résultat attendu. Les clients se connectent au serveur, le trafic passe par le VPN, les compteurs dans «wg show» montent, et la latence est stable.

Problèmes possibles et solutions. Pas de handshake ? Vérifiez le port UDP 51820 sur le routeur et l’IP publique. Handshake sans Internet ? Contrôlez la règle NAT et ip_forward. Coupures sur mobile ? Augmentez PersistentKeepalive à 25-30.

Étape 7 : Tests de vitesse, charge et diagnostic des goulots d’étranglement

Objectif

Mesurer objectivement la capacité de WireGuard sur Raspberry Pi 5, surveiller la charge CPU, évaluer la vitesse réelle en réseau local et sur Internet, et identifier puis corriger les points limitants.

Instructions pas à pas

  1. Installez iperf3 sur les deux machines. Sur le Raspberry Pi c’est déjà fait. Sur le PC, installez iperf3. Lancez le serveur sur le Raspberry Pi : «iperf3 -s». Laissez la fenêtre ouverte.
  2. Depuis le client, connectez-vous au tunnel : «iperf3 -c 10.6.0.1 -P 4 -t 20». Le paramètre «-P 4» lance 4 flux parallèles, ce qui charge mieux le canal. Notez la vitesse moyenne.
  3. Faites un test mono-flux : «iperf3 -c 10.6.0.1 -P 1 -t 20». Cela montre les performances du tunnel sans agrégation.
  4. Sur le Raspberry Pi, surveillez la charge CPU avec «top» ou «htop» dans une autre fenêtre. Portez attention à la charge des cœurs pendant le test. WireGuard utilise plusieurs threads, le Pi 5 avec Cortex-A76 2.4 GHz traite aisément plusieurs centaines de Mbps.
  5. Mesurez la vitesse Internet via VPN. Lancez un serveur iperf3 sur un VPS ou utilisez un serveur externe, puis «iperf3 -c SERVEUR -P 4 -t 20» depuis le client VPN activé. Ou bien comparez «speedtest-cli» avec et sans VPN, pour évaluer la perte liée au chiffrement et routage.
  6. Optimisez le MTU. Testez «sudo ping -M do -s 1380 1.1.1.1» sur le Raspberry Pi via Internet. Sans fragmentation, vous pouvez fixer MTU=1420 par défaut. Si problèmes, réduisez MTU dans wg0.conf en ajoutant «MTU = 1380» sous [Interface], puis redémarrez l’interface.
  7. Améliorez la gestion des files d’attente qdisc pour réduire le bufferbloat. Exécutez : «sudo tc qdisc replace dev eth0 root fq_codel» et «sudo tc qdisc replace dev wg0 root fq_codel». Cela améliore la latence sous charge, surtout pour la vidéo et appels.
  8. Refaites les tests iperf3 et comparez les résultats avant/après MTU et qdisc. Notez la stabilité, le jitter et les pics.

Astuce : Pour un test de stress, lancez «-P 8» et «-t 60» avec iperf3. Cela permet d’observer le comportement sur longue durée et détecter surchauffe ou throttling CPU.

Astuce : Activez le gouverneur CPU performant : «sudo apt install -y cpufrequtils» puis «echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils && sudo systemctl restart cpufrequtils». Cela peut ajouter 5 à 10 % de vitesse en charge maximale.

✅ Vérification : En local via tunnel, attendez-vous à plusieurs centaines de Mbps, souvent entre 700 et 900 Mbps cumulés avec plusieurs flux UDP. Sur Internet, les chiffres dépendent du fournisseur et du serveur distant. Un handshake stable et pas de retransmissions iperf3 indiquent un bon MTU.

Résultats attendus et vitesse «réelle». Sur Raspberry Pi 5 en LAN, WireGuard est souvent limité par Ethernet 1 Gbit et la stack TCP. Généralement, 0,7 à 0,95 Gbit/s sont atteints en UDP à plusieurs flux avec MTU correct. Sur Internet, la vitesse est souvent limitée par le réseau et le routage des fournisseurs. 300-600 Mbps via WireGuard est courant, parfois plus de 700 Mbps en conditions optimales. En dessous de ces valeurs, vérifiez MTU, température et transit CGNAT.

Problèmes éventuels et solutions. Charge CPU à 100 % sur un cœur avec faible débit ? Assurez-vous qu’iperf3 utilise plusieurs flux et que les qdisc ne saturent pas. High jitter ou pertes ? Contrôlez câble, port, et options offload avec «sudo ethtool -K eth0 tx off rx off gso off gro off tso off» pour comparer, bien que la configuration standard soit généralement correcte.

Vérification finale

Checklist : ce qui doit fonctionner. L’interface WireGuard wg0 est montée et activée au démarrage. Le port UDP 51820 est ouvert sur le routeur. Les clients se connectent sans problème avec un handshake stable. L’accès Internet via VPN fonctionne, la résolution DNS est correcte. iperf3 affiche des débits conformes à votre connexion. NAT via nftables est actif, ip_forward aussi. Les logs ne mentionnent pas d’erreurs critiques.

Comment tester. Désactivez le Wi-Fi sur votre téléphone et passez en réseau mobile, activez le profil VPN, ouvrez plusieurs sites. Sur le serveur, tapez «wg show» et vérifiez le temps du dernier handshake. Depuis le client, lancez «traceroute 1.1.1.1» et vérifiez que le premier saut est 10.6.0.1. Lancez «iperf3 -c 10.6.0.1 -P 4 -t 20» pour mesurer la vitesse. Puis faites un «dig example.com» pour tester la résolution DNS et le délai.

Signes de réussite. Pas de timeout sur les sites, handshake stable toutes les 20-30 s en cas de trafic actif, débits dans les plages attendues, absence de coupures répétées. Dans les logs «sudo journalctl -u wg-quick@wg0 -b», peu voire pas d’avertissements et aucune erreur.

Erreurs fréquentes et solutions

  • Problème : Le client ne se connecte pas, pas de handshake. Cause : Forwarding de port incorrect ou CGNAT. Solution : Vérifiez la règle NAT sur le routeur, assurez-vous d’avoir une IP publique ; en CGNAT, demandez une IP blanche ou utilisez un VPS relais.
  • Problème : Handshake établi, mais pas d’accès Internet sur client. Cause : ip_forward désactivé ou absence de MASQUERADE. Solution : Contrôlez «sysctl net.ipv4.ip_forward=1», règle nftables et redémarrez wg0.
  • Problème : Accès au réseau local impossible. Cause : Routes client bloquant LAN ou firewall routeur. Solution : Ajoutez LAN dans AllowedIPs (ex : 192.168.1.0/24), vérifiez que le firewall autorise le trafic inter-réseaux.
  • Problème : Sites partiellement inaccessibles ou vitesse instable. Cause : MTU mal configuré provoquant fragmentation. Solution : Testez PMTU avec «ping -M do», fixez MTU à 1380-1420 côté serveur et client selon résultats.
  • Problème : DNS ne résout pas via VPN. Cause : Mauvaise config DNS client. Solution : Indiquez «DNS = 1.1.1.1» ou serveur local, activez systemd-resolved, et dans le client cochez «Block untunneled traffic» si besoin.
  • Problème : Débit nettement en dessous des attentes. Cause : Test mono-flux, throttling CPU, canal faible ou surchauffe Pi 5. Solution : Lancez iperf3 avec «-P 4..8», assurez un bon refroidissement, activez governor performance.
  • Problème : Tunnel ne démarre pas après reboot. Cause : Service non activé ou PostDown incorrect. Solution : Activez «sudo systemctl enable wg-quick@wg0», vérifiez le statut, simplifiez les PostDown, évitez de flush sans recharger les règles.

Fonctionnalités supplémentaires

Configurations avancées

  • Split-tunnel par domaines. Vous pouvez router uniquement certains domaines d’entreprises via VPN, le reste du trafic passe directement. Pour cela, utilisez DNS-over-WG et du routage basé sur politique côté client. WireGuard ne gère pas la filtration DNS native, une solution système est nécessaire.
  • Accès à plusieurs sous-réseaux. Ajoutez plusieurs réseaux dans AllowedIPs client (ex : 192.168.1.0/24 et 192.168.50.0/24) si vous avez plusieurs VLAN à la maison. Sur serveur, configurez routes et règles nftables de filtrage multi-réseaux.
  • Isolation des clients. Par défaut, WireGuard ne routage pas le trafic entre clients. Si vous souhaitez renforcer cette isolation, ne partagez pas les routes clients et bloquez le trafic inter-client via nftables.
  • Accès via nom de domaine. Configurez un DDNS sur votre routeur et utilisez-le comme Endpoint client pour éviter de modifier la config en cas d’IP dynamique. Assurez la mise à jour régulière.
  • Logging et monitoring. Installez Netdata ou Prometheus pour surveiller latences, trafic et charge. Pour du monitoring simple, consultez régulièrement «wg show» et «nft list ruleset».

Optimisation

  • MTU «tortue». En cas de fragmentation, commencez avec MTU=1280 côté wg0 et client, puis augmentez progressivement jusqu’à 1420 sans pertes.
  • FQ-CoDel sur WAN et WG. Appliquez fq_codel sur eth0 et wg0 pour réduire le bufferbloat. Cela est sensible sur appels vidéo et streaming.
  • Flux parallèles. En cas de charges, utilisez plusieurs flux TCP, gestionnaires de téléchargements, et «-P 4..8» dans iperf3 pour une utilisation efficace du canal.

Autres idées

  • Double authentification. Stockez les configs clients dans un gestionnaire de mots de passe et activez le blocage d’appareils. En cas de perte, supprimez immédiatement la clé du client dans «wg0.conf» et redémarrez l’interface.
  • Sauvegarde. Conservez «/etc/wireguard» et «/etc/nftables.conf» dans une archive chiffrée. Gardez une carte microSD de secours prête à l’emploi. Testez régulièrement vos sauvegardes sur une Raspberry Pi secondaire ou temporaire.

Astuce : Pour ceux qui veulent un VPN personnel «clé en main» sans console, pensez à une solution prête à l’emploi sur vpn.how. C’est un VPN personnel dédié avec IP unique (pas partagée), supportant WireGuard, OpenVPN, IKEv2, L2TP, SSTP – vous choisissez selon vos besoins. Points d’accès à Moscou, Saint-Pétersbourg, Amsterdam, Francfort, Londres, New York, San José, Chicago, Singapour, Sydney, Madrid, Helsinki, Stockholm, Varsovie, Copenhague, Stavanger. Paiement avec cartes russes (Tinkoff, Ozon), SBP, USDT et BTC. Tarifs à partir de 490 ₽ par jour et 2490 ₽ par mois avec réductions longue durée, démarrage en 5 minutes après paiement, sans logs. C’est pratique quand on ne veut pas gérer hardware, sauvegardes et monitoring. Un serveur DIY Raspberry Pi apporte flexibilité mais demande heures de configuration, mises à jour régulières et sauvegardes.

FAQ

Question : Comment savoir si mon FAI utilise CGNAT et que j’ai besoin d’une IP publique ? Réponse : Comparez l’IP externe dans l’interface du routeur avec celle affichée sur des sites de test d’IP. Si le routeur affiche une adresse privée (100.64.0.0/10 ou 10.0.0.0/8), c’est un CGNAT. Le forwarding de port depuis Internet n’est alors pas possible.

Question : Puis-je utiliser un port autre que 51820 ? Réponse : Oui, changez le port dans «ListenPort» et sur le routeur. Parfois, certains FAI filtrent le UDP et changer de port aide.

Question : Comment connecter plusieurs clients ? Réponse : Pour chaque client, générez une nouvelle paire de clés, allouez une adresse unique 10.6.0.X/32, ajoutez un bloc [Peer] dans «wg0.conf» et distribuez la config client. N’utilisez jamais les mêmes clés sur plusieurs appareils.

Question : Que faire si j’ai perdu la clé privée du serveur ? Réponse : Gérez une nouvelle paire de clés, mettez à jour «wg0.conf» et diffusez la nouvelle clé publique aux clients. Pensez à modifier Endpoint s’il y a un changement de port ou de domaine.

Question : Comment interdire aux clients l’accès au réseau domestique et ne laisser que la sortie Internet ? Réponse : Par défaut, le routage LAN n’est pas effectué. Assurez-vous de ne pas avoir de routes LAN dans la config serveur et de ne pas ajouter LAN dans AllowedIPs côté client.

Question : Faut-il des certificats comme avec OpenVPN ? Réponse : Non, WireGuard utilise une cryptographie simple avec paires de clés, sans certificats. Cela explique sa rapidité et sa simplicité.

Question : Comment bien protéger mes fichiers de configuration ? Réponse : Mettez les droits 600 sur les configs, stockez-les dans une archive chiffrée, n’envoyez jamais les clés privées par canal non sécurisé. Transmettez les config clients via messagerie sécurisée ou QR code en physique.

Question : WireGuard peut-il être actif seulement en présence de clients connectés ? Réponse : Oui, WireGuard ne maintient pas de connexion constante si pas de trafic. L’interface wg0 doit être montée, les clients effectuent le handshake selon leurs besoins.

Question : Comment différencier clients avec trafic complet via VPN et ceux avec accès LAN uniquement ? Réponse : Gérez cela dans la config client : complets ont «AllowedIPs = 0.0.0.0/0, ::/0», LAN seulement «AllowedIPs = 10.6.0.0/24, 192.168.1.0/24». Pas besoin de changer le serveur.

Question : Pourquoi la vitesse iperf3 est souvent supérieure à celle perçue en navigation ? Réponse : Iperf3 génère de gros flux avec overhead minimal, alors que les téléchargements web sont limités par handshake TCP, TLS, parallélisme et politiques serveur. C’est normal. Regardez les flux cumulés et les mesures sur longue durée.

Conclusion

Résumé. Vous avez préparé votre Raspberry Pi 5, installé un système 64-bit à jour, activé SSH et IP statique. Installé WireGuard et ses outils, généré les clés, créé la config wg0, activé le forwarding IP. Configuré NAT via nftables et forwarding de port sur le routeur. Ajouté des clients, connecté téléphone et PC, vérifié le tunnel en fonctionnement, fait des tests de charge avec iperf3. Optimisé MTU et gestion qdisc pour stabilité et basses latences. Passé en revue erreurs fréquentes et sauvegarde des configs.

Prochaines étapes. Ajoutez des clients, organisez l’espace d’adressage, mettez en place monitoring et sauvegardes. Si besoin, configurez accès à plusieurs sous-réseaux et split tunnel pour certains appareils. Mettez régulièrement à jour le système et suivez les logs.

Axes d’évolution. Approfondissez l’automatisation avec ansible pour déployer les configs, explorez le routage basé sur politiques et marquage trafic pour des tunnels flexibles, expérimentez le multihoming et la redondance de connexion. Étudiez le comportement avec différentes files d’attente et MTU réseau. Avec ces compétences, vous pourrez construire des solutions VPN sécurisées et performantes, non seulement pour la maison mais aussi pour des petits bureaux.

Astuce : Documentez toujours vos configurations dans un endroit unique, comme un dépôt privé, et conservez des commentaires dans «wg0.conf». Six mois plus tard, vous serez content d’avoir une doc claire.

Astuce : Ne négligez pas le refroidissement du Raspberry Pi 5. Le chiffrement et le routage sollicitent fortement le SoC, et il est plus agréable d’obtenir 800+ Mbps stables sans throttling.

Votre serveur VPN personnel sur Raspberry Pi 5 est donc prêt. Vous savez le gérer, tester et exploiter pour extraire le maximum de vitesse. Bravo !

Roman Melnikov

Roman Melnikov

Technical Writer and System Administrator

Technical writer and DevOps engineer with 9 years of experience. Created over 50 detailed guides on system configuration and administration. His instructions helped thousands of professionals successfully solve technical tasks. Popular author on Habr and YouTube.
Bauman Moscow State Technical University. Information Systems and Technologies
Technical Documentation DevOps System Administration Linux Docker and Kubernetes CI/CD Infrastructure Automation Cloud Technologies System Monitoring Bash and Python Scripting

Partager cet article :