Comment créer un VPN sur Ubuntu 20.04 Utilisation de Wireguard

Comment créer un VPN sur Ubuntu 20.04 Utilisation de Wireguard

Wireguard est un VPN moderne et très facile à configurer disponible sur plusieurs systèmes d'exploitation. La demande est disponible dans l'ubuntu 20.04 Référentiels officiels, il 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 faciles, un serveur VPN et un pair client sur la dernière version stable d'Ubuntu.

Dans ce tutoriel, vous apprendrez:

  • Comment installer wireguard sur Ubuntu 20.04 FOCAL FOSSA
  • Comment créer une paire de clés publiques et privées
  • Comment configurer le serveur et un pair client
  • Comment rediriger tout le trafic entrant vers le VPN
Wireguard vpn sur Ubuntu 20.04

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Ubuntu 20.04 FOCAL FOSSA
Logiciel givré
Autre Privilèges racinaires
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Installation

Wireguard est officiellement disponible dans le référentiel «Univers» d'Ubuntu 20.04, donc nous pouvons l'installer via apte. La version disponible, au moment de l'écriture, 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 terminerons l'opération en quelques secondes.

Génération de clés

Nous devons générer un public 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, le public est utilisé pour accéder à la machine depuis les autres pairs.

Pour générer les clés, nous pouvons utiliser le wg utilitaire. À l'intérieur du fichier de configuration Wireguard, nous devrons référencer la clé privée de la machine, tandis que le public sera utilisé sur les autres pairs. Notez que nous ferons référence directement aux clés, donc théoriquement, nous n'avons pas besoin de les stocker dans des fichiers. Nous allons cependant le faire de toute façon, juste pour la commodité.

Pour générer la clé privée pour notre serveur, nous devons utiliser le Genkey sous-commande de wg. La commande sort la clé créée pour stdout; Pour écrire la clé dans un fichier, nous pouvons utiliser la puissance des redirections de coquille:

$ wg genkey> server_private_key 

La commande générera la clé et la stockera au server_private_key dossier, mais soulèvera l'avertissement suivant:

AVERTISSEMENT: Écriture dans un fichier accessible dans le monde. Envisagez de définir l'umask sur 077 et de réessayer. 

En effet, avec l'utilisateur par défaut umask (002) Les fichiers sont créés avec le mode 664, il en va de même pour le monde, ce qui n'est pas recommandé. Pour résoudre ce problème, nous pouvons soit modifier le UMask utilisé dans la session de shell actuelle avant de créer les fichiers:

$ umask 077 

Ou modifiez les autorisations de fichiers vers 600 Après la création. Ici, nous irons pour cette dernière solution.

Une fois notre clé privée prête, nous pouvons générer le public celui qui est basé sur lui. Pour accomplir la tâche, nous utilisons le pubkey sous-commande de wg. Tout comme avant d'utiliser les redirections de coquille: d'abord pour passer le contenu du server_private_key fichier à la stdin de la commande, puis et pour rediriger la clé générée vers le server_public_key déposer:

$ wg pubkey server_public_key 

Pour épargner un certain typage, nous pouvons générer les deux clés, avec une seule commande, qui implique l'utilisation de la coquille | (tuyau) opérateur 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 tuyau (|) est transmis à l'entrée standard du programme sur son côté droit. Le tee commande, permettez-nous plutôt de rediriger la sortie d'une commande vers un fichier et vers la sortie standard (en savoir plus sur les redirections de coque 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.confli avec le contenu suivant:

[Interface] privateKey = adresse = 10.0.0.1/24 écouterport = 51820 

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

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

  • Clé privée
  • Adresse
  • Écouter

Le 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é plus tôt.

Dans le Adresse champ Nous avons spécifié l'adresse à affecter à l'interface du VPN avec le masque de sous-réseau à l'aide du Cière notation. Dans ce cas, nous avons utilisé dix.0.0.1/24, Ainsi, notre adresse «serveur» Wireguard à l'intérieur du VPN sera dix.0.0.1, qui se trouve dans la gamme disponible des adresses qui vont de dix.0.0.1 pour dix.0.0.254.

Enfin, dans le Écouter Field, nous avons spécifié ce que Port Wireguard écoutera pour le trafic entrant. Une règle pour permettre 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 annuaire:

$ 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 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 lui, nous pouvons générer plusieurs fichiers unitaires sur la base d'un «modèle», passant la valeur qui sera remplacée dans le modèle, après le @ symbole au nom de l'unité. C'est le contenu du wg-quick @.service unité:

[Unité] Description = Wireguard via WG-QUICK (8) pour% i After = Network-online.cibler NSS-Lookup.Target Want = Network-online.cibler NSS-Lookup.Documentation cible = homme: documentation WG-QUICK (8) = Man: Wg (8) Documentation = https: // www.givré.com / documentation = https: // www.givré.com / QuickStart / documentation = https: // git.zx2c4.com / wireguard-tools / about / src / man / wg-quick.8 documentation = https: // git.zx2c4.com / wireguard-tools / about / src / man / wg.8 [Service] Type = ONESHOT RESTAFTEREXIT = Oui ExecStart = / USR / BIN / WG-QUICK UP% I EXECSTOP = / USR / BIN / WG-QUICK DOWN% i Environment = WG_ENDPOINT_RESOLUTION_RETRES = Infinity [Install] WantedBy = Multi-User.cible 

La valeur que nous spécifions après le @ dans le nom de l'unité lors du démarrage ou de l'arrêt, il remplacera %je dans le Exercice et Execstop lignes. Dans ce cas, nous utiliserons wg0:

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

Avec la commande ci-dessus, nous avons démarré le service et nous le faisons également pour démarrer automatiquement 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 wg Interface: WG0 Clé publique: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2se759v4 = clé privée: (caché) Port d'écoute: 51820 

Maintenant, procédons et configurons notre pare-feu et notre transfert de paquets.

Pare-feu et configuration du réseau

Dans ce tutoriel, je suppose l'utilisation de ufw. Comme nous l'avons dit précédemment, nous devons ajouter une règle pour permettre le trafic entrant dans 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 autoriser 51820 / udp 

Nous devons également permettre le transfert de paquets sur notre système. Pour accomplir la tâche, nous supprimons le commentaire de la ligne 28 de la / etc / sysctl.confli fichier, de sorte que cela ressemble à ceci:

# Décommente la ligne suivante pour permettre le transfert de paquets pour IPv4 net.ipv4.ip_forward = 1 

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

$ sudo sysctl -p 

À l'étape suivante, nous configurerons le client.

Génération de clés du client

Passons maintenant au système que nous voulons utiliser en tant que client. Nous devons installer Wireguard dessus; Une fois terminé, 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 avons fait le côté du serveur, nous créons le wg0.confli fichier de configuration. Cette fois avec ce contenu:

[Interface] privateKey = adresse = 10.0.0.2/24 [Peer] publicKey = Endpoint =: 51820 ALLERDIPS = 0.0.0.0/0 

Nous avons déjà vu la signification des champs contenus dans le Interface Section, lorsque nous avons généré la configuration du serveur. Ici, nous venons d'adapter les valeurs à notre client (il aura le dix.0.0.2 adresse dans le VPN).

Dans cette configuration, nous avons utilisé une nouvelle section, [Pair]. Dans ce document, nous pouvons spécifier les informations par rapport à un pair, dans ce cas celle que nous utilisons comme «serveur». Les champs que nous avons utilisés sont:

  • Clé publique
  • Point final
  • ALLIPS

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

Le Point final L'adresse IP publique ou le nom d'hôte du pair est-il suivi d'un côlon et du numéro de port sur lequel le pair écoute (dans notre cas 51820).

Enfin, la valeur transmise au ALLIPS Field, est une liste séparée par des virgules d'adresses IP et de masque de sous-réseau avec notation CIDR. Seul le trafic dirigé vers le pair qui provient des adresses spécifiées sera autorisée. Dans ce cas, nous avons utilisé 0.0.0.0/0 En valeur: il fonctionne comme une valeur «fourre-tout», donc tout le trafic sera envoyé au pair VPN (le serveur).

Tout comme nous avons fait le côté du serveur, nous définissons les autorisations appropriées et déplacons les clés et le fichier de configuration vers le / etc / wireguard annuaire:

$ 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 activer --now wg-quick @ wg0 

Finalement, le [Pair] Section par rapport à notre client, doit être ajoutée au fichier de configuration que nous avons précédemment créé sur le serveur. Nous ajouter le contenu suivant:

[Peer] publicKey = ALLOLIPS = 10.0.0.2/32 

À ce stade, nous redémarrons le service:

$ sudo systemctl redémarrer wg-quick @ wg0 

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

$ sudo wg Interface: Wg0 Clé publique: nnx3zpcv9d2dtghdsoygbnr64zg5jtj4z4t2se759v4 = clé privée: (caché) Port d'écoute: 51820 PEER: T5PKKG5 / 9FJKIU0LRNTAHV6GVABCMCJQQQ5GF3BXWIDQ = IPS: 10.0.0.2/32 

À ce stade, à partir du système «client», nous devrions pouvoir cingler le serveur au dix.0.0.1 adresse:

$ ping -c 3 10.0.0.1 ping 10.0.0.1 (10.0.0.1) 56 (84) octets de données. 64 octets de 10.0.0.1: ICMP_SEQ = 1 TTL = 64 Time = 2.82 ms 64 octets de 10.0.0.1: ICMP_SEQ = 2 TTL = 64 Time = 38.0 ms 64 octets de 10.0.0.1: ICMP_SEQ = 3 TTL = 64 Time = 3.02 ms --- 10.0.0.1 Ping Statistics --- 3 paquets transmis, 3 reçus, 0% de perte de paquets, heure 2003ms RTT min / avg / max / mDev = 2.819/14.613/37.999/16.536 ms 

Conclusions

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 par rapport à 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. Après l'instruction donnée, vous aurez une configuration de travail. Pour plus d'informations, veuillez consulter la page du projet.

Tutoriels Linux connexes:

  • Choses à installer sur Ubuntu 20.04
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Comment configurer un serveur OpenVPN sur Ubuntu 20.04
  • Ubuntu de base 22.04 Configuration de la connexion client / serveur OpenVPN
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Ubuntu 20.04 Guide
  • Choses à installer sur Ubuntu 22.04
  • Liste des clients FTP et installation sur Ubuntu 20.04 Linux…
  • Ubuntu 20.04: WordPress avec l'installation de Nginx
  • Les 8 meilleurs environnements de bureau Ubuntu (20.04 FOCAL FOSSA…