WireGuard : outils et fichiers de configuration

2020-03-22

Couverture de l'article

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.

un précédent article

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 :

Schémas de nos machines

--------------------------------------------------------------------------------

📝️ 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

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. 😉️

--------------------------------------------------------------------------------

Configuration du serveur

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... 🦄️

--------------------------------------------------------------------------------

Configuration du client

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.

Appliquer la configuration

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.

Linux : manuellement avec wg-quick

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.

--------------------------------------------------------------------------------

Linux : au démarrage de la machine avec systemd

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).

--------------------------------------------------------------------------------

Linux : NetworkManager

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

Windows et MacOS

Pour Windows et MacOS, commencez par télécharger et installer le client WireGuard adapté à votre OS :

par ici pour Windows

par là pour MacOS

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

Android et iOS

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.

depuis le Google Play Store

depuis l'Apple App Store

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.

Le mot de la fin

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 ! 🙂️

--------------------------------------------------------------------------------

🏠 Accueil