Wireguard
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
[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 directivesPostUp
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.