Compte une soirée pour le montage initial et un budget matériel équivalent à une pizza. À la fin, ton téléphone ou ton laptop se connecte à ta maison depuis n’importe quel Wi-Fi public, avec un tunnel chiffré, un accès à ton NAS ou ta Home Assistant, et une sortie internet qui est littéralement ta propre adresse IP.
Ce guide détaille un seul projet, le plus demandé de notre tour d’horizon des VPN sur Raspberry Pi : monter un serveur WireGuard personnel, commande par commande.
Ce que ce tuto couvre (et ne couvre pas)
Ce guide construit un serveur WireGuard personnel hébergé sur ton Raspberry Pi, via PiVPN. Ce n’est pas la même chose qu’un VPN commercial comme NordVPN : il ne change pas ta localisation apparente et ne t’anonymise pas parmi d’autres utilisateurs, puisque la sortie est ton adresse IP domestique. En échange, il te donne un accès chiffré et gratuit à ton réseau domestique depuis l’extérieur, à vie, sans abonnement.
Concrètement, une fois terminé, ce montage permet :
- D’accéder à l’interface d’un NAS (Synology, QNAP, TrueNAS) depuis l’extérieur sans exposer son port web directement sur internet.
- De piloter Home Assistant ou tout autre serveur domotique en dehors du réseau local, sans passer par un service cloud tiers.
- De regarder sa bibliothèque Plex ou Jellyfin depuis un hôtel ou chez des amis, en se faisant passer pour un appareil du réseau domestique.
- D’administrer à distance d’autres machines du réseau (imprimante, caméra IP, autre Pi) sans ouvrir leurs ports individuellement sur la box.
- De chiffrer sa navigation sur un Wi-Fi public non fiable, avec une sortie qui est celle de sa propre box plutôt qu’un serveur tiers.
Ce que ce montage ne fait pas : il ne cache pas ton IP domestique, l’exit node c’est ta maison, il ne débloque pas de catalogues étrangers, et il ne protège pas vis-à-vis de ton propre fournisseur d’accès, qui voit toujours passer du trafic WireGuard chez toi. Un VPN commercial et ce serveur perso sont complémentaires, pas concurrents.
Choisir son matériel : quel Pi, quelle carte, quelle alimentation
Un Raspberry Pi 4 (2 Go de RAM suffisent) ou un Pi 5 conviennent très bien. À titre indicatif, un Pi 4 pousse WireGuard autour de 300 à 500 Mbit/s en usage réel, largement au-dessus de la plupart des connexions fibre résidentielles. Un Pi 5 dépasse souvent les 700 Mbit/s. Un Pi 3 ou un Zero 2 W fonctionnent aussi pour ce projet précis, le trafic d’un usage personnel reste modeste, mais plafonnent nettement plus bas, autour de 50 à 100 Mbit/s, ce qui devient limitant si tu comptes streamer de la vidéo 4K à travers le tunnel. Si le Pi doit aussi faire tourner Pi-hole (dernière étape de ce guide) en parallèle, vise un Pi 4 ou 5 pour garder de la marge.
Côté stockage, une carte microSD de qualité (marque reconnue, classe A1 ou A2) de 32 Go fait très bien l’affaire. Une alternative plus durable : démarrer depuis une clé USB 3.0 ou un petit SSD USB, ce que les Pi 4 et 5 supportent nativement. C’est un peu plus long à configurer au départ, mais ça élimine le point de défaillance le plus fréquent d’un Pi qui tourne en continu, l’usure de la carte SD liée aux écritures répétées des journaux système.
Pour l’alimentation, utilise le bloc officiel correspondant à ton modèle (5V/3A pour le Pi 4, USB-C 5V/5A pour le Pi 5) ou un chargeur de qualité équivalente. Une alimentation sous-dimensionnée provoque des chutes de tension qui se traduisent par des plantages aléatoires, des cartes SD corrompues, et des connexions WireGuard qui se coupent sans raison apparente. C’est la cause de panne la plus sous-estimée sur ce genre de montage.
Enfin, câble Ethernet vers la box de préférence. Le Wi-Fi fonctionne, mais une liaison filaire élimine une source d’instabilité pour un service censé tourner en permanence.
Ce qu’il te faut avant de commencer
Matériel : un Raspberry Pi 4 ou 5, une carte microSD de 16 Go minimum (32 Go conseillé) ou une clé/SSD USB, une alimentation officielle, un câble Ethernet, et un ordinateur avec un lecteur de carte SD pour le flashage.
Accès réseau : un accès à l’interface d’administration de ta box, avec les identifiants admin, pas juste le mot de passe Wi-Fi. Et idéalement une IP publique qui ne change pas trop souvent. Vérifie si ton fournisseur pratique le CGNAT (partage d’une même IP publique entre plusieurs foyers) : dans ce cas, contacte-le pour obtenir une IP publique dédiée, une option que la plupart proposent gratuitement sur demande, sinon l’auto-hébergement ne fonctionnera pas depuis l’extérieur.
Étape 1 : flasher Raspberry Pi OS sur la carte SD
Télécharge et installe Raspberry Pi Imager depuis raspberrypi.com/software sur ton ordinateur. Lance l’outil, choisis Raspberry Pi OS Lite (64 bits) comme système : la version sans interface graphique, largement suffisante pour un serveur VPN, plus légère à faire tourner en continu et avec une surface d’attaque plus réduite qu’une version desktop.
Sélectionne ta carte SD (ou ta clé/SSD USB) comme support de destination. Avant de cliquer sur écrire, ouvre les options avancées (l’icône en forme d’engrenage, ou le raccourci Ctrl+Maj+X) pour préconfigurer :
- le nom d’hôte, par exemple
pivpn - l’activation SSH, de préférence par clé publique plutôt que par mot de passe (voir la section sécurité plus bas pour générer cette clé)
- le nom d’utilisateur et le mot de passe
- les identifiants Wi-Fi, uniquement si tu ne comptes pas brancher en Ethernet
- le fuseau horaire et la disposition du clavier
Lance l’écriture. Une fois terminé, insère la carte dans le Pi et démarre-le, branché en Ethernet à la box. Configurer le SSH et le réseau à cette étape permet de faire tout le reste du tuto sans écran ni clavier branchés sur le Pi : tu pilotes tout depuis ton ordinateur habituel, en mode headless.
Étape 2 : se connecter en SSH et mettre à jour le système
Depuis ton ordinateur, ouvre un terminal (ou PowerShell sous Windows) :
ssh pi@pivpn.local
Remplace pi par le nom d’utilisateur choisi et pivpn.local par le nom d’hôte défini plus haut. Si la résolution .local ne fonctionne pas (certains routeurs bloquent le protocole mDNS qui la rend possible), trouve l’adresse IP du Pi depuis l’interface de la box, dans la liste des appareils connectés, et connecte-toi directement avec ssh pi@192.168.1.XX.
Une fois connecté, mets le système à jour avant toute installation :
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Reconnecte-toi en SSH après le redémarrage. C’est aussi le bon moment pour vérifier l’espace disque disponible (df -h) et la température du processeur (vcgencmd measure_temp).
Étape 3 : donner une IP fixe au Pi sur le réseau local
Le Pi doit toujours avoir la même adresse IP locale, sinon le transfert de port configuré plus loin cessera de fonctionner au premier redémarrage de la box. Deux options.
La première, recommandée : réservation DHCP côté box. Dans l’interface d’administration de la box, cherche la section DHCP ou “appareils connectés”, trouve le Pi par son adresse MAC (visible avec ip link show eth0 sur le Pi), et réserve-lui une IP fixe, par exemple 192.168.1.50. C’est la méthode la plus fiable, elle survit à une réinstallation complète du système sur le Pi.
La seconde, si la box ne propose pas cette option : configure l’adresse directement sur le Pi via sudo nmtui, une interface texte simple qui évite d’éditer les fichiers de configuration réseau à la main.
Étape 4 : installer PiVPN
PiVPN automatise presque entièrement l’installation de WireGuard, la génération des clés et la configuration du pare-feu. Une seule commande lance l’installateur interactif :
curl -L https://install.pivpn.io | bash
L’assistant pose une série de questions, réponds ainsi :
- Choix du logiciel VPN : sélectionne WireGuard plutôt qu’OpenVPN. Sa base de code est bien plus réduite, donc plus simple à auditer, son protocole est plus moderne, et ses débits sont nettement supérieurs sur du matériel modeste comme un Pi.
- Utilisateur local : confirme l’utilisateur détecté automatiquement.
- IP statique : PiVPN détecte l’IP actuelle et demande confirmation, normal si l’étape 3 a bien été faite.
- Port d’écoute : le port par défaut (51820/UDP) convient dans la grande majorité des cas. Le changer pour un port aléatoire au-dessus de 10000 ajoute une couche d’obscurité mineure contre les scans automatisés, voir la section sécurité plus bas.
- DNS pour les clients : les résolveurs publics (Cloudflare 1.1.1.1 ou Quad9 9.9.9.9) fonctionnent d’office. Si Pi-hole est prévu ensuite, ce réglage se change plus tard sans tout reconfigurer.
- Adresse publique : c’est ici que le DNS dynamique devient important, voir l’étape suivante avant de valider si l’IP publique change régulièrement, ce qui est le cas de la quasi-totalité des connexions résidentielles.
- Mises à jour non supervisées : accepte. Cela applique automatiquement les correctifs de sécurité sans intervention manuelle.
À la fin, PiVPN propose de redémarrer :
sudo reboot
Étape 5 : configurer un nom de domaine dynamique (DDNS)
La plupart des connexions résidentielles n’ont pas d’IP publique fixe : la box en change de temps en temps, souvent après une coupure de courant, un redémarrage, ou simplement au bout de quelques jours ou semaines selon la politique du fournisseur. Si le client WireGuard pointe vers une IP qui a changé entre-temps, la connexion échoue silencieusement, sans message d’erreur explicite.
La solution : un service de DNS dynamique qui associe un nom de domaine fixe, par exemple tonnom.duckdns.org, à l’IP publique actuelle, mis à jour automatiquement dès qu’elle change.
- Crée un compte gratuit sur un service DDNS. DuckDNS est le plus simple à automatiser sur Raspberry Pi et documenté nativement par PiVPN, mais No-IP et FreeDNS sont des alternatives tout aussi valables.
- Crée un sous-domaine et récupère ton jeton d’authentification.
- Installe le script de mise à jour automatique, en général une tâche cron qui s’exécute toutes les cinq minutes et met à jour l’enregistrement DNS si l’IP a changé. La documentation DuckDNS fournit ce script en une ligne à coller directement dans le terminal.
- Vérifie que la mise à jour fonctionne en consultant le fichier de log généré par le script, qui doit afficher “OK” après chaque exécution.
- Si PiVPN avait déjà été installé avec une IP brute plutôt qu’un nom de domaine, régénère les profils clients avec
pivpn -apour qu’ils pointent vers le bon nom d’hôte.
Étape 6 : ouvrir le port sur ta box (transfert de port)
Le Pi écoute sur le port UDP 51820 en interne (ou le port personnalisé choisi à l’étape 4), mais la box bloque par défaut tout trafic entrant non sollicité venant d’internet. Il faut créer une règle de transfert de port, aussi appelée redirection de port ou NAT/PAT selon les fabricants :
- Ouvre l’interface d’administration de la box, généralement à une adresse comme
192.168.1.1ou192.168.0.1(identifiants souvent notés sur l’étiquette de la box). - Cherche la section réseau avancé, NAT, ou redirection de ports.
- Crée une règle : port externe 51820, protocole UDP, redirigé vers l’IP locale du Pi fixée à l’étape 3, port interne 51820.
- Enregistre et, si demandé, redémarre la box.
Cette étape varie beaucoup selon le fournisseur d’accès. Si l’interface décrite ici ne correspond pas à ce que tu vois, cherche “port forwarding” suivi du nom exact de ta box.
Un piège classique : certaines box fonctionnent en mode “bridge” derrière un autre boîtier (un routeur 4G/5G de secours, un répéteur qui fait aussi routeur), ce qui ajoute une couche de NAT supplémentaire à traverser. Si le transfert de port ne suffit pas, vérifie qu’il n’y a pas un deuxième routeur en amont qui bloque aussi le trafic.
Étape 7 : créer un profil client et se connecter
De retour en SSH sur le Pi, génère un profil pour chaque appareil qui se connectera : téléphone, laptop, tablette. Un profil distinct par appareil, jamais partagé, ce qui permet de révoquer un accès individuellement en cas de perte ou de vol :
pivpn -a
Donne un nom explicite (iphone-fabien, laptop-boulot). PiVPN génère un fichier .conf et l’enregistre dans ~/configs/.
Pour rapatrier ce fichier vers un téléphone, la méthode la plus rapide est le QR code :
pivpn -qr
Choisis le profil concerné, un QR code s’affiche directement dans le terminal. Ouvre l’app WireGuard (disponible sur l’App Store et le Play Store), touche le bouton “+”, puis “Scanner un code QR”, et scanne l’écran du terminal, ou une capture d’écran si le terminal est distant.
Pour un ordinateur, transfère le fichier .conf par SCP puis importe-le dans le client WireGuard de bureau :
scp pi@pivpn.local:~/configs/laptop-boulot.conf .
Importe ensuite ce fichier dans l’application WireGuard installée sur l’ordinateur (Windows, macOS, Linux).
Par défaut, PiVPN configure un tunnel complet : une fois connecté, tout le trafic de l’appareil, navigation web comprise, repasse par la maison. C’est le comportement voulu pour chiffrer une connexion Wi-Fi publique, mais ça consomme la bande passante montante de la box à chaque usage. Pour ne router que le trafic vers le réseau domestique et laisser le reste sortir directement, édite la ligne AllowedIPs dans le fichier .conf du client : remplace 0.0.0.0/0 par le sous-réseau local uniquement, par exemple 192.168.1.0/24.
Étape 8 : vérifier que ça marche vraiment
Ne saute pas cette étape. Coupe le Wi-Fi du téléphone, passe en 4G/5G pour être vraiment à l’extérieur du réseau local, active le profil WireGuard, puis :
- Vérifie que tu arrives à joindre un service interne, l’interface web du NAS ou de Home Assistant par exemple, via son adresse IP locale.
- Fais un test de fuite IP depuis l’appareil connecté au tunnel : l’IP affichée doit être celle de la box, pas celle de l’opérateur mobile.
- Vérifie la latence et le débit avec un simple test de vitesse pendant que le tunnel est actif, pour avoir une référence en cas de lenteur signalée plus tard.
Si la connexion échoue, voici les causes les plus fréquentes et comment les vérifier.
| Symptôme | Cause probable | Vérification |
|---|---|---|
| Le client ne se connecte pas du tout | Port non ouvert sur la box | nc -zvu <IP-publique> 51820 depuis un réseau externe |
| Connexion OK sur le Wi-Fi local, échoue en 4G | Transfert de port mal configuré ou double NAT | Revoir l’étape 6, vérifier s’il y a un routeur en amont |
| Ça marchait, puis plus rien du jour au lendemain | IP publique changée, DDNS pas à jour | nslookup tonnom.duckdns.org doit renvoyer l’IP publique actuelle |
| Connexion établie mais aucun service accessible | Pare-feu du Pi ou transfert IP désactivé | sudo ufw status (le port doit être autorisé), sysctl net.ipv4.ip_forward doit renvoyer 1 |
| Débit très inférieur à la connexion habituelle | Modèle de Pi limitant (Zero, Pi 3) ou Wi-Fi côté Pi | Repasser en Ethernet, ou voir la section matériel plus haut |
| Le profil fonctionne sur un appareil mais pas un autre | Fichier de configuration corrompu ou mal transféré | Régénérer un profil frais avec pivpn -a |
Sécuriser le serveur : ce qu’il ne faut pas laisser de côté
Un serveur exposé sur internet, même via un simple port UDP, mérite quelques réglages de sécurité de base, rapides à mettre en place.
Désactiver l’authentification par mot de passe en SSH. Si ce n’est pas déjà fait à l’étape 1, génère une paire de clés sur ton ordinateur (ssh-keygen -t ed25519), copie la clé publique sur le Pi (ssh-copy-id pi@pivpn.local), puis passe PasswordAuthentication à no dans /etc/ssh/sshd_config. Redémarre le service SSH (sudo systemctl restart ssh). Sans cette étape, le Pi reste vulnérable aux tentatives automatisées de force brute sur SSH si ce port est un jour exposé.
Installer fail2ban, qui bannit automatiquement les adresses IP multipliant les tentatives de connexion échouées :
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban
La configuration par défaut protège déjà SSH efficacement, sans réglage supplémentaire.
Changer le port SSH par défaut. Le port 22 est le premier scanné par les robots. Le remplacer par un port aléatoire au-dessus de 2000 dans /etc/ssh/sshd_config réduit fortement le bruit des tentatives automatisées, même si ça ne remplace pas une authentification par clé solide.
Garder le système à jour automatiquement. PiVPN active unattended-upgrades par défaut pendant l’installation. Vérifie que c’est bien actif :
sudo systemctl status unattended-upgrades
Enfin, limite les profils WireGuard au strict nécessaire. Chaque appareil doit avoir son propre profil, jamais un fichier .conf partagé entre plusieurs personnes ou appareils. En cas de doute sur un appareil perdu ou prêté, révoque le profil concerné plutôt que de continuer à s’en servir par habitude.
Sauvegarder la configuration avant tout incident
Une carte SD finit toujours par lâcher, tôt ou tard, c’est une caractéristique du support plutôt qu’un signe de mauvaise qualité. Sauvegarder les fichiers de configuration prend deux minutes et transforme une panne de carte en restauration rapide plutôt qu’en remontage complet du serveur.
sudo tar -czvf ~/backup-wireguard-$(date +%F).tar.gz /etc/wireguard ~/configs
scp pi@pivpn.local:~/backup-wireguard-*.tar.gz .
Cette archive contient les clés serveur et tous les profils clients. Range-la sur un support externe au Pi (ordinateur, cloud personnel, disque externe), et répète l’opération après chaque ajout ou révocation de profil.
Pour restaurer sur une nouvelle carte SD en cas de panne, réinstalle Raspberry Pi OS et PiVPN comme aux étapes 1 et 4, puis remplace le contenu du dossier /etc/wireguard généré par l’archive de sauvegarde avant de redémarrer le service WireGuard.
Ajouter Pi-hole (optionnel mais recommandé)
Une fois le serveur WireGuard opérationnel, ajouter Pi-hole prend une dizaine de minutes et transforme le tunnel en VPN doublé d’un bloqueur de publicités et de traqueurs pour tout appareil connecté, où qu’il se trouve dans le monde.
curl -sSL https://install.pi-hole.net | bash
Suis l’assistant : choix de l’interface réseau, choix du DNS amont (Cloudflare ou Quad9 conviennent bien). Une fois installé, retourne dans la configuration WireGuard et remplace le DNS distribué aux clients par l’IP locale du Pi lui-même :
pivpn -d
Choisis de pointer le DNS des clients vers Pi-hole. Régénère les profils existants si nécessaire, et vérifie depuis un appareil connecté au tunnel que le tableau de bord Pi-hole (accessible à http://<IP-locale-du-Pi>/admin) commence bien à comptabiliser des requêtes bloquées.
Maintenance : ce que ça coûte après le montage
Mises à jour : sudo apt update && sudo apt full-upgrade -y une fois par mois suffit, PiVPN active les mises à jour de sécurité automatiques par défaut.
Révoquer un appareil perdu : pivpn -r puis choisir le profil à révoquer, une seule commande, à tester une fois pour de vrai plutôt que de la découvrir en urgence le jour où un téléphone se perd.
Vérifier les connexions actives : pivpn -c affiche la liste des profils et la date de leur dernière poignée de main, utile pour repérer un appareil qu’on croyait révoqué mais qui traîne encore.
Surveiller le DDNS : c’est le composant silencieux dont tout dépend ; si les connexions distantes cessent de fonctionner du jour au lendemain sans autre changement, c’est le premier suspect à vérifier.
Vérifier l’espace disque et la santé de la carte SD : df -h de temps en temps, et un oeil sur les logs système (journalctl -p err) pour repérer des erreurs de lecture ou d’écriture précoces.
Budget réaliste une fois le montage terminé : une heure ou deux par an, largement absorbées par les vérifications ci-dessus.
Foire aux questions
Peut-on utiliser ce serveur et un abonnement VPN commercial en même temps ? Oui, et c’est même l’usage le plus complet : le serveur perso pour revenir chez soi, l’abonnement commercial comme NordVPN pour les usages qui nécessitent un vrai changement de localisation ou une anonymisation. Les deux clients tournent sur des appareils différents ou à des moments différents sans conflit.
Le CGNAT de mon opérateur m’empêche-t-il définitivement ce montage ? Pas nécessairement. Certains opérateurs proposent une IP publique dédiée gratuitement sur simple demande au support technique, une logique proche de celle décrite dans notre guide sur les IP dédiées. À défaut, un service de tunnel inversé comme Tailscale ou ZeroTier contourne le problème, au prix d’une dépendance à un tiers plutôt qu’un montage entièrement auto-hébergé.
Combien d’appareils puis-je connecter en simultané ? Un Pi 4 ou 5 encaisse sans souci une dizaine de connexions WireGuard simultanées pour un usage familial classique. Les limites viennent plus vite de la bande passante montante de la box que du processeur du Pi.
Que se passe-t-il si mon Pi tombe en panne pendant que je suis en déplacement ? Le tunnel cesse simplement de fonctionner ; aucun autre appareil du réseau domestique n’est affecté puisque le Pi ne fait que router le trafic VPN, il n’est pas dans le chemin du reste du réseau local. C’est une raison de plus de garder une sauvegarde à jour pour redémarrer vite en cas de souci matériel.
Envie de comparer tous les VPN côte à côte ? Consultez notre tableau comparatif complet avec les scores sur 18 critères.
Un serveur WireGuard perso sur Raspberry Pi remplace un VPN commercial pour un seul usage, revenir chez soi en sécurité, mais il le fait très bien et gratuitement à vie. Ce n'est pas un projet d'anonymat ni de changement de localisation : pour ça, un abonnement classique reste la meilleure option. Le montage demande une soirée et une heure de maintenance par an ensuite. C'est un bon compromis pour qui a déjà un NAS ou une Home Assistant à protéger, et un projet à sauter pour qui cherche juste à débloquer du streaming étranger.
Ce tuto couvre le montage complet du serveur WireGuard personnel, de l’installation à la sécurisation en passant par la maintenance. Pour comprendre comment ce projet se positionne par rapport aux deux autres usages VPN d’un Raspberry Pi, la passerelle réseau et le combo Pi-hole associé à un VPN commercial, retour vers le guide d’ensemble VPN sur Raspberry Pi.