Relais des connexions de WireGuard sous Windows
|
Important
|
Traduction d’un article du site PRO CUSTODIBUS Le contenu de cette page est la traduction Française de l’article Forwarding WireGuard Connections on Windows de Justin Ludwig |
Transfert de connexions WireGuard sur Windows
WireGuard fonctionne généralement bien par défaut sur Windows avec une connexion Point-to-Point, ou comme un “Point” dans une liaison conventionnelle Point-to-Site, ou comme un “Spoke” dans une liaison Hub-and-Spoke ; et si vous souhaitez exposer un service réseau (comme un serveur web) sur un tel point ou spoke, vous pouvez le faire en apportant une ou deux modifications à son pare-feu Windows.
Mais si vous voulez utiliser une machine Windows comme le “Hub” dans une liaison Hub-and-Spoke, ou pour exposer un “Site” dans une connexion Point-to-Site ou Site-to-Site, vous devez effectuer des modifications supplémentaires de diverses paramètres de réseau Windows. Cet article vous montrera comment :
Transfert du Hub
Activer le transfert de paquets sur un hub WireGuard est la configuration de transfert la plus simple à mettre en œuvre. Par exemple, si vous avez configuré WireGuard sur une machine Windows comme le “Hub C” dans le guide Configuration du Hub et Spoke WireGuard :
Vous pouvez activer le transfert de paquets en exécutant la commande PowerShell Set-NetIPInterface suivante en tant qu’Administrateur sur Host C :
PS> Set-NetIPInterface -InterfaceAlias wg0 -Forwarding Enabled
Le commandement ci-dessus active à la fois la transmission IPv4 et IPv6. Par exemple, vous pourriez activer chaque version séparément en exécutant les instructions suivantes [`netsh`](https://learn.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-contexts):
```bash
> netsh interface ipv4 set interface wg0 forwarding=enabled
> netsh interface ipv6 set interface wg0 forwarding=enabled
Tous ces commandes ont le même effet que d’activer les paramètres de transmission IP du noyau sur une machine Linux :
# sysctl -w net.ipv4.conf.wg0.forwarding=1
# sysctl -w net.ipv6.conf.wg0.forwarding=1
Pour vérifier l’état actuel de la transmission pour chaque interface réseau sur une machine Windows, exécutez la commande suivante en PowerShell :
PS> Get-NetIPInterface | Select IfIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table
IfIndex InterfaceAlias AddressFamily ConnectionState Forwarding
------- -------------- ------------- --------------- ----------
1 Loopback Pseudo-Interface 1 IPv4 Connected Disabled
1 Loopback Pseudo-Interface 1 IPv6 Connected Disabled
7 Ethernet IPv6 Connected Disabled
7 Ethernet IPv4 Connected Disabled
15 wg0 IPv6 Connected Enabled
15 wg0 IPv4 Connected Enabled
Passerelle du Site
Activer la transmission de paquets pour une passerelle WireGuard est légèrement plus complexe qu’pour un hub. Vous devez exécuter les mêmes commandes sur la passerelle du site que sur le hub—mais pour toutes deux l’interface WireGuard (wg0) et l’adaptateur Ethernet de face au réseau du site (généralement nommé Ethernet):
PS> Set-NetIPInterface -InterfaceAlias wg0 -Forwarding Enabled
PS> Set-NetIPInterface -InterfaceAlias Ethernet -Forwarding Enabled
PS> Get-NetIPInterface | Select IfIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table
IfIndex InterfaceAlias AddressFamily ConnectionState Forwarding
------- -------------- ------------- --------------- ----------
1 Loopback Pseudo-Interface 1 IPv4 Connected Disabled
1 Loopback Pseudo-Interface 1 IPv6 Connected Disabled
7 Ethernet IPv6 Connected Enabled
7 Ethernet IPv4 Connected Enabled
15 wg0 IPv6 Connected Enabled
15 wg0 IPv4 Connected Enabled
Exécutez ces commandes sur le routeur WireGuard pour les deux sites dans une connexion Site-to-Site (par exemple, les deux “Host α” et “Host β” dans la configuration WireGuard Site to Site), ou sur l’hôte du site d’une connexion Point-to-Site (par exemple, le “Host β” dans la configuration WireGuard Point to Site With a Site Gateway guide).
Notez que vous aurez toujours besoin de mettre à jour les tables de routage sur le routeur du LAN (ou chacun des ordinateurs individuels que vous souhaitez exposer) au site afin que le trafic provenant d’autres ordinateurs au même site puisse réellement être routé vers l’hôte du site WireGuard. Par exemple, dans la configuration WireGuard Point to Site With a Site Gateway guide, le réseau WireGuard utilise la plage d’adresses 10.0.0.0/24, et l’hôte du site WireGuard (Host β) a une adresse de 192.168.200.2 sur le LAN :
Ainsi, sur le routeur du LAN au site B, vous devrez ajouter une route comme suit :
# ip route add 10.0.0.0/24 via 192.168.200.2 dev eth1
Masquarade sur Point à Site
La mise en place du masquarade (en tant que Traduction d’adresse réseau source ou SNAT) sur un hôte de site WireGuard pour une connexion Point-to-Site est légèrement plus complexe. Vous devez simplement utiliser la commande New-NetNat et spécifier le bloc d’adresses sources qui doivent être masquées.
Par exemple, si vous avez configuré WireGuard sur une machine Windows pour être un hôte de site comme “Host β” dans la Configuration Point-to-Site WireGuard guide, 10.0.0.0/24 est le bloc d’adresses WireGuard que l’hôte du site doit masquer à la LAN du site :
Pour activer cela, exécutez la commande PowerShell suivante en tant qu’Administrateur sur Host β:
PS> New-NetNat -Name wg0nat -InternalIPInterfaceAddressPrefix 10.0.0.0/24
Contrairement au Linux, vous n’avez pas besoin d’activer séparément le forwarding des paquets ; Windows permettra automatiquement le forwarding à partir de tout address source dans le bloc d’addresses spécifié (comme 10.0.0.1, le “Point” WireGuard dans l’exemple de Configuration Point-to-Site), et réécriera automatiquement l’address source de ces connexions forwardées pour utiliser l’address de l’interface par laquelle la connexion est forwardée (comme 192.168.200.2, l’adresse LAN de Host β ci-dessus).
Exécutez la commande PowerShell suivante pour voir la liste courante de configurations SNAT :
PS> Get-NetNat
```plaintext
Nom : wg0nat
PrefixeAdresseInterfaceExterne :
PrefixeAdresseInterfaceInterne : 10.0.0.0/24
TempsLimiteRequêteIcmp : 30
TempsLimiteConnexionÉtablise : 1800
TempsLimiteConnexionTemporaire : 120
ComportementFiltrageTcp : FiltrageDépendantAdresse
ComportementFiltrageUdp : FiltrageDépendantAdresse
TempsLimiteSessionInactifUdp : 120
ActualisationSéssionEntranteUdp : Faux
Stockage : Local
Actif : Vrai
Notez que le nom wg0nat dans l’exemple ci-dessus est totalement arbitraire — il n’a pas besoin d’inclure le nom de l’interface WireGuard. Il est pertinent uniquement pour la mise à jour ou la suppression des configurations SNAT existantes ; par exemple, exécutez la commande suivante pour supprimer la SNAT ajoutée ci-dessus :
PS> Remove-NetNat -Name wg0nat -Confirm:$false
Réoutillage vers un point de terminaison
L’activation du réoutillage (c’est-à-dire le Traduction d’adresse réseau de destination ou DNAT) sur une machine hôte WireGuard prend quelques étapes supplémentaires. Le premier pas consiste à déterminer l’adresse et le port d’origine de destination qui seront utilisés par les paquets entrants qui devraient être réoutils, ainsi que l’adresse et le port auxquels ces paquets doivent être redirigés.
Avec l’exemple du WireGuard Point to Site avec Réoutillage guide, “Host β” doit transférer les paquets entrants TCP sur le port 80 à partir de sa LAN locale vers le port 80 du WireGuard “Endpoint A”, qui a une adresse IP de 10.0.0.1 sur le réseau WireGuard :
Pour configurer cette DNAT, exécutez d’abord la commande suivante netsh en tant qu’administrateur sur Host β :
> netsh interface portproxy add v4tov4 listenaddress=192.168.200.2 listenport=80 connectaddress=10.0.0.1 connectport=80
Pour les adresses IPv6, utilisez la sous-commande v6tov6 au lieu de v4tov4. Contrairement aux Linux, vous n’avez pas besoin d’activer séparément le relais des paquets et vous n’avez pas besoin d’activer la SNAT — les connexions qui correspondent à cette règle DNAT seront automatiquement transférées et leur adresse source sera traduite pour correspondre à l’interface par laquelle elles seront transférées (10.0.0.2 dans cet exemple).
Ajoutez ensuite une règle de pare-feu sur Host β avec la commande PowerShell New-NetFirewallRule afin d’accepter les connexions entrantes avant leur traduction :
PS> New-NetFirewallRule `
-Name wg0http `
-DisplayName "HTTP-In wg0" `
-Group "Custom" `
-Enabled True `
-Direction Inbound `
-Action Allow `
-Protocol TCP `
-LocalPort 80
La règle de pare-feu ci-dessus permettra les connexions sur le port TCP 80 depuis n’importe quel endroit. Cependant, vous pourriez vouloir ajouter une option -RemoteAddress pour restreindre les ordinateurs source à partir desquels Host β fera des transferts ; par exemple, vous pourriez ajouter l’option suivante -RemoteAddress 192.168.200.0/24 pour permettre des transferts uniquement depuis le réseau local de Host β :
PS> New-NetFirewallRule `
-Name wg0http `
-DisplayName "HTTP-In wg0" `
-Group "Custom" `
-Enabled True `
-Direction Inbound `
-Action Allow `
-Protocol TCP `
-LocalPort 80 `
-RemoteAddress 192.168.200.0/24
La combinaison de la commande de proxy port et de règle de pare-feu ci-dessus permettra à l’Host β d’exécuter des transferts HTTP à partir du réseau local de son site via WireGuard jusqu’à Endpoint A.
Pour lister les proxys de ports actifs, exécutez la commande suivante :
> netsh interface portproxy show all
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
192.168.200.2 80 10.0.0.1 80
Pour supprimer la configuration du port-proxy créée précédemment, exécutez la commande suivante avec l’adresse et le port à supprimer :
> netsh interface portproxy delete v4tov4 listenaddress=192.168.200.2 listenport=80
Et pour supprimer la règle de pare-feu créée précédemment, exécutez la commande PowerShell suivante avec le nom de la règle à supprimer :
PS> Remove-NetFirewallRule -Name wg0http
7/12/2024
par Justin Ludwig
