WireGuard est un logiciel libre per­met­tant de mettre en place un réseau virtuel privé (VPN). Un VPN ouvre un tunnel virtuel entre deux machines sur Internet. La connexion réseau passe par le tunnel comme si les machines étaient di­rec­te­ment reliées à l’aide d’un câble réseau. Les VPN sont souvent utilisés par les grandes or­ga­ni­sa­tions telles que les instituts de recherche, les mi­nis­tères et les en­tre­prises. Cette méthode permet de réguler l’accès à certaines res­sources du réseau et d’isoler le flux de données des uti­li­sa­teurs par rapport au monde extérieur.

Il existe toute une palette de piles de pro­to­coles VPN so­phis­ti­quées comme IPsec, OpenVPN, L2TP et PPTP. Les four­nis­seurs de solutions VPN s’appuient sur ces pro­to­coles pour donner aux uti­li­sa­teurs la pos­si­bi­lité de faire passer leur trafic Internet par le VPN. En raison des avantages de WireGuard, de plus en plus de four­nis­seurs de VPN intègrent ce protocole dans leurs ap­pli­ca­tions.

Qu’est-ce que WireGuard ?

WireGuard est une ap­pli­ca­tion et un protocole réseau per­met­tant de mettre en place un tunnel VPN chiffré. Ce logiciel est un logiciel libre sous licence GPLv2 et est dis­po­nible sur toutes les pla­te­formes. WireGuard est écrit dans les langages « C » et « Go » et fonc­tionne sous Windows, macOS, BSD, iOS et Android.

WireGuard permet de créer un tunnel crypté. Les flux de données passent par ce tunnel et sont ainsi protégés de tout accès par des personnes non au­to­ri­sées. En dehors d’un cryptage fort, WireGuard offre également des op­ti­mi­sa­tions pour les systèmes mobiles et les appareils de l’« Internet des objets (IdO) ».

Depuis le printemps 2020, WireGuard est di­rec­te­ment intégré dans le noyau Linux. Comme Linux sert de système d’ex­ploi­ta­tion standard à des milliards d’appareils connectés dans le monde, WireGuard peut être utilisé pra­ti­que­ment partout. Cette large uti­li­sa­tion est également due à la légèreté du logiciel et à ses faibles exigences en termes de matériel.

Quelles sont les fonc­tion­na­li­tés de WireGuard ?

La ca­rac­té­ris­tique centrale du protocole WireGuard est le routage Cryptokey. Ce routage consiste à attribuer les plages d’adresses IP au­to­ri­sées au sein d’un tunnel à la clé publique du par­te­naire de connexion. Les paquets entrants du par­te­naire de connexion sont chiffrés à l’aide de la clé publique. Une fois cryptés, les paquets entrants sont uni­que­ment dis­tri­bués s’ils pro­vien­nent d’une adresse IP cor­res­pon­dant à la clé. Dans le cas contraire, le paquet est rejeté.

Con­trai­re­ment aux piles de pro­to­coles VPN établies, comme IPsec et OpenVPN, WireGuard n’est pas un protocole agile : au lieu de traiter les bases de chif­fre­ment à utiliser in­di­vi­duel­le­ment lors de la phase de hand­sha­king, WireGuard se limite à quelques options. Les fonctions de chif­fre­ment utilisées sont seg­men­tées ensemble. Si l’une des bases venait à être com­pro­mise, une nouvelle version plus sûre du protocole WireGuard serait publiée. Si les deux par­te­naires de la com­mu­ni­ca­tion utilisent la nouvelle version, le flux de données sera alors sécurisé.

Au moment de la rédaction de cet article, les pro­to­coles et les tech­no­lo­gies de chif­fre­ment suivants sont utilisés :

  • Noise protocol framework
  • Curve25519
  • ChaCha20
  • Poly1305
  • BLAKE2
  • SipHash24
  • HKDF

Quels sont les avantages de WireGuard ?

L’un des plus grands avantages de WireGuard est la base de code ordonnée. La totalité du code noyau s’étend sur environ 4 000 lignes de code seulement. Par com­pa­rai­son, la taille du code d’une im­plé­men­ta­tion d’OpenVPN ou d’IPsec est d’environ 100 000 à 600 000 lignes. Une base de code plus petite est in­trin­sè­que­ment plus sûre puisque les bugs peuvent être trouvés beaucoup plus fa­ci­le­ment et la fenêtre d’attaque est réduite à un minimum.

Connu pour son style incisif et ses accès de colère oc­ca­sion­nels, le célèbre inventeur de Linux Linus Torvalds a rendu hommage à WireGuard après avoir procédé à une ins­pec­tion du code :

Citation

“Maybe the code isn’t perfect, but I’ve skimmed it, and compared to the horrors that are OpenVPN and IPSec, it’s a work of art.” – Source : netdev - Re : GIT Net­wor­king

Tra­duc­tion : « Le code n’est pro­ba­ble­ment pas parfait, mais je l’ai parcouru et comparé aux horreurs que sont OpenVPN et IPSec : c’est un chef d’œuvre. »

La faible com­plexité du logiciel implique une plus grande sécurité mais suppose également une plus grande per­for­mance. WireGuard fournit une vitesse de transfert plus im­por­tante et une plus faible latence que les pro­to­coles con­cur­rents. D’autre part, WireGuard n’est pas un protocole « bavard » (« it is not a chatty protocol ») : tant que l’uti­li­sa­teur n’envoie pas de données à travers le tunnel, WireGuard reste en veille, ce qui consomme moins d’énergie et augmente la durée de vie des batteries.

Cette ef­fi­ca­cité éner­gé­tique est tout par­ti­cu­liè­re­ment im­por­tante pour les appareils mobiles. Par plusieurs aspects, WireGuard est d’ailleurs bien po­si­tionné dans ce domaine. Le protocole supporte par exemple l’iti­né­rance, c’est-à-dire le passage au­to­ma­tique du Wi-Fi au réseau mobile et vice versa. Si la connexion devait malgré tout s’in­ter­rompre, WireGuard permet gé­né­ra­le­ment de rétablir la connexion plus ra­pi­de­ment que les pro­to­coles con­cur­rents.

Comment fonc­tionne WireGuard ?

Sur le principe, WireGuard est un protocole VPN pair-à-pair dé­cen­tra­lisé. Plutôt que de recourir im­pé­ra­ti­ve­ment à un serveur, WireGuard permet d’ouvrir di­rec­te­ment un tunnel entre deux machines. Un « serveur » WireGuard est une machine simple sur laquelle les con­fi­gu­ra­tions pour les con­nexions avec plusieurs pairs sont en­re­gis­trées.

Avec WireGuard, la connexion est établie de façon similaire à Secure Shell (SSH) : avec ce protocole, les uti­li­sa­teurs (appelés « pairs ») génèrent une clé publique et se l’échangent. Cette clé permet aux pairs de s’au­then­ti­fier mu­tuel­le­ment et de chiffrer les paquets de données pour l’autre in­ter­lo­cu­teur.

En dehors de la gé­né­ra­tion de la clé cryp­to­gra­phique, dif­fé­rents pa­ra­mètres réseau doivent être pa­ra­mé­trés sur chaque pair (à ce sujet, voir notre guide sur la mise en place de WireGuard dis­po­nible ci-dessous). Pour permettre l’échange de données, les plages d’adresses IP au­to­ri­sées sont associées à la clé cryp­to­gra­phique sur les pairs. Les paquets ne provenant pas des plages d’adresses au­to­ri­sées sont rejetés. Avec WireGuard, l’envoi des données a lieu via le User Datagram Protocol (UDP).

Sur la machine d’un pair, la con­fi­gu­ra­tion est réalisée à l’aide de l’outil de commande de WireGuard ainsi que d’autres outils intégrés par défaut à Linux. Bien que la con­fi­gu­ra­tion du logiciel soit con­si­dé­rée comme re­la­ti­ve­ment simple, WireGuard sert uni­que­ment de base ; une ap­pli­ca­tion basée sur ce protocole peut aider l’uti­li­sa­teur lors des dif­fé­rentes étapes de la con­fi­gu­ra­tion et de l’éta­blis­se­ment de la connexion. Les uti­li­sa­teurs des services VPN com­mer­ciaux peuvent ainsi profiter des avantages de ce protocole VPN moderne même sans ligne de commande.

Premiers pas avec WireGuard

En principe, WireGuard peut être installé et configuré assez sim­ple­ment sur un système Linux. Il est par exemple possible de mettre en place un serveur VPN avec Raspberry Pi. La procédure diffère toutefois selon l’uti­li­sa­tion prévue, le système d’ex­ploi­ta­tion utilisé et l’en­vi­ron­ne­ment réseau existant. Dans notre exemple, nous pouvons uni­que­ment vous donner une procédure ap­proxi­ma­tive. Veuillez uni­que­ment utiliser nos ins­truc­tions pour réaliser des tests.

Conseil
Installez WireGuard sur un vps IONOS et créez votre propre VPN.

Installer WireGuard sur votre système

Exécutez les commandes suivantes dans l’invite de commande afin d’installer WireGuard sur votre système Linux :

# pour Ubuntu à partir de la version 19.10
sudo apt install wireguard
# pour les versions d’Ubuntu antérieures à 19.10
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
Note
Nous vous pré­sen­tons ici l’ins­tal­la­tion sous Linux Ubuntu. Sur d’autres systèmes, vous devrez peut-être adapter le code.

Générer une clé WireGuard

À l’instar de SSH et PGP, les clés cryp­to­gra­phiques cons­ti­tuent la base de l’uti­li­sa­tion de WireGuard. Comme à l’ac­cou­tu­mée, il existe une clé privée qui doit être im­pé­ra­ti­ve­ment gardée secrète. Par ailleurs, une clé publique est créée à partir de la clé privée et est partagée avec les pairs. Elle permet aux pairs de chiffrer et d’échanger les données. Fi­na­le­ment, les pairs utilisent leur clé privée afin de dé­chif­frer les données cryptées.

Exécutez les commandes suivantes dans l’invite de commande afin de générer une clé WireGuard privée et publique :

# Créer un répertoire pour les clés
# ATTENTION : uniquement à des fins de test, le code n’est pas sécurisé !
mkdir ~/.wireguard/ && cd ~/.wireguard/
# Définir les droits sur le fichier
umask 077
# Générer la clé privée
wg genkey > privatekey
# Générer la clé publique à partir de la clé privée
wg pubkey < privatekey > publickey

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

L’ins­tal­la­tion de WireGuard et la gé­né­ra­tion de la clé sont des pré­pa­ra­tifs de base se déroulant de façon plus ou moins similaire sur chaque système. En revanche, la con­fi­gu­ra­tion de WireGuard dépend des pa­ra­mètres réseau locaux. Par con­sé­quent, nous pouvons uni­que­ment vous donner un schéma général et nous vous re­com­man­dons le guide Quick Start du projet WireGuard pour une uti­li­sa­tion plus ap­pro­fon­die.

La procédure générale pour mettre en place une connexion réseau avec WireGuard suit le schéma suivant :

# Ajouter l’interface réseau WireGuard
ip link add dev wg0 type wireguard
# Configurer les adresses IP
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
# Configurer l’interface réseau en utilisant le fichier de configuration
wg setconf wg0 myconfig.conf
# Activer l’interface réseau
ip link set up dev wg0
En résumé

WireGuard est un con­cur­rent moderne et léger des piles de pro­to­coles VPN vieil­lis­santes que sont IPsec et OpenVPN et pourrait bien les remplacer très largement dans un avenir proche.

Aller au menu principal