GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment créer un VPN sur Ubuntu 20.04 en utilisant Wireguard

Wireguard est un VPN moderne et très facile à configurer disponible sur plusieurs systèmes d'exploitation. L'application est disponible dans les dépôts officiels d'Ubuntu 20.04, elle est donc également très facile à installer. Contrairement à d'autres logiciels comme OpenVPN qui est basé sur l'utilisation de certificats ssl, Wireguard est basé sur l'utilisation de paires de clés. Dans ce tutoriel, nous verrons comment configurer, en quelques étapes simples, un serveur VPN et un pair client sur la dernière version stable d'Ubuntu.

Dans ce didacticiel, vous apprendrez :

  • Comment installer Wireguard sur Ubuntu 20.04 Focal Fossa
  • Comment créer une paire de clés publique et privée
  • Comment configurer le serveur et un pair client
  • Comment rediriger tout le trafic entrant vers le VPN

Wireguard VPN sur Ubuntu 20.04

Configuration logicielle requise et conventions utilisées

Configuration logicielle requise et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version du logiciel utilisée
Système Ubuntu 20.04 Focal Fossa
Logiciel grille de protection
Autre Privilèges root
Conventions # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande
$ – nécessite que les commandes linux données soient exécutées en tant qu'utilisateur normal non privilégié

Installation

Wireguard est officiellement disponible dans le référentiel "universe" d'Ubuntu 20.04, nous pouvons donc l'installer via apt . La version disponible, au moment de la rédaction est 1.0.20200319-1ubuntu1 :

$ sudo apt install wireguard

Le système nous demandera de confirmer que nous voulons installer le programme et ses dépendances, et terminera l'opération en quelques secondes.

Générer des clés

Nous devons générer une clé publique et une clé privée pour chaque machine que nous voulons utiliser dans notre VPN. La clé privée doit être gardée secrète sur la machine, la clé publique est utilisée pour accéder à la machine depuis les autres pairs.

Pour générer les clés, nous pouvons utiliser le wg utilitaire. Dans le fichier de configuration de Wireguard, nous devrons référencer la clé privée de la machine, tandis que la clé publique sera utilisée sur les autres pairs. Notez que nous référencerons directement les clés, donc théoriquement nous n'avons pas besoin de les stocker dans des fichiers. Nous le ferons cependant quand même, juste pour plus de commodité.

Pour générer la clé privée de notre serveur, nous devons utiliser le genkey sous-commande de wg . La commande affiche la clé créée sur stdout; pour écrire la clé d'un fichier, nous pouvons utiliser la puissance des redirections shell :

$ wg genkey> server_private_key

La commande générera la clé et la stockera dans le server_private_key fichier, mais déclenchera l'avertissement suivant :

Attention :écriture dans un fichier accessible à tous. Envisagez de définir umask sur 077 et réessayez.

En effet, avec l'utilisateur par défaut umask (002 ) les fichiers sont créés avec le mode 664 , sont donc lisibles par tous, ce qui n'est pas recommandé. Pour résoudre ce problème, nous pouvons soit modifier le umask utilisé dans la session shell en cours avant de créer les fichiers :

$ umask 077

Ou changez les permissions des fichiers en 600 après la création. Ici, nous allons opter pour cette dernière solution.

Une fois que notre clé privée est prête, nous pouvons générer le public celui qui est basé dessus. Pour accomplir la tâche, nous utilisons le pubkey sous-commande de wg . Comme avant, nous utilisons les redirections shell :d'abord pour passer le contenu de la server_private_key fichier dans le stdin de la commande, puis et pour rediriger la clé générée vers le server_public_key fichier :

$ wg pubkey  server_public_key

Pour épargner un peu de frappe, nous pouvons générer les deux clés, avec une seule commande, ce qui implique l'utilisation du shell | opérateur (tuyau) et le tee commande :

$ wg genkey | tee server_private_key | wg pubkey> server_public_key

La sortie de la commande sur le côté gauche de l'opérateur de tube (| ) est passé à l'entrée standard du programme sur son côté droit. Le tee commande, à la place nous permet de rediriger la sortie d'une commande à la fois vers un fichier et vers la sortie standard (plus d'informations sur les redirections shell ici).

Une fois nos clés prêtes, nous pouvons créer le fichier de configuration du serveur.

Fichier de configuration du serveur

Pour configurer notre installation Wireguard, nous pouvons créer un fichier de configuration appelé wg0.conf avec le contenu suivant :

[Interface]PrivateKey =Address =10.0.0.1/24ListenPort =51820

Notez que le nom du fichier est arbitraire, mais il doit être basé sur le nom que nous utiliserons pour notre interface, wg0 dans ce cas. Ce nom sera référencé au démarrage du service, comme nous le verrons ci-dessous.

Dans notre exemple. l'[interface] section du fichier de configuration contient les champs suivants :

  • Clé privée
  • Adresse
  • ListenPort

La clé privée la valeur du champ n'est rien de plus que la clé privée du serveur que nous avons générée précédemment.

Dans l'Adresse nous avons spécifié l'adresse à attribuer à l'interface dans le VPN avec le masque de sous-réseau à l'aide du CIDR notation. Dans ce cas, nous avons utilisé 10.0.0.1/24 , donc notre adresse "serveur" Wireguard à l'intérieur du VPN sera 10.0.0.1 , qui se trouve dans la plage d'adresses disponibles qui va de 10.0.0.1 à 10.0.0.254 .

Enfin, dans le ListenPort , nous avons spécifié sur quel port Wireguard écoutera le trafic entrant. Une règle pour autoriser ledit trafic doit également être ajoutée à notre pare-feu. Nous le ferons dans la section suivante.

Nous pouvons maintenant modifier les autorisations des fichiers et les déplacer vers le /etc/wireguard répertoire :

$ chmod 600 server_public_key server_private_key wg0.conf$ sudo mv server_private_key server_public_key wg0.conf /etc/wireguard

Nous pouvons maintenant démarrer le wg-quick service en spécifiant le nom de l'interface Wireguard après @ dans le nom de l'unité. Quelle est cette notation ? C'est une fonctionnalité de systemd :avec elle, nous pouvons générer plusieurs fichiers d'unité sur la base d'un "modèle", en passant la valeur qui sera substituée dans le modèle, après le @ symbole dans le nom de l'unité. C'est le contenu du [email protected] unité :

[Unit]Description=WireGuard via wg-quick(8) pour %IAprès=network-online.target nss-lookup.targetWants=network-online.target nss-lookup.targetDocumentation=man:wg-quick(8) Documentation=man:wg(8)Documentation=https://www.wireguard.com/Documentation=https://www.wireguard.com/quickstart/Documentation=https://git.zx2c4.com/wireguard-tools/ about/src/man/wg-quick.8Documentation=https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8[Service]Type=oneshotRemainAfterExit=yesExecStart=/usr/bin/wg -quick up %iExecStop=/usr/bin/wg-quick down %iEnvironment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity[Install]WantedBy=multi-user.target

La valeur que nous spécifierons après le @ dans le nom de l'unité lors de son démarrage ou de son arrêt, remplacera %i dans le ExecStart et ExecStop lignes. Dans ce cas, nous utiliserons wg0 :

$ sudo systemctl enable --now wg-quick@wg0

Avec la commande ci-dessus, nous avons démarré le service et avons également fait en sorte qu'il soit automatiquement démarré au démarrage. Pour vérifier que notre configuration a été appliquée, nous pouvons exécuter le wg commande. La sortie produite doit afficher des informations sur le wg0 interface :

$ sudo wginterface :clé publique wg0 :nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4=clé privée :port d'écoute (caché) :51820

Maintenant, continuons et configurons notre pare-feu et le transfert de paquets.

Configuration du pare-feu et du réseau

Dans ce tutoriel, je supposerai l'utilisation de ufw . Comme nous l'avons dit précédemment, nous devons ajouter une règle pour autoriser le trafic entrant via le port que nous avons spécifié dans le fichier de configuration, 51820 . Nous le faisons en exécutant une commande très simple :

$ sudo ufw allow 51820/udp

Nous devons également autoriser le transfert de paquets sur notre système. Pour accomplir la tâche, nous supprimons le commentaire de la ligne 28 du /etc/sysctl.conf fichier, pour qu'il ressemble à ceci :

# Décommentez la ligne suivante pour activer le transfert de paquets pour IPv4net.ipv4.ip_forward=1

Pour que les modifications soient effectives sans redémarrer le système, nous devons exécuter la commande suivante :

$ sudo sysctl -p

À l'étape suivante, nous allons configurer le client.

Génération de la clé client

Passons maintenant au système que nous voulons utiliser en tant que client. Nous devons y installer Wireguard ; une fois cela fait, nous pouvons générer une paire de clés comme nous l'avons fait sur le serveur :

$ wg genkey | tee client_private_key | wg pubkey> client_public_key

Tout comme nous l'avons fait côté serveur, nous créons le wg0.conf fichier de configuration. Cette fois avec ce contenu :

[Interface]PrivateKey =Adresse =10.0.0.2/24[Peer]PublicKey =EndPoint =
:51820AllowedIPs =0.0.0.0/0

Nous avons déjà vu la signification des champs contenus dans l'Interface section, lorsque nous avons généré la configuration du serveur. Ici nous avons juste adapté les valeurs à notre client (il aura le 10.0.0.2 adresse dans le VPN).

Dans cette configuration, nous avons utilisé une nouvelle section, [Peer] . Dans celui-ci, nous pouvons spécifier les informations relatives à un pair, en l'occurrence celui que nous utilisons comme « serveur ». Les champs que nous avons utilisés sont :

  • Clé publique
  • EndPoint
  • IP autorisées

Dans la PublicKey champ, nous spécifions le champ public clé du pair, donc, dans ce cas, la clé publique que nous avons générée sur le serveur.

Le point de terminaison est l'adresse IP publique ou le nom d'hôte du pair suivi de deux-points et du numéro de port sur lequel le pair écoute (dans notre cas 51820 ).

Enfin, la valeur transmise aux AllowedIPs , est une liste d'adresses IP et de masque de sous-réseau séparés par des virgules avec la notation CIDR. Seul le trafic dirigé vers le pair provenant des adresses spécifiées sera autorisé. Dans ce cas, nous avons utilisé 0.0.0.0/0 en tant que valeur :cela fonctionne comme une valeur "fourre-tout", donc tout le trafic sera envoyé au pair VPN (le serveur).

Tout comme nous l'avons fait côté serveur, nous définissons les autorisations appropriées et déplaçons les clés et le fichier de configuration vers /etc/wireguard répertoire :

$ chmod 600 client_public_key client_private_key wg0.conf$ sudo mv client_public_key client_private_key wg0.conf /etc/wireguard

Avec le fichier de configuration en place, nous pouvons démarrer le service :

$ sudo systemctl enable --now wg-quick@wg0

Enfin, le [Peer] section relative à notre client, doit être ajoutée au fichier de configuration que nous avons précédemment créé sur le serveur . Nous ajoutons le contenu suivant :

[Peer]PublicKey =AllowedIPs =10.0.0.2/32

À ce stade, nous redémarrons le service :

$ sudo systemctl restart wg-quick@wg0

Les informations sur le pair associé doivent maintenant être signalées dans la sortie du wg commande :

$ sudo wginterface :clé publique wg0 :nNx3Zpcv9D2dtgHDsoYGBNr64zG5jTJ4Z4T2sE759V4=clé privée :port d'écoute (caché) :51820peer :t5pKKg5/9fJKiU0lrNTahv6gvABcmCjQq5gF3BxwiDQ=ips autorisé :10.0.0.0 

À ce stade, depuis le système "client", nous devrions pouvoir envoyer un ping au serveur au 10.0.0.1 adresse :

$ ping -c 3 10.0.0.1PING 10.0.0.1 (10.0.0.1) 56(84) octets de données.64 octets à partir de 10.0.0.1 :icmp_seq=1 ttl=64 time=2,82 ms64 octets à partir de 10.0.0.1 :icmp_seq=2 ttl=64 time=38.0 ms64 bytes from 10.0.0.1:icmp_seq=3 ttl=64 time=3.02 ms--- 10.0.0.1 statistiques ping ---3 paquets transmis, 3 reçus, 0% de perte de paquets, temps 2003msrtt min/moy/max/mdev =2,819/14,613/37,999/16,536 ms

Conclusion

Dans ce tutoriel nous avons vu comment créer un VPN en utilisant Wireguard sur la dernière version stable d'Ubuntu :20.04 Focal Fossa. Le logiciel est vraiment simple à installer et à configurer, surtout si on le compare à d'autres solutions, comme par exemple OpenVpn.

Nous avons vu comment générer les clés publiques et privées utilisées pour notre configuration, et comment configurer à la fois le serveur et un client afin que tout le trafic soit redirigé vers le VPN. En suivant les instructions données, vous aurez une configuration de travail. Pour plus d'informations, veuillez consulter la page du projet.


Ubuntu
  1. Comment créer une pile LAMP basée sur Docker à l'aide de Docker sur Ubuntu 20.04

  2. Comment configurer WireGuard VPN sur Ubuntu 18.04

  3. Comment configurer WireGuard VPN sur Ubuntu 20.04

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

  5. Comment créer des matrices RAID à l'aide de MDADM sur Ubuntu

Comment créer et exécuter un programme C avec Ubuntu 20.04 LTS

Comment configurer un VPN sur Ubuntu

Comment créer une clé USB amorçable à l'aide de Ventoy sur Ubuntu 21

Comment créer un lien vers un dossier dans Ubuntu 18.04 à l'aide de Gui ?

Comment configurer WireGuard VPN sur Debian 11

Comment configurer WireGuard VPN sur Linux