WireGuard VPN: Installation et configuration du serveur VPN et des clients

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 construire 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 des connexions), nous allons aujourd'hui vous expliquer ses principales fonctionnalités, comment l'installer et le configurer facilement.

fil de garde-14

Fonctionnalités de WireGuard VPN

VPN WireGuard est un logiciel pour créer un réseau privé virtuel (VPN) extrêmement simple à configurer , très vite (plus rapide que IPsec et OpenVPN) et qui utilise le cryptographie la plus moderne par défaut , sans avoir à choisir entre différents algorithmes de chiffrement symétriques, asymétriques et de hachage. L'objectif de WireGuard VPN est de devenir un standard, et pour qu'un plus grand nombre d'utilisateurs domestiques et d'entreprises commencent à l'utiliser, au lieu 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 les super-ordinateurs.

Avec WireGuard VPN il n'est pas nécessaire de gérer les connexions , s'inquiéter de l'état du réseau privé virtuel lui-même, gérer des processus ou savoir ce qui se trouve sous le logiciel pour le faire fonctionner, tout comme IPsec, où il est souvent nécessaire de consulter les journaux et d'enquêter sur ce qui se passe. Une autre force est que la configuration est extrêmement basique, mais très puissante.

Ce le logiciel est un VPN L3 , c'est ça utilise uniquement la tunnellisation , cela ne se produit pas comme OpenVPN où nous avons la possibilité de travailler en mode transport ou en mode tunnel. Dans ce cas, nous utiliserons toujours le mode tunnel, en plus, il est compatible avec les deux Réseaux IPv4 et réseaux IPv6 , en outre, 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 certain port (au choix, il peut être changé) dans notre routeur qui fait NAT.

Compatibilité du système d'exploitation

Ce nouveau logiciel VPN a été lancé pour la première fois Linux/Unix Kernel, mais c'est multiplate-forme , car il est compatible avec Windows, Linux, MacOS, FreeBSD, Android mais aussi iOS systèmes d'exploitation . L'une des forces de ce logiciel est que la configuration du client et du serveur est exactement la même dans différents systèmes d'exploitation, en utilisant la même syntaxe, vous pouvez donc configurer le serveur et les clients sous Linux, puis «transmettre» la configuration à d'autres 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 «s'accordent» 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 , assurant la connectivité sans avoir à sélectionner quoi que ce soit. Si à un moment donné l'un des protocoles cryptographiques utilisés par ce VPN est considéré comme 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, il le sera a indiqué que l'utilisation de la «version 2» était totalement transparente 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 pourraient être effectués en très peu de temps, il sera également plus facile de trouver des vulnérabilités ou des failles de sécurité possibles. Avec moins de lignes de code, la surface d'une éventuelle attaque contre la programmation VPN est également plus petite.

WireGuard VPN utilise actuellement ChaCha20 pour un cryptage symétrique, authentifié avec Poly1305 , en utilisant une construction AEAD. Il utilise également Curve25519 pour l'ECDH, BLAKE2 pour le hachage, SipHash24 en table de hachage clés, et HKDF pour la dérivation de clés, 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 de l'interruption

Ce logiciel est conçu pour pouvoir errer facilement et rapidement , si notre appareil change de réseau, et change logiquement l'IP publique, comme lorsque nous passons du réseau Wi-Fi et du réseau 4G / LTE de notre opérateur, la connexion VPN restera levée car ils se réauthentifieront rapidement avec le VPN serveur, afin que nous soyons 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, afin que Ne naviguions pas sans la protection que ce VPN nous offre.

Installation de WireGuard VPN

L'installation de ce logiciel est vraiment facile, il suffit de aller sur le site officiel de WireGuard et téléchargez 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 il n'est actuellement pas dans la branche "stable" par défaut.

Par exemple, nous avons installé le serveur VPN dans une dernière version de Debian, afin de l'installer nous avons suivi les étapes indiquées sur le site officiel. Les autorisations de superutilisateur sont nécessaires pour effectuer correctement l'installation.

 sudo echo "deb http://deb.debian.org/debian/ unstable main"> /etc/apt/sources.list.d/unstable.list sudo printf 'Paquet: * / nPin: release a = unstable / nPin- Priorité: 90 / n '> /etc/apt/preferences.d/limit-unstable sudo apt update sudo apt install wireguard

Nous ne devons pas oublier que ce VPN est également compatible avec les systèmes d'exploitation tels que FreeBSD, OpenBSD et même avec OpenWRT pour les routeurs, car il suffit de l'installer simplement 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 ainsi que le App Store respectivement:

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 également pour configurer le serveur, cependant, nous pourrions également le faire directement dans le logiciel Windows.

La route pour exécuter le serveur WireGuard sur Debian est / etc / wireguard /, donc nous allons aller sur cette route avec la commande suivante:

cd /etc/wireguard/

Génération de clés paires publiques-privées pour le serveur

Pour générer la paire de clés publique et privée directement à cet emplacement, nous devons simplement mettre:

wg genkey | tee claveprivadaservidor | wg pubkey > clavepublicaservidor

Nous allons maintenant avoir deux fichiers, un avec la clé publique et un avec le privé:

  • 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 clés paires 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 emplacement, mais avec un autre nom.

wg genkey | tee claveprivadacliente1 | wg pubkey > clavepublicacliente1

Nous allons maintenant avoir deux fichiers, un avec la clé publique et un avec le privé:

  • 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 un ” Interfaces », Dans cette section, nous pouvons indiquer la adresse IP privée qui identifie le serveur lorsque les clients se connectent. Nous devons nous rappeler que ce VPN est L3, afin que nous puissions mettre n'importe quelle adresse IP privée qui n'est pas utilisée à un moment donné. 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 192.168.2.1 est le serveur lui-même, et les autres adresses IP qui sont les clients) . Avec la syntaxe de « Adresse »Nous allons mettre le sous-réseau VPN que nous voulons.

Dans " PrivateKey »Nous devrons saisir la clé privée que nous avons préalablement générée pour le serveur. Dans " Port d'écoute »Nous mettrons le port UDP que nous voulons utiliser pour le serveur, ce port sera celui que nous aurons plus tard à« ouvrir »en NAT si nous sommes derrière un routeur avec NAT.

Enfin, dans cette section de «Interface», nous pouvons également définir les commandes à exécuter après avoir levé l'interface virtuelle avec «PostUp» et après avoir lancé 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 ” Poire »Est l'endroit où nous devrons mettre la liste des clients que nous permettons de connecter. Dans ce cas, nous ne connecterons qu'un «pair», nous définirons donc votre clé publique avec « Clé publique »Que nous avons créé précédemment (ou que le client nous a fourni, car il est possible qu'il ait été généré par lui), et aussi Nous pouvons indiquer si nous autorisons ce client avec une adresse IP spécifique à se connecter. Avec le " IP autorisés »Directive, nous pouvons filtrer les adresses IP source, si nous mettons 0.0.0.0/0 cela signifie que nous autorisons n'importe quelle adresse IP.

[Interface] Adresse = 192.168.2.1/24
Clé privée = 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c =
Port d'écoute = 51820

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

[Peer] PublicKey = 6c12jLkKzgU9len1kQ / 6Fc61xm + LL98TPPlLsri8klE =
IP autorisés = 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] Adresse = 192.168.2.1/24
Clé privée = 6JcquylvtJsHNCdWrYMj28XsLIFJUVjlr2y5o27rO2c =
Port d'écoute = 51820

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

[Peer] PublicKey = 6c12jLkKzgU9len1kQ / 6Fc61xm + LL98TPPlLsri8klE =
IP autorisés = 0.0.0.0/0

[Peer] PublicKey = clé publique client 2
IP autorisés = 0.0.0.0/0

[Peer] PublicKey = clé publique client 3
IP autorisés = 0.0.0.0/0

[/ code]

Le fichier de configuration peut être appelé «wg0.conf», car 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

Lorsque vous le démarrez, WireGuard sera chargé de créer l'interface virtuelle, de mettre l'adresse IP, le 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

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.

Chez le client, nous devrons avoir un ” Interfaces », Dans cette section, nous pouvons indiquer la 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 moment donné. 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 192.168.2.1 est le serveur lui-même, et l'adresse 192.168.2.2 à partir de maintenant , soyez les clients, avec la syntaxe de ” Adresse "Nous allons mettre le sous-réseau VPN que nous voulons.

Dans " PrivateKey »Nous devrons saisir la clé privée que nous avons préalablement générée pour le client.

Dans la section ” Poire "C'est là que nous devrons mettre la clé publique avec" Clé publique »Du serveur WireGuard auquel nous allons nous connecter, c'est-à-dire que cette clé publique doit nous être fournie par le serveur. A cette occasion, nous pouvons également utiliser le ” IP autorisés », Mais l'opération est différente, à cette occasion, 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 le trafic Internet par 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 le « Endpoint »Directive, nous définirons l'adresse IP publique du serveur sur lequel nous exécutons WireGuard VPN, suivi de deux points (:) du port UDP utilisé. Nous devons nous rappeler que WireGuard utilise UDP, nous ne devons donc pas le filtrer sur 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 en permanence des données 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 habituelles, cela fonctionne parfaitement, mais si nous sommes derrière un NAT ou pare-feu, il est possible que la communication soit coupée car aucune donnée n'est transférée, il est donc nécessaire de configurer un «keep alive». Pour configurer Keep Alive, indiquez simplement la directive «PersistentKeepAlive» et entrez un entier qui signifie les secondes de maintien en vie. Selon la documentation officielle, définir 25 secondes est suffisant pour la plupart des pare-feu et des systèmes NAT, si nous définissons 0, cela désactive cette fonction. Si nous sommes derrière NAT ou un pare-feu et que nous voulons recevoir les connexions entrantes après une longue période sans trafic, cette directive sera nécessaire, sinon nous ne la mettrons pas.

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

[Peer] PublicKey = xeTkJjjBUyp8paxTgajwDa + qWjrD2RpXlJRSHMwcGDQ =
IP autorisés = 0.0.0.0/0
Point final = 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 nous connecter à partir de zéro un client, mais nous devons «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é établie correctement. Nous ne pouvons pas mettre dans la section "Interface / Adresse" une adresse IP privée qui est déjà utilisée dans les clients Windows, car nous aurons une erreur dans la connexion.

Comme vous l'avez vu, la configuration du WireGuard VPN est vraiment simple et rapide

Performances VPN WireGuard 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 sur le réseau local pour éviter les problèmes avec l'opérateur, afin que nous puissions mesurer les performances maximales réelles qui sont en mesure de nous fournir un spécifique au matériel.

La configuration du serveur VPN que nous avons utilisée (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 (en utilisant UDP) et AES-256-GCM, nous avons utilisé Virtualization Station avec Debian.
  • iperf3 installé manuellement dans QTS et également dans Debian virtualisé.

La configuration du client VPN que nous avons utilisée (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 un câblage CAT7 et un Commutateur D-Link DXS-1210-10TS pour la connexion des deux dispositifs . Système d'exploitation utilisé dans les tests: Windows 10 1909.
  • Client Windows 10 L2TP / IPsec
  • Dernière version d'OpenVPN (2.4.8)
  • iperf 3 dans 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 OpenVPN, nous pouvons 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 vous connecter en toute sécurité à notre domicile, à notre entreprise ou à Internet de n'importe où de manière sécurisée.