Introduction
WireGuard est un réseau privé virtuel (VPN) léger qui prend en charge les connexions IPv4 et IPv6. Un VPN vous permet de traverser des réseaux non sécurisés comme si vous étiez sur un réseau privé. Cela vous donne la liberté d’accéder à Internet de manière sûre et sécurisée depuis votre smartphone ou votre ordinateur portable lorsque vous êtes connecté à un réseau non sécurisé, comme le WiFi dans un hôtel ou un café.
Le cryptage de WireGuard repose sur des clés publiques et privées pour que les pairs établissent un tunnel chiffré entre eux. Chaque version de WireGuard utilise une suite cryptographique spécifique pour garantir la simplicité, la sécurité et la compatibilité avec les pairs.
En comparaison, d’autres logiciels VPN tels que OpenVPN et IPSec utilisent la sécurité des couches de transport (TLS) et des certificats pour authentifier et établir des tunnels chiffrés entre les systèmes. Différentes versions de TLS incluent la prise en charge de centaines de suites cryptographiques et d’algorithmes différents, et bien que cela permette une grande flexibilité pour prendre en charge différents clients, cela rend également la configuration d’un VPN utilisant TLS plus longue, complexe et sujette aux erreurs.
Dans ce tutoriel, vous configurerez WireGuard sur un serveur Ubuntu 22.04, puis configurerez une autre machine pour se connecter à celui-ci en tant que pair en utilisant à la fois des connexions IPv4 et IPv6 (communément appelée connexion dual stack). Vous apprendrez également à router le trafic Internet du pair à travers le serveur WireGuard dans une configuration de passerelle, en plus d’utiliser le VPN pour un tunnel pair-à-pair chiffré.
Pour les besoins de ce tutoriel, nous configurerons un autre système Ubuntu 22.04 en tant que pair (également appelé client) du serveur WireGuard. Les tutoriels ultérieurs de cette série expliqueront comment installer et exécuter WireGuard sur des systèmes et appareils Windows, macOS, Android et iOS.
Remarque : Si vous envisagez de configurer WireGuard sur un Droplet DigitalOcean, sachez que nous, comme de nombreux fournisseurs d’hébergement, facturons les dépassements de bande passante. Pour cette raison, veuillez être attentif à la quantité de trafic que votre serveur gère. Consultez cette page pour plus d’informations.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin de :
- Un serveur Ubuntu 22.04 avec un utilisateur sudo non root et un pare-feu activé. Pour configurer cela, vous pouvez suivre notre tutoriel Configuration initiale du serveur avec Ubuntu 22.04. Nous nous référerons à cela comme le Serveur WireGuard tout au long de ce guide.
- Vous aurez besoin d’une machine cliente que vous utiliserez pour vous connecter à votre serveur WireGuard. Dans ce tutoriel, nous désignerons cette machine sous le nom de Pair WireGuard. Aux fins de ce tutoriel, il est recommandé d’utiliser votre machine locale comme Pair WireGuard, mais vous pouvez utiliser des serveurs distants ou des téléphones mobiles comme clients si vous préférez. Si vous utilisez un système distant, assurez-vous de suivre toutes les sections facultatives plus tard dans ce tutoriel ou vous risquez de vous verrouiller hors du système.
- Pour utiliser WireGuard avec IPv6, vous devrez également vous assurer que votre serveur est configuré pour prendre en charge ce type de trafic. Si vous souhaitez activer la prise en charge IPv6 avec WireGuard et que vous utilisez un Droplet DigitalOcean, veuillez vous référer à cette page de documentation Comment Activer IPv6 sur les Droplets. Vous pouvez ajouter la prise en charge IPv6 lors de la création d’un Droplet ou ultérieurement en suivant les instructions sur cette page.
Étape 1 — Installation de WireGuard et Génération d’une Paire de Clés
La première étape de ce tutoriel est d’installer WireGuard sur votre serveur. Pour commencer, mettez à jour l’index des packages de votre serveur WireGuard et installez WireGuard en utilisant les commandes suivantes. Vous pouvez être invité à fournir le mot de passe de votre utilisateur sudo si c’est la première fois que vous utilisez sudo
dans cette session :
Maintenant que vous avez installé WireGuard, la prochaine étape consiste à générer une paire de clés privée et publique pour le serveur. Vous utiliserez les commandes intégrées wg genkey
et wg pubkey
pour créer les clés, puis ajouterez la clé privée au fichier de configuration de WireGuard.
Vous devrez également modifier les autorisations sur la clé que vous venez de créer en utilisant la commande chmod
, car par défaut, le fichier est lisible par n’importe quel utilisateur sur votre serveur.
Créez la clé privée pour WireGuard et modifiez ses autorisations en utilisant les commandes suivantes :
La commande sudo chmod go=...
supprime toutes les autorisations sur le fichier pour les utilisateurs et les groupes autres que l’utilisateur root pour garantir que seul celui-ci peut accéder à la clé privée.
Vous devriez recevoir une seule ligne de sortie encodée en base64
, qui est la clé privée. Une copie de la sortie est également stockée dans le fichier /etc/wireguard/private.key
pour référence future par la partie tee
de la commande. Notez soigneusement la clé privée qui est générée car vous devrez l’ajouter au fichier de configuration de WireGuard plus tard dans cette section.
La prochaine étape consiste à créer la clé publique correspondante, qui est dérivée de la clé privée. Utilisez la commande suivante pour créer le fichier de clé publique :
Cette commande se compose de trois commandes individuelles qui sont enchaînées ensemble à l’aide de l’opérateur |
(pipe).
sudo cat /etc/wireguard/private.key
: cette commande lit le fichier de clé privée et le renvoie vers le flux de sortie standard.wg pubkey
: la deuxième commande prend la sortie de la première commande comme son entrée standard et la traite pour générer une clé publique.sudo tee /etc/wireguard/public.key
: la dernière commande prend la sortie de la commande de génération de clé publique et la redirige vers le fichier nommé/etc/wireguard/public.key
.
Lorsque vous exécutez la commande, vous recevrez à nouveau une seule ligne de sortie encodée en base64
, qui est la clé publique de votre serveur WireGuard. Copiez-la quelque part pour référence, car vous devrez distribuer la clé publique à chaque pair qui se connecte au serveur.
Étape 2 — Choix des adresses IPv4 et IPv6
Dans la section précédente, vous avez installé WireGuard et généré une paire de clés qui sera utilisée pour chiffrer le trafic vers et depuis le serveur. Dans cette section, vous allez créer un fichier de configuration pour le serveur et configurer WireGuard pour démarrer automatiquement lors du redémarrage du serveur. Vous allez également définir des adresses IPv4 et IPv6 privées à utiliser avec votre serveur et vos pairs WireGuard.
Si vous prévoyez d’utiliser à la fois des adresses IPv4 et IPv6, suivez ces deux sections. Sinon, suivez les instructions de la section appropriée en fonction des besoins en réseau de votre VPN.
Étape 2(a) — Choix d’une plage d’adresses IPv4
Si vous utilisez votre serveur WireGuard avec des pairs IPv4, le serveur a besoin d’une plage d’adresses IPv4 privées à utiliser pour les clients et pour son interface de tunnel. Vous pouvez choisir n’importe quelle plage d’adresses IP parmi les blocs d’adresses réservés suivants (si vous souhaitez en savoir plus sur la manière dont ces blocs sont alloués, consultez la spécification RFC 1918):
10.0.0.0
à10.255.255.255
(préfixe 10/8)172.16.0.0
à172.31.255.255
(préfixe 172.16/12)192.168.0.0
à192.168.255.255
(préfixe 192.168/16)
Pour les besoins de ce tutoriel, nous utiliserons 10.8.0.0/24
comme bloc d’adresses IP issu de la première plage d’IP réservées. Cette plage permettra jusqu’à 255 connexions de pairs différentes et ne devrait généralement pas avoir d’adresses qui se chevauchent ou entrent en conflit avec d’autres plages d’IP privées. N’hésitez pas à choisir une plage d’adresses qui fonctionne avec votre configuration réseau si cette plage d’exemple n’est pas compatible avec vos réseaux.
Le serveur WireGuard utilisera une seule adresse IP de la plage pour son adresse IPv4 de tunnel privé. Nous utiliserons 10.8.0.1/24
ici, mais toute adresse dans la plage de 10.8.0.1
à 10.8.0.255
peut être utilisée. Notez l’adresse IP que vous choisissez si vous utilisez quelque chose de différent de 10.8.0.1/24
. Vous ajouterez cette adresse IPv4 au fichier de configuration que vous définissez dans Étape 3 — Création d’une configuration de serveur WireGuard.
Étape 2(b) — Choix d’une plage IPv6
Si vous utilisez WireGuard avec IPv6, vous devrez générer un préfixe d’adresse unicast IPv6 local unique basé sur l’algorithme de RFC 4193. Les adresses que vous utilisez avec WireGuard seront associées à une interface de tunnel virtuelle. Vous devrez accomplir quelques étapes pour générer un préfixe IPv6 aléatoire et unique dans le bloc fd00::/8
des adresses IPv6 privées réservées.
Selon le RFC, la manière recommandée d’obtenir un préfixe IPv6 unique est de combiner l’heure de la journée avec une valeur d’identification unique provenant d’un système tel qu’un numéro de série ou un identifiant de périphérique. Ces valeurs sont ensuite hachées et tronquées, ce qui donne un ensemble de bits pouvant être utilisés comme adresse unique dans le bloc privé réservé fd00::/8
des adresses IP.
Pour commencer à générer une plage IPv6 pour votre serveur WireGuard, collectez un horodatage de 64 bits en utilisant l’utilitaire date
avec la commande suivante :
Vous recevrez un nombre tel que celui-ci, qui est le nombre de secondes (le %s
dans la commande date
), et les nanosecondes (le %N
) depuis 1970-01-01 00:00:00 UTC combinés ensemble :
Output1650301699497770167
Enregistrez la valeur quelque part pour une utilisation ultérieure dans cette section. Ensuite, copiez la valeur machine-id
pour votre serveur à partir du fichier /var/lib/dbus/machine-id
. Cet identifiant est unique pour votre système et ne devrait pas changer tant que le serveur existe.
Vous recevrez une sortie comme celle-ci :
/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb
Maintenant, vous devez combiner l’horodatage avec le machine-id
et hacher la valeur résultante en utilisant l’algorithme SHA-1. La commande utilisera le format suivant :
printf <timestamp><machine-id> | sha1sum
Exécutez la commande en substituant vos valeurs d’horodatage et d’identité de machine :
Vous recevrez une valeur de hachage comme celle-ci :
Output442adea1488d96388dae9ab816045b24609a6c18 -
Remarquez que la sortie de la commande sha1sum
est en hexadécimal, donc la sortie utilise deux caractères pour représenter un seul octet de données. Par exemple, 4f
et 26
dans la sortie de l’exemple sont les deux premiers octets des données hachées.
L’algorithme dans le RFC ne nécessite que les 40 bits les moins significatifs (trailing), ou 5 octets, de la sortie hachée. Utilisez la commande cut
pour imprimer les 5 derniers octets encodés en hexadécimal depuis le hachage :
L’argument -c
indique à la commande cut
de sélectionner uniquement un ensemble spécifié de caractères. L’argument 31-
indique à cut
d’imprimer tous les caractères à partir de la position 31 jusqu’à la fin de la ligne d’entrée.
Vous devriez recevoir une sortie comme suit:
Output24609a6c18
Dans cette sortie d’exemple, l’ensemble d’octets est : 24 60 9a 6c 18
.
Maintenant, vous pouvez construire votre préfixe de réseau IPv6 unique en ajoutant les 5 octets que vous avez générés avec le préfixe fd
, en séparant chaque 2 octets avec un :
deux-points pour plus de lisibilité. Étant donné que chaque sous-réseau dans votre préfixe unique peut contenir un total de 18 446 744 073 709 551 616 adresses IPv6 possibles, vous pouvez limiter le sous-réseau à une taille standard de /64
pour plus de simplicité.
En utilisant les octets précédemment générés avec la taille de sous-réseau /64
, le préfixe résultant sera le suivant:
Unique Local IPv6 Address Prefixfd24:609a:6c18::/64
Cette plage fd24:609a:6c18::/64
est ce que vous utiliserez pour attribuer des adresses IP individuelles à vos interfaces de tunnel WireGuard sur le serveur et les pairs. Pour attribuer une adresse IP au serveur, ajoutez un 1
après les caractères ::
finaux. L’adresse résultante sera fd24:609a:6c18::1/64
. Les pairs peuvent utiliser n’importe quelle adresse IP dans la plage, mais généralement vous augmenterez la valeur de un chaque fois que vous ajoutez un pair par exemple fd24:609a:6c18::2/64
. Notez l’adresse IP et procédez à la configuration du serveur WireGuard dans la prochaine section de ce tutoriel.
Étape 3 — Création d’une configuration de serveur WireGuard
Avant de créer la configuration de votre serveur WireGuard, vous aurez besoin des éléments suivants :
-
Assurez-vous d’avoir la clé privée disponible depuis l’étape 1 — Installation de WireGuard et génération d’une paire de clés.
-
Si vous utilisez WireGuard avec IPv4, vous aurez besoin de l’adresse IP que vous avez choisie pour le serveur dans l’étape 2(a) — Choix d’une plage IPv4, qui dans cet exemple est
10.8.0.1/24
. -
Si vous utilisez WireGuard avec IPv6, vous aurez besoin de l’adresse IP du serveur que vous avez générée dans l’étape 2(b) — Choix d’une plage IPv6. Dans cet exemple, l’IP est
fd24:609a:6c18::1/64
.
Une fois que vous avez la clé privée requise et les adresses IP, créez un nouveau fichier de configuration en utilisant nano
ou votre éditeur préféré en exécutant la commande suivante :
Ajoutez les lignes suivantes au fichier, en remplaçant votre clé privée à la place de la valeur base64_encoded_private_key_goes_here
surlignée, et les adresses IP sur la ligne Address
. Vous pouvez également modifier la ligne ListenPort
si vous souhaitez que WireGuard soit disponible sur un port différent :
/etc/wireguard/wg0.conf[Interface]
PrivateKey = base64_encoded_private_key_goes_here
Address = 10.8.0.1/24, fd24:609a:6c18::1/64
ListenPort = 51820
SaveConfig = true
La ligne SaveConfig
assure que lorsqu’une interface WireGuard est arrêtée, les modifications seront enregistrées dans le fichier de configuration.
Enregistrez et fermez le fichier /etc/wireguard/wg0.conf
. Si vous utilisez nano
, vous pouvez le faire avec CTRL+X
, puis Y
et ENTER
pour confirmer. Vous avez maintenant une configuration initiale du serveur que vous pouvez modifier en fonction de la façon dont vous prévoyez d’utiliser votre serveur VPN WireGuard.
Étape 4 — Ajustement de la configuration réseau du serveur WireGuard
Si vous utilisez WireGuard pour connecter un pair au serveur WireGuard afin d’accéder uniquement aux services sur le serveur, alors vous n’avez pas besoin de compléter cette section. Si vous souhaitez router le trafic Internet de votre pair WireGuard via le serveur WireGuard, vous devrez configurer le transfert IP en suivant cette section du tutoriel.
Pour configurer le transfert, ouvrez le fichier /etc/sysctl.conf
en utilisant nano
ou votre éditeur préféré:
Si vous utilisez IPv4 avec WireGuard, ajoutez la ligne suivante en bas du fichier:
net.ipv4.ip_forward=1
Si vous utilisez IPv6 avec WireGuard, ajoutez cette ligne en bas du fichier:
net.ipv6.conf.all.forwarding=1
Si vous utilisez à la fois IPv4 et IPv6, assurez-vous d’inclure les deux lignes. Enregistrez et fermez le fichier lorsque vous avez terminé.
Pour lire le fichier et charger les nouvelles valeurs pour votre session terminal actuelle, exécutez:
Outputnet.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
Maintenant, votre serveur WireGuard pourra transférer le trafic entrant depuis le périphérique virtuel Ethernet VPN vers d’autres sur le serveur, et de là vers Internet public. En utilisant cette configuration, vous pourrez router tout le trafic web de votre pair WireGuard via l’adresse IP de votre serveur, et l’adresse IP publique de votre client sera efficacement masquée.
Cependant, avant que le trafic puisse être correctement routé via votre serveur, vous devrez configurer quelques règles de pare-feu. Ces règles garantiront que le trafic vers et depuis votre serveur WireGuard et vos pairs s’écoule correctement.
Étape 5 — Configuration du pare-feu du serveur WireGuard
Dans cette section, vous allez modifier la configuration du serveur WireGuard pour ajouter des règles de pare-feu qui garantiront que le trafic vers et depuis le serveur et les clients est routé correctement. Comme pour la section précédente, sautez cette étape si vous n’utilisez votre VPN WireGuard que pour une connexion machine à machine pour accéder à des ressources qui sont restreintes à votre VPN.
Pour autoriser le trafic du VPN WireGuard à travers le pare-feu du serveur, vous devrez activer le masquerading, qui est un concept iptables qui fournit une traduction dynamique des adresses réseau (NAT) pour router correctement les connexions des clients.
Trouvez d’abord l’interface réseau publique de votre serveur WireGuard en utilisant la sous-commande ip route
:
L’interface publique est la chaîne trouvée dans la sortie de cette commande qui suit le mot « dev ». Par exemple, ce résultat montre l’interface nommée eth0
, qui est surlignée ci-dessous:
Outputdefault via 203.0.113.1 dev eth0 proto static
Notez le nom de votre appareil car vous le ajouterez aux règles iptables
à l’étape suivante.
Pour ajouter des règles de pare-feu à votre serveur WireGuard, ouvrez à nouveau le fichier /etc/wireguard/wg0.conf
avec nano
ou votre éditeur préféré.
En bas du fichier après la ligne SaveConfig = true
, collez les lignes suivantes:
/etc/wireguard/wg0.conf. . .
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Les lignes PostUp
s’exécuteront lorsque le serveur WireGuard démarrera le tunnel VPN virtuel. Dans l’exemple ici, il ajoutera trois règles ufw
et iptables
:
ufw route allow in on wg0 out on eth0
– Cette règle autorisera la transmission du trafic IPv4 et IPv6 entrant sur l’interface VPNwg0
vers l’interface réseaueth0
sur le serveur. Elle fonctionne en conjonction avec les valeurs sysctlnet.ipv4.ip_forward
etnet.ipv6.conf.all.forwarding
que vous avez configurées dans la section précédente.iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
– Cette règle configure le masquage et réécrit le trafic IPv4 entrant sur l’interface VPNwg0
pour qu’il semble provenir directement de l’adresse IPv4 publique du serveur WireGuard.ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
– Cette règle configure le masquage et réécrit le trafic IPv6 entrant sur l’interface VPNwg0
pour qu’il semble provenir directement de l’adresse IPv6 publique du serveur WireGuard.
Les règles PreDown
s’exécutent lorsque le serveur WireGuard arrête le tunnel VPN virtuel. Ces règles sont l’inverse des règles PostUp
et fonctionnent pour annuler les règles de transfert et de masquage pour l’interface VPN lorsque le VPN est arrêté.
Dans les deux cas, modifiez la configuration pour inclure ou exclure les règles IPv4 et IPv6 appropriées pour votre VPN. Par exemple, si vous n’utilisez que IPv4, vous pouvez exclure les lignes avec les commandes ip6tables
.
Inversement, si vous n’utilisez que IPv6, alors modifiez la configuration pour inclure uniquement les commandes ip6tables
. Les lignes ufw
doivent exister pour toute combinaison de réseaux IPv4 et IPv6. Enregistrez et fermez le fichier lorsque vous avez terminé.
La dernière étape de la configuration du pare-feu sur votre serveur WireGuard est de permettre le trafic vers et depuis le port UDP de WireGuard lui-même. Si vous n’avez pas modifié le port dans le fichier /etc/wireguard/wg0.conf
du serveur, le port que vous ouvrirez est 51820
. Si vous avez choisi un port différent lors de la modification de la configuration, assurez-vous de le substituer dans la commande UFW suivante.
Si vous avez oublié d’ouvrir le port SSH en suivant le tutoriel préalable, ajoutez-le également ici:
Note: Si vous utilisez un pare-feu différent ou si vous avez personnalisé votre configuration UFW, vous devrez peut-être ajouter des règles de pare-feu supplémentaires. Par exemple, si vous décidez de faire passer tout votre trafic réseau via la connexion VPN, vous devrez vous assurer que le trafic sur le port 53
est autorisé pour les demandes DNS, et les ports comme 80
et 443
pour le trafic HTTP et HTTPS respectivement. S’il existe d’autres protocoles que vous utilisez via le VPN, vous devrez également ajouter des règles pour eux.
Après avoir ajouté ces règles, désactivez et réactivez UFW pour le redémarrer et charger les modifications de tous les fichiers que vous avez modifiés:
Vous pouvez confirmer que les règles sont en place en exécutant la commande ufw status
. Exécutez-la, et vous devriez recevoir une sortie comme celle-ci:
OutputStatus: active
To Action From
-- ------ ----
51280/udp ALLOW Anywhere
22/tcp ALLOW Anywhere
51280/udp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
Votre serveur WireGuard est désormais configuré pour gérer correctement le trafic VPN, y compris le transfert et le masquage pour les pairs. Avec les règles pare-feu en place, vous pouvez démarrer le service WireGuard lui-même pour écouter les connexions des pairs.
Étape 6 — Démarrage du serveur WireGuard
WireGuard peut être configuré pour s’exécuter en tant que service systemd en utilisant son script intégré wg-quick
. Bien que vous puissiez utiliser manuellement la commande wg
pour créer le tunnel chaque fois que vous souhaitez utiliser le VPN, le faire est un processus manuel qui devient répétitif et sujet aux erreurs. Au lieu de cela, vous pouvez utiliser systemctl
pour gérer le tunnel avec l’aide du script wg-quick
.
L’utilisation d’un service systemd signifie que vous pouvez configurer WireGuard pour démarrer au démarrage afin de pouvoir vous connecter à votre VPN à tout moment tant que le serveur est en cours d’exécution. Pour ce faire, activez le service wg-quick
pour le tunnel wg0
que vous avez défini en l’ajoutant à systemctl
:
Remarquez que la commande spécifie le nom du tunnel wg0
en tant que partie du nom du service. Ce nom correspond au fichier de configuration /etc/wireguard/wg0.conf
. Cette approche de nommage signifie que vous pouvez créer autant de tunnels VPN distincts que vous le souhaitez en utilisant votre serveur.
Par exemple, vous pourriez avoir un dispositif tunnel nommé prod
et son fichier de configuration serait /etc/wireguard/prod.conf
. Chaque configuration de tunnel peut contenir différents paramètres IPv4, IPv6 et de pare-feu client. De cette façon, vous pouvez prendre en charge plusieurs connexions de pairs différentes, chacune avec leurs propres adresses IP et règles de routage uniques.
Maintenant, démarrez le service :
Vérifiez que le service WireGuard est actif avec la commande suivante. Vous devriez voir actif (en cours d'exécution)
dans la sortie :
Output● [email protected] - WireGuard via wg-quick(8) for wg0
Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago
Docs: man:wg-quick(8)
man:wg(8)
https://www.wireguard.com/
https://www.wireguard.com/quickstart/
https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
Main PID: 98834 (code=exited, status=0/SUCCESS)
CPU: 193ms
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3
Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added
Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6)
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
La sortie montre les commandes ip
utilisées pour créer le dispositif virtuel wg0
et lui attribuer les adresses IPv4 et IPv6 que vous avez ajoutées au fichier de configuration. Vous pouvez utiliser ces règles pour dépanner le tunnel, ou avec la commande wg
elle-même si vous souhaitez essayer de configurer manuellement l’interface VPN.
Avec le serveur configuré et en cours d’exécution, la prochaine étape consiste à configurer votre machine cliente en tant que pair WireGuard et à vous connecter au serveur WireGuard.
Étape 7 — Configuration d’un pair WireGuard
La configuration d’un pair WireGuard est similaire à la configuration du serveur WireGuard. Une fois que vous avez installé le logiciel client, vous générez une paire de clés publique et privée, choisissez une ou plusieurs adresses IP pour le pair, définissez un fichier de configuration pour le pair, puis démarrez le tunnel en utilisant le script wg-quick
.
Vous pouvez ajouter autant de pairs que vous le souhaitez à votre VPN en générant une paire de clés et une configuration en suivant les étapes suivantes. Si vous ajoutez plusieurs pairs au VPN, assurez-vous de suivre leurs adresses IP privées pour éviter les collisions.
Pour configurer le Peer WireGuard, assurez-vous d’avoir le paquet WireGuard installé en utilisant les commandes apt
suivantes. Sur le pair WireGuard, exécutez :
Création de la paire de clés du pair WireGuard
Ensuite, vous devrez générer la paire de clés sur le pair en utilisant les mêmes étapes que celles utilisées sur le serveur. À partir de votre machine locale ou du serveur distant qui servira de pair, procédez à la création de la clé privée du pair en utilisant les commandes suivantes :
Vous recevrez à nouveau une ligne unique de sortie encodée en base64, qui est la clé privée. Une copie de la sortie est également stockée dans le fichier /etc/wireguard/private.key
. Notez attentivement la clé privée qui est générée, car vous devrez l’ajouter au fichier de configuration de WireGuard plus tard dans cette section.
Ensuite, utilisez la commande suivante pour créer le fichier de clé publique :
Vous recevrez à nouveau une ligne unique de sortie encodée en base64, qui est la clé publique de votre pair WireGuard. Copiez-la quelque part pour référence, car vous devrez distribuer la clé publique au serveur WireGuard afin d’établir une connexion chiffrée.
Création du fichier de configuration du pair WireGuard
Maintenant que vous avez une paire de clés, vous pouvez créer un fichier de configuration pour le pair contenant toutes les informations dont il a besoin pour établir une connexion avec le serveur WireGuard.
Vous aurez besoin de quelques éléments d’information pour le fichier de configuration :
-
La clé privée encodée en
base64
que vous avez générée sur le pair. -
Les plages d’adresses IPv4 et IPv6 que vous avez définies sur le serveur WireGuard.
-
La clé publique encodée en
base64
du serveur WireGuard. -
L’adresse IP publique et le numéro de port du serveur WireGuard. Habituellement, il s’agira de l’adresse IPv4, mais si votre serveur a une adresse IPv6 et que votre machine cliente a une connexion IPv6 à Internet, vous pouvez utiliser cela au lieu d’IPv4.
Avec toutes ces informations en main, ouvrez un nouveau fichier /etc/wireguard/wg0.conf
sur la machine Peer de WireGuard en utilisant nano
ou votre éditeur préféré :
Ajoutez les lignes suivantes au fichier, en substituant les données diverses dans les sections surlignées selon les besoins :
/etc/wireguard/wg0.conf[Interface]
PrivateKey = base64_encoded_peer_private_key_goes_here
Address = 10.8.0.2/24
Address = fd24:609a:6c18::2/64
[Peer]
PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64
Endpoint = 203.0.113.1:51820
Remarquez comment la première ligne Address
utilise une adresse IPv4 du sous-réseau 10.8.0.0/24
que vous avez choisie précédemment. Cette adresse IP peut être n’importe quoi dans le sous-réseau tant qu’elle est différente de celle du serveur. Incrémenter les adresses de 1 à chaque fois que vous ajoutez un pair est généralement le moyen le plus facile d’attribuer des adresses IP.
De même, remarquez comment la deuxième ligne Address
utilise une adresse IPv6 du sous-réseau que vous avez généré précédemment, et incrémente l’adresse du serveur de un. Encore une fois, n’importe quelle adresse dans la plage est valide si vous décidez d’utiliser une adresse différente.
L’autre partie notable du fichier est la dernière ligne AllowedIPs
. Ces deux plages IPv4 et IPv6 indiquent au pair d’envoyer du trafic uniquement via le VPN si le système de destination a une adresse IP dans l’une ou l’autre plage. En utilisant la directive AllowedIPs
, vous pouvez restreindre le VPN sur le pair pour qu’il se connecte uniquement à d’autres pairs et services sur le VPN, ou vous pouvez configurer le paramètre pour faire passer tout le trafic via le VPN et utiliser le serveur WireGuard comme passerelle.
Si vous n’utilisez que IPv4, alors excluez la plage fd24:609a:6c18::/64
(y compris la virgule ,
finale). De même, si vous n’utilisez que IPv6, incluez uniquement le préfixe fd24:609a:6c18::/64
et laissez de côté la plage IPv4 10.8.0.0/24
.
Dans les deux cas, si vous souhaitez envoyer tout le trafic de vos pairs via le VPN et utiliser le serveur WireGuard comme passerelle pour tout le trafic, vous pouvez utiliser 0.0.0.0/0
, qui représente l’ensemble de l’espace d’adressage IPv4, et ::/0
pour l’ensemble de l’espace d’adressage IPv6.
(Optionnel) Configuration d’un Pair pour Rooter Tout le Trafic Via le Tunnel
Si vous avez choisi de router tout le trafic du pair via le tunnel en utilisant les routes 0.0.0.0/0
ou ::/0
et que le pair est un système distant, alors vous devrez suivre les étapes de cette section. Si votre pair est un système local, il est préférable de sauter cette section.
Pour les pairs distants auxquels vous accédez via SSH ou un autre protocole en utilisant une adresse IP publique, vous devrez ajouter des règles supplémentaires au fichier wg0.conf
du pair. Ces règles garantiront que vous pouvez toujours vous connecter au système depuis l’extérieur du tunnel lorsqu’il est connecté. Sinon, lorsque le tunnel est établi, tout le trafic qui serait normalement géré sur l’interface réseau publique ne sera pas routé correctement pour contourner l’interface de tunnel wg0
, ce qui rendra le système distant inaccessible.
Tout d’abord, vous devrez déterminer l’adresse IP que le système utilise comme passerelle par défaut. Exécutez la commande ip route
suivante :
Vous recevrez une sortie similaire à ce qui suit :
Outputdefault via 203.0.113.1 dev eth0 proto static
Notez l’adresse IP en surbrillance de la passerelle 203.0.113.1
pour une utilisation ultérieure, et du périphérique eth0
. Le nom de votre périphérique peut être différent. Si tel est le cas, remplacez-le par eth0
dans les commandes suivantes.
Ensuite, trouvez l’adresse IP publique du système en examinant le périphérique avec la commande ip address show
:
Vous recevrez une sortie semblable à ce qui suit:
Outputeth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64
Dans cet exemple de sortie, l’adresse IP en surbrillance 203.0.113.5
(sans le suffixe /20
) est l’adresse publique qui est attribuée au périphérique eth0
que vous devrez ajouter à la configuration de WireGuard.
Maintenant, ouvrez le fichier /etc/wireguard/wg0.conf
du pair WireGuard avec nano
ou votre éditeur préféré.
Avant la ligne [Peer]
, ajoutez les 4 lignes suivantes:
PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1
[Peer]
. . .
Ces lignes créeront une règle de routage personnalisée et ajouteront une route personnalisée pour s’assurer que le trafic public vers le système utilise la passerelle par défaut.
PostUp = ip rule add table 200 from 203.0.113.5
– Cette commande crée une règle qui vérifie toutes les entrées de routage dans la table numérotée200
lorsque l’adresse IP correspond à l’adresse publique du système203.0.113.5
.PostUp = ip route add table 200 default via 203.0.113.1
– Cette commande garantit que tout le trafic traité par la table200
utilisera la passerelle203.0.113.1
pour le routage, au lieu de l’interface WireGuard.
Les lignes PreDown
suppriment la règle personnalisée et la route lorsque le tunnel est arrêté.
Remarque : Le numéro de table 200
est arbitraire lors de la construction de ces règles. Vous pouvez utiliser une valeur entre 2 et 252, ou vous pouvez utiliser un nom personnalisé en ajoutant une étiquette au fichier /etc/iproute2/rt_tables
et en faisant référence au nom plutôt qu’à la valeur numérique.
Pour plus d’informations sur le fonctionnement des tables de routage sous Linux, consultez la section Tables de Routage du Guide de l’Administration Réseau de Couche IP avec Linux.
Si vous routez tout le trafic des pairs via le VPN, assurez-vous d’avoir configuré les bonnes règles sysctl
et iptables
sur le serveur WireGuard dans l’Étape 4 — Ajustement de la Configuration Réseau du Serveur WireGuard et l’Étape 5 — Configuration du Pare-feu du Serveur WireGuard.
(Optionnel) Configuration des Résolveurs DNS du Pair WireGuard
Si vous utilisez le serveur WireGuard en tant que passerelle VPN pour tout le trafic de vos pairs, vous devrez ajouter une ligne à la section [Interface]
qui spécifie les résolveurs DNS. Si vous n’ajoutez pas ce paramètre, vos requêtes DNS pourraient ne pas être sécurisées par le VPN, ou elles pourraient être révélées à votre fournisseur de services Internet ou à d’autres tiers.
Si vous n’utilisez WireGuard que pour accéder à des ressources sur le réseau VPN ou dans une configuration pair à pair, vous pouvez ignorer cette section.
Pour ajouter des résolveurs DNS à la configuration de votre pair, déterminez d’abord quels serveurs DNS votre serveur WireGuard utilise. Exécutez la commande suivante sur le serveur WireGuard, en remplaçant le nom de votre périphérique Ethernet par eth0
s’il est différent de cet exemple:
Vous devriez recevoir une sortie comme celle-ci:
OutputLink 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888
Les adresses IP qui sont affichées sont les résolveurs DNS que le serveur utilise. Vous pouvez choisir d’utiliser l’un ou l’autre, ou seulement IPv4 ou IPv6 en fonction de vos besoins. Notez les résolveurs que vous utiliserez.
Ensuite, vous devrez ajouter vos résolveurs choisis au fichier de configuration du pair WireGuard. De retour sur le pair WireGuard, ouvrez le fichier /etc/wireguard/wg0.conf
à l’aide de nano
ou de votre éditeur préféré:
Avant la ligne [Peer]
, ajoutez ce qui suit:
DNS = 67.207.67.2 2001:4860:4860::8844
[Peer]
. . .
Encore une fois, selon vos préférences ou vos besoins en matière d’IPv4 et d’IPv6, vous pouvez modifier la liste en conséquence.
Une fois que vous êtes connecté au VPN à l’étape suivante, vous pouvez vérifier que vous envoyez des requêtes DNS via le VPN en utilisant un site comme DNS leak test.com.
Vous pouvez également vérifier que votre pair utilise les résolveurs configurés avec la commande resolvectl dns
comme vous l’avez exécuté sur le serveur. Vous devriez recevoir une sortie similaire à ce qui suit, montrant les résolveurs DNS que vous avez configurés pour le tunnel VPN :
OutputGlobal: 67.207.67.2 67.207.67.3
. . .
Avec tous ces paramètres de résolveur DNS en place, vous êtes maintenant prêt à ajouter la clé publique du pair au serveur, puis à démarrer le tunnel WireGuard sur le pair.
Étape 8 — Ajout de la clé publique du pair au serveur WireGuard
Avant de connecter le pair au serveur, il est important d’ajouter la clé publique du pair au serveur WireGuard. Cette étape garantit que vous pourrez vous connecter et router le trafic via le VPN. Sans cette étape, le serveur WireGuard ne permettra pas au pair d’envoyer ou de recevoir du trafic via le tunnel.
Assurez-vous d’avoir une copie de la clé publique encodée en base64
pour le pair WireGuard en exécutant :
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
Ensuite, connectez-vous au serveur WireGuard et exécutez la commande suivante :
Notez que la partie allowed-ips
de la commande prend une liste d’adresses IPv4 et IPv6 séparées par des virgules. Vous pouvez spécifier des adresses IP individuelles si vous souhaitez restreindre l’adresse IP qu’un pair peut s’attribuer, ou une plage comme dans l’exemple si vos pairs peuvent utiliser n’importe quelle adresse IP dans la plage VPN. Notez également que deux pairs ne peuvent pas avoir le même paramètre allowed-ips
.
Si vous souhaitez mettre à jour les allowed-ips
pour un pair existant, vous pouvez exécuter à nouveau la même commande, mais changer les adresses IP. Plusieurs adresses IP sont prises en charge. Par exemple, pour modifier le pair WireGuard que vous venez d’ajouter pour ajouter une adresse IP comme 10.8.0.100
aux adresses IP existantes 10.8.0.2
et fd24:609a:6c18::2
, vous exécuteriez ce qui suit :
Une fois que vous avez exécuté la commande pour ajouter le pair, vérifiez l’état du tunnel sur le serveur en utilisant la commande wg
:
Outputinterface: wg0
public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
private key: (hidden)
listening port: 51820
peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128
Remarquez comment la ligne peer
montre la clé publique du pair WireGuard et les adresses IP, ou plages d’adresses, qu’il est autorisé à utiliser pour s’attribuer une adresse IP.
Maintenant que vous avez défini les paramètres de connexion du pair sur le serveur, la prochaine étape consiste à démarrer le tunnel sur le pair.
Étape 9 — Connexion du pair WireGuard au tunnel
Maintenant que votre serveur et votre pair sont tous deux configurés pour prendre en charge votre choix d’IPv4, d’IPv6, de transfert de paquets et de résolution DNS, il est temps de connecter le pair au tunnel VPN.
Étant donné que vous ne voulez peut-être activer le VPN que pour certains cas d’utilisation, nous utiliserons la commande wg-quick
pour établir la connexion manuellement. Si vous souhaitez automatiser le démarrage du tunnel comme vous l’avez fait sur le serveur, suivez les étapes de la section Étape 6 — Démarrage du serveur WireGuard au lieu d’utiliser la commande wq-quick
.
Si vous routez tout le trafic via le VPN et avez configuré le transfert DNS, vous devrez installer l’utilitaire resolvconf
sur le pair WireGuard avant de démarrer le tunnel. Exécutez la commande suivante pour configurer cela:
Pour démarrer le tunnel, exécutez ce qui suit sur le pair WireGuard:
Vous recevrez une sortie comme suit:
Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
Remarquez les adresses IPv4 et IPv6 mises en évidence que vous avez attribuées au pair.
Si vous avez défini les AllowedIPs
sur le pair sur 0.0.0.0/0
et ::/0
(ou pour utiliser d’autres plages que celles que vous avez choisies pour le VPN), alors votre sortie ressemblera à ce qui suit:
Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] 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
Dans cet exemple, remarquez les routes mises en évidence que la commande a ajoutées, qui correspondent aux AllowedIPs
dans la configuration du pair.
Vous pouvez vérifier l’état du tunnel sur le pair en utilisant la commande wg
:
Outputinterface: wg0
public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
private key: (hidden)
listening port: 49338
fwmark: 0xca6c
peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
endpoint: 203.0.113.1:51820
allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64
latest handshake: 1 second ago
transfer: 6.50 KiB received, 15.41 KiB sent
Vous pouvez également vérifier à nouveau l’état sur le serveur, et vous recevrez une sortie similaire.
Vérifiez si votre pair utilise le VPN en utilisant les commandes ip route
et ip -6 route
. Si vous utilisez le VPN comme passerelle pour tout votre trafic Internet, vérifiez quelle interface sera utilisée pour le trafic destiné aux résolveurs DNS de CloudFlare, 1.1.1.1
et 2606:4700:4700::1111
.
Si vous utilisez uniquement WireGuard pour accéder à des ressources sur le VPN, remplacez une adresse IPv4 ou IPv6 valide comme celle de la passerelle dans ces commandes. Par exemple 10.8.0.1
ou fd24:609a:6c18::1
.
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
cache
Remarquez le périphérique wg0
utilisé et l’adresse IPv4 10.8.0.2
que vous avez attribuée au pair. De même, si vous utilisez IPv6, exécutez ce qui suit :
Output2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium
Encore une fois, notez l’interface wg0
, et l’adresse IPv6 fd24:609a:6c18::2
que vous avez attribuée au pair.
Si votre pair dispose d’un navigateur installé, vous pouvez également visiter ipleak.net et ipv6-test.com pour confirmer que votre pair route son trafic via le VPN.
Lorsque vous êtes prêt à vous déconnecter du VPN sur le pair, utilisez la commande wg-quick
:
Vous recevrez une sortie comme celle-ci, indiquant que le tunnel VPN est fermé:
Output[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
Si vous avez défini les AllowedIPs
sur le pair à 0.0.0.0/0
et ::/0
(ou pour utiliser des plages autres que celles que vous avez choisies pour le VPN), alors votre sortie ressemblera à ce qui suit:
Output[#] ip rule delete table 200 from 203.0.113.5
[#] ip route delete table 200 default via 203.0.113.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n
Pour reconnecter au VPN, exécutez à nouveau la commande wg-quick up wg0
sur le pair. Si vous souhaitez supprimer complètement la configuration d’un pair du serveur WireGuard, vous pouvez exécuter la commande suivante, en veillant à substituer la clé publique correcte du pair que vous souhaitez supprimer :
En général, vous aurez seulement besoin de supprimer une configuration de pair si le pair n’existe plus, ou si ses clés de chiffrement sont compromises ou modifiées. Sinon, il est préférable de laisser la configuration en place afin que le pair puisse se reconnecter au VPN sans nécessiter l’ajout de sa clé et des allowed-ips
à chaque fois.
Conclusion
Dans ce tutoriel, vous avez installé le paquet et les outils WireGuard sur les systèmes Ubuntu 22.04 du serveur et du client. Vous avez configuré des règles de pare-feu pour WireGuard et configuré les paramètres du noyau pour autoriser le transfert de paquets en utilisant la commande sysctl
sur le serveur. Vous avez appris comment générer des clés de chiffrement WireGuard privées et publiques, et comment configurer le serveur et le pair (ou les pairs) pour se connecter les uns aux autres.
Si votre réseau utilise IPv6, vous avez également appris comment générer une plage d’adresses locales uniques à utiliser avec les connexions de pairs. Enfin, vous avez appris comment limiter le trafic devant passer par le VPN en restreignant les préfixes réseau que le pair peut utiliser, ainsi que comment utiliser le serveur WireGuard comme passerelle VPN pour gérer tout le trafic Internet des pairs.
Si vous souhaitez en savoir plus sur WireGuard, y compris comment configurer des tunnels plus avancés, ou utiliser WireGuard avec des conteneurs, visitez la documentation officielle de WireGuard.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04