Wireguard

De Wiki doc

Wireguard est une solution de VPN libre à source ouverte se voulant plus simple et sécurisée qu'OpenVPN.

Partie serveur

Installation

Il est actuellement (21/07/20) disponible dans les branches buster-backports, bullseye et Sid de Debian. L'outil est présent sous forme de module DKMS jusqu'au noyau 5.5 et c'est au 5.6 qu'il est intégré complètement à celui-ci. Il est également possible de l'obtenir via un dépôt dédié avec les commandes suivantes:

echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
apt update
apt install wireguard

Nous utiliserons une Debian Sid (du 19/04/19) pour cette documentation. Aussi, seule la commande suivante est nécessaire:

apt install wireguard

Génération des clés

wg genkey | tee /etc/wireguard/clé_privée_serveur | wg pubkey > /etc/wireguard/clé_publique_serveur

Afficher vos clés

cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur

Le résultat vous sera utile pour remplir les fichiers de configuration serveur et client.

Configuration du serveur

vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.100.100.1/24
SaveConfig = true
PrivateKey = INSÉRER_LA_CLÉ_PRIVÉE_DU_SERVEUR
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = INSÉRER_LA_CLÉ_PUBLIQUE_DU_CLIENT
AllowedIPs = 10.100.100.2/32

Activer le routage

sed -i '/net.ipv4.ip_forward/s/^#//g' /etc/sysctl.conf
sysctl -p

Appliquer les bons droits

chown -v root:root /etc/wireguard/wg0.conf
chmod -v 600 /etc/wireguard/wg0.conf

Démarrer le tunnel

wg-quick up wg0

Une interface wg0 est créée avec l'adresse IP fournie dans le fichier de configuration.

Arrêter le tunnel

wg-quick down wg0

Activer le tunnel au démarrage

Il existe un service Systemd pré-installé mais désactivé par défaut. Il suffit de l'activer pour lancer automatiquement Wireguard au démarrage du système.

systemctl enable wg-quick@wg0.service

Partie cliente

installation

apt install wireguard

Génération des clés

wg genkey | tee /etc/wireguard/clé_privée_client | wg pubkey > /etc/wireguard/clé_publique_client

Afficher vos clés

cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur

Configuration du client

vim /etc/wireguard/wg0-client.conf
[Interface]
Address = 10.100.100.2/32
PrivateKey = 8BOBheDTB8I0FpYfX4MM0OVRcchfPMPw1epH+rTaEm0=

[Peer]
PublicKey = sX3l46346afcqNeCUgXOY7dxfGat0/pO7O2g75vtGhU=
Endpoint = wg.toto.fr:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

ASTUCE

Il est également possible d'exécuter un script après l'établissement et à la destruction du tunnel (afin de changer vos serveurs DNS ou d'ajouter des règles de pare-feu par exemple) via les directives PostUp et PostDown de la section [Interface].

Démarrer le tunnel

wg-quick up wg0-client

Arrêter le tunnel

wg-quick down wg0-client

Routage

Wireguard utilise le routage par la source afin de faire transiter l'ensemble des paquets dans le tunnel. Lorsque le client monte le lien, l'outil se charge d'exécuter des commandes Iproute2 (affichées dans le stdout) afin de créer une table n°51820 et d'y ajouter la règle ip -4 route add 0.0.0.0/0 dev wg0-client table 51820. Ceci peut être déroutant au premier abord du fait que la route par défaut n'est pas supprimée de la table de routage standard, ce qui pourrai laisser penser que le VPN n'est pas utilisé pour le traffic WAN mais il n'est est rien. Une capture réseau le confirmera asser facilement.

Sources