GNU/Linux >> Tutoriels Linux >  >> Panels >> OpenVPN

Comment configurer WireGuard sur Ubuntu 22.04

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 fiables comme si vous étiez sur un réseau privé. Il vous donne la liberté d'accéder à Internet en toute sécurité depuis votre smartphone ou votre ordinateur portable lorsque vous êtes connecté à un réseau non fiable, comme le Wi-Fi d'un hôtel ou d'un café.

Le chiffrement de WireGuard repose sur des clés publiques et privées permettant aux pairs d'établir un tunnel chiffré entre eux. Chaque version de WireGuard utilise une suite de chiffrement 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 Transport Layer Security (TLS) et des certificats pour authentifier et établir des tunnels cryptés entre les systèmes. Différentes versions de TLS incluent la prise en charge de centaines de suites et d'algorithmes cryptographiques 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 qui utilise TLS plus longue, complexe et sujette aux erreurs.

Dans ce didacticiel, vous allez configurer WireGuard sur un serveur Ubuntu 22.04, puis configurer une autre machine pour qu'elle s'y connecte en tant qu'homologue à l'aide de connexions IPv4 et IPv6 (communément appelées double pile lien). Vous apprendrez également à acheminer le trafic Internet du pair via le serveur WireGuard dans une configuration de passerelle, en plus d'utiliser le VPN pour un tunnel peer-to-peer chiffré.

Pour les besoins de ce didacticiel, nous allons configurer un autre système Ubuntu 22.04 en tant qu'homologue (également appelé client) du serveur WireGuard. Les didacticiels suivants de cette série expliqueront comment installer et exécuter WireGuard sur les 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 hébergeurs, facturons les dépassements de bande passante. Pour cette raison, soyez attentif au volume de trafic que votre serveur gère. Voir 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 le configurer, vous pouvez suivre notre tutoriel Configuration initiale du serveur avec Ubuntu 22.04. Nous l'appellerons le WireGuard Server tout au long de ce guide.
  • Vous aurez besoin d'une machine cliente que vous utiliserez pour vous connecter à votre serveur WireGuard. Dans ce didacticiel, nous ferons référence à cette machine sous le nom de WireGuard Peer . Pour les besoins de ce didacticiel, il est recommandé d'utiliser votre ordinateur local en tant que WireGuard Peer, mais vous pouvez utiliser des serveurs distants ou des téléphones portables en tant que clients si vous préférez. Si vous utilisez un système distant, assurez-vous de suivre toutes les sections facultatives plus loin dans ce didacticiel 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 d'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 d'IPv6 lors de la création d'un droplet ou ultérieurement en suivant les instructions de cette page.

Étape 1 - Installation de WireGuard et génération d'une paire de clés

La première étape de ce tutoriel consiste à installer WireGuard sur votre serveur. Pour commencer, mettez à jour l'index de package de votre serveur WireGuard et installez WireGuard à l'aide des commandes suivantes. Vous pouvez être invité à fournir votre mot de passe d'utilisateur sudo si c'est la première fois que vous utilisez sudo dans cette session :

  1. sudo apt update
  2. sudo apt install wireguard

Maintenant que WireGuard est installé, l'étape suivante consiste à générer une paire de clés privée et publique pour le serveur. Vous utiliserez le wg genkey intégré et wg pubkey pour créer les clés, puis ajoutez la clé privée au fichier de configuration de WireGuard.

Vous devrez également modifier les permissions sur la clé que vous venez de créer en utilisant le chmod commande, puisque 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 à l'aide des commandes suivantes :

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Le sudo chmod go=... La commande supprime toutes les autorisations sur le fichier pour les utilisateurs et les groupes autres que l'utilisateur root afin de s'assurer que lui seul peut accéder à la clé privée.

Vous devriez recevoir une seule ligne de base64 sortie codée, qui est la clé privée. Une copie de la sortie est également stockée dans le /etc/wireguard/private.key fichier pour référence future par le tee partie de la commande. Notez soigneusement la clé privée qui est sortie car vous devrez l'ajouter au fichier de configuration de WireGuard plus tard dans cette section.

L'étape suivante 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 :

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Cette commande se compose de trois commandes individuelles qui sont enchaînées à l'aide de | opérateur (tuyau) :

  • sudo cat /etc/wireguard/private.key  :cette commande lit le fichier de clé privée et le génère dans le flux de sortie standard.
  • wg pubkey  :la deuxième commande prend la sortie de la première commande comme entrée standard et la traite pour générer une clé publique.
  • sudo tee /etc/wireguard/public.key :la commande finale 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 base64 sortie codée, qui est la clé publique de votre serveur WireGuard. Copiez-le quelque part pour référence, car vous devrez distribuer la clé publique à tout 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 qu'il démarre automatiquement lorsque votre serveur redémarre. Vous définirez également des adresses IPv4 et IPv6 privées à utiliser avec votre serveur WireGuard et vos pairs.

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 pour les besoins du réseau de votre VPN.

Étape 2(a) — Choisir une plage 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 façon dont ces blocs sont alloués, consultez la spécification RFC 1918) :

  • 10.0.0.0 au 10.255.255.255 (préfixe 10/8)
  • 172.16.0.0 au 172.31.255.255 (préfixe 172.16/12)
  • 192.168.0.0 au 192.168.255.255 (préfixe 192.168/16)

Pour les besoins de ce didacticiel, nous utiliserons 10.8.0.0/24 comme un bloc d'adresses IP de la première plage d'adresses IP réservées. Cette plage autorise jusqu'à 255 connexions homologues différentes et ne doit généralement pas avoir d'adresses qui se chevauchent ou sont en conflit avec d'autres plages d'adresses IP privées. N'hésitez pas à choisir une plage d'adresses qui fonctionne avec votre configuration réseau si cet exemple de plage 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 n'importe quelle adresse dans la plage de 10.8.0.1 à 10.8.0.255 peut être utilisé. 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 à l'étape 3 - Création d'une configuration de serveur WireGuard.

Étape 2(b) — Choisir 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 virtuel. Vous devrez effectuer quelques étapes pour générer un préfixe IPv6 aléatoire et unique dans le fd00::/8 réservé bloc d'adresses IPv6 privées.

Selon la RFC, la méthode recommandée pour obtenir un préfixe IPv6 unique consiste à combiner l'heure du jour avec une valeur d'identification unique provenant d'un système, comme un numéro de série ou un ID d'appareil. Ces valeurs sont ensuite hachées et tronquées, ce qui donne un ensemble de bits qui peut être utilisé comme adresse unique dans le fd00::/8 privé réservé bloc d'adresses IP.

Pour commencer à générer une plage IPv6 pour votre serveur WireGuard, collectez un horodatage 64 bits à l'aide de la date utilitaire avec la commande suivante :

  1. date +%s%N

Vous recevrez un nombre comme le suivant, qui est le nombre de secondes (le %s dans la date commande), et les nanosecondes (le %N ) depuis le 1970-01-01 00:00:00 UTC combinés :

Output1650301699497770167

Enregistrez la valeur quelque part pour une utilisation ultérieure dans cette section. Ensuite, copiez le machine-id valeur pour votre serveur à partir de /var/lib/dbus/machine-id dossier. Cet identifiant est unique à votre système et ne devrait pas changer tant que le serveur existe.

  1. cat /var/lib/dbus/machine-id

Vous recevrez une sortie comme celle-ci :

/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb

Maintenant, vous devez combiner l'horodatage avec le machine-id et hachez la valeur résultante à l'aide de l'algorithme SHA-1. La commande utilisera le format suivant :

printf <timestamp><machine-id> | sha1sum

Exécutez la commande en remplaçant vos valeurs d'horodatage et d'identité machine :

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

Vous recevrez une valeur de hachage comme celle-ci :

Output442adea1488d96388dae9ab816045b24609a6c18  -

Notez que la sortie de sha1sum La commande 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 l'exemple de sortie sont les deux premiers octets des données hachées.

L'algorithme de la RFC ne nécessite que les 40 bits les moins significatifs (derniers), ou 5 octets, de la sortie hachée. Utilisez la cut commande pour imprimer les 5 derniers octets encodés en hexadécimal à partir du hachage :

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

Le -c l'argument indique le cut commande pour sélectionner uniquement un jeu de caractères spécifié. Le 31- l'argument indique cut pour imprimer tous les caractères de la position 31 à la fin de la ligne de saisie.

Vous devriez recevoir une sortie comme celle-ci :

Output24609a6c18

Dans cet exemple de sortie, l'ensemble d'octets est :24 60 9a 6c 18 .

Vous pouvez maintenant construire votre préfixe réseau IPv6 unique en ajoutant les 5 octets que vous avez générés avec le fd préfixe, séparant chaque 2 octets avec un : deux-points pour la lisibilité. Étant donné que chaque sous-réseau de 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é.

Utilisation des octets précédemment générés avec le /64 taille du sous-réseau, le préfixe résultant sera le suivant :

Unique Local IPv6 Address Prefixfd24:609a:6c18::/64

Ce fd24:609a:6c18::/64 La plage est ce que vous utiliserez pour attribuer des adresses IP individuelles à vos interfaces de tunnel WireGuard sur le serveur et les pairs. Pour allouer une IP au serveur, ajoutez un 1 après le dernier :: personnages. L'adresse résultante sera fd24:609a:6c18::1/64 . Les pairs peuvent utiliser n'importe quelle adresse IP de la plage, mais généralement, vous incrémentez la valeur d'un à chaque fois que vous ajoutez un pair, par ex. fd24:609a:6c18::2/64 . Notez l'adresse IP et procédez à la configuration du serveur WireGuard dans la section suivante de ce didacticiel.

Étape 3 - Création d'une configuration de serveur WireGuard

Avant de créer la configuration de votre serveur WireGuard, vous aurez besoin des informations suivantes :

  1. Assurez-vous que vous disposez de la clé privée disponible à l'étape 1 - Installation de WireGuard et génération d'une paire de clés.

  2. Si vous utilisez WireGuard avec IPv4, vous aurez besoin de l'adresse IP que vous avez choisie pour le serveur à l'étape 2(a) — Choisir une plage IPv4, qui dans cet exemple est 10.8.0.1/24 .

  3. Si vous utilisez WireGuard avec IPv6, vous aurez besoin de l'adresse IP du serveur que vous avez générée à l'étape 2(b) - Choisir une plage IPv6. Dans cet exemple, l'IP est fd24:609a:6c18::1/64 .

Une fois que vous avez la clé privée et l'adresse IP requises, créez un nouveau fichier de configuration en utilisant nano ou votre éditeur préféré en exécutant la commande suivante :

  1. sudo nano /etc/wireguard/wg0.conf

Ajoutez les lignes suivantes au fichier, en remplaçant votre clé privée à la place du base64_encoded_private_key_goes_here en surbrillance valeur, et la ou les adresses IP sur Address doubler. Vous pouvez également modifier le ListenPort si vous souhaitez que WireGuard soit disponible sur un autre port :

/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

Le SaveConfig garantit que lorsqu'une interface WireGuard est arrêtée, toutes les modifications seront enregistrées dans le fichier de configuration.

Enregistrez et fermez le /etc/wireguard/wg0.conf dossier. Si vous utilisez nano , vous pouvez le faire avec CTRL+X , puis Y et ENTER confirmer. Vous disposez maintenant d'une configuration de serveur initiale sur laquelle vous pouvez vous appuyer en fonction de la manière dont vous envisagez d'utiliser votre serveur VPN WireGuard.

Étape 4 - Réglage de la configuration réseau du serveur WireGuard

Si vous utilisez WireGuard pour connecter un pair au serveur WireGuard afin d'accéder aux services sur le serveur uniquement , vous n'avez pas besoin de remplir cette section. Si vous souhaitez acheminer le trafic Internet de votre WireGuard Peer via le serveur WireGuard, vous devrez configurer le transfert IP en suivant cette section du didacticiel.

Pour configurer le transfert, ouvrez le /etc/sysctl.conf fichier utilisant nano ou votre éditeur préféré :

  1. sudo nano /etc/sysctl.conf

Si vous utilisez IPv4 avec WireGuard, ajoutez la ligne suivante au bas du fichier :

/etc/sysctl.conf
net.ipv4.ip_forward=1

Si vous utilisez IPv6 avec WireGuard, ajoutez cette ligne en bas du fichier :

/etc/sysctl.conf
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 de terminal actuelle, exécutez :

  1. sudo sysctl -p
Outputnet.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

Désormais, votre serveur WireGuard pourra transférer le trafic entrant du périphérique Ethernet VPN virtuel vers d'autres sur le serveur, et de là vers l'Internet public. L'utilisation de cette configuration vous permettra d'acheminer tout le trafic Web de votre WireGuard Peer via l'adresse IP de votre serveur, et l'adresse IP publique de votre client sera effectivement masquée.

Cependant, avant que le trafic puisse être acheminé correctement via votre serveur, vous devrez configurer certaines règles de pare-feu. Ces règles garantiront que le trafic vers et depuis votre serveur WireGuard et vos pairs circule correctement.

Étape 5 - Configuration du pare-feu du serveur WireGuard

Dans cette section, vous modifierez 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 correctement acheminé. Comme pour la section précédente, ignorez cette étape si vous utilisez uniquement votre VPN WireGuard pour une connexion de machine à machine pour accéder aux ressources qui sont limitées à votre VPN.

Pour autoriser le trafic VPN WireGuard à travers le pare-feu du serveur, vous devez activer le masquage, qui est un concept iptables qui fournit une traduction dynamique d'adresses réseau (NAT) à la volée pour acheminer correctement les connexions client.

Trouvez d'abord l'interface réseau publique de votre serveur WireGuard en utilisant la ip route sous-commande :

  1. ip route list default

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 , mis en évidence ci-dessous :

Outputdefault via 203.0.113.1 dev eth0 proto static

Notez le nom de votre appareil puisque vous l'ajouterez au iptables règles à l'étape suivante.

Pour ajouter des règles de pare-feu à votre serveur WireGuard, ouvrez le /etc/wireguard/wg0.conf fichier avec nano ou votre éditeur préféré.

  1. sudo nano /etc/wireguard/wg0.conf

En bas du fichier après le SaveConfig = true ligne, 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

Le PostUp les lignes s'exécuteront lorsque le serveur WireGuard démarrera le tunnel VPN virtuel. Dans l'exemple ici, il ajoutera trois ufw et iptables règles :

  • ufw route allow in on wg0 out on eth0 - Cette règle permettra de transférer le trafic IPv4 et IPv6 entrant sur le wg0 Interface VPN vers eth0 interface réseau sur le serveur. Il fonctionne en conjonction avec le net.ipv4.ip_forward et net.ipv6.conf.all.forwarding valeurs sysctl 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 qui arrive sur le wg0 Interface VPN pour donner l'impression qu'elle provient 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 qui arrive sur le wg0 Interface VPN pour donner l'impression qu'elle provient directement de l'adresse IPv6 publique du serveur WireGuard.

Le PreDown les règles s'exécutent lorsque le serveur WireGuard arrête le tunnel VPN virtuel. Ces règles sont l'inverse du PostUp règles et fonction 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 utilisez simplement IPv4, vous pouvez exclure les lignes avec les ip6tables commandes.

Inversement, si vous utilisez uniquement IPv6, modifiez la configuration pour n'inclure que les ip6tables commandes. Le ufw des lignes doivent exister pour toute combinaison de réseaux IPv4 et IPv6. Enregistrez et fermez le fichier lorsque vous avez terminé.

La dernière partie de la configuration du pare-feu sur votre serveur WireGuard consiste à autoriser le trafic vers et depuis le port WireGuard UDP lui-même. Si vous n'avez pas modifié le port dans le fichier /etc/wireguard/wg0.conf du serveur fichier, 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 remplacer dans la commande UFW suivante.

Si vous avez oublié d'ouvrir le port SSH en suivant le tutoriel prérequis, ajoutez-le ici également :

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

Remarque :Si vous utilisez un autre pare-feu 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 tunneliser tout votre trafic réseau via la connexion VPN, vous devrez vous assurer que le port 53 le trafic est autorisé pour les requêtes DNS et les ports comme 80 et 443 respectivement pour le trafic HTTP et HTTPS. S'il existe d'autres protocoles que vous utilisez sur le VPN, vous devrez également leur ajouter des règles.

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 :

  1. sudo ufw disable
  2. sudo ufw enable

Vous pouvez confirmer que les règles sont en place en exécutant le ufw status commande. Exécutez-le et vous devriez recevoir une sortie comme celle-ci :

  1. sudo ufw status
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 maintenant configuré pour gérer correctement le trafic du VPN, y compris le transfert et le masquage pour les pairs. Avec les règles de 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 systemd service en utilisant son wg-quick intégré scénario. Bien que vous puissiez utiliser manuellement le wg pour créer le tunnel chaque fois que vous souhaitez utiliser le VPN, il s'agit d'un processus manuel qui devient répétitif et sujet aux erreurs. Au lieu de cela, vous pouvez utiliser systemctl gérer le tunnel à l'aide du wg-quick script.

Utiliser un systemd signifie que vous pouvez configurer WireGuard pour qu'il démarre au démarrage afin de pouvoir vous connecter à votre VPN à tout moment tant que le serveur est en cours d'exécution. Pour cela, activez le wg-quick service pour le wg0 tunnel que vous avez défini en l'ajoutant à systemctl :

  1. sudo systemctl enable [email protected]

Notez que la commande spécifie le nom du tunnel wg0 nom de l'appareil dans le cadre du nom du service. Ce nom correspond à /etc/wireguard/wg0.conf fichier de configuration. 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 périphérique de tunnel et le nom de 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 homologues différentes, chacune avec ses propres adresses IP et règles de routage uniques.

Démarrez maintenant le service :

  1. sudo systemctl start [email protected]

Vérifiez que le service WireGuard est actif avec la commande suivante. Vous devriez voir active (running) dans la sortie :

  1. sudo systemctl status [email protected]
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 affiche l'ip commandes utilisées pour créer le wg0 virtuel appareil et attribuez-lui 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 le wg commande elle-même si vous souhaitez essayer de configurer manuellement l'interface VPN.

Une fois le serveur configuré et en cours d'exécution, l'étape suivante consiste à configurer votre ordinateur client en tant qu'homologue 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 allez générer une paire de clés publique et privée, décider d'une ou plusieurs adresses IP pour le pair, définir un fichier de configuration pour le pair, puis démarrer le tunnel en utilisant le wg-quick script.

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 garder une trace de leurs adresses IP privées pour éviter les collisions.

Pour configurer le WireGuard Peer, assurez-vous que le package WireGuard est installé à l'aide du apt suivant commandes. Sur l'exécution par les pairs WireGuard :

  1. sudo apt update
  2. sudo apt install wireguard

Création de la paire de clés WireGuard Peer

Ensuite, vous devrez générer la paire de clés sur le pair en suivant les mêmes étapes que celles que vous avez utilisées sur le serveur. Depuis votre machine locale ou votre serveur distant qui servira de pair, continuez et créez la clé privée pour le pair à l'aide des commandes suivantes :

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Encore une fois, vous recevrez une seule ligne de base64 sortie codée, qui est la clé privée. Une copie de la sortie est également stockée dans le /etc/wireguard/private.key . Notez soigneusement la clé privée qui est sortie car vous devrez l'ajouter au fichier de configuration de WireGuard plus tard dans cette section.

Utilisez ensuite la commande suivante pour créer le fichier de clé publique :

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Vous recevrez à nouveau une seule ligne de base64 sortie codée, qui est la clé publique de votre WireGuard Peer. Copiez-le quelque part pour référence, car vous devrez distribuer la clé publique au serveur WireGuard afin d'établir une connexion crypté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 qui contient toutes les informations dont il a besoin pour établir une connexion au serveur WireGuard.

Vous aurez besoin de quelques informations pour le fichier de configuration :

  • Le base64 clé privée codée 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.

  • Le base64 clé publique codée du serveur WireGuard.

  • L'adresse IP publique et le numéro de port du serveur WireGuard. Il s'agira généralement de l'adresse IPv4, mais si votre serveur possède une adresse IPv6 et que votre ordinateur client dispose d'une connexion IPv6 à Internet, vous pouvez l'utiliser à la place d'IPv4.

Avec toutes ces informations à portée de main, ouvrez un nouveau /etc/wireguard/wg0.conf fichier sur la machine WireGuard Peer en utilisant nano ou votre éditeur préféré :

  1. sudo nano /etc/wireguard/wg0.conf

Ajoutez les lignes suivantes au fichier, en remplaçant les différentes données dans les sections en surbrillance 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 Address la ligne utilise une adresse IPv4 du 10.8.0.0/24 sous-réseau que vous avez choisi précédemment. Cette adresse IP peut être n'importe quoi dans le sous-réseau tant qu'elle est différente de l'adresse IP du serveur. Incrémenter les adresses de 1 à chaque fois que vous ajoutez un pair est généralement le moyen le plus simple d'allouer des adresses IP.

De même, notez comment la seconde 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. Again, any IP in the range is valid if you decide to use a different address.

The other notable part of the file is the last AllowedIPs doubler. These two IPv4 and IPv6 ranges instruct the peer to only send traffic over the VPN if the destination system has an IP address in either range. Using the AllowedIPs directive, you can restrict the VPN on the peer to only connect to other peers and services on the VPN, or you can configure the setting to tunnel all traffic over the VPN and use the WireGuard Server as a gateway.

If you are only using IPv4, then omit the trailing fd24:609a:6c18::/64 range (including the , comma). Conversely, if you are only using IPv6, then only include the fd24:609a:6c18::/64 prefix and leave out the 10.8.0.0/24 IPv4 range.

In both cases, if you would like to send all your peer’s traffic over the VPN and use the WireGuard Server as a gateway for all traffic, then you can use 0.0.0.0/0 , which represents the entire IPv4 address space, and ::/0 for the entire IPv6 address space.

(Optional) Configuring a Peer to Route All Traffic Over the Tunnel

If you have opted to route all of the peer’s traffic over the tunnel using the 0.0.0.0/0 or ::/0 routes and the peer is a remote system, then you will need to complete the steps in this section. If your peer is a local system then it is best to skip this section.

For remote peers that you access via SSH or some other protocol using a public IP address, you will need to add some extra rules to the peer’s wg0.conf dossier. These rules will ensure that you can still connect to the system from outside of the tunnel when it is connected. Otherwise, when the tunnel is established, all traffic that would normally be handled on the public network interface will not be routed correctly to bypass the wg0 tunnel interface, leading to an inaccessible remote system.

First, you’ll need to determine the IP address that the system uses as its default gateway. Run the following ip route commande :

  1. ip route list table main default

Vous recevrez une sortie comme celle-ci :

Outputdefault via 203.0.113.1 dev eth0 proto static

Note the gateway’s highlighted IP address 203.0.113.1 for later use, and device eth0 . Your device name may be different. If so, substitute it in place of eth0 in the following commands.

Next find the public IP for the system by examining the device with the ip address show commande :

  1. ip -brief address show eth0

Vous recevrez une sortie comme celle-ci :

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

In this example output, the highlighted 203.0.113.5 IP (without the trailing /20 ) is the public address that is assigned to the eth0 device that you’ll need to add to the WireGuard configuration.

Now open the WireGuard Peer’s /etc/wireguard/wg0.conf fichier avec nano or your preferred editor.

  1. sudo nano /etc/wireguard/wg0.conf

Before the [Peer] line, add the following 4 lines:

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]
. . .

These lines will create a custom routing rule, and add a custom route to ensure that public traffic to the system uses the default gateway.

  • PostUp = ip rule add table 200 from 203.0.113.5 - This command creates a rule that checks for any routing entries in the table numbered 200 when the IP matches the system’s public 203.0.113.5 address.
  • PostUp = ip route add table 200 default via 203.0.113.1 - This command ensures that any traffic being processed by the 200 table will use the 203.0.113.1 gateway for routing, instead of the WireGuard interface.

The PreDown lines remove the custom rule and route when the tunnel is shutdown.

Note:The table number 200 is arbitrary when constructing these rules. You can use a value between 2 and 252, or you can use a custom name by adding a label to the /etc/iproute2/rt_tables file and then referring to the name instead of the numeric value.

For more information about how routing tables work in Linux visit the Routing Tables Section of the Guide to IP Layer Network Administration with Linux.

If you are routing all the peer’s traffic over the VPN, ensure that you have configured the correct sysctl and iptables rules on the WireGuard Server in Step 4 — Adjusting the WireGuard Server’s Network Configuration and Step 5 — Configuring the WireGuard Server’s Firewall.

(Optional) Configuring the WireGuard Peer’s DNS Resolvers

If you are using the WireGuard Server as a VPN gateway for all your peer’s traffic, you will need to add a line to the [Interface] section that specifies DNS resolvers. If you do not add this setting, then your DNS requests may not be secured by the VPN, or they might be revealed to your Internet Service Provider or other third parties.

If you are only using WireGuard to access resources on the VPN network or in a peer-to-peer configuration then you can skip this section.

To add DNS resolvers to your peer’s configuration, first determine which DNS servers your WireGuard Server is using. Run the following command on the WireGuard Server , substituting in your ethernet device name in place of eth0 if it is different from this example:

  1. resolvectl dns eth0

You should receive output like the following:

OutputLink 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

The IP addresses that are output are the DNS resolvers that the server is using. You can choose to use any or all of them, or only IPv4 or IPv6 depending on your needs. Make a note of the resolvers that you will use.

Next you will need to add your chosen resolvers to the WireGuard Peer’s configuration file. Back on the WireGuard Peer , open /etc/wireguard/wg0.conf file using nano or your preferred editor:

  1. sudo nano /etc/wireguard/wg0.conf

Before the [Peer] line, add the following:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Again, depending on your preference or requirements for IPv4 and IPv6, you can edit the list according to your needs.

Once you are connected to the VPN in the following step, you can check that you are sending DNS queries over the VPN by using a site like DNS leak test.com.

You can also check that your peer is using the configured resolvers with the resolvectl dns command like you ran on the server. You should receive output like the following, showing the DNS resolvers that you configured for the VPN tunnel:

OutputGlobal: 67.207.67.2 67.207.67.3
. . .

With all of these DNS resolver settings in place, you are now ready to add the peer’s public key to the server, and then start the WireGuard tunnel on the peer.

Step 8 — Adding the Peer’s Public Key to the WireGuard Server

Before connecting the peer to the server, it is important to add the peer’s public key to the WireGuard Server. This step ensures that you will be able to connect to and route traffic over the VPN. Without completing this step the WireGuard server will not allow the peer to send or receive any traffic over the tunnel.

Ensure that you have a copy of the base64 encoded public key for the WireGuard Peer by running:

  1. sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Now log into the WireGuard server, and run the following command:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

Note that the allowed-ips portion of the command takes a comma separated list of IPv4 and IPv6 addresses. You can specify individual IPs if you would like to restrict the IP address that a peer can assign itself, or a range like in the example if your peers can use any IP address in the VPN range. Also note that no two peers can have the same allowed-ips setting.

If you would like to update the allowed-ips for an existing peer, you can run the same command again, but change the IP addresses. Multiple IP addresses are supported. For example, to change the WireGuard Peer that you just added to add an IP like 10.8.0.100 to the existing 10.8.0.2 and fd24:609a:6c18::2 IPs, you would run the following:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

Once you have run the command to add the peer, check the status of the tunnel on the server using the wg commande :

  1. sudo 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

Notice how the peer line shows the WireGuard Peer’s public key, and the IP addresses, or ranges of addresses that it is allowed to use to assign itself an IP.

Now that you have defined the peer’s connection parameters on the server, the next step is to start the tunnel on the peer.

Step 9 — Connecting the WireGuard Peer to the Tunnel

Now that your server and peer are both configured to support your choice of IPv4, IPv6, packet forwarding, and DNS resolution, it is time to connect the peer to the VPN tunnel.

Since you may only want the VPN to be on for certain use cases, we’ll use the wg-quick command to establish the connection manually. If you would like to automate starting the tunnel like you did on the server, follow those steps in Step 6 — Starting the WireGuard Server section instead of using the wq-quick commande.

In case you are routing all traffic through the VPN and have set up DNS forwarding, you’ll need to install the resolvconf utility on the WireGuard Peer before you start the tunnel. Run the following command to set this up:

  1. sudo apt install resolvconf

To start the tunnel, run the following on the WireGuard Peer:

  1. sudo wg-quick up wg0

Vous recevrez une sortie comme celle-ci :

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

Notice the highlighted IPv4 and IPv6 addresses that you assigned to the peer.

If you set the AllowedIPs on the peer to 0.0.0.0/0 and ::/0 (or to use ranges other than the ones that you chose for the VPN), then your output will resemble the following:

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

In this example, notice the highlighted routes that the command added, which correspond to the AllowedIPs in the peer configuration.

You can check the status of the tunnel on the peer using the wg commande :

  1. sudo 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

You can also check the status on the server again, and you will receive similar output.

Verify that your peer is using the VPN by using the ip route and ip -6 route commandes. If you are using the VPN as a gateway for all your Internet traffic, check which interface will be used for traffic destined to CloudFlare’s 1.1.1.1 and 2606:4700:4700::1111 DNS resolvers.

If you are only using WireGuard to access resources on the VPN, substitute a valid IPv4 or IPv6 address like the gateway itself into these commands. For example 10.8.0.1 or fd24:609a:6c18::1 .

  1. ip route get 1.1.1.1
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

Notice the wg0 device is used and the IPv4 address 10.8.0.2 that you assigned to the peer. Likewise, if you are using IPv6, run the following:

  1. ip -6 route get 2606:4700:4700::1111
Output2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

Again note the wg0 interface, and the IPv6 address fd24:609a:6c18::2 that you assigned to the peer.

If your peer has a browser installed, you can also visit ipleak.net and ipv6-test.com to confirm that your peer is routing its traffic over the VPN.

Once you are ready to disconnect from the VPN on the peer, use the wg-quick commande :

  1. sudo wg-quick down wg0

You will receive output like the following indicating that the VPN tunnel is shut down:

Output[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f

If you set the AllowedIPs on the peer to 0.0.0.0/0 and ::/0 (or to use ranges other than the ones that you chose for the VPN), then your output will resemble the following:

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

To reconnect to the VPN, run the wg-quick up wg0 command again on the peer. If you would like to completely remove a peer’s configuration from the WireGuard Server, you can run the following command, being sure to substitute the correct public key for the peer that you want to remove:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

Typically you will only need to remove a peer configuration if the peer no longer exists, or if its encryption keys are compromised or changed. Otherwise it is better to leave the configuration in place so that the peer can reconnect to the VPN without requiring that you add its key and allowed-ips each time.

Conclusion

In this tutorial you installed the WireGuard package and tools on both the server and client Ubuntu 22.04 systems. You set up firewall rules for WireGuard, and configured kernel settings to allow packet forwarding using the sysctl command on the server. You learned how to generate private and public WireGuard encryption keys, and how to configure the server and peer (or peers) to connect to each other.

If your network uses IPv6, you also learned how to generate a unique local address range to use with peer connections. Finally, you learned how to limit which traffic should go over the VPN by restricting the network prefixes that the peer can use, as well as how to use the WireGuard Server as a VPN gateway to handle all Internet traffic for peers.

If you would like to learn more about WireGuard, including how to configure more advanced tunnels, or use WireGuard with containers, visit the official WireGuard documentation.


OpenVPN
  1. Comment configurer WireGuard VPN sur Ubuntu 20.04

  2. Comment configurer WireGuard VPN sur Ubuntu (un guide étape par étape)

  3. Comment configurer et configurer une autorité de certification sur Ubuntu 22.04

  4. Comment configurer le serveur et le client NFS sur Ubuntu 20.04

  5. Comment configurer un serveur TeamSpeak sur Ubuntu 16.04

Comment configurer le serveur d'impression CUPS sur Ubuntu 20.04

Comment installer et configurer un serveur OpenVPN sur Ubuntu 22.04

Comment configurer un serveur de messagerie avec Plesk sur Ubuntu 20.04

Comment configurer le serveur Prosody XMPP sur Ubuntu 20.04

Comment configurer le serveur Prosody XMPP sur Ubuntu 18.04

Comment configurer le serveur proxy Shadowsocks-libev sur Ubuntu