2020-03-22
Je vous ai montré dans un précédent article comment configurer WireGuard entièrement à la main sous Linux. Cette fois je vais vous montrer les fichiers de configurations et les outils pour faciliter sa mise en œuvre, aussi bien sous Linux que sous Windows, MacOS, Android ou iOS.
Cette fois encore on va partir sur un setup simplifié (le même que l'article précédent en fait) mais en utilisant des fichiers de configuration. Ça sera donc encore plus simple ! 😁️
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
Cet article fait partie d'une série sur le VPN WireGuard :
WireGuard : découverte d'un VPN moderne, simple et multiplateforme
WireGuard : outils et fichiers de configuration
WireGuard : Configuration d'un VPN / NAT simple
--------------------------------------------------------------------------------
Pour rappel, on dispose :
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
NOTE : Comme il s'agit de la suite de l'article précédent, je ne vous reparlerais pas ici de la génération des clefs. On va supposer que vous êtes déjà en possession des clefs que l'on avait générées précédemment.
--------------------------------------------------------------------------------
Les fichiers de configuration de WireGuard utilisent une syntaxe semblable à celle des fichiers .ini utilisés par Windows ou par le module ConfigParser de Python. Dans ces fichiers, qui sont les mêmes pour tout le monde, que ce soit les « serveurs » ou les « clients », on retrouve une section [Interface] qui contient la configuration de la machine courante, et une ou plusieurs sections [Peer] qui contiennent les configurations relatives aux machines avec lesquelles on va interagir.
Puisqu'un exemple vaut mieux qu'un long discourt, voici un exemple de fichier de configuration :
[Interface] # Configuration relative à la machine configurée # avec le présent fichier [Peer] # Informations sur une machine tierce [Peer] # Informations sur une autre machine tierce
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
NOTE : Comme dans l'article précédent, il convient de garder les fichiers de configuration en sécurité comme ils vont entre autres contenir votre clef privée. Les outils vous le feront d'ailleurs savoir s'ils jugent que vos fichiers ne sont pas bien sécurisés :
Warning: `/home/fabien/wg0.conf' is world accessible
Vous pouvez arranger ça en rendant le fichier lisible uniquement par votre utilisateur, ce qui peut se faire de la manière suivante sous Linux :
chmod 600 ./wg0.conf
Après, ce n'est pas la peine de vous prendre la tête avec ça tant que vous faites des tests, mais pensez à corriger le tir en production. 😉️
--------------------------------------------------------------------------------
Voici la transposition de la configuration de notre machine serveur de l'article précédent sous forme de fichier de configuration :
# ==== Configurations du serveur en lui-même ==== [Interface] # Adresse IP du serveur à l'intérieur du VPN Address = 10.8.8.254/24 # Clef privée du serveur PrivateKey = aE5ovKfa3vE9ujI9BI1UnQR744oH+0fDaQDxEnHRL00= # Port sur lequel le serveur écoute ListenPort = 51820 # ==== Configuration liée au client ==== [Peer] # Clef publique du client PublicKey = wGDWnA+bj15JxOUUlA0SCUP9CcCqUMJKyidhu+ufLHk= # Adresse IP que le client peut utiliser à l'intérieur du VPN AllowedIPs = 10.8.8.1/32 # ==== Configuration pour un second client ==== # [Peer] # ...
On peut enregistrer ce fichier sous le nom wg0.conf sur la machine serveur et on passe à la configuration du client (on verra par la suite comment appliquer cette configuration).
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
NOTE : Le fichier doit impérativement être nommé <trucmuche>.conf, où <trucmuche> est un nom d'interface réseau valide sur le système. Les outils que nous allons utiliser par la suite vont en effet se servir de ce nom pour créer l'interface réseau.
Donc si on nomme le fichier wg0.conf, l'interface s'appellera wg0 et si on nomme le fichier punk-unicorn.conf, l'interface réseau s'appellera punk-unicorn... 🦄️
--------------------------------------------------------------------------------
La configuration du client est là encore assez simple :
# ==== Configurations du client en lui-même ==== [Interface] # Adresse IP du client à l'intérieur du VPN Address = 10.8.8.1/24 # Clef privée du client PrivateKey = cLc9zpU1WD7CkYyPBjajlsTijqMCEAiXux7g8Nc29Fg= # ==== Configuration liée au serveur ==== [Peer] # Clef publique du du serveur PublicKey = 0Pi1sWdM58zh4tWu15RKN8/RNePatcTwz/xntVAM/1k= # Adresse et port du serveur Endpoint = vpn.example.org:51820 # Range d'adresses IP qui doivent être routées à travers le VPN AllowedIPs = 10.8.8.0/24 # Et pour finir, le keepalive pour éviter d'avoir des soucis # si le client se trouve derrière un routeur NAT PersistentKeepalive = 25
Ici encore on peut enregistrer le fichier sous le nom wg0.conf sur la machine cliente.
Les configurations que l'on vient d'écrire s'appliquent de la même façon pour le client et le serveur, et dépendent de l'OS utilisé. Voici quelques manières de le faire pour les systèmes courants.
Pour commencer, assurez-vous d'avoir bien installé WireGuard comme présenté dans l'article précédent.
Ensuite c'est assez simple, il suffit d'exécuter la commande suivante pour activer le VPN :
wg-quick up ./wg0.conf
et pour le désactiver, utilisez cette commande-ci :
wg-quick down ./wg0.conf
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
NOTE : Notez bien le ./ devant le nom du fichier. Il est important de donner un paramètre qui ressemble à un chemin de fichier, sinon wg-quick va aller chercher un fichier de configuration qui porte le nom que vous avez donné dans /etc/wireguard/ au lieu du répertoire courant.
--------------------------------------------------------------------------------
Si votre distribution utilise systemd, il vous est possible d'utiliser ce dernier pour lancer automatiquement vos tunnels au démarrage de la machine (c'est notamment très pratique pour le serveur !).
Pour ce faire, commencez par créer le dossier /etc/wireguard/ et restreignez son accès pour plus de sécurité :
sudo mkdir -p /etc/wireguard/ sudo chmod 700 /etc/wireguard
Ensuite, placez-y votre fichier de configuration :
sudo cp ./wg0.conf /etc/wireguard/
Vous pouvez dès à présent démarrer le VPN en utilisant la commande :
sudo systemctl start wg-quick@wg0
Et le désactiver avec la commande :
sudo systemctl stop wg-quick@wg0
Pour le lancer automatiquement au démarrage, il suffit d'activer le service avec la commande suivante :
sudo systemctl enable wg-quick@wg0
Et pour supprimer le démarrage automatique :
sudo systemctl disable wg-quick@wg0
--------------------------------------------------------------------------------
📝️ Note:
--------------------------------------------------------------------------------
NOTE : Le nom du service est composé de wg-quick@ suivi du nom du fichier de configuration que vous avez placé dans /etc/wireguard/, sans l'extension (.conf).
--------------------------------------------------------------------------------
NetworkManager est le principal framework de configuration réseau utilisé sur les machines desktop sous Linux (celles que l'on utilise au quotidien avec des interfaces graphiques). C'est lui que vous utilisez lorsque vous configurez le réseau via une interface graphique depuis les paramètres de GNOME, de KDE, et de la plupart des environnements de bureau.
NetworkManager supporte WireGuard depuis quelque temps maintenant, il est donc possible de lui importer un fichier de configuration... Cependant les interfaces graphiques ne sont pas encore disponibles pour cela dans les environnements de bureau (mais ça finira bien par arriver 😉️).
Je ne vais donc pas vous expliquer le fonctionnement de WireGuard avec NetworkManager ici, mais je vous redirige vers cet excellent article de Thomas Haller (en anglais) qui traite en profondeur du sujet. 😁️
cet excellent article de Thomas Haller
Pour Windows et MacOS, commencez par télécharger et installer le client WireGuard adapté à votre OS :
Ensuite, lancez-le si ce n'est pas déjà fait, puis importez simplement votre fichier de configuration en cliquant sur le gros bouton « Import tunnel(s) from file » qui se trouve en plein milieu de l'interface :
Interface graphique de WireGuard sous Windows
Interface graphique de WireGuard sous MacOS
Vous êtes à présent en mesure d'activer et de désactiver le tunnel via le bouton Activate.
Si vous fermez la fenêtre, le VPN restera bien sûr actif. Pour vérifier l'état de votre tunnel VPN ou rouvrir l'interface, vous retrouverez l'icône de WireGuard dans votre barre de notification :
Icône de WireGuard dans la zone de notification sous Windows et MacOS
Il est évidemment possible de se connecter à un tunnel VPN WireGuard depuis les principaux OS mobiles, à savoir Android et iOS. Pour cela il vous faut installer l'application officielle depuis le Google Play Store pour Android, et depuis l'Apple App Store pour iOS.
Ensuite la configuration est extrêmement simple, on peut soit rentrer toute la configuration manuellement, soit on l'importe depuis un fichier, soit on utilise un QR Code :
Interface de WireGuard sous Android
Si vous choisissez de remplir tout à la main, les paramètres demandés sont ceux que l'on peut retrouver dans le fichier de configuration. Je ne vous détaille pas cette méthode ici, par ce que personnellement je n'ai pas du tout envie d'aller recopier les configurations et les clefs manuellement sur un téléphone portable ou une tablette, et je pense que pour vous c'est pareil... 😜️
La seconde option est donc d'importer le fichier de configuration que l'on avait précédemment créé... je ne pense pas qu'il y ai besoin de plus d'explication là non plus... 😁️
Et enfin la solution que je préfère : importer la configuration via un QR Code ! Pour utiliser cette méthode, il faut commencer... par créer le QR Code. Mais encore faut-il savoir ce qu'on y met. Eh bien c'est assez simple : on y met tout le contenu du fichier de config.
Je vais vous donner ci-dessous la méthode pour créer le QR Code en ligne de commande sous Linux, mais il devrait être possible de le générer depuis les autres systèmes d'exploitation également, je vous laisse chercher. 😉️
Donc pour générer le QR Code sous Linux, il nous faut commencer par installer un logiciel tel que qrencode. Il devrait être disponible sur la plupart des distributions. Pour l'installer sous Ubuntu, Debian et leurs innombrables dérivés, il vous faudra utiliser la commande suivante :
sudo apt install qrencode
Ensuite, pour générer le QR Code, il suffit d'exécuter la commande suivante :
qrencode -o mon-qrcode-wireguard.png < ./wg0.conf
Où ./wg0.conf est le fichier contenant votre configuration pour WireGuard.
Malgré le fait que cet article soit un peu long à cause de la multiplication des explications pour les différents systèmes d'exploitation, on peut quand même se rendre compte, cette fois encore, de la simplicité de WireGuard. Il permet de mettre très rapidement en place un VPN et de s'y connecter facilement depuis n'importe quelle plateforme courante. Personnellement, j'apprécie tout particulièrement la configuration par QR Code sur les clients mobile.
C'est tout pour cette fois, mais je vous retrouve bientôt pour un nouvel article qui traitera cette fois d'un cas pratique : le VPN NAT (yeah, fini la théorie !). Bonne semaine à tous ! 🙂️
--------------------------------------------------------------------------------