====== 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.
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 sécurisée.
===== Topologie du lab =====
{{ ::schema_vpn_wireguard.png |Architecture du lab : Interconnexion sécurisée de deux machines distantes avec Wireguard }}
Dans cet exemple, le pair wireguard de Paris sera considéré comme le serveur, celui de Marseille comme le client.
===== 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
===== Instructions =====
==== Installation de Wireguard ====
Commencer par installer le paquet WireGuard.
Pour les systèmes basés sur debian :
apt install wireguard
Pour les systèmes basés sur Redhat :
dnf install wireguard-tools
Et créer le répertoire ''/etc/wireguard'' s'il n'existe pas :
mkdir -m 0700 /etc/wireguard/
==== Génération des clés de chiffrement ====
Afin de chiffrer les échanges sur la future liaison, il faut d'abord générer un couple de clés publique-privée sur chaque pair.
Dans le répertoire ''/etc/wireguard'', générer les clés avec la commande suivante :
umask 077; wg genkey | tee privatekey | wg pubkey > publickey
Pour les afficher :
cat privatekey publickey
==== Configuration côté serveur ====
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]
Address=10.8.0.65/30 #adresse du serveur dans le tunnel
ListenPort = 51820 #port de connexion au VPN
PrivateKey = 6GZQ4Xus5lrJK9UxRASMCwoRuXw9HHhya0KA771h2XI= #clé privée de la machine
SaveConfig = true #Garde en mémoire et protège la configuration le temps que l'interface est active
[Peer]
PublicKey = sXFf8WX9sr8MwinKKotNgMSB44R2eooSfFFXi+XQeB4= #clé publique du client
AllowedIPs = 10.8.0.66/32 #adresses IP autorisées à communiquer avec la machine (ici le client uniquement)
Activer l'interface décrite dans la configuration :
wg-quick up wg0
Pour désactiver l'interface :
wg-quick down wg0
Vérifier si l'interface réseau virtuelle a bien été créée :
ip a
{{ ::wg1.png?800 |L'interface wg0 parmi les interfaces réseau du système}}
On peut aussi utiliser la commande suivante pour afficher des informations supplémentaires sur l'interface virtuelle :
wg show wg0
{{ ::wg2.png?800 |Informations sur l'interface wg0}}
==== Configuration côté client ====
Même chose côté client, il faut créer un fichier de configuration pour la liaison :
[Interface]
Address=10.8.0.66/30 #adresse du client dans le tunnel
ListenPort = 51820 #port de connexion au VPN
PrivateKey = eJ1bmItHSHONKRPYykaFsD/NtWC7fkpLM0kwe/OtcGc= #clé privée de la machine
[pair]
PublicKey = CE4ETuboYOxGdTehYES1NaN1Z32kRtdYAQn3glB34Xg= #clé publique du serveur
AllowedIPs = 0.0.0.0/0,::/0 #adresses IP autorisées à communiquer avec la machine (ici le client uniquement)
Endpoint = 172.16.10.1:51820 #adresse IP du serveur
:!: Ici la configuration restreint le client à communiquer avec l'IP du serveur, mais on aurait pu mettre ''0.0.0.0/0,::/0'' pour l'autoriser à communiquer avec n'importe quelle IPv4 ou IPv6 à travers le tunnel (à utiliser dans le cas où le serveur est également un routeur permettant l'accès à Internet). Cette directive permet de filtrer avec qui la machine peut communiquer à travers le tunnel, ce qui constitue une première sécurité.
:!: La directive ''Endpoint'' est facultative. Elle est notamment utile lorsque le client peut-être amené à avoir une IP dynamique. Entre deux machines dont l'IP est statique, elle n'est pas nécessaire.
===== Sources =====
📕 Linux Pratique hors série n°56
[[https://www.it-connect.fr/mise-en-place-de-wireguard-vpn-sur-debian-11/|IT-Connect : Mise en place de Wireguard]]