WireGuard est un protocole de réseau privé virtuel (VPN) moderne qui permet d’établir des con­nexions sé­cu­ri­sées et chiffrées entre des appareils. Grâce à une base de code simple et à hautes per­for­mances, il s’est imposé comme une al­ter­na­tive puissante et économe en res­sources aux anciens pro­to­coles VPN comme IPsec et OpenVPN. Dans cet article, vous découvrez ce qui distingue WireGuard des autres pro­to­coles VPN, comment il fonc­tionne et comment installer cette solution VPN WireGuard sur votre propre système.

Qu’est-ce que WireGuard ?

WireGuard est un protocole VPN open source utilisé pour établir des tunnels chiffrés entre des appareils. Les flux de données sont dirigés via ce tunnel et sont ainsi protégés contre tout accès non autorisé sur Internet. En plus d’un chif­fre­ment robuste, le protocole propose également des op­ti­mi­sa­tions pour les systèmes mobiles et l’Internet des objets (IoT). Le logiciel est publié sous licence libre GPLv2 et est dis­po­nible sur plusieurs pla­te­formes. WireGuard est écrit en C et en Golang et fonc­tionne sous Windows, macOS, BSD, iOS et Android.

Depuis 2020, il est di­rec­te­ment intégré au noyau Linux. Comme Linux est largement utilisé sur des milliards d’appareils connectés dans le monde, le protocole peut être utilisé pra­ti­que­ment partout. Grâce à sa con­fi­gu­ra­tion simple et à sa faible charge système, il est de plus en plus utilisé par des services VPN et des en­tre­prises.

Quelles fonc­tion­na­li­tés offre WireGuard ?

Une ca­rac­té­ris­tique centrale de WireGuard est le Cryptokey Routing. Dans ce procédé, les plages d’adresses IP au­to­ri­sées à l’intérieur d’un tunnel sont associées à la clé publique d’un par­te­naire de connexion. Les paquets entrants d’un par­te­naire sont dé­chif­frés à l’aide de sa clé publique. Un paquet entrant n’est délivré après dé­chif­fre­ment que s’il provient d’une adresse IP cor­res­pon­dant à la clé. Dans le cas contraire, le paquet est rejeté.

Con­trai­re­ment aux anciens pro­to­coles VPN comme IPsec et OpenVPN, WireGuard repose sur un ensemble fixe de pri­mi­tives de chif­fre­ment modernes, sans né­go­cia­tion. Alors que les pro­to­coles tra­di­tion­nels dé­fi­nis­sent les pa­ra­mètres de chif­fre­ment lors du handshake, le protocole s’appuie sur une com­bi­nai­son d’al­go­rithmes pré­dé­fi­nie et ver­sion­née. Si l’un de ces al­go­rithmes de chif­fre­ment est jugé obsolète ou vul­né­rable à l’avenir, une nouvelle version du protocole est publiée avec des al­go­rithmes mis à jour, ga­ran­tis­sant ainsi un niveau de sécurité élevé pour un VPN WireGuard.

Le protocole utilise des al­go­rithmes de chif­fre­ment modernes et hautement sécurisés, parmi lesquels :

  • Noise Protocol Framework pour les processus de handshake et d’échange de clés
  • Curve25519 pour un échange de clés sécurisé
  • ChaCha20 pour le chif­fre­ment sy­mé­trique
  • Poly1305 pour l’au­then­ti­fi­ca­tion
  • BLAKE2 pour une fonction de hachage rapide et sécurisée
  • SipHash24 pour la gé­né­ra­tion de hachages sécurisés
  • HKDF pour un processus de dé­ri­va­tion de clés sécurisé

Quels sont les avantages de WireGuard ?

WireGuard offre de nombreux avantages qui en font un choix pri­vi­lé­gié pour les con­nexions VPN modernes. Aperçu des prin­ci­paux atouts :

  • Base de code légère : avec seulement environ 4 000 lignes de code, le protocole dispose d’une base de code nettement plus réduite qu’OpenVPN ou IPsec (environ 100 000 à 600 000 lignes). Cette réduction rend le protocole plus sûr, car les bugs sont plus faciles à détecter, et plus économe en res­sources, puisqu’il nécessite moins de puissance de calcul.
  • Per­for­mances su­pé­rieures : grâce à une com­plexité réduite, WireGuard offre une vitesse de transfert plus élevée et une latence plus faible que de nombreux pro­to­coles con­cur­rents. Cela le rend idéal pour les ap­pli­ca­tions né­ces­si­tant une connexion rapide et stable, comme le streaming, le gaming en ligne et la vi­sio­con­fé­rence.
  • Ef­fi­ca­cité éner­gé­tique : WireGuard n’est actif que lorsqu’il y a réel­le­ment des données à trans­mettre. Cette économie d’énergie est par­ti­cu­liè­re­ment avan­ta­geuse pour les appareils mobiles, car elle prolonge l’autonomie de la batterie.
  • Prise en charge du roaming : WireGuard prend en charge la tran­si­tion fluide entre le Wi-Fi et les réseaux mobiles sans perte de connexion. Et si la connexion est tout de même in­ter­rom­pue, la re­con­nexion est gé­né­ra­le­ment plus rapide qu’avec d’autres pro­to­coles VPN.
  • Con­fi­gu­ra­tion simple : par rapport à d’autres pro­to­coles VPN, WireGuard ne nécessite pas de pa­ra­mé­trage manuel d’une multitude d’options de chif­fre­ment. Il utilise une con­fi­gu­ra­tion pré­dé­fi­nie, ac­ces­sible aussi bien aux uti­li­sa­teurs ex­pé­ri­men­tés qu’aux débutants.

Comment fonc­tionne WireGuard ?

WireGuard est un protocole VPN Peer-to-Peer dé­cen­tra­lisé, qui ne repose pas sur un serveur central obli­ga­toire. À la place, un tunnel peut être établi di­rec­te­ment entre deux appareils (« peers »). Un serveur WireGuard est, dans ce cas, sim­ple­ment un appareil qui contient des données de con­fi­gu­ra­tion pour plusieurs peers.

L’éta­blis­se­ment de la connexion fonc­tionne de manière similaire à Secure Shell (SSH) : les peers génèrent des paires de clés publiques et privées, les échangent et les utilisent pour l’au­then­ti­fi­ca­tion et le chif­fre­ment des données trans­mises. Le chif­fre­ment repose sur des méthodes de chif­fre­ment modernes qui ga­ran­tis­sent un haut niveau de sécurité.

Outre la création des clés de chif­fre­ment, il est né­ces­saire de définir sur les peers des pa­ra­mètres réseau et de routage (voir notre tutoriel plus bas). Cela comprend la con­fi­gu­ra­tion des plages d’adresses IP au­to­ri­sées, qui sont associées aux clés publiques. Seuls les paquets provenant de ces adresses IP sont acceptés.

L’envoi des données s’effectue via le User Datagram Protocol (UDP), pri­vi­lé­gié pour sa rapidité et son ef­fi­ca­cité. Il ne nécessite pas une cor­rec­tion d’erreurs étendue comme le Trans­mis­sion Control Protocol (TCP), ce qui permet une trans­mis­sion plus rapide.

La con­fi­gu­ra­tion s’effectue gé­né­ra­le­ment via l’outil en ligne de commande WireGuard et des outils réseau courants. Pour les uti­li­sa­teurs moins ex­pé­ri­men­tés, des services VPN com­mer­ciaux proposent des ap­pli­ca­tions con­vi­viales pour une con­fi­gu­ra­tion sim­pli­fiée.

Comment débuter avec WireGuard ?

En principe, WireGuard peut être installé et configuré avec peu d’effort sur un système Linux. Sur les versions plus récentes d’Ubuntu (à partir de la 20.04 LTS), le protocole est déjà intégré comme module du noyau, ce qui évite l’ins­tal­la­tion sup­plé­men­taire de re­po­si­to­ries de type Personal Package Archive (PPA). Exécutez sim­ple­ment la commande suivante :

sudo apt install wireguard
bash

Comment installer WireGuard sur votre propre système ?

L’ins­tal­la­tion de WireGuard sur votre propre système est simple et peut être effectuée avec quelques commandes.

Pour Ubuntu 20.04 LTS ou version ul­té­rieure :

Le protocole est déjà intégré en tant que module du noyau, de sorte qu’aucun dépôt PPA sup­plé­men­taire n’est né­ces­saire. Exécutez sim­ple­ment la commande suivante :

sudo apt update
sudo apt install wireguard
bash

Pour les anciennes versions d’Ubuntu :

Ici, vous devez ajouter le PPA de WireGuard pour procéder à l’ins­tal­la­tion :

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard
bash

Générer des clés WireGuard

Comme de nombreux autres pro­to­coles VPN modernes, WireGuard repose sur l’uti­li­sa­tion de clés pour créer des con­nexions sé­cu­ri­sées entre pairs. Chaque pair a besoin d’une paire de clés privée et publique. La clé privée reste toujours secrète, tandis que la clé publique est partagée avec les autres pairs.

Exécutez les commandes suivantes dans la ligne de commande pour générer une clé privée et une clé publique WireGuard :

# Créer le répertoire des clés et définir les permissions
sudo mkdir -p /etc/wireguard/keys
sudo chmod 700 /etc/wireguard/keys
cd /etc/wireguard/keys
# Définir umask pour que seul root puisse lire/écrire
umask 077
# Générer la clé privée et l’enregistrer dans un fichier
wg genkey | tee privatekey | wg pubkey > publickey
# Vérifier l’affichage des clés générées
sudo cat privatekey
sudo cat publickey
bash
Note

Les clés doivent être créées et stockées dans un en­vi­ron­ne­ment sécurisé. Les commandes ci-dessus con­vien­nent à des fins de test. En en­vi­ron­ne­ment de pro­duc­tion, des mesures de sécurité sup­plé­men­taires doivent être mises en place, comme l’uti­li­sa­tion de ré­per­toires sécurisés et de contrôles d’accès.

Con­fi­gu­rer les pa­ra­mètres réseau

Une fois les clés générées, certaines con­fi­gu­ra­tions réseau et de routage doivent être ef­fec­tuées sur chaque pair. Cette con­fi­gu­ra­tion est es­sen­tielle pour permettre la com­mu­ni­ca­tion sécurisée entre les pairs.

Es­sen­tiel­le­ment, un fichier de con­fi­gu­ra­tion est créé, qui contient notamment les in­for­ma­tions suivantes :

  • Clés privées et publiques des pairs
  • Adresses IP au­to­ri­sées (les plages d’IP avec les­quelles le pair est autorisé à com­mu­ni­quer)
  • Adresses des pairs, associées aux clés publiques res­pec­tives

Un exemple de con­fi­gu­ra­tion de base d’une connexion WireGuard pourrait res­sem­bler à ceci :

[Interface]
# IP VPN interne du serveur
Address = 10.0.0.1/24
# Clé privée (du serveur)
PrivateKey = <SERVER_PRIVATE_KEY>
# Port UDP sur lequel WireGuard accepte les connexions
ListenPort = 51820
# Pair client
[Peer]
# Clé publique du client
PublicKey = <CLIENT_PUBLIC_KEY>
# IP VPN interne attribuée au client
AllowedIPs = 10.0.0.2/32
txt

Tester la connexion et activer WireGuard

Une fois le protocole installé et configuré sur votre système, il est temps de tester la connexion et d’activer l’interface réseau. Cela peut se faire via la ligne de commande en exécutant les commandes suivantes :

1. Activer l’interface réseau

Vous devez d’abord activer l’interface WireGuard que vous venez de con­fi­gu­rer :

sudo systemctl enable --now wg-quick@wg0
bash

Cette commande active l’interface WireGuard (wg0) que vous avez créée au­pa­ra­vant. Si cette commande s’exécute avec succès, la connexion doit être prête à envoyer des données.

2. Tester la connexion

Pour vous assurer que la connexion fonc­tionne, vous pouvez utiliser la commande ping pour vérifier si l’appareil distant est joignable. Exemple :

ping 10.0.0.2
bash

Remplacez l’adresse IP par celle du pair distant auquel vous êtes connecté. Si le ping réussit, cela signifie que la connexion VPN fonc­tionne.

3. Dépannage

Si la connexion ne fonc­tionne pas comme prévu, vérifiez les points suivants :

  • Assurez-vous que les adresses IP sont cor­rec­te­ment con­fi­gu­rées.
  • Vérifiez que les clés publiques et privées ont été cor­rec­te­ment échangées.
  • Assurez-vous que le pare-feu est configuré sur les deux appareils pour autoriser le trafic WireGuard (gé­né­ra­le­ment via le port 51820).

Si les problèmes per­sis­tent, vous pouvez également re­dé­mar­rer le service WireGuard :

sudo systemctl restart wg-quick@wg0
bash
Aller au menu principal