Ceci est une ancienne révision du document !


Configurer un VPN pair-à-pair avec Wireguard

Introduction

Ce tutoriel a pour but d'apprendre à configurer une liaison VPN pair-à-pair grâce au protocole WireGuard. WireGuard est un protocole de tunneling open source basé sur UDP. Il est optimisé pour être plus rapide que ses alternatives OpenVPN et IPSec. Il permet d'établir des liaisons virtuelles sécurisées de pair à pair, il n'y a donc pas de notions de client ou de serveur dans ce type d'architecture.

Plus précisément, on établira une liaison confidentielle entre deux machines distantes sous Alma Linux (qu'on nommera ici “les serveurs”), cachées derrière un NAT et ayant accès à un réseau WAN par le biais d'un routeur. Ce WAN simulera Internet ou un quelconque réseau public n'étant pas sous contrôle du propriétaire des deux LANs (donc potentiellement sujet aux attaques).

La liaison Wireguard permettra aux serveurs d'être joignables sur un même réseau virtuel comme si elles étaient branchées physiquement l'une à l'autre, sauf qu'en réalité les paquets transiteront via le WAN de façon fiable et sécurisée.

Topologie du lab

Architecture du lab : Interconnexion sécurisée de deux machines distantes avec Wireguard

Pré-requis

Pour mettre en place l'infrastructure présentée plus haut, il faudra :

  • 2 machines sous Linux (même si on pourrait également installer Wireguard sous Windows)
  • 2 routeurs quelconques

Mise en place

<A refaire>

Installation de Wireguard

Commencer par installer le paquet WireGuard (pour Debian et Ubuntu) :

apt install wireguard 

Ou bien (pour fedora) :

dnf install wireguard-tools

Génération des couples de clés de chiffrement du client et du serveur

Afin de chiffrer les échanges sur la future liaison, il faut générer un couple de clés publique-privée sur chaque machine.

Tout d'abord, créer un répertoire où seront stockées les clés :

mkdir /wireguard
cd /wireguard 

Ensuite générer les clés comme ceci :

wg genkey | tee privatekey | wg pubkey > publickey 

Pour les afficher :

cat privatekey publickey 

Configurer la liaison

Pour configurer une liaison Wireguard, il faut créer un fichier de configuration dédiée à la carte réseau virtuelle avec le nom wgX.conf (où X correspond à un chiffre choisi) et placé dans le répertoire /etc/wireguard/, par exemple :

nano /etc/wireguard/wg0.conf 

Entrer ceci dans le fichier :

[Interface]
PrivateKey = 4K2MgNR7jGtRAXBEjvP077g9rGlBgXEtf9GWH5JBa30= #clé privée du serveur
Address = 172.16.0.1/24 #Adresse IP du serveur
SaveConfig = false
ListenPort = 51820 #Port d'écoute
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -$
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING$
DNS = 1.1.1.1 #Serveurs DNS à utiliser (facultatif, nécessite le paquet resolvconf)

[Peer]
PublicKey = 3rskJFYJc2IKzeEUGi9xrsTX/k/wNnecujv83stM8VM= #clé publique du client
AllowedIPs = 172.16.0.2/32 #Adresse IP du client à l'autre bout du tunnel
[Interface]
PrivateKey = cFJfwY8cyIT1ShE0zAiSDagKpt7AvtIycYQwDJjBtFk= #clé privée du client
Address = 172.16.0.2/24 #Adresse IP du client

[Peer]
PublicKey = /h3442wuo67tG2M/yufCz0eZgBjYS0HsFIGk0Wa1bWQ= #clé publique du serveur
Endpoint = 10.0.0.1:51820 #Adresse publique du serveur (ici adresse du routeur --> Redirection NAT)
AllowedIPs = 172.16.0.1/32 #IP du serveur à l'autre bout du tunnel
PersistentKeepalive = 25 #intervalle d'envoi des paquets pour éviter une coupure de connexion par les pare-feux.

A FINIR

Sources

📕 Linux Pratique hors série n°56