WireGuard Point-to-Site avec une passerelle de site
{< admonitionblock style=“important” >} Traduction d’un article du site Pro Custodibus
Le contenu de cette page est la traduction Française de l’article WireGuard Point to Site With a Site Gateway de Justin Ludwig
{< /admonitionblock >}
WireGuard Point à Site avec une passerelle de site
Souvent, lorsque vous connectez un point terminal distant à un site local, vous utilisez la traduction d’adresse réseau (NAT) pour traduire l’adresse IP du point terminal distant en l’adresse IP d’un hôte dans le site local. Mais parfois, vous avez besoin de maintenir une adresse IP unique pour chaque point terminal distant (généralement pour le contrôle d’accès ou les journaux d’audit). Pour ce faire avec WireGuard, vous avez besoin d’un hôte WireGuard au site local qui peut agir comme une passerelle entre les points terminaux WireGuard distants et le site local.
Cet article décrit comment réaliser cela avec une topologie de point à site courante de WireGuard (/blog/2020/10/wireguard-topologies/#point-to-site). Dans le scénario d’exemple, nous aurons une station de travail utilisateur finale exécutant WireGuard, que je nommerai “Point terminal A”, à un certain site distant ; et un autre hôte exécutant WireGuard sur notre site local, que je nommerai “Hôte β”, dans “Site B”. Dans Site B, nous aurons un autre point terminal, que je nommerai “Point terminal B”, exécutant un serveur HTTP qui écoute sur le port 80.
L’Internet se trouve entre Point terminal A et Site B. Point terminal A est derrière NAT (traduction d’adresse réseau) et un pare-feu qui permet uniquement les connexions établies à travers. Site B est également derrière NAT et un pare-feu, mais son NAT + pare-feu permet le transfert du port 51822 de l’Internet vers Host β. Nous utiliserons ce port, 51822, pour WireGuard sur Host β. Le pare-feu au sein de Site B permet à Host β d’initier de nouvelles connexions à Point terminal B sur le port 80.
Le diagramme ci-dessous illustre ce scénario :
En connectant le Point de terminaison A et l’Hôte β dans un VPN WireGuard (Réseau privé virtuel), le Point de terminaison A pourra accéder au serveur HTTP en cours d’exécution sur le Point de terminaison B comme si il était dans le même réseau local que le Point de terminaison B. L’Point de terminaison B a une adresse IP de 192.168.200.22 dans le Site B, donc un utilisateur utilisant le Point de terminaison A pourra accéder au serveur HTTP sur le Point de terminaison B simplement en naviguant vers http://192.168.200.22 dans son navigateur web.
Cela est presque identique à la configuration standard Point to Site — mais dans ce cas, au lieu de masquer le Point de terminaison A du Site B avec l’adresse IP de l’Hôte β (192.168.200.22), nous exposerons directement le Point de terminaison A au Site B à l’aide de son propre adresse IP WireGuard (10.0.0.1). Cela permet au Point de terminaison B d’utiliser l’adresse du Point de terminaison A (10.0.0.1) pour le contrôle d’accès, ainsi que d’inclure l’adresse du Point de terminaison A dans toute entrée de journal qu’il enregistre.
La seule différence entre cela et la configuration standard point-to-site est, en fait, la configuration de routage. Donc suivez les premières quatre sections de la Configuration Point to Site et revenez ici lorsque vous atteignez l’étape “Configurer le Routage”.
Configurer le Routage
Les deux choses que nous devons faire pour rendre le routage fonctionner avec l’Hôte β comme passerelle de site sont :
- Activer la transmission de paquets sur l’Hôte β
- Mettre à jour les tables de routage au Site B
Comme nous utiliserons wg-quick pour activer et désactiver le tunnel WireGuard sur l’Hôte β, la manière la plus simple de s’assurer que la transmission de paquets est activée lorsque le tunnel WireGuard est actif est d’avoir wg-quick le faire pour nous. Mettez à jour le fichier de configuration de wg-quick pour l’Hôte β afin qu’il active la transmission de paquets lorsqu’il démarre le tunnel.
Voici un exemple de configuration :
[Interface]
Address = 10.0.0.2/24
PrivateKey = <votre-clé-privee>
ListenPort = 51822
[Peer]
PublicKey = <la-clé-publique-de-point-terminal-A>
Endpoint = <l'adresse-IP-de-point-terminal-A>:<le-port-WireGuard-de-point-terminal-A>
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Assurez-vous que le service wg-quick@wg0 est démarré et configuré pour démarrer au boot.
Ensuite, mettez à jour les tables de routage sur l’Hôte β pour permettre le transfert des paquets vers le Point terminal A. Vous pouvez utiliser la commande suivante :
ip route add 10.0.0.1 via <l'adresse-IP-de-point-terminal-A>
Cela configure l’Hôte β pour transmettre les paquets destinés à 10.0.0.1 vers le Point terminal A.
Enfin, assurez-vous que le pare-feu sur l’Hôte β est configuré pour permettre la communication entre les points terminaux WireGuard et le site local.
Avec ces configurations en place, le routage devrait fonctionner correctement, permettant au Point de terminaison B d’accéder à l’adresse IP du Point de terminaison A (10.0.0.1) pour le contrôle d’accès et les journaux d’audit.
Fichier /etc/wireguard/wg0.conf sur l’Hôte B pour ajouter le paramètre suivant Interface.PreUp :
# /etc/wireguard/wg0.conf
# paramètres locaux de l'Hôte β
[Interface]
PrivateKey = ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBFA=
Address = 10.0.0.2/32
ListenPort = 51822
# transmission de paquets
PreUp = sysctl -w net.ipv4.ip_forward=1
paramètres distants pour le Point de terminaison A
[Peer] PublicKey = /TOE4TKtAqVsePRVR+5AA43HkAK5DSntkOCO7nYq5xU= AllowedIPs = 10.0.0.1/32
Si vous utilisez des adresses IPv6 pour votre VPN WireGuard, remplacez net.ipv4.ip_forward par net.ipv6.conf.all.forwarding.
Malheureusement, nous ne pouvons pas faire la deuxième chose — mettre à jour les tables de routage du Site B — via WireGuard. Si nous avions seulement quelques hôtes au Site B (comme disons, juste le Point de terminaison B) qui devaient être capables de router vers le VPN WireGuard, nous pourrions configurer chacun de ces hôtes individuellement avec une route personnalisée. Cependant, généralement la chose la plus simple à faire est simplement de mettre à jour la configuration du routeur du LAN du site pour ajouter une route vers le VPN WireGuard.
Si ce routeur est un ordinateur Linux, exécutez la commande ip route sur celui-ci pour vérifier les routes (IPv4) qu’il utilise actuellement (pour IPv6, exécutez ip -6 route). Pour notre routeur du LAN au Site B, le résultat pourrait ressembler à ceci :
$ ip route
203.0.113.0/26 dev eth0 proto kernel scope link src 203.0.113.2
192.168.200.0/24 dev eth1 proto kernel scope link src 192.168.200.1
default via 203.0.113.1 dev eth0
L’exemple ci-dessus montre que la passerelle a une adresse IP de 203.0.113.2 sur son appareil réseau eth0 (WAN, pour Réseau à large bande) et 192.168.200.1 sur son appareil réseau eth1 (LAN). L’appareil réseau eth1 est connecté au sous-réseau du Site B, 192.168.200.0/24.
Exécutez la commande suivante sur le routeur pour (temporairement) ajouter une route vers le réseau WireGuard à travers l’Hôte β sur l’appareil réseau eth1 (LAN) :
$ sudo ip route add 10.0.0.0/24 via 192.168.200.2 dev eth1
Remplacez le sous-réseau du Site B (10.0.0.0/24) par le sous-réseau réel que vous utilisez pour les adresses IP internes de votre VPN WireGuard ; remplacez l’adresse IP de l’Hôte β (192.168.200.2) par l’adresse IP réelle de l’Hôte β que vous utilisez ; et remplacez le nom de l’appareil réseau (eth1) par le nom réel de l’appareil par lequel le routeur est connecté au Site B.
Notez que si vous voulez simplement routage Endpoint A (et non tout autre pair WireGuard auquel vous pourriez vous connecter ultérieurement à Host β), vous pouvez restreindre le routeur juste à Endpoint A, plutôt que votre sous-réseau complet VPN WireGuard :
$ sudo ip route add 10.0.0.1/32 via 192.168.200.2 dev eth1
Et notez que l’ajout d’un routeur de cette manière ajoute simplement une route temporairement, jusqu’à ce que le routeur soit redémarré ou réconfiguré — si vous testez le tunnel WireGuard et tout fonctionne bien, vous voudrez rendre la modification de la route permanente via n’importe quel mécanisme que vous utilisez habituellement pour configurer le routeur (comme via networkd ou les fichiers de configuration netplan, ou vos propres scripts shell personnalisés, ou un outil avec une interface graphique utilisateur).
Démarrage de WireGuard
Nous sommes maintenant prêts à démarrer WireGuard et tester notre tunnel WireGuard entre Endpoint A et Host β. Retournez au guide standard Configuration Point to Site et reprenez là où vous en étiez dans la section “Démarrage de WireGuard”.
4/15/2021
par Justin Ludwig
by Justin Ludwig translated by: Patrice Le Guyader
