WireGuard : installer et configurer un serveur VPN Linux et client (Windows, Android, Ubuntu)

Bloqueur de pub détectée - Vous bloquez l'affichage des publicités.
Pour soutenir le site, merci de bien vouloir laisser les publicités s'afficher.

Plus d'informations : Comment désactiver les bloqueurs de publicité sur un site internet.

WireGuard est un logiciel open source relativement nouveau pour créer des tunnels VPN sur la couche IP en utilisant une cryptographie de pointe.
Ce dernier est réputé plus rapide qu'OpenVPN.
Par exemple NordVPN a migré son infrastructure OpenVPN vers une version modifiée de WireGuard.

On peut l'utiliser pour :

  • Télétravail afin de rendre l'accès à un réseau LAN d'une entreprise
  • Pour un serveur VPN privé pour masquer son adresse IP. Cela inclut aussi l'utilisation de pihole pour bloquer les pubs et trackers.

Voici comment installer et configurer un serveur Wireguard sur un Linux (Debian).
Enfin comment installer les clients Windows, Linux et Android.

WireGuard : installer et configurer un serveur VPN Linux et client (Windows, Android, Ubuntu)
WireGuard : installer et configurer un serveur VPN Linux et client (Windows, Android, Ubuntu)

Présentation de WireGuard

WireGuard est un serveur VPN récent qui utilise les algorithmes de chiffrement suivant :

  • ChaCha20 pour le cryptage symétrique, authentifié avec Poly1305, en utilisant la construction AEAD de RFC7539
  • Curve25519 pour ECDH
  • BLAKE2s pour le hachage et le hachage par clé
  • SipHash24 pour les clés de hachage
  • HKDF pour la dérivation de clé, comme décrit dans RFC5869

Comme je l'ai dit dans l'introduction, WireGuard est réputé pour être plus rapide.
Du moins c'est ce que le projet libre indique.
Si on s'en tient à ce comparatif WireGuard, OpenVPN et IPSec, on voit bien qu'il est bien devant.

WireGuard VS OpenVPN VS IPsec

Installer le serveur VPN WireGuard

Wireguard permet donc une connexion VPN entre un client et un serveur cela à travers un tunnel sécurisé.
C'est le principe des VPN.

Pour ce faire, le client et serveur créé un coupe de clés privés et publics.
Puis on échange les clés publiques entre le client et le serveur afin que l'on puisse chiffre et déchiffrer les données.
C'est le principe des algorithmes de chiffrement asymétriques.

Il n'y a pas de prérequis particulier, si vous devez faire un partage de connexion via le VPN, pensez à activer le forward des interfaces :

sysctl -w net.ipv4.ip_forward = 1
sysctl -w net.ipv6.conf.all.forwarding = 1

Installer les paquets et générer la clé privée et publique

On commence par installer les paquets wireguard avec apt-get :

apt-get install wireguard wireguard-tools net-tools linux-headers-`uname -r`
Installer les paquets Linux WireGuard

Puis on génère les clés publiques et privées du serveur WireGuard.

cd /etc/wireguard/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey
Générer la clé privée et publique du serveur VPN WireGuard
Le serveur WireGuard est installé et nous avons créé le couple de clé privée et publique. On peut passer à la configuration.

Créer le fichier de configuration

Ensuite on créé le fichier de configuration du serveur Wireguard.
Pour cela, créez le fichier /etc/wireguard/wg0.conf

## Set Up WireGuard VPN on Debian By Editing/Creating wg0.conf File ##
[Interface]
## My VPN server private IP address ##
Address = 192.168.10.1/24

## My VPN server port ##
ListenPort = 51194

## VPN server's private key i.e. /etc/wireguard/privatekey ##
PrivateKey = aXXXXXXXQ=

## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Voici quelques explications sur le contenu :

  • Address : spécifiez l'adresse IP privée du serveur VPN
  • SaveConfig : la configuration doit être sauvegardée à l'arrêt en utilisant l'état actuel de l'interface.
  • PrivateKey : La clé privée du serveur VPN, qui se trouve dans le fichier /etc/wireguard/server_private.key sur le serveur.
  • ListenPort : le serveur VPN WireGuard écoutera sur le port UDP 51194. Sinon le port par défaut est 51820.
  • PublicKey : La clé publique du client VPN, qui se trouve dans le fichier /etc/wireguard/client_public.key sur l'ordinateur client.
  • AllowedIPs : adresses IP que le client VPN est autorisé à utiliser. Dans cet exemple, le client ne peut utiliser que l'adresse IP 10.10.10.2 à l'intérieur du tunnel VPN.
  • PostUp et PostDown : permet de passer des commandes lors de la connexion et déconnexion d'un pair. Utile dans le cas d'un partage de connexion via le VPN.

Une fois le fichier de configuration du serveur Wireguard en place, on peut démarrer le service.

systemctl start [email protected]
Bravo ! vous avez réussi à installer le serveur WireGuard.

Erreur Cannot find device "wg0"

Dans mon cas, j'ai eu cette erreur qui indique qu'il ne peut trouver l'interface wg0.
Cela vient du fait que le module du noyau ne se charge pas.

Aug 09 18:50:43 ns3140199 systemd[1]: Starting WireGuard via wg-quick(8) for wg0…
Aug 09 18:50:43 ns3140199 wg-quick[14998]: [#] ip link add wg0 type wireguard
Aug 09 18:50:43 ns3140199 wg-quick[14998]: RTNETLINK answers: Operation not supported
Aug 09 18:50:43 ns3140199 wg-quick[14998]: Unable to access interface: Protocol not supported
Aug 09 18:50:43 ns3140199 wg-quick[14998]: [#] ip link delete dev wg0
Aug 09 18:50:43 ns3140199 wg-quick[14998]: Cannot find device "wg0"
Aug 09 18:50:43 ns3140199 systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAILURE
Aug 09 18:50:43 ns3140199 systemd[1]: [email protected]: Failed with result 'exit-code'.
Aug 09 18:50:43 ns3140199 systemd[1]: Failed to start WireGuard via wg-quick(8) for wg0.
[email protected]:/etc/wireguard# modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/4.19.0-8-amd64

Lors de la compilation, dans /var/lib/dkms/wireguard/1.0.20200712/build/make.log, on trouve ces erreurs :

make[3]: *** [/usr/src/linux-headers-4.19.0-8-common/scripts/Makefile.build:309: /var/lib/dkms/wireguard/1.0.20200712/build/socket.o] Error 1
make[3]: *** Waiting for unfinished jobs….
make[2]: *** [/usr/src/linux-headers-4.19.0-8-common/Makefile:1537: module/var/lib/dkms/wireguard/1.0.20200712/build] Error 2
make[1]: *** [Makefile:146: sub-make] Error 2
make: *** [Makefile:8: all] Error 2
make: Leaving directory '/usr/src/linux-headers-4.19.0-8-amd64'
[email protected]:/etc/wireguard# /usr/lib/dkms/dkms_autoinstaller start
[….] dkms: running auto installation service for kernel 4.19.0-8-amd64:
Kernel preparation unnecessary for this kernel. Skipping…

La solution sur Reddit

Résoudre l'Erreur Cannot find device "wg0" sur WireGuard

Installer le client VPN Wireguard

La partie serveur est prêt, on peut passer à l'installation des clients.
Il est compatible avec toutes les distributions Linux mais aussi pour Windows et Android.

La page de téléchargement Wireguard.

Télécharger le client WireGuard

Ensuite c'est très simple :

  • On installe le client
  • Puis on créé le fichier de configuration en indiquant l'IP du client à utiliser.
  • Enfin une clé publique est générique que l'on va ensuite autoriser sur le serveur

Voici un exemple de fichiers de configuration du client.

[Interface]
PrivateKey = aK9KmBHXXXX
Address = 192.168.10.2/32
DNS = 192.168.10.1

[Peer]
PublicKey = XXXXXjSX4CbXS0=
AllowedIPs = 0.0.0.0/0
Endpoint = 54.xx.xx.xx:51194
PersistentKeepalive = 20

Les explications :

  • Address: spécifiez l'adresse IP privée du client VPN. Mettez bien le masque /32.
  • DNS (optionnel) : spécifiez 192.168.10.1 (serveur VPN) comme serveur DNS.
  • PrivateKey: clé privée du client, qui se trouve dans le fichier /etc/ wireguard/privatekey sur l'ordinateur client.
  • PublicKey: clé publique du serveur, qui se trouve dans le fichier /etc/ wireguard/publickey sur le serveur.
  • AllowedIPs 0.0.0.0/0 représente l'ensemble de l'Internet, ce qui signifie que tout le trafic vers Internet doit être acheminé via le VPN. Sinon spécifier la classe d'IP du réseau VPN : ex 192.168.10.0/24
  • Endpoint (optionnel) : adresse IP publique et numéro de port du client
  • PersistentKeepalive: Envoyez un paquet vide authentifié au pair toutes les 25 secondes pour maintenir la connexion active. Si PersistentKeepalive n'est pas activé, le serveur VPN ne pourra peut-être pas envoyer une requête ping au client VPN.

Windows

Voici comment installer WireGuard sur Windows.

  • Télécharger puis installer le client WireGuard
  • Puis exécutez le
Installer et configurer le client WireGuard sur Windows
  • En bas à gauche, cliquez sur le bouton Ajouter un tunnel vide
Installer et configurer le client WireGuard sur Windows
  • Nommez le nom du tunnel
  • La clé privée et alors créée et directement intégré dans la section [Interface]
  • La clé publique du client apparaît alors en haut
  • Utilisez comme explique le fichier de configuration donné précédemment
  • Validez sur le bouton Enregistrer
Installer et configurer le client WireGuard sur Windows
  • Puis tentez une connexion au tunnel
Installer et configurer le client WireGuard sur Windows
Bravo ! vous avez réussi à installer WireGuard sur Windows.

Linux (Ubuntu)

Voici comment installer le client sur Linux, par exemple ici avec une Ubuntu.

  • Activer les dépôts wireguard puis utilisez apt-get pour l'installer
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get install wireguard resolvconf
Installer WireGuard en client sur Ubuntu
Installer WireGuard en client sur Ubuntu
Installer WireGuard en client sur Ubuntu

Puis on génère le couple de clés privées et publiques du client :

cd /etc/wireguard/
umask 077; wg genkey | tee privatekey | wg pubkey > publickey

Puis créez le fichier /etc/wg0.conf avec la configuration qui va bien :

Installer WireGuard en client sur Ubuntu

Puis un test de connexion pour voir que l'on a bien le trafic internet routé vers le VPN.

Installer WireGuard en client sur Ubuntu
Bravo ! vous avez réussi à installer WireGuard sur Linux.

Raspberry PI

Les paquets sur raspberrypi ne sont pas disponibles pour le moment.
Il faut activer les dépôts testing.
Cette manipulation ne sera plus nécessaire lors de la prochaine mise à jour de distribution qui devrait intégrer les paquets WireGuard par défaut.

Pour ce faire :

echo "deb http://archive.raspbian.org/raspbian testing main" | sudo tee --append /etc/apt/sources.list.d/testing.list
sudo apt update
sudo apt-get install wireguard

Puis le reste est identique à Linux.

Bravo ! vous avez réussi à installer WireGuard sur Raspberry PI.

Android

Enfin on termine avec l'insallation du client WireGuard sur Android.

  • Ouvrez le Playstore pour installer wireguard
Installer le client Wireguard sur Android
  • On lance le client Wireguard pour cliquer sur le bouton + en bleue afin de créer une connexion
Installer le client Wireguard sur Android
  • On peut alors créer un fichier de zéro ou importer depuis un autre fichier de configuration, c'est ce que j'ai fait ici.
Installer le client Wireguard sur Android
  • On modifie le fichier si besoin.. puis on lance la connexion.
Installer le client Wireguard sur Android
  • Donnez ensuite les autorisations qui vont bien à WireGuard
Installer le client Wireguard sur Android
  • Puis la connexion VPN s'établit sans problème.
Installer le client Wireguard sur Android
Bravo ! vous avez réussi à installer WireGuard sur Android.

Modifier le serveur WireGuard après l'installation des clients

Nous avons donc configuré les clients mais ce n'est pas fini.
En effet, il faut déclarer les peers sur le serveur.
Cela à travers des sections [Peer].

Pour éditer la configuration du serveur :

wg-quick down wg0 ; vim /etc/wireguard/wg0.conf  ; wg-quick up wg0

Puis on ajoute les sections [Peer] avec la clé publique du client et son adresse IP sur le réseau VPN.

[Interface]
Address = 192.168.10.1/24
SaveConfig = true
ListenPort = 51194
PrivateKey = aK9KmBHXXXX

[Peer]
PublicKey = wr5IFvffIZv1XYiyB9FxEEq04VbkJjXfMnz1wUYl6mk=
AllowedIPs = 192.168.10.5/32
Endpoint = 86.198.118.124:63321
PersistentKeepalive = 20

[Peer]
PublicKey = mkz7IULKW4L7x8ObviMV65SJe11aJOdPOF5esbLg/xM=
AllowedIPs = 192.168.10.6/32
PersistentKeepalive = 20

[Peer]
PublicKey = 6CFuuilD5PBgg7Y4X5SUwHTPUGCep+Ebmz1DLbtnN3o=
AllowedIPs = 192.168.10.7/32
PersistentKeepalive = 20

Au final, on obtient le fichier /etc/wireguard/wg0.conf suivant :

Le fichier de configuration du serveur WireGuard

Afin de bien comprendre les échanges de clés publiques.

Comprendre l'échange de clé entre le serveur et le client WireGuard

La commande wg et wg-quick

La commande wg-quick permet de monter et descendre l'interface du VPN Wireguard.

wg-quick down wg0
wg-quick up wg0

Mais on peut bien entendu utiliser systemctl puisque WireGuard fonctionne en tant que service et daemon :

systemctl restart [email protected]

La commande wg possède plusieurs options :

  • show : affiche la configuration actuelle et les informations sur l'appareil
  • showconf : affiche la configuration actuelle d'une interface WireGuard donnée, à utiliser avec `setconf '
  • set : modifier la configuration actuelle, ajouter des pairs, supprimer des pairs ou changer de pairs
  • setconf : applique un fichier de configuration à une interface WireGuard
  • addconf : ajoute un fichier de configuration à une interface WireGuard
  • syncconf : synchronise un fichier de configuration avec une interface WireGuard
  • genkey : génère une nouvelle clé privée et l'écrit dans stdout
  • genpsk : génère une nouvelle clé pré-partagée et l'écrit dans stdout
  • pubkey : lit une clé privée depuis stdin et écrit une clé publique sur stdout

Par exemple, la commande wg show sur le serveur permet de vérifier la configuration ainsi que les clients connectés.

Lorsqu'aucun client n'est connecté :

wg show
La commande wg show pour afficher la configuration du serveur et clients connectés

Avec des clients connectés :

La commande wg show pour afficher la configuration du serveur et clients connectés

Liens

Vous avez trouvé cet article utile et interressant, n'hésitez pas à le partager...

Trouver la solution sur le forum d'aide

Vous êtes arrivé au terme de l'article WireGuard : installer et configurer un serveur VPN Linux et client (Windows, Android, Ubuntu) mais vous n'avez pas trouvé la solution à votre problème...
Suivez ces articles du forum pour trouver une réponse ou demandez à votre tour de l'aide sur le forum