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

Configuration logicielle requise et conventions utilisées
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 pubkeyserver_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 msConclusion
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.