Comment créer un VPN point à point avec WireGuard sur Ubuntu 16.04

introduction

WireGuard est un VPN moderne et hautes performances conçu pour être facile à utiliser tout en offrant une sécurité robuste. WireGuard se concentre uniquement sur la fourniture d'une connexion sécurisée entre les parties via une interface réseau cryptée avec authentification par clé publique. Cela signifie que, contrairement à la plupart des VPN, aucune topologie n'est appliquée. Vous pouvez donc obtenir différentes configurations en manipulant la configuration réseau environnante. Ce modèle offre une grande puissance et une flexibilité qui peut être appliquée selon vos besoins individuels.

L'une des topologies les plus simples que WireGuard puisse utiliser est une connexion point à point. Ceci établit un lien sécurisé entre deux machines sans médiation par un serveur central. Ce type de connexion peut également être utilisé entre plus de deux membres pour établir une topologie VPN maillée, dans laquelle chaque serveur peut parler directement à ses pairs. Étant donné que chaque hôte est sur un pied d'égalité, ces deux topologies conviennent mieux à l'établissement d'une messagerie sécurisée entre serveurs, par opposition à l'utilisation d'un serveur unique en tant que passerelle pour acheminer le trafic.

Dans ce guide, nous montrerons comment établir une connexion VPN point à point avec WireGuard à l'aide de deux serveurs Ubuntu 16.04. Nous allons commencer par installer le logiciel, puis générer des paires de clés cryptographiques pour chaque hôte. Ensuite, nous allons créer un court fichier de configuration pour définir les informations de connexion de l’homologue. Une fois l'interface lancée, nous pourrons envoyer des messages sécurisés entre les serveurs via l'interface WireGuard.

Conditions préalables

Pour suivre ce guide, vous aurez besoin d'accéder aux serveurs Ubuntu 16.04 detwo. Sur chaque serveur, vous devrez créer un utilisateur non root avec les privilègessudo pour effectuer des actions administratives. Vous aurez également besoin d'un pare-feu de base configuré sur chaque système. Vous pouvez remplir ces conditions en suivant le tutoriel suivant:

Lorsque vous êtes prêt à continuer, connectez-vous à chaque serveur avec votre utilisateursudo.

Installation du logiciel

Le projet WireGuard fournit un PPA avec des packages mis à jour pour les systèmes Ubuntu. Nous devrons installer WireGuard sur nos deux serveurs avant de pouvoir continuer. Sur chaque serveur, effectuez les actions suivantes.

Tout d’abord, ajoutez le PPA WireGuard au système pour configurer l’accès aux packages du projet:

sudo add-apt-repository ppa:wireguard/wireguard

Appuyez surENTER lorsque vous êtes invité à ajouter la nouvelle source de package à votre configurationapt. Une fois le PPA ajouté, mettez à jour l'index de paquetage local pour extraire des informations sur les paquetages nouvellement disponibles, puis installez le module de noyau WireGuard et les composants utilisateur:

sudo apt-get update
sudo apt-get install wireguard-dkms wireguard-tools

Nous pouvons ensuite commencer à configurer WireGuard sur chacun de nos serveurs.

Création d'une clé privée

Chaque participant d’un réseau VPN WireGuard s’authentifie auprès de ses pairs à l’aide de la cryptographie à clé publique. Des connexions entre nouveaux pairs peuvent être établies en échangeant des clés publiques et en effectuant une configuration minimale.

Pour générer une clé privée et l'écrire directement dans un fichier de configuration WireGuard, saisissez leson each server suivants:

(umask 077 && printf "[Interface]\nPrivateKey = " | sudo tee /etc/wireguard/wg0.conf > /dev/null)
wg genkey | sudo tee -a /etc/wireguard/wg0.conf | wg pubkey | sudo tee /etc/wireguard/publickey

La première commande écrit le contenu initial d'un fichier de configuration dans/etc/wireguard/wg0.conf. La valeurumask dans un sous-shell pour que nous créions le fichier avec des autorisations restreintes sans affecter notre environnement normal.

La deuxième commande génère une clé privée à l’aide de la commandewg de WireGuard et l’écrit directement dans notre fichier de configuration restreint. Nous redirigeons également la clé dans la commandewg pubkey pour dériver la clé publique associée, que nous écrivons dans un fichier appelé/etc/wireguard/publickey pour une référence facile. Nous devrons échanger la clé de ce fichier avec le deuxième serveur au fur et à mesure que nous définirons notre configuration.

Création d'un fichier de configuration initiale

Ensuite, nous allons ouvrir le fichier de configuration dans un éditeur pour configurer quelques autres détails:

sudo nano /etc/wireguard/wg0.conf

À l'intérieur, vous devriez voir votre clé privée générée définie dans une section appelée[Interface]. Cette section contient la configuration pour le côté local de la connexion.

Configuration de la section d'interface

Nous devons définir l'adresse IP du VPN que ce noeud utilisera et le port sur lequel il écoutera les connexions des homologues. Commencez par ajouter les lignesListenPort etSaveConfig pour que votre fichier ressemble à ceci:

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true

Ceci définit le port sur lequel WireGuard écoutera. Cela peut être n'importe quel port libre et pouvant être lié, mais dans ce guide, nous allons configurer notre VPN sur le port 5555 pour les deux serveurs. Définissez lesListenPort sur chaque hôte sur le port que vous avez sélectionné:

Nous définissons égalementSaveConfig surtrue. Cela indiquera au servicewg-quickde sauvegarder automatiquement sa configuration active dans ce fichier à l'arrêt.

[.note] #Note: LorsqueSaveConfig est activé, le servicewg-quick écrasera le contenu du fichier/etc/wireguard/wg0.conf chaque fois que le service s'arrêtera. Si vous avez besoin de modifier la configuration de WireGuard, arrêtez le servicewg-quick avant de modifier le fichier/etc/wireguard/wg0.conf ou apportez les modifications au service en cours à l'aide de la commandewg (ce sera enregistré dans le fichier lorsque le service s'arrête). Toutes les modifications apportées au fichier de configuration pendant l'exécution du service seront écrasées lorsquewg-quick stockera sa configuration active.
#

Ensuite, ajoutez une définitionAddress unique à chaque serveur afin que le servicewg-quick puisse définir les informations du réseau lorsqu'il ouvre l'interface WireGuard. Nous utiliserons le sous-réseau 10.0.0.0/24 comme espace d'adressage pour notre VPN. Pour chaque ordinateur, vous devrez choisir une adresse unique dans cette plage (10.0.0.1 à 10.0.0.254) et spécifier l'adresse et le sous-réseau à l'aide deCIDR notation.

Nous donnerons à nosfirst server une adresse de 10.0.0.1, représentée par 10.0.0.1/24 en notation CIDR:

/etc/wireguard/wg0.conf on first server

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.1/24

Sur nossecond server, nous définirons l'adresse comme 10.0.0.2, ce qui nous donnera une représentation CIDR de 10.0.0.2/24:

/etc/wireguard/wg0.conf on second server

[Interface]
PrivateKey = generated_private_key
ListenPort = 5555
SaveConfig = true
Address = 10.0.0.2/24

C'est la fin de la section[Interface].

Nous pouvons saisir les informations sur les pairs du serveur soit dans le fichier de configuration, soit manuellement en utilisant la commandewg ultérieurement. Comme mentionné ci-dessus, le servicewg-quick avec l'optionSaveConfig définie surtrue signifiera que les informations du pair seront éventuellement écrites dans le fichier avec l'une ou l'autre des méthodes.

Pour illustrer les deux manières de définir les identités des pairs, nous allons créer une section[Peer] dans le fichier de configuration du deuxième serveur mais pas dans le premier. Vous pouvez enregistrer et fermer le fichier de configuration du serveurfirst (celui définissant l'adresse 10.0.0.1) maintenant.

Définir la section homologue

Dans le fichier de configuration qui est encore ouvert, créez une section appelée[Peer] sous les entrées de la section[Interface].

Commencez par définir lesPublicKey sur la valeur de la clé publique du serveurfirst. Vous pouvez trouver cette valeur en tapantcat /etc/wireguard/publickey sur le serveur opposé. Nous allons également définirAllowedIPs sur les adresses IP valides à l'intérieur du tunnel. Puisque nous connaissons l'adresse IP spécifique que le premier serveur utilise, nous pouvons la saisir directement, en terminant par/32 pour indiquer une plage contenant une seule valeur IP:

/etc/wireguard/wg0.conf on second server

[Interface]
. . .

[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32

Enfin, nous pouvons définir lesEndpoint sur l’adresse IP publique du premier serveur et le port d’écoute WireGuard (nous avons utilisé le port 5555 dans cet exemple). WireGuard mettra à jour cette valeur s'il reçoit le trafic légitime de cet homologue sur une autre adresse, permettant ainsi au VPN de s'adapter aux conditions d'itinérance. Nous avons défini la valeur initiale pour que ce serveur puisse initier le contact:

/etc/wireguard/wg0.conf on second server

[Interface]
. . .

[Peer]
PublicKey = public_key_of_first_server
AllowedIPs = 10.0.0.1/32
Endpoint = public_IP_of_first_server:5555

Lorsque vous avez terminé, enregistrez et fermez le fichier pour revenir à l'invite de commande.

Démarrage du VPN et connexion à des pairs

Nous sommes maintenant prêts à démarrer WireGuard sur chaque serveur et à configurer la connexion entre nos deux pairs.

Ouverture du pare-feu et démarrage du VPN

Commencez par ouvrir le port WireGuard dans le pare-feu sur chaque serveur:

sudo ufw allow 5555

Maintenant, démarrez le servicewg-quick en utilisant le fichier d'interfacewg0 que nous avons défini:

sudo systemctl start wg-quick@wg0

Cela lancera l'interface réseau dewg0ur la machine. Nous pouvons le confirmer en tapant:

ip addr show wg0
Output on first server6: wg0:  mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1
    link/none
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Nous pouvons utiliser l'outilwg pour afficher des informations sur la configuration active du VPN:

sudo wg

Sur le serveur sans définition d'homologue, l'affichage ressemblera à ceci:

Output on first serverinterface: wg0
  public key: public_key_of_this_server
  private key: (hidden)
  listening port: 5555

Sur le serveur avec une configuration homologue déjà définie, la sortie contiendra également ces informations:

Output on second serverinterface: wg0
  public key: public_key_of_this_server
  private key: (hidden)
  listening port: 5555

peer: public_key_of_first_server
  endpoint: public_IP_of_first_server:5555
  allowed ips: 10.0.0.1/32

Pour terminer la connexion, nous devons maintenant ajouter les informations d'appairage du deuxième serveur au premier serveur à l'aide de la commandewg.

Ajout des informations manquantes sur la ligne de commande

Sur lesfirst server (celui qui n'affiche pas les informations de pair), entrez les informations de peering manuellement en utilisant le format suivant. La clé publique du deuxième serveur se trouve dans la sortie desudo wg du deuxième serveur:

sudo wg set wg0 peer public_key_of_second_server endpoint public_IP_of_second_server:5555 allowed-ips 10.0.0.2/32

Vous pouvez confirmer que les informations sont maintenant dans la configuration active en tapant à nouveausudo wg sur le premier serveur:

sudo wg
Output on first serverinterface: wg0
  public key: public_key_of_this_server
  private key: (hidden)
  listening port: 5555

peer: public_key_of_second_server
  endpoint: public_IP_of_second_server:5555
  allowed ips: 10.0.0.2/32

Notre connexion point à point devrait maintenant être disponible. Essayez d'envoyer une requête ping à l'adresse VPN du deuxième serveur à partir du premier:

ping -c 3 10.0.0.2
Output on first serverPING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.635 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.615 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.841 ms

--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.615/0.697/0.841/0.102 ms

Si tout fonctionne correctement, vous pouvez enregistrer la configuration sur le premier serveur dans le fichier/etc/wireguard/wg0.conf en redémarrant le service:

sudo systemctl restart wg-quick@wg0

Si vous souhaitez démarrer le tunnel au démarrage, vous pouvez activer le service sur chaque machine en tapant:

sudo systemctl enable wg-quick@wg0

Le tunnel VPN doit maintenant être démarré automatiquement à chaque démarrage de la machine.

Conclusion

WireGuard est une excellente option pour de nombreux cas d'utilisation en raison de sa flexibilité, de sa mise en œuvre légère et de la cryptographie moderne. Dans ce guide, nous avons installé WireGuard sur deux serveurs Ubuntu 16.04 et configuré chaque hôte en tant que serveur avec une connexion point à point avec son homologue. Cette topologie est idéale pour établir une communication serveur à serveur avec des pairs où chaque côté est un participant égal ou où les hôtes peuvent être amenés à établir des connexions ad hoc avec d'autres serveurs.

Related