Wireguard: Déploiement et routage
Table of Contents
#
Installation
L’installation est très simple. Il y a beaucoup de sources disponibles sur internet. Perso j’ai suivi la doc de https://wiki.archlinux.org/title/WireGuard qui est très complète. L’installation et la connexion se révèle très simple et ne pose pas de problème particulier.
##
Configuration serveur
[Interface]
ListenPort = 51871
PrivateKey = (hidden)
Address = 192.168.10.1/24, fdc9:281f:04d7:9ee9::1/64
[Peer]
PublicKey = oENZzrPBIl1fBguDPNAzTEzBZtXh/3i1DoEXTBOg7jI=
AllowedIPs = 192.168.10.2/32,fdc9:281f:04d7:9ee9::2/128
Endpoint = [2a01:cb05:83c2:5300:6665:4c49:6699:c6ea]:51871
##
Configuration côté client
[Interface]
Address = 192.168.10.2/24, fdc9:281f:04d7:9ee9::2/64
ListenPort = 51871
PrivateKey = (hidden)
[Peer]
PublicKey = xOUJZ3xPKlZlXxpj7zOxK+7+5vT+Ey8iK38OnN/L8T0=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = [2001:41d0:1:8c07::1]:51871
#
Routage des clients
Pour router l’ensemble du trafic des clients à travers le vpn, il y a quelques configurations à faire. Tout d’abord dans wireguard, il faut configurer les adresses autorisées côté client.
AllowedIPs = 0.0.0.0/0, ::/0
Si vous oubliez cette partie, vous aurez des messages de type ping: sendmsg: Required key not available
lorsque vous tenterez un ping vers une IP en dehors de votre réseau.
Pour cette partie, il est fortement recommandé d’utiliser le script wg-quick qui est inclus dans le paquet wireguard-tools. Ce script va prendre la configuration de votre interface dans /etc/wireguard/
Ce script permet aussi de démarrer et arrêter simplement les tunnels.
#
Gestion du firewalling côté serveur
Côté serveur j’utilise firewalld pour gérer mes règles de firewall en fonction de différentes zones. J’ai tout d’abord créé une zone dédiée à wireguard que j’ai attaché à mon interface wg0. L’ensemble des fluxs de cette interface sont autorisés.
firewall-cmd --new-zone=wireguard --permanent
firewall-cmd --reload
firewall-cmd --zone=wireguard --set-target ACCEPT --permanent
firewall-cmd --zone=wireguard --change-interface=wg0
firewall-cmd --reload
Mon serveur est maintenant accessible depuis le client via le tunnel
root@ARCH wireguard# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) octets de données.
64 octets de 192.168.10.1 : icmp_seq=1 ttl=64 temps=18.1 ms
64 octets de 192.168.10.1 : icmp_seq=2 ttl=64 temps=17.7 ms
64 octets de 192.168.10.1 : icmp_seq=3 ttl=64 temps=17.3 ms
^C - statistiques ping 192.168.10.1 - 3 paquets transmis, 3 reçus, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 17.258/17.676/18.085/0.337 ms
Par contre, je ne peux toujours pas accéder à internet à travers mon tunnel. Pour ce faire, il faut que j’active le masquerading (le SNAT automatique d’IPtables) à travers firewalld. Pour IPv4 pas de problème c’est supporté nativement dans firewalld et en plus il active automatiquement le forwarding d’ip.
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload
Pour IPv6, il faut faire une “rich rule”
firewall-cmd add-rich-rule='rule family=ipv6 masquerade' --permanent
firewall-cmd --reload
et tadaaaaa notre client a maintenant accès à internet à travers wireguard en IPv4 et IPv6