Sécurité

WireGuard VPN : Installation et configuration du meilleur VPN du moment

WireGuard VPN est une application logicielle entièrement gratuite qui nous permettra d’établir des tunnels VPN. Ce logiciel complet intègre tous les protocoles de communication et de cryptographie nécessaires pour créer un réseau privé virtuel entre plusieurs clients et un serveur. WireGuard offre de meilleures performances que le protocole IPsec et OpenVPN (à la fois en vitesse et en latence de connexion), aujourd’hui dans RedesZone, nous allons expliquer ses principales fonctionnalités, comment l’installer et le configurer facilement.

Fonctionnalités VPN WireGuard

WireGuard VPN est un logiciel pour créer un réseau privé virtuel (VPN) extrêmement facile à configurer , très rapide (plus rapide qu’IPsec et OpenVPN) et qui utilise par défaut la cryptographie la plus moderne , sans avoir besoin de choisir entre différents algorithmes de chiffrement symétriques asymétriques et hachage. L’objectif de WireGuard VPN est de devenir un standard, avec de plus en plus d’utilisateurs domestiques et professionnels qui commencent à l’utiliser, plutôt que d’utiliser IPsec ou le populaire OpenVPN qui sont plus difficiles à configurer et plus lents. Ce logiciel est conçu pour être utilisé par tous les publics, à la fois pour les utilisateurs à domicile et sur les super ordinateurs.

Avec WireGuard VPN, il n’est pas nécessaire de gérer les connexions , de s’inquiéter de l’état du réseau privé virtuel lui-même, de gérer des processus ou de savoir ce qu’il y a sous le logiciel pour le faire fonctionner, comme avec IPsec, où il faut souvent regarder journaux et enquêter sur ce qui se passe. Autre point fort, la configuration est extrêmement basique, mais très puissante.

Ce logiciel est un VPN L3 , c’est-à-dire qu’il utilise uniquement le tunneling , cela ne se passe pas comme OpenVPN où l’on a la possibilité de travailler en mode transport ou en mode tunnel. Dans ce cas, nous utiliserons toujours le mode tunnel, de plus, il est compatible avec les réseaux IPv4 et IPv6 , de plus, il peut encapsuler des paquets IPv4 dans IPv6 et vice versa. Le protocole de couche transport utilisé par WireGuard est UDP , nous devrons donc ouvrir un port spécifique (à choisir, il peut être modifié) dans notre routeur qui fait du NAT.

Compatibilité avec les systèmes d’exploitation

Ce nouveau logiciel VPN a d’abord été publié pour le noyau Linux, mais il est multiplateforme car il est compatible avec les systèmes d’exploitation Windows, Linux, MacOS, FreeBSD, Android et iOS . L’un des points forts de ce logiciel est que la configuration du client et du serveur est exactement la même dans les différents systèmes d’exploitation, en utilisant la même syntaxe, vous pouvez donc configurer le serveur et les clients sous Linux, et plus tard «passer» la configuration à le reste des appareils avec d’autres systèmes d’exploitation à l’intérieur.

Cryptographie utilisée

Avec les protocoles IPsec et OpenVPN, il est nécessaire que les clients et le serveur «se mettent d’accord» sur les protocoles cryptographiques à utiliser, à la fois en phase 1 et en phase 2 (d’IPsec), et dans le canal de contrôle et de données (d’OpenVPN ) Sinon, la connexion ne sera pas établie correctement. WireGuard fournit un «package» cryptographique complet , garantissant la connectivité sans que nous ayons besoin de sélectionner quoi que ce soit. Si à un certain moment l’un des protocoles cryptographiques utilisés par ce VPN est jugé non sécurisé, c’est aussi simple que de lancer une deuxième version de WireGuard avec un nouveau protocole qui n’a pas de faille de sécurité, et entre les clients et le serveur ça va être indiqué qui utilisent la «version 2», étant complètement transparent pour nous.

Un autre détail très important est que ce VPN utilise un très petit code source . Il y a très peu de lignes de code par rapport à StrongSwan ou OpenVPN, donc les audits pourront être réalisés en très peu de temps, il sera aussi plus facile de trouver des vulnérabilités potentielles ou des failles de sécurité. En ayant moins de lignes de code, la surface d’une éventuelle attaque contre la programmation VPN est également moindre.

Actuellement, WireGuard VPN utilise ChaCha20 pour le cryptage symétrique, authentifié avec Poly1305 , à l’aide d’une construction AEAD. Il utilise également Curve25519 pour ECDH, BLAKE2 pour le hachage, SipHash24 pour les clés de table de hachage et HKDF pour la dérivation de clé, ce qui signifie que nous utilisons les algorithmes cryptographiques les plus modernes, dans le but de fournir une sécurité et des performances maximales.

Prise en charge de l’itinérance et du Kill-Switch

Ce logiciel est conçu pour pouvoir se déplacer facilement et rapidement , si notre appareil change de réseau, et change logiquement d’IP publique, comme lorsque l’on passe du réseau Wi-Fi et du réseau 4G/LTE de notre opérateur, la connexion VPN sera rester en place car ils se ré-authentifieront rapidement avec le serveur VPN, de sorte que nous serons toujours connectés au VPN.

Nous pouvons également activer le Kill-Switch sur l’appareil , de cette manière, si la connexion VPN est interrompue, le logiciel lui-même sera également chargé d’interrompre tout le trafic réseau jusqu’à ce que la connexion VPN soit rétablie, dans le but de ne pas surfez sans la protection que nous offre ce VPN.

Installation du VPN WireGuard

L’installation de ce logiciel est vraiment simple, il suffit d’ aller sur le site officiel de WireGuard et de télécharger l’exécutable pour les systèmes d’exploitation Windows ou MacOS. Si vous utilisez un système d’exploitation basé sur Linux avec ses référentiels correspondants, vous devrez probablement ajouter les référentiels WireGuard spécifiques, car ils ne se trouvent actuellement pas dans la branche stable par défaut.

Par exemple, nous avons installé le serveur VPN sur une dernière version de Debian, pour l’installer nous avons suivi les étapes indiquées sur le site officiel. Des autorisations de superutilisateur sont requises pour une installation réussie.

sudo echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list

sudo printf 'Package: *nPin: release a=unstablenPin-Priority: 90n' > /etc/apt/preferences.d/limit-unstable

sudo apt update

sudo apt install wireguard

Il ne faut pas oublier que ce VPN est également compatible avec les systèmes d’exploitation tels que FreeBSD, OpenBSD et même aussi avec OpenWRT pour les routeurs, puisqu’il suffit simplement de l’installer via «opkg» car tous les logiciels supplémentaires sont généralement installés.

Si vous allez installer le client VPN sur votre smartphone avec Android ou iOS, nous avons actuellement les applications officielles, vous pouvez donc l’installer sans problème depuis Google Play et App Store respectivement :

WireGuard
Développeur : équipe de développement WireGuard

WireGuard
Développeur : équipe de développement WireGuard

Configuration WireGuard : clés publiques, privées et fichiers de configuration

Une fois que nous avons correctement installé WireGuard, à la fois sur l’ordinateur qui fait office de serveur, ainsi que sur tous les clients que nous voulons connecter, il est nécessaire de le configurer. La première chose que nous devons faire est de créer la paire de clés publique-privée, à la fois sur le serveur et sur tous les clients que nous voulons connecter. Nous avons utilisé un système d’exploitation Debian pour générer les clés, et aussi pour configurer le serveur, cependant, nous pourrions aussi le faire directement dans le logiciel Windows.

Le chemin pour exécuter le serveur WireGuard dans Debian est /etc/wireguard/, nous allons donc accéder à ce chemin avec la commande suivante :

cd /etc/wireguard/

Génération d’une paire de clés publique-privée pour le serveur

Pour générer la paire de clés publique et privée exactement à cet endroit, il suffit de mettre :

wg genkey | tee claveprivadaservidor | wg pubkey > clavepublicaservidor

Nous aurons maintenant deux fichiers, l’un avec la clé publique et l’autre avec la clé privée :

  • Clé privée : 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c =
  • Clé publique : xeTkJjjBUyp8paxTgajwDa + qWjrD2RpXlJRSHMwcGDQ =

Ces clés sont celles que nous utiliserons pour le «serveur» WireGuard VPN.

Génération de paires de clés publiques-privées pour un client

Pour générer une autre paire de clés publiques et privées, que nous utiliserons dans un client, nous pouvons les créer dans un nouveau dossier, ou les créer au même endroit, mais avec un nom différent.

wg genkey | tee claveprivadacliente1 | wg pubkey > clavepublicacliente1

Nous aurons maintenant deux fichiers, l’un avec la clé publique et l’autre avec la clé privée :

  • Clé privée : yPMpP2raY4FoCEJkmzQMlxzm / 6RBIW9HkjY6pVFIOnI =
  • Clé publique : 6c12jLkKzgU9len1kQ / 6Fc61xm + LL98TPPLLsri8klE =

Ces clés sont celles que nous utiliserons pour un client VPN WireGuard.

Fichier de configuration du serveur

La configuration du serveur WireGuard est assez simple par rapport aux serveurs IPsec ou OpenVPN, cependant, nous devons prendre en compte plusieurs choses que nous expliquons ci-dessous.

Dans le serveur, nous devrons avoir une section « Interface », dans cette section, nous pouvons indiquer l’ adresse IP privée qui identifie le serveur lorsque les clients se connectent. Nous devons nous rappeler que ce VPN est L3, nous pouvons donc mettre n’importe quelle adresse IP privée qui n’est pas utilisée à un certain moment. Por ejemplo, en OpenVPN la subred por defecto es 10.8.0.0/24, aquí también podremos poner esa misma o cualquier otra como la subred 192.168.2.0/24 (y que 192.168.2.1 sea el propio servidor, y las otras IPs que sean les clients). Avec la syntaxe de « Adresse » nous mettrons le sous-réseau VPN que nous voulons.

Dans » PrivateKey «, nous devrons entrer la clé privée que nous avons précédemment générée pour le serveur. Dans » ListenPort » nous mettrons le port UDP que nous voulons utiliser pour le serveur, ce port est celui que nous devrons plus tard » ouvrir » en NAT si nous sommes derrière un routeur avec NAT.

Enfin, dans cette section «Interface», nous pouvons également définir des commandes à exécuter après avoir levé l’interface virtuelle avec «PostUp» et après avoir extrait l’interface virtuelle avec «PostDown». Comme vous pouvez le voir, nous l’avons actuellement commenté, car nous ne voulons pas faire de NAT contre cette interface, mais cela pourrait être fait parfaitement.

Dans la section » Peer » est l’endroit où nous devrons mettre la liste des clients que nous autorisons à se connecter. Dans ce cas, nous allons seulement connecter un « pair », nous allons donc définir sa clé publique avec « PublicKey » que nous avons créé précédemment (ou que le client nous a fourni, puisqu’il est possible qu’elle ait été générée par lui ), et aussi Nous pouvons indiquer si nous autorisons ce client avec une certaine adresse IP à se connecter. Avec la directive » AllowedIPs » nous pouvons filtrer les adresses IP sources, si nous mettons 0.0.0.0/0 cela signifie que nous autorisons n’importe quelle adresse IP.

[Interface] Address = 192.168.2.1/24
PrivateKey = 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c=
ListenPort = 51820

#PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
#PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE

[Peer] PublicKey = 6c12jLkKzgU9len1kQ/6Fc61xm+LL98TPPlLsri8klE=
AllowedIPs = 0.0.0.0/0

Si nous voulons ajouter plus de «pairs», il suffit de les définir individuellement dans le fichier de configuration comme suit :

[Interface] Address = 192.168.2.1/24
PrivateKey = 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c=
ListenPort = 51820

#PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
#PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens33 -j MASQUERADE

[Peer] PublicKey = 6c12jLkKzgU9len1kQ/6Fc61xm+LL98TPPlLsri8klE=
AllowedIPs = 0.0.0.0/0

[Peer] PublicKey = clave pública del cliente 2
AllowedIPs = 0.0.0.0/0

[Peer] PublicKey = clave pública del cliente 3
AllowedIPs = 0.0.0.0/0

On peut appeler le fichier de configuration «wg0.conf», puisque WireGuard crée des interfaces virtuelles avec ce nom, idéal pour les distinguer parfaitement. Pour exécuter ce fichier de configuration, exécutez simplement :

root@debian-vm:/etc/wireguard# wg-quick up wg0

Au démarrage, WireGuard se chargera de créer l’interface virtuelle, de mettre son adresse IP, MTU, et même de créer les routes correspondantes dans la table de routage :

root@debian-vm:/etc/wireguard# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.2.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

Un détail très important est que dans le pare-feu Linux nous devons autoriser l’entrée des clients, en particulier dans la nouvelle interface wg0 qui a été créée, par défaut c’est dans tout accepter, mais il est possible que votre politique soit de tout refuser , pour ce que vous devez vous assurer :

iptables -I INPUT 1 -i wg0 -j ACCEPT

Fichier de configuration pour les clients

La configuration du client WireGuard est assez simple par rapport aux serveurs IPsec ou OpenVPN, cependant, nous devons prendre en compte plusieurs choses que nous expliquons ci-dessous.

Dans le client, nous devrons avoir une section « Interface », dans cette section, nous pouvons indiquer l’ adresse IP privée qui identifie le client lorsque nous nous connectons. Nous devons nous rappeler que ce VPN est L3, nous pouvons donc mettre n’importe quelle adresse IP privée qui n’est pas utilisée à un certain moment. Par exemple, dans OpenVPN, le sous-réseau par défaut est 10.8.0.0/24, ici nous pouvons également mettre le même ou tout autre sous-réseau 192.168.2.0/24 (et que 192.168.2.1 est le serveur lui-même, et l’adresse 192.168.2.2 Désormais, ce sont les clients. Avec la syntaxe « Adresse » on va mettre le sous-réseau VPN que l’on veut.

Dans « PrivateKey » nous devrons entrer la clé privée que nous avons précédemment générée pour le client.

Dans la section » Peer » , nous devrons mettre la clé publique avec » PublicKey » du serveur WireGuard auquel nous allons nous connecter, c’est-à-dire que cette clé publique a dû être fournie par le serveur. A cette occasion, nous pouvons également utiliser la directive » AllowedIPs » , mais cela fonctionne différemment, cette fois nous pouvons définir si nous voulons uniquement passer par le VPN vers un certain sous-réseau (ou plusieurs sous-réseaux), ou si nous voulons transférer tout Internet trafic via le réseau privé virtuel. Si nous mettons les sous-réseaux séparés par des virgules, nous pouvons accéder à plusieurs que nous avons sur le serveur, si nous voulons transférer tout le trafic, nous mettons simplement 0.0.0.0/0, comme cela se produit avec IPsec.

Enfin, avec la directive » Endpoint «, nous allons définir l’adresse IP publique du serveur sur lequel s’exécute WireGuard VPN, suivie de deux points (:) du port UDP utilisé. Nous devons nous rappeler que WireGuard utilise UDP, nous ne devons donc pas le filtrer dans les pare-feu.

Le logiciel et la communication avec WireGuard essaient de passer aussi inaperçus que possible s’il n’est pas utilisé, c’est-à-dire qu’il n’envoie pas de données en continu via le VPN pour maintenir le tunnel actif, idéal pour économiser la batterie et les données mobiles sur les smartphones. Dans la plupart des configurations courantes cela fonctionne parfaitement, mais si nous sommes derrière un NAT ou un pare-feu, il est possible que la communication soit coupée car aucune donnée n’est en cours de transfert, il est donc nécessaire de configurer un «keep alive». Pour configurer Keep Alive, il suffit d’indiquer la directive «PersistentKeepAlive» et de mettre un nombre entier qui signifie les secondes pendant lesquelles le keep alive a été envoyé. D’après la documentation officielle, mettre 25 secondes est suffisant pour la plupart des pare-feux et systèmes NAT, si on met 0 cela désactive cette fonction.

[Interface] PrivateKey = yPMpP2raY4FoCEJkmzQMlxzm/6RBIW9HkjY6pVFIOnI=
Address = 192.168.2.2/32

[Peer] PublicKey = xeTkJjjBUyp8paxTgajwDa+qWjrD2RpXlJRSHMwcGDQ=
AllowedIPs = 0.0.0.0/0
Endpoint = 10.10.2.86:51820

#PersistentKeepalive = 25

Dans les systèmes d’exploitation Windows, nous pouvons importer cette même configuration, et nous l’aurons prête à se connecter, bien que nous puissions connecter un client à partir de zéro, mais nous devrons «passer» la clé publique générée au serveur WireGuard.

Il est également très important de consulter les journaux WireGuard pour vérifier que la connexion VPN a été correctement établie. Nous ne pouvons pas mettre dans la section «Interface / Adresse» une adresse IP privée déjà utilisée dans les clients Windows, car nous aurons une erreur dans la connexion.

Comme vous l’avez vu, la configuration VPN de WireGuard est vraiment simple et rapide. Nous vous recommandons d’entrer dans ce projet GitHub où vous trouverez des scripts qui nous permettront d’automatiser tout cela, et vous pourrez l’installer et le configurer en quelques minutes.

Dans les dernières versions de Windows 10, il semble y avoir une sorte de problème avec le client officiel WireGuard. Dans RedesZone nous avons trouvé des problèmes avec les routes qui sont ajoutées dans la table de routage si nous mettons les «AllowedIPs = 0.0.0.0/0», si nous mettons des sous-réseaux spécifiques, le tunnel fonctionne sans problème (mais sans redirection du trafic), cependant , avec 0.0.0.0/0, il n’établit pas la connexion. La solution consiste à télécharger le programme TunSafe basé sur WireGuard, à l’installer et à importer le fichier de configuration WireGuard que nous avons dans le client officiel, ou à le modifier dans un fichier texte avec la même syntaxe que toujours :

Une fois que nous avons le fichier .conf, nous l’importons dans le programme et nous pouvons nous connecter à notre serveur VPN avec WireGuard sans aucun problème, avec une redirection totale du trafic pour naviguer en toute sécurité.

Nous vous recommandons d’utiliser TunSafe car il intègre plus d’options de configuration, telles que la politique de kill-switch et même si nous voulons l’avoir en tant que service dans le système d’exploitation Windows.

Performances WireGuard VPN par rapport à L2TP / IPsec et OpenVPN

Dans RedesZone, nous avons vérifié les performances de WireGuard VPN par rapport à L2TP / IPsec et OpenVPN, les tests ont été effectués dans un réseau local pour éviter les problèmes avec l’opérateur, afin que nous puissions mesurer les performances maximales réelles qu’un matériel est capable de nous fournissant spécifique.

La configuration du serveur VPN que nous avons utilisé (à la fois pour L2TP / IPsec, OpenVPN et WireGuard) est la suivante :

  • QNAP TS-1277 : processeur AMD Ryzen 7 2700 ; Mémoire RAM : 64 Go de RAM DDR4 ; connectivité réseau : QNAP QXG-10G2T-107 à 10 Gbit/s avec câblage Cat7 et un commutateur D-Link DXS-1210-10TS .
  • Le logiciel VPN pour L2TP / IPsec et OpenVPN (utilisant UDP) est QVPN 2 de QNAP
  • Dans un deuxième test avec OpenVPN (utilisant UDP) et AES-256-GCM, nous avons utilisé Virtualization Station avec Debian.
  • iperf3 installé manuellement sur QTS et également sur Debian virtualisé.

La configuration du client VPN que nous avons utilisé (à la fois pour L2TP / IPsec, OpenVPN et WireGuard) est la suivante :

  • PC avec processeur AMD Ryzen 7 3800x ; Mémoire RAM : 32 Go de RAM DDR4 3200 MHz ; connectivité réseau : ASUS XG-C100C à 10 Gbit/s avec câblage CAT7 et un commutateur D-Link DXS-1210-10TS pour connecter les deux appareils . Système d’exploitation utilisé dans les tests : Windows 10 1909.
  • Client L2TP / IPsec, propre à Windows 10
  • Dernière version d’OpenVPN (2.4.8)
  • iperf 3 sous Windows 10.

Les performances obtenues lors des tests sont les suivantes :

Comme vous pouvez le voir, la vitesse réelle de WireGuard est le double de celle de L2TP/IPsec ou d’OpenVPN, on peut donc dire que ce VPN est vraiment rapide.

Nous espérons que ce didacticiel de configuration vous aidera et que vous pourrez facilement déployer des serveurs et des clients WireGuard pour nous connecter en toute sécurité à notre domicile, à notre entreprise ou à Internet depuis n’importe où en toute sécurité.

Articles Similaires

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba