Mettre en place un VPN avec Wireguard/PiVPN

Un VPN est un outil qui permet à une personne de se connecter à un réseau local distant. Si vous êtes en voyage d’affaires à Honolulu (rare !) et que vous voulez partager des documents avec vos associés à Lyon, vous vous connecterez généralement à ce site via un VPN. Il garantit la sécurité et la confidentialité des informations échangées de part et d’autres en créant une sorte de tunnel entre les deux sites.

Aujourd’hui Wireguard est considéré comme le VPN de référence et je vous propose de le mettre en place pour partager les documents que vous avez mis en place sur votre partage Samba, mais aussi pour piloter à distance votre Pi. Il est déjà installé sur le noyau Linux que nous avons déployé sur le Pi et nous n’avons plus qu’à l’activer. Evidemment, pour pouvoir l’utiliser, il faut le paramétrer sur le serveur, mais aussi le mettre en place sur les terminaux clients que vous allez utiliser : tous les principaux systèmes d’exploitation permettent son utilisation comme clients et je vous accompagnerai dans sa mise en place sur Windows, Linux et Android.

Attention : la mise en place d’un VPN nécessite de disposer d’une adresse IP fixe. Si comme c’est souvent le cas pour les abonnements résidentiels à internet, votre adresse IP est dynamique, il vous sera nécessaire de mettre en place un service de DNS dynamique. Commençons donc par cet aspect.

La configuration d’un DDNS

Je n’ai pas dû mettre en place un DNS dynamique, je n’ai donc pas d’expérience personnelle en la matière. De ce fait, je ne vais pas vous guider dans sa mise en place, mais vous apporter quelques éléments théoriques.

Quelques définitions :

  • un DNS est un serveur de noms de domaine ; en effet internet ne connaît pas naturellement les noms de domaine tels que k-sper.fr, mais seulement des adresses IP telles que 123.45.67.89 ; le serveur DNS permet de traduire un nom de domaine facilement mémorisable par un humain, en l’adresse IP d’un serveur répondant à ce nom,
  • un DNS dynamique est un serveur DNS qui va mettre à jour en temps réel la correspondance entre le nom de domaine et l’adresse IP, elle-même dynamique.

Plusieurs fournisseurs proposent ce service, notamment des fournisseurs gratuits, notamment :

N’hésitez pas à me faire part en commentaires de vos retours d’expérience sur ces services.

La mise en place du serveur

Nous allons, comme d’habitude, commencer par mettre à jour notre serveur.

sudo apt update
sudo apt upgrade

Nous allons maintenant installer PiVPN. Cet outil va nous permettre une manipulation simplifiée de Wireguard. Pour cette installation, nous allons utiliser une nouvelle modalité d’installation : la méthode curl (client URL request library : « bibliothèque de requêtes aux URL pour les clients »), qui est un outil de transfert de données. Son manuel est accessible ici.

curl -L https://install.pivpn.io | bash

Nous introduisons ici une nouveauté avec l’utilisation d’un « pipe » (tuyau), qui permet d’enchaîner les commandes et de transmettre les résultats d’une commande à une autre. C’est un concept important de Linux que vous utiliserez probablement souvent à l’avenir. Pour l’illustrer, découpons la commande en deux sous-parties et analysons l’enchaînement :

  • curl -L https://install.pivpn.io nous permet d’aller copier les données (en réalité un programme) présentes à l’adresse https://install.pivpn.io ; l’option -L indique que si l’adresse mentionnée indique que la localisation du contenu a évolué, nous devons réémettre la commande curl vers la nouvelles adresse,
  • bash lance l’exécution d’un programme,
  • le symbole « | » présent entre les deux commandes indique que le résultat du premier doit être transmis au second ; en d’autres termes, la commande pourrait être en français : va chercher le contenu de la page https://install.pivpn.io et lance l’exécution de ce programme.

Cette exécution installe un certain nombre de paquets applicatifs et ouvre l’écran suivant :

Nous validons en tapant sur Entrée. Le message suivant nous informe que nous avons besoin d’une adresse IP statique ; c’est la raison pour laquelle nous avons utilisé, si nécessaire, les services d’un DNS dynamique dans la première partie de cet article.

Nous activons ensuite l’utilisation d’IPv6 conformément à la recommandation, même si nous ne l’utilisons pas.

L’écran suivant nous invite à fixer l’adresse IP interne de notre serveur. Cela nous amène à une nouvelle explication : nous disposons de deux types d’adresses IP

  • une adresse dite « publique », qui sert à accéder de l’extérieur à notre réseau local, on peut la comparer à une adresse postale,
  • une adresse dite « privée », qui sert à aiguiller le trafic vers l’un ou l’autre des appareils au sein de notre réseau local, c’est un peu comme la mention du nom du destinataire sur une adresse postale.

L’adresse publique est celle de votre routeur, ou « box » ; c’est la box qui reçoit les flux de l’extérieur et les route vers l’appareil concerné. Pour que le VPN fonctionne, il faudra indiquer à la box vers quel appareil doivent être routés les flux du VPN, et cette indication va être faite sur la base de l’adresse IP de notre Raspberry Pi. Nous allons donc mettre en place une adresse IP statique, en répondant No à la question suivante. Nous allons également noter l’adresse IP que nous avons ainsi définie (ici 192.168.1.117).

Et vous allons choisir Yes pour valider l’adresse proposée par PiVPN, puis pour la prise en compte de l’avertissement.

Nous allons ensuite choisir l’utilisateur qui va administrer le VPN.

Et nous allons enfin choisir l’installation de Wireguard comme notre VPN.

Wireguard utilise en standard le port 51820. Nous n’avons pas de raison de changer de port.

Et nous confirmons ce choix en sélectionnant à nouveau Yes.

Enfin, l’assistant nous demande de choisir un DNS. Vous pouvez choisir celui que vous souhaitez dans la liste. Sachez toutefois que si vous naviguez sur internet à travers le VPN, le DNS que vous aurez choisi verra passer toutes les adresses des sites sur lesquels vous allez vous connecter. Si vous suivez cet article pour éviter de fournir des traces à Google, vous éviterez de choisir Google comme DNS. Parmi les choix proposés, certains sont respectueux de votre confidentialité. C’est le cas notamment de Quad9, que je vous invite à choisir.

Pour la boîte de dialogue suivante, votre réponse sera :

  • l’utilisation de l’adresse IP si vous bénéficiez d’une adresse fixe,
  • l’utilisation du DNS si vous vous appuyez sur les services d’un DNS dynamique comme mentionné au début de cet article.

J’ai théoriquement une adresse IP dynamique, mais sur les six dernières années, elle n’a pas changé une seule fois. Je considère donc qu’elle est statique et je l’utilise comme point d’entrée de mon réseau.

PiVPN nous indique que les clés vont être générées. Il nous recommande ensuite la mise en place des mises à jour automatiques (unattended upgrades), et nous validons leur mise en place.

Sur ce sujet, les experts en sécurité sont partagés :

  • d’une part, il est souhaitable de disposer toujours de la version la plus à jour de l’ensemble des composants de son système, ou a minima des mises à jour de sécurité (ce qui est proposé ici), afin d’être protégé des menaces les plus récemment découvertes,
  • d’autre part, certains experts recommandent d’analyser les mises à jour avant de les installer ; pour notre part nous n’en avons ni la compétence ni la réelle nécessité.

Nous sommes arrivés au terme de l’installation de PiVPN.

Nous allons redémarrer notre Raspberry Pi et créer les accès pour les membres de notre famille.

Après avoir validé le redémarrage, nous sommes déconnectés et devons nous reconnecter.

La création des accès

ssh -p 2345 k-sper.fr@raspberrypi.local

Nous allons créer notre premier accès, pour nous-même lorsque nous sommes en déplacement :

pivpn add

Nous disposons d’un accès pour k-sper.fr. Le fichier de configuration de cet accès est disponible à l’adresse /home/k-sper.fr/configs/k-sper.fr.conf. Regardons comment ce fichier est construit :

sudo nano /home/k-sper.fr/configs/k-sper.fr.conf

Nous voyons ici :

  • pour le client (Interface)
    • une clé privée (selon le même mode de fonctionnement que nous avons mis en place pour nous connecter localement en toute sécurité à notre Pi),
    • une adresse IP qui sera affectée à notre poste client,
    • les adresses de notre serveur DNS (vous voyez ici les adresses des serveurs de Quad9),
  • pour le serveur (Peer)
    • la clé publique qu’il utilisera,
    • une clé prépartagée entre le client et le serveur,
    • l’adresse IP publique du serveur (endpoint) ainsi que le port utilisé,
    • la liste des adresses IP autorisées à la connexion (0.0.0.0/0 et ::0/0 signifie que toutes les adresses sont autorisées, le contrôle s’effectuant sur l’échange des clés).

Nous allons maintenant sur le terminal que nous allons utiliser comme client et lui donnons cette configuration. Pour les téléphones « intelligents », nous pouvons installer l’application Wireguard sur notre magasin d’application et flasher le résultat de la commande suivante :

pivpn -qr

De cette manière, notre téléphone est immédiatement prêt sans aucune saisie.

S’agissant d’un ordinateur, nous pouvons télécharger l’application Wireguard à l’adresse https://www.wireguard.com/install/

Nous copions le fichier de configuration sur notre ordinateur grâce à la commande scp, sur le poste concerné, s’il a accès au Pi en SSH.

scp -P 2345 k-sper.fr@raspberrypi.local://home/k-sper.fr/configs/k-sper.fr.conf .

La commande scp (secure copy) permet d’effectuer la copie d’un fichier par le biais d’une connexion SSH. Attention : ici, le port est indiqué par l’option -P majuscule car le -p minuscule a une autre fonction.

Il est à noter que la commande scp fonctionne de manière similaire sur Windows et Linux, ce qui me permet de vous la présenter ici sans tenir compte de votre système d’exploitation.

Nous pouvons maintenant ouvrir l’application et cliquer sur Importer le tunnel à partir du fichier.

Et choisir notre fichier k-sper.fr.conf. Notre connexion est presque prête : il ne nous reste plus qu’à paramétrer notre box.

Paramétrer notre box

Nous devons maintenant procéder à une manipulation de notre box afin de router les flux de Wireguard vers notre Raspberry Pi. Nous allons donc aller sur l’interface d’administration de la box. En France, il s’agit généralement de l’adresse 192.168.1.1 à saisir dans votre navigateur internet. Là, nous allons procéder à deux opérations :

  • vous vous rappelez que Wireguard nous a indiqué qu’il était souhaitable que notre Pi bénéficie d’une adresse IP statique au sein de notre réseau ; nous allons donc indiquer à notre box de lui fournir une adresse statique,
  • et nous allons router les flux Wireguard vers notre Pi.

Pour cela, nous nous identifions en tant qu’administrateur et allons chercher l’adresse MAC de notre Raspberry Pi : nous cherchons la liste des postes connectés à notre réseau local ; nous devrions trouver la mention raspberrypi dans la colonne nom d’hôte. Attention : si vous avez donné un autre nom à votre Pi, vous devez chercher ce nom. En face doit figurer un numéro de type 12:34:56:78:90:ab. Il s’agit de l’adresse MAC de notre Raspberry Pi. Cette adresse est théoriquement unique pour chaque matériel. Nous la copions ou la notons et nous dirigeons vers les paramètres de DHCP IPv4.

Dans les paramètres DHCP, nous allons dans la partie Adresses statiques et saisissons l’adresse MAC de notre Raspberry Pi et en face l’adresse IP que nous avions notée lors de l’installation de Wireguard. Ainsi, notre Pi aura une adresse IP statique.

Nous nous dirigeons ensuite vers le paramétrage NAT. Les règles NAT sont les règles selon lesquelles un flux entrant dans notre réseau local sera routé vers un appareil donné, ici notre Raspberry Pi.

Dans les règles NAT, nous ouvrons pour Wireguard le port TCP 51820 de la box, que nous routons vers l’adresse de notre Raspberry Pi sur le même port (51820).

Une fois ces paramétrages validés, nous pouvons accéder à notre Raspberry Pi de n’importe où dès lors que nous bénéficions d’une connexion internet.


Si vous avez apprécié cet article, n’hésitez pas à laisser à son auteur un petit commentaire : il l’encouragera à le maintenir et à le développer.


Commentaires

Laisser un commentaire

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