WireGuard VPN : principes de base

WireGuard est un logiciel libre permettant 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 directement reliées à l’aide d’un câble réseau. Les VPN sont souvent utilisés par les grandes organisations telles que les instituts de recherche, les ministères et les entreprises. Cette méthode permet de réguler l’accès à certaines ressources du réseau et d’isoler le flux de données des utilisateurs par rapport au monde extérieur.

Il existe toute une palette de piles de protocoles VPN sophistiquées comme IPsec, OpenVPN, L2TP et PPTP. Les fournisseurs de solutions VPN s’appuient sur ces protocoles pour donner aux utilisateurs la possibilité de faire passer leur trafic Internet par le VPN. En raison des avantages de WireGuard, de plus en plus de fournisseurs de VPN intègrent ce protocole dans leurs applications.

Qu’est-ce que WireGuard ?

WireGuard est une application et un protocole réseau permettant de mettre en place un tunnel VPN chiffré. Ce logiciel est un logiciel libre sous licence GPLv2 et est disponible sur toutes les plateformes. WireGuard est écrit dans les langages « C » et « Go » et fonctionne 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 autorisées. En dehors d’un cryptage fort, WireGuard offre également des optimisations pour les systèmes mobiles et les appareils de l’« Internet des objets (IdO) ».

Depuis le printemps 2020, WireGuard est directement intégré dans le noyau Linux. Comme Linux sert de système d’exploitation standard à des milliards d’appareils connectés dans le monde, WireGuard peut être utilisé pratiquement partout. Cette large utilisation est également due à la légèreté du logiciel et à ses faibles exigences en termes de matériel.

Quelles sont les fonctionnalités de WireGuard ?

La caractéristique centrale du protocole WireGuard est le routage Cryptokey. Ce routage consiste à attribuer les plages d’adresses IP autorisées au sein d’un tunnel à la clé publique du partenaire de connexion. Les paquets entrants du partenaire de connexion sont chiffrés à l’aide de la clé publique. Une fois cryptés, les paquets entrants sont uniquement distribués s’ils proviennent d’une adresse IP correspondant à la clé. Dans le cas contraire, le paquet est rejeté.

Contrairement aux piles de protocoles VPN établies, comme IPsec et OpenVPN, WireGuard n’est pas un protocole agile : au lieu de traiter les bases de chiffrement à utiliser individuellement lors de la phase de handshaking, WireGuard se limite à quelques options. Les fonctions de chiffrement utilisées sont segmentées ensemble. Si l’une des bases venait à être compromise, une nouvelle version plus sûre du protocole WireGuard serait publiée. Si les deux partenaires de la communication utilisent la nouvelle version, le flux de données sera alors sécurisé.

Au moment de la rédaction de cet article, les protocoles et les technologies de chiffrement 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 comparaison, la taille du code d’une implémentation d’OpenVPN ou d’IPsec est d’environ 100 000 à 600 000 lignes. Une base de code plus petite est intrinsèquement plus sûre puisque les bugs peuvent être trouvés beaucoup plus facilement et la fenêtre d’attaque est réduite à un minimum.

Connu pour son style incisif et ses accès de colère occasionnels, le célèbre inventeur de Linux Linus Torvalds a rendu hommage à WireGuard après avoir procédé à une inspection 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 Networking

Traduction : « Le code n’est probablement pas parfait, mais je l’ai parcouru et comparé aux horreurs que sont OpenVPN et IPSec : c’est un chef d’œuvre. »

La faible complexité du logiciel implique une plus grande sécurité mais suppose également une plus grande performance. WireGuard fournit une vitesse de transfert plus importante et une plus faible latence que les protocoles concurrents. D’autre part, WireGuard n’est pas un protocole « bavard » (« it is not a chatty protocol ») : tant que l’utilisateur 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 efficacité énergétique est tout particulièrement importante pour les appareils mobiles. Par plusieurs aspects, WireGuard est d’ailleurs bien positionné dans ce domaine. Le protocole supporte par exemple l’itinérance, c’est-à-dire le passage automatique du Wi-Fi au réseau mobile et vice versa. Si la connexion devait malgré tout s’interrompre, WireGuard permet généralement de rétablir la connexion plus rapidement que les protocoles concurrents.

Comment fonctionne WireGuard ?

Sur le principe, WireGuard est un protocole VPN pair-à-pair décentralisé. Plutôt que de recourir impérativement à un serveur, WireGuard permet d’ouvrir directement un tunnel entre deux machines. Un « serveur » WireGuard est une machine simple sur laquelle les configurations pour les connexions avec plusieurs pairs sont enregistrées.

Avec WireGuard, la connexion est établie de façon similaire à Secure Shell (SSH) : avec ce protocole, les utilisateurs (appelés « pairs ») génèrent une clé publique et se l’échangent. Cette clé permet aux pairs de s’authentifier mutuellement et de chiffrer les paquets de données pour l’autre interlocuteur.

En dehors de la génération de la clé cryptographique, différents paramètres réseau doivent être paramétrés sur chaque pair (à ce sujet, voir notre guide sur la mise en place de WireGuard disponible ci-dessous). Pour permettre l’échange de données, les plages d’adresses IP autorisées sont associées à la clé cryptographique sur les pairs. Les paquets ne provenant pas des plages d’adresses autorisé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 configuration 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 configuration du logiciel soit considérée comme relativement simple, WireGuard sert uniquement de base ; une application basée sur ce protocole peut aider l’utilisateur lors des différentes étapes de la configuration et de l’établissement de la connexion. Les utilisateurs des services VPN commerciaux 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 simplement 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’utilisation prévue, le système d’exploitation utilisé et l’environnement réseau existant. Dans notre exemple, nous pouvons uniquement vous donner une procédure approximative. Veuillez uniquement utiliser nos instructions 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ésentons ici l’installation 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 cryptographiques constituent la base de l’utilisation de WireGuard. Comme à l’accoutumée, il existe une clé privée qui doit être impérativement 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. Finalement, les pairs utilisent leur clé privée afin de déchiffrer 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

Configurer les paramètres réseau pour WireGuard

L’installation de WireGuard et la génération de la clé sont des préparatifs de base se déroulant de façon plus ou moins similaire sur chaque système. En revanche, la configuration de WireGuard dépend des paramètres réseau locaux. Par conséquent, nous pouvons uniquement vous donner un schéma général et nous vous recommandons le guide Quick Start du projet WireGuard pour une utilisation plus approfondie.

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 concurrent moderne et léger des piles de protocoles VPN vieillissantes que sont IPsec et OpenVPN et pourrait bien les remplacer très largement dans un avenir proche.