Se connecter à un serveur VPN Wireguard avec NetworkManager

2020/12/28

Categories: logiciel Tags: wireguard networkmanager linux

Wireguard est un protocole de communication permettant de créer des réseaux VPN. Il se veut plus rapide et plus moderne que son concurrent OpenVPN. OpenVPN garde une longueur d’avance non négligeable puisque la quasi-totalité des VPNs commerciaux l’utilise.

Même si Wireguard a encore du chemin à parcourir, il commence à prendre une certaine envergure : en effet, Wireguard est intégré dans le noyau Linux depuis la version 5.6, ce qui facilite sa démocratisation.

L’installation d’un serveur Wireguard sous Linux est très facile, la seule difficulté reste dans la connexion en tant que client. Sous Linux certains gestionnaires de connexions ne gérent pas encore très bien Wireguard.

C’est le cas de NetworkManager, l’un des gestionnaires de connexion les plus utilisés (utilisé par Debian, Ubuntu, Fedora entre autres). Bien que disposant d’une compatibilité native avec Wireguard, NetworkManager ne permet pas encore de configurer un client Wireguard depuis son interface graphique.

Il est possible de gérer une connexion Wireguard depuis NetworkManager en ligne de commande, mais la configuration est assez complexe. Ce tutoriel utilise une autre méthode, plus simple : la connexion Wireguard sera gérée par l’utilitaire officiel wg-quick, et NetworkManager sera configuré de tel sorte qu’il n’y ait pas de conflit entre les deux.

La procédure présentée a été testée sous Archlinux, mais elle devrait fonctionner sur toutes les distributions utilisant NetworkManager.

Installation d’un serveur Wireguard

Il existe plusieurs manières d’installer Wireguard sur un serveur, j’utilise personnellement ce script : https://github.com/angristan/wireguard-install.

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
./wireguard-install.sh

Il suffira ensuite de copier le certificat créé sur le client avec scp par exemple.

Paquets nécessaires

Passons maintenant à la configuration du client. Sous Archlinux, les paquets nécessaires sont :

Le nom des paquets peut être différent sur d’autres distributions. Il peut aussi être nécessaire d’installer le module wireguard-dkms si la version du noyau Linux est inférieure à 5.6.

Configurer NetworkManager

Nous allons d’abord configurer NetworkManager. Il suffit de créer deux fichiers de configuration dans le dossier /etc/NetworkManager/conf.d avec le contenu suivant :

# /etc/NetworkManager/conf.d/no-systemd-resolved.conf
[main]
systemd-resolved=false
# /etc/NetworkManager/conf.d/unmanaged.conf
[keyfile]
unmanaged-devices=interface-name:wg*

Le premier fichier de configuration désactive l’utilisation de systemd-resolved comme résolveur DNS. Wireguard pourra utiliser et modifier la configuration de systemd-resolved sans affecter le bon fonctionnement de NetworkManager.

Le deuxième fichier de configuration désactive la gestion des interfaces créées par Wireguard, plus précisement celles dont le nom commence par les lettres wg.

Lancer systemd-resolved et relancer NetworkManager

sudo systemctl enable --now systemd-resolved
sudo systemctl restart NetworkManager

Se connecter au serveur Wireguard

Une fois les services systemd-resolved et NetworkManager actifs, il sera possible d’activer Wireguard. Le certificat précédemment créé devra être placé dans le dossier /etc/wireguard. On active ensuite la connexion à Wireguard grâce à l’utilitaire wg-quick.

sudo cp wg1.conf /etc/wireguard/wg1.conf
sudo wg-quick up wg1

Et voilà, vous devriez être connecté en tant que client à votre serveur Wireguard !

Enfin, pour se déconnecter de Wireguard et revenir à la configuration initiale:

sudo wg-quick down wg1
>> Home