PiVPN : OpenVPN ou WireGuard sur un Raspberry Pi (Tuto)

Peu de temps avant mon départ en vacances, j’ai découvert PiVPN (mieux vaut tard que jamais). PiVPN est une solution clé en main pour transformer votre Raspberry Pi en serveur VPN : OpenVPN ou WireGuard. Facile à installer et à paramétrer, il est en plus redoutable en performances avec WireGuard. Explications…

PiVPN : OpenVPN / WireGuard

PiVPN existe depuis plusieurs années maintenant. Son objectif est de faciliter la configuration et la gestion d’un serveur VPN depuis un Raspberry Pi. Je l’ai configuré rapidement sur un Raspberry Pi 4 pour mes vacances avec WireGuard. 5 appareils étaient paramétrés pour l’utiliser. Le moins que l’on puisse dire, c’est qu’il est très efficace !

Installation

Avant de commencer l’installation, pensez à mettre à jour votre Raspberry Pi. Ça ne prend que quelques minutes tout au plus. Ensuite, l’installation est très rapide et il n’y a qu’une commande à taper :
curl -L https://install.pivpn.io | bash

Et c’est tout. Rien de plus, rien de moins. L’outil va réaliser différentes vérifications sur votre Raspberry Pi et lancer automatiquement l’installation des différents paquets.

capture installation PiVPN

Configuration

La configuration est assez simple, il suffit de suivre le guide en anglais. Oui, cela peut être un frein pour certains… tout est en anglais. Alors je vous rassure, cela reste tout à fait accessible. Il n’y a rien de vraiment très compliqué.On choisit si le Raspberry Pi est en DHCP ou IP fixe (à favoriser pour la redirection sur votre Box), puis on va sélectionner l’utilisateur (User) qui pourra gérer serveur VPN.

Dans mon cas, je n’ai que l’utilisateur pi de paramétrer sur mon matériel. Arrive ensuite le mode d’installation, c’est maintenant qu’il faut choisir le type de service VPN que vous souhaitez mettre en place OpenVPN ou WireGuard. Je suis un grand fan d’OpenVPN, mais il est gourmand en ressource (voire lent). Depuis plusieurs mois maintenant, je n’utilise que WireGuard et c’est un vrai bonheur. C’est celui que j’utilise pour ce tuto…

On a quasiment fini, il faut indiquer le port à utiliser/rediriger vers votre Raspberry Pi. Dans notre cas, le port par défaut pour WireGuard est 51820 (UDP). Avant-dernier écran, on vous demande de sélectionner un fournisseur de DNS pour les clients. Si vous utilisez AdGuard ou PiHole sur votre installation réseau pour bloquer les publicités, c’est le moment de sélectionner Custom (tout en bas de la liste) et de saisir son nom ou son adresse IP. Vous pourrez en mettre 2 en les séparant par une virgule.

Enfin, il est demandé de choisir le moyen de connexion à votre serveur VPN : via l’adresse IP publique de votre Box ou avec une entrée DNS (Domaine/Dynamic DNS). Si vous choisissez la seconde solution, il faudra le nom (ex. : domaine.fr/.com/.org…). Voila, c’est terminé pour l’installation et la configuration de votre VPN avec PiVPN.

Un petit message vous recommandera d’activer les Unattended Upgrades (les mises à jour de sécurité). Enfin, il est recommandé de redémarrer son Raspberry Pi après l’installation de PiVPN.

Ajout d’un utilisateur/périphérique

Ensuite pour ajouter un appareil, il faudra taper la commande :
pivpn -a

et le nom du client. Il ne vous reste plus qu’à installer l’application WireGuard sur votre téléphone ou ordinateur 😉

Récupérer le QRcode

Pour récupérer le QRcode pour l’application téléphone ou tablette, vous taperez la commande :
pivpn -qr

Lister les utilisateurs/périphériques

La commande ci-dessous vous permettra de lister tous les clients/périphériques ajoutés précédemment :
pivpn -l

Pour voir les utilisateurs/clients connectés, tapez :

pivpn -c

Désinstaller PiVPN

Si vous souhaitez désinstaller PiVPN, le programme est simple et assez efficace (attention, il y a un redémarrage du Raspberry Pi à faire) :

pivpn -u

Fichiers de configurations

Sachez que les fichiers de configuration pour vos appareils (ordinateur, tablette, smartphone…) sont tous disponibles depuis le dossier /home/pi/configs (par défaut).

Simple et efficace ! Pour terminer, sachez que j’ai installé l’application WireGuard sur ma Fire TV 4K. Je n’ai eu aucun souci pour accéder à mes vidéos contenus sur mon NAS… à distance, grâce à Kodi 😉

  1. Merci pour ce tuto!
    PiVPN est un jolie outil, de plus il peut être sans soucis utilisé sur d’autre matériel qu’un raspberry. Comme un PC sous debian ou Ubuntu

  2. J’utilise PiVPN en complément de Pi-Hole sur Proxmox sur un Debian virtualisé. Je l’avais auparavant sur un RPI4 4Go et ça fonctionnait nickel. Le seul frein que l’on va rencontrer est le débit montant de la connexion sur lequel le VPN est connecté. Pour ma part il est derrière une connexion ADSL avec un débit montant de 1M, autant que je peux rien faire avec… Mais si tu as la fibre c’est nickel. Je m’en sers juste pour accéder à mon réseau local quand je ne suis pas à la maison.

  3. J’avais tenté de mettre en place WIREGUARD sur mon NAS Syno 918+ sans succès. J’utilisais OPENVPN mais avec une réduction du débit. J’ai suivi le tuto et en 5 mins tout fonctionne sur mon pi3. Un grand bravo à toi pour la clarté de tes explications. Merci

    1. Bonjour

      Je te conseille quelque chose de bien plus simple: une VM ubuntu server dans Virtual Machine Manager, puis déploiement de PIVPN dans cette VM.

      ça marche très bien et pas besoin d’avoir un PI en plus

  4. Bonjour
    Je viens d’acheter un RPI 4 et je suis tombé sur ce Tuto intéressant.
    Vous parlez de commencer par faire une mise à jour du RPI, vous parlez d’un bios ou quelque chose de ce genre ?
    Puis je vois qu’ensuite vous exécutez une ligne de commande pour commencer l’installation du VPN.
    Cela veut dire qu’il y a déjà un OS d’installeé sur votre RPI ?
    Merci pour vos réponses…

  5. Merci beaucoup Fx pour votre réponse, rapide en plus !
    Je vais donc aller récupérer l’OS sur le lien que vous avez posté puis installer le VPN dans la foulée…
    Bonne journée

  6. Une petite question Fx. A travers mon reseau à domciile je bloque l’accès de Youtube sur les téléphones de mes enfants avec Adguard installé sur mon NAS. Est-il possible de faire la même chose à l’extérieur en passant par le VPN Wireguard ? Merci de ta réponse. Nicolas

  7. Oui bien sur @Nicolas.
    Il faut dans la configuration du client vpn lui dire d’utiliser ton serveur adguard et de forcer toutes les connexions au travers du vpn.

    Bien sur, il faudra limité la possibilité a tes enfants de désactiver le vpn, je suppose qu’on doit trouver également des solutions à cela.

  8. Bonjour @EVOTk.

    Merci pour ta réponse mais il me faut plus de précisions. Que dois je modifier dans le fichier de conf du téléphone de mon fils ? j’ai actuellement une adresse IP en 10.0.6.x/24. Faut il la renommer en 192.168.0.x/24 ? Merci pour tes précisions. Nicolas

  9. @Nicolas normalement ton fichier « client » wireguard ressemble a ceci :
    —–
    [Interface]
    PrivateKey = XXXX
    ListenPort = 51820
    Address = 10.13.13.2/32
    DNS = 10.13.13.1

    [Peer]
    PublicKey = XXXX
    AllowedIPs = 192.168.2.0/24
    Endpoint = ndd.fr_ou_ip_fixe:51820
    —-

    Tu doit modifier AllowedIPs par « AllowedIPs = 0.0.0.0/0, ::0/0 » afin de lui forcer a passer tout le traffic a travers le VPN.
    Pour le serveur DNS, il faut que la machine qui heberge le serveur wireguard est ton DNS de renseigne, ou que tu le force dans le paramètre DNS = XXXX

  10. Re bonjour @EVOTk. J’ai bien reussi à bloquer youtube à travers le VPN via adguard mais pour tous les clients connectés ! Existe-t-il une solution pour filtrer par adresse IP du style 10.6.0.x ? Merci de ta réponse. Nicolas

    1. Hello Nicolas,
      Ce que tu peux faire depuis AdGuard, c’est de créer un profil. Tu vas dans Paramètres > Paramètres du Client. Ce client, il aura un nom et surtout une adresse IP ou l’adresse MAC du périphérique. A noter que pour un client, tu peux saisir plusieurs IP ou adresse MAC. Si ton enfant a 2 périphériques, ça marche. Tu peux aussi créer le même profil pour 2 enfant. Enfin sur la partie du bas, tu peux sélectionner les services à bloquer (ou non) 😉
      J’espère que cela pourra t’aider !

      1. Hello FX, merci pour ta réponse. Pas de souci pour les profils, je les ai déjà mis en place. Mais, sauf erreur de ma part, lorsque le téléphone de mon enfant à l’extérieur se connecte au serveur VPN du hébergé sur le Raspberry, sur Adguard, je vois uniquement les requêtes de l’IP du Raspberry et aucune trace de l’IP du téléphone. Est-ce exact ? La seule solution que j’ai trouvée, serait de disposer de 2 raspberry pour créér 2 serveurs VPNs avec des profils différents (1 pour les enfants, et 1 pour les adultes!). Merci et bonne soirée.

        1. Salut @Nicolas,
          Il existe peut-être une solution a cela ( attendons de voir la réponse de @FX ^^ ) mais si cela n’est pas possible il te faudra alors soit :
          – Avoir 2 pi
          Ou si ton pi est au mini un Pi2B :
          installer docker, et créer un 2eme serveur wireguard en docker sur ce même pi avec un reseau macvlan ( pour lui attribuer une IP LAN différente de celle du pi )

          1. Merci pour ta réponse. je vais essayer ce matin, mais je crois comprendre le problème. Adguard est installé sur mon NAS. Je vais le migrer sur le pi..Je vous tiens au courant. En tout cas, en grand merci pour votre implication. Nicolas

  11. Bonjour,
    Jai adguardhome installé via docker sur mon rpi en sous reseau. Le rpi et adguard ont 2 adresses ip differentes.
    Jai installe pivpn et bien sélectionné en custom, son ip. 192.168.1.82
    Apres avoir connecte le tunnel sous wireguard sur mon tel, je nai aucune connexion. Vous avez une idee?

  12. Bonjour, je suis équipé de la fibre
    j’ai une question, ce pivpn, le nano-ordinateur se place entre le boîtier fibre et la box pour intercepter tout le flux ou après la box ? Dans le premier cas, il faut un Pi avec deux ports ethernet ?
    Merci pour votre aide

  13. non, un seul port suffit, ce n est pas un firewall mais un vpn.
    Tu nat le port sur ta box et ca devrait aller

  14. Bonjour à vous et merci pour ce tuto et cette présentation. J’ai bien tout suivi, j’ai installé wireguard sur un RPI B3. Avec mon Android aucun souci pour accéder à mon réseau chez moi. Par contre avec un iMac M1 sous Monterey j’arrive à me connecter au vpn chez moi, je peux lancer un ping sur mon ip publique, ça fonctionne. Mais impossible d’accéder à mon NAS ou à un dossier partagé sur mon Windows, alors qu’avec mon Android sur ce même réseau extérieur j’accède à tout. Je ne sais pas s’il y a une manipulation particulière à faire sur macOS je ne suis pas très à l’aise avec mac. J’ai essayé de faire un ping sur les ip locales, ça me met d’abord « no Root to Host » puis « Host is down ».
    J’ai cherché sur internet et tenté plusieurs manip je n’arrive à rien et je ne sais pas où demander.
    Merci.

  15. Bjr, merci pour ce tuto. J’avais lu ça sur un forum aussi. Je précise que je ne suis pas informaticien du tout mais j’essaie d’apprendre.
    Mon but est d’aller sur internet tout simplement avec Wireguard.
    J’ai pris un serveur vps tout simple chez ionos avec un nom de domaine redirigé vers Cloudfare.
    Pas de problème pour l’install avec pivpn, la récup du fichier conf pour le mettre dans Wireguard. Wireguard a l’air de fonctionner, de communiquer car une personne a utilisé la config sur mon serveur vps sur un autre ordi et une autre connexion et sa fonctionne. Chez moi, non avec Windows 10 pro qui est propre car j’ai dû le réinstaller ces derniers jours. Je vais sur internet aucune page ne s’affiche. Quelqu’un peut m’aider svp ? Suis sûr que c’est pas grand chose comme prbm

    1. Hello,

      Est-ce que ton souci pourrait être au niveau des DNS ? Arrives tu à faire un ping de Google.fr par exemple ? Ou un ping 185.53.177.20 ?

      1. Bjr FX et merci de t’intéresser à mon problème.

        J’ai activé Wireguard, taper Google.fr puis 185.53.177.20 dans la barre de recherche d’adresses et non ça ne ping pas.

        Je me suis balladé dans les paramètres de ma Livebox Orange et je me demande si ce n’est pas par là que ça bloque : peut être qu’il faut que j’enregistre mon serveur vps de chez Ionos dans les menus tels que NAT/PAT ; UPnP IGD ; DynDNS (pour mon nom de domaine Ionos).

        Qu’est ce que tu en penses stp ?

        1. Je ne pense pas que ce soit lié à ta Livebox car ton serveur est à l’extérieur. Pour le ping, il faudrait le faire en ligne de commande.
          As-tu fait un essai avec ton téléphone directement ou en utilisant ce dernier en tant que point d’accès WiFi ? C’est savoir si ça marche mieux en 4G.
          Quand tu tapes Google.fr, que se passe-t-il exactement ?

          1. Ok pour la Livebox.

            J’ai lancé les commandes :
            – ping Google.fr = La requête Ping n’a pas pu trouver l’hôte Google.fr. Vérifiez le nom et essayez à nouveau.

            – ping 185.53.177.20 (prkoi cet IP au fait ?) = 4 paquets envoyés, 4 perdus, perte 100%

            Google.fr dans la barre d’adresse de mon navigateur Brave = adresse DNS de google.fr est introuvable.

            J’ai bien Wireguard sur mon tél, j’ai flashé le QR code via Putty connecté en SSH sur mon serveur vps et après avoir saisi la ligne de commande pivpn -qr. J’ai donc bien mon fichier.conf dans Wireguard de mon tél. J’ai coupé la wifi de mon tél et activé Wireguard. Même problème = pas d’internet

  16. Je précise que quand Wireguard d’activé, je ping sur l’adresse de mon serveur vps où Wireguard est configuré et ça marche.

    Donc la connexion se fait entre mon pc, machine cliente, et mon serveur.
    Juste que je ne peux pas aller sur internet.

    Je suis allé dans les paramètres de ma Livebox Orange, j’ai ajouté une règle pour autoriser le port 51820 mais tjrs pareil.

    1. C’est étrange… et pour ton ami, ça fonctionne sans souci. C’est bien ça ?
      Tu n’aurais pas mis un restriction dans la configuration (sur le client) ou mis une règle iptables ?

      1. Ce n’est pas un ami mais un internaute qui a fait un tuto sur un forum. Et oui ça a l’air de fonctionner pour lui car il dit comme toi « étrange »

        Pour la restriction ou iptables, j’avoue ne pas avoir assez de compétences pour répondre.

        1. Ça change tout, ce n’est pas ce que j’avais compris. Donc à ce jour, personne n’a réussi à utiliser ton VPS comme VPN avec Wireguard. Le souci peut donc être à tous les niveaux (client et serveur).
          Donc le paramétrage du serveur peut être aussi en erreur. Ça fait de nombreux paramètres à contrôler. Qu’as-tu mis en DNS provider ? As-tu testé le mode debug https://docs.pivpn.io/wireguard/... ?

          1. Slt, je me permets de revenir à la charge. Y’a moyen de se contacter par mail ou mp via une plateforme pour échanger sur mon problème svp ? J’ai pris un abonnement chez Ionos pour mon vps et mon nom de domaine y’a quelques mois et j’aimerais réussir à utiliser Wireguard avec mon PC client sous Win10. Bien sûr si la soluce est trouvée je la partagerai ici.
            Par avance merci

  17. DNS sur mon serveur = nom d’hôte xxxxxxx.online-server.cloud

    DNS sur Wireguard = 10.67.170.1

    Mon nom de domaine enregistré dans Pivpn est pris chez Ionos redirigé chez Cloudfare.
    Serveur de noms DNS chez Cloudfare xxxx.ns.cloudfare.com et xxxxxxxx.ns.cloud.fare.com

    Pour le début, j’ai lancé la commande pivpn devug = IP forwarding is enabled + Wireguard is running + Wg is enabled+ Wg is listening on port 51820/udp

    1. SNIF et moi tjrs bloqué. Wireguard fonctionne très bien sur mon tél en 4G. Le problème vient de mon pc win 10. J’ai cru que c’était la Livebox mais non car j’ai utilisé le tél en partage de connexion à la place.

  18. Bonjour

    Je ne comprends pas le rôle de l’utilisateur qui peut gérer wireguard.

    Est t’il obligatoire ?

    Cdt

  19. Bonjour,

    Est ce que PiVPN peut s’installer sur une raspberry ou y’a déja (dans mon cas) un applicatif comme Yunohost ? Ca ne surpprime pas ou n’entre pas en conflit avec yunohost ?

  20. Salut à tous,
    merci pour les infos de cet article.
    J’ai testé wireguard sur mon Rpi3
    PiVPN s’est installé sans problème.
    J’ai choisi les DNS Cloudflare (sans rien n’y comprendre)
    J’ai crée un utilisateur, ouvert le port 51820 sur ma livebox mais lorsque je me connecte depuis l’extérieur je n’ai pas accès au réseau.
    Voila mon fichier conf :

    [Interface]
    PrivateKey = XXXXXX
    Address = 10.78.61.2/24
    DNS = 1.1.1.1, 1.0.0.1

    [Peer]
    PublicKey = XXXXXX
    PresharedKey = XXXXXX
    Endpoint = MONIP:51820
    AllowedIPs = 0.0.0.0/0, ::0/0

    Si suis un peu perdu, si vous aviez une solution je suis preneur.
    Merci d’avance.

    1. J’ai trouvé mon erreur.
      J’avais utilisé le protocole TCP pour la redirection dans ma box et il faut du UDP.
      Tout fonctionne à merveille.
      Bonne continuation.

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.