Wireguard est le système de VPN qui a le vent en poupe. Il est plus rapide et plus simple qu’OpenVPN pour monter un VPN facilement. Les tutos d’installation de Wireguard sont très nombreux sur le net et lorsqu’on a un VPN gratuit, ça peut être sympa d’en faire profiter !
Wireguard a des applications clientes pour tout : PC, Mac, iOs, Android, …
Sil l’installation de Wireguard est simple, sa configuration et la gestion des clients qui vont se connecter au VPN nécessite un peu plus d’ajustements.
Cet article a pour objet de détailler la configuration (automatisée) de Wireguard et la gestion des utilisateurs en utilisant un script open source wgconf que j’ai écrit.
Ce script a pour objet de simplifier l’ensemble des opérations.
Pré-requis
Il faut :
- disposer d’un petit serveur Linux (avec un bail statique) et d’un accès fibre optique : c’est indispensable pour avoir un débit correct
- avoir une adresse IPv4 fixe
- pouvoir se connecter “root”
- ouvrir le port Wireguard sur votre box (par défaut 51820) pour le rediriger vers le serveur Linux qui héberge Wireguard
Le script n’a été testé que sous Ubuntu 20.04. La compatibilité avec les autres OS sera documentée au fur et à mesure des retours utilisateurs sur la page GitHub :
https://github.com/mikmer62/wgconf
Installation de Wireguard
L’installation de Wireguard est très simple. La page d’installation décrit le process pour toutes les plateformes.
Consulter la page d’installation Wireguard.
Les commandes d’installation de paquets ci-dessous doivent être adaptées pour votre distribution Linux.
En premier lieu, commencer par les commandes traditionnelles de mise à jour système, puis installez Wireguard :
apt update
apt upgrade
apt install wireguard
Installation des paquets complémentaires
Puis il faut installer deux paquets complémentaires :
apt install linux-headers
apt install qrencodea
Wireguard permet d’ajouter un tunnel sur un client (en particulier mobile) à partir d’un QRCode. On va utiliser cette fonctionnalité.
Configuration Wireguard
C’est à partir de là qu’il est intéressant de simplifier la configuration et la gestion en utilisant le script que j’ai écrit à cet effet.
Le script est décrit plus précisément sur GitHub :
https://github.com/mikmer62/wgconf
Il faut ensuite créer le répertoire avec lequel on va travailler avec Wireguard. Par convention, on utilise /etc/wireguard.
mkdir /etc/wireguard
Télécharger le script de configuration et de gestion des utilisateurs (wgconf) dans le répertoire wireguard.
cd /etc/wireguard
wget https://raw.githubusercontent.com/mikmer62/wgconf/master/wgconf
chmod +x wgconf
Ajouter /etc/wireguard dans la variable PATH :
export PATH=$PATH:/etc/wireguard
Pour l’ajouter définitivement :
Aller dans le répertoire d'accueil root:
cd
puis ajouter à la fin du fichier .bashrc :
PATH=$PATH:/etc/wireguard
Revenir dans le répertoire wireguard :
cd /etc/wireguard
Initialisation du serveur VPN Wireguard
Il faut commencer par initialiser le serveur VPN Wireguard :
wgconf init
Cette opération va proposer des valeurs par défaut pour la configuration.
Il suffit de taper “Entrée” pour chaque valeur proposée. A l’issue de cette commande, seront créés dans /etc/wireguard :
Les fichiers :
- wgconf.params qui contient les paramètres système de configuration du serveur VPN
- wg0.conf qui contiendra la définition du serveur et des clients Wireguard
Les répertoires :
- /etc/wireguard/keys qui contiendra les clés privées et publiques du serveur et des clients
- /etc/wireguard/conf qui contiendra les fichiers de configuration des clients
- /etc/wireguard/qrcode qui contiendra les qrcodes des clients en format jpg
Aide sur les commandes wgconf
Pour obtenir la liste des commandes wgconf, il suffit de taper :
wgconf ?
Ajout d’un nouveau client
Pour ajouter un nouveau client, il suffit de taper :
wgconf addcli nom_du_client
Le nom du client ne doit pas contenir d’espace. Après la création du client, le qrcode du nouveau client s’affiche.
Le nombre de clients est limité à 254. Sur un VPN personnel, ça semble raisonnable !
Les fichiers suivants seront créés :
- /etc/wireguard/keys/nom_du_client_private_key
- /etc/wireguard/keys/nom_du_client_public_key
- /etc/wireguard/conf/nom_du_client.conf
- /etc/wireguard/qrcode/nom_du_client.jpg
Le fichier /etc/wireguard/wg0.conf sera mis à jour avec le nouveau client.
Suppression d’un client
Il est possible de supprimer un client en tapant :
wgconf delcli nom_du_client
Tous les fichiers associés (clés, configuration, qrcode) seront supprimés et l’adresse IP de ce client sera réutilisée pour un autre client.
Le client sera supprimé du fichier /etc/wireguard/wg0.conf et évidemment, le client ne pourra plus utiliser le VPN.
Liste des clients
On peut obtenir la liste des clients gérés en tapant :
wgconf listcli
ou
wgconf listcli byip
La liste affiche le nom et l’adresse IP au sein du VPN des clients. Avec l’option “byip”, la liste est triée sur les adresses internes du VPN.
Liste des clés privées et publiques
On peut obtenir la liste des clés privées et publiques du serveur VPN (wgserver) et des clients en tapant :
wgconf listkeys
Attention, ces clés permettent d’effectuer le cryptage et ne doivent pas être révélées en dehors des qrcodes et des fichiers de configuration.
Affichage d’un fichier de configuration client
Pour mémoire, le fichier de configuration du client se trouve dans le répertoire conf :
/etc/wireguard/conf/nom_du_client.conf
Il est possible d’afficher le contenu de ce fichier en tapant :
wgconf showcli nom_du_client
Affichage d’un qrcode client
Pour mémoire, le qrcode du client se trouve dans le répertoire qrcode :
/etc/wireguard/qrcode/nom_du_client.jpg
Il est possible de l’afficher à l’écran en tapant :
wgconf showqrcode nom_du_client
Envoi des fichiers de configuration par mél
Cette option nécessite :
- que le package postfix soit installé et configuré (pour sendconf) et que le package uudeview soit installé
- ou que le package mutt soit installé et configuré (pour sendconf2 qui utilise mutt)
ou de modifier le script pour l’utilisation d’un autre client mail).
Pour envoyer les fichiers de configuration:
- en utilisant sendmail, taper :
wgconf sendmail nom_du_client [email protected]
- en utilisant mutt :
wgconf mutt nom_du_client [email protected]
Le fichier nom_du_client.conf et le QRCode nom_du_client.jpg sont envoyés en pièces jointes à l’adresse mail spécifiée.
Suppression de la configuration complète
wgconf permet enfin de supprimer tous les fichiers de configuration et d’arrêter le serveur Wireguard avec la commande :
wgconf raz
Cette commande supprime définitivement le fichier de paramètres système et tous les fichiers clients. Elle arrête également Wireguard.
Elle ne doit être utilisée qu’en connaissance de cause !
Conclusion
Ce script permet de simplifier considérablement la gestion du VPN Wireguard.
Un scénario type de mise en place est le suivant :
wgconf init
wgconf addcli Patrick_iphone
wgconf addcli Patrick_ipad
wgconf addcli Louise_pcportable
wgconf addcli Sonia_samsung
wgconf addcli Sonia_imac
Puis Patrick vend son ipad donc on désactive le client :
wgconf delcli Patrick_ipad
Sonia a perdu par mégarde son fichier de configuration pour son samsung :
wgconf showcli Sonia_samsung
ou
wgconf showqrcode Sonia_samsung
Et si mutt est installé sur votre Linux, pour envoyer les fichiers de configuration (fichier .conf + qrcode en jpg) pour son Samsung à Sonia :
sendconf Sonia_samsung [email protected]
Pour consulter les clients VPN alloués :
wgconf listcli byip
Plutôt simple non ?