L'un de mes amis m'a aidé à résoudre ce problème avec l'aide de zx2c4 (Jason Donenfeld) de WireGuard. Je partage notre solution ici pour la prochaine personne ayant le même problème.
WireGuard pour Windows a ajouté le support de Table = off
dans la version 0.3.15. Cela fait en sorte que WireGuard ne met pas à jour la table de routage lorsque le tunnel est ouvert.
À ce stade, nous avons un tunnel mais Windows ne routera pas le trafic à travers, même s'il s'agit du seul adaptateur pour l'application. Pour résoudre ce problème, nous devons ajouter une route par défaut à l'adaptateur avec une priorité inférieure à notre route par défaut normale.
Pour ce faire, nous devons d'abord activer DangerousScriptExecution dans WireGuard. Pour ce faire, nous devons définir la clé de Registre HKEY_LOCAL_MACHINE\Software\WireGuard\DangerousScriptExecution
sur DWORD(1)
en utilisant regedit. La clé n'existe pas par défaut et doit être créée en utilisant regedit. Ensuite, WireGuard doit être redémarré.
Une fois cela fait, nous devons exécuter quelques commandes PowerShell lorsque nous démarrons et arrêtons le tunnel pour créer notre route par défaut pour le tunnel. Cette route doit avoir un métrique/coût plus élevé (priorité inférieure) que notre route par défaut normale. Pour cette solution, nous avons utilisé une valeur de métrique de 95 (10 de plus que la métrique automatique la plus élevée).
WireGuard a la capacité d'exécuter automatiquement des commandes Windows spécifiées dans les options PreUp
, PostUp
, PreDown
et PostDown
dans la configuration du tunnel. Nous utilisons cela pour configurer nos routes automatiquement.
WireGuard définit la variable d'environnement WIREGUARD_TUNNEL_NAME
sur le nom de ce tunnel exact lorsqu'il exécute des commandes. Nous pouvons la convertir en un objet PowerShell en appelant $wgInterface = Get-NetAdapter -Name %WIREGUARD_TUNNEL_NAME%
.
Une fois que nous avons le tunnel en tant qu'objet PowerShell, nous pouvons configurer ou supprimer notre route dans Windows.
Pour créer notre route, nous appelons route add 0.0.0.0 mask 0.0.0.0 0.0.0.0 IF $wgInterface.ifIndex metric 95
Pour supprimer notre route, nous appelons route delete 0.0.0.0 mask 0.0.0.0 0.0.0.0 if $wgInterface.ifIndex metric 95
Lorsque nous combinons tout cela, nous obtenons ce qui suit sous [Interface]
dans la configuration du tunnel. PostUp
, PreDown
et Table = off
sont les éléments de cette solution.
[Interface]
PrivateKey = <...>
Address = <...>
DNS = <...>
PostUp = powershell -command "$wgInterface = Get-NetAdapter -Name %WIREGUARD_TUNNEL_NAME%; route add 0.0.0.0 mask 0.0.0.0 0.0.0.0 IF $wgInterface.ifIndex metric 95"
PreDown = powershell -command "$wgInterface = Get-NetAdapter -Name %WIREGUARD_TUNNEL_NAME%; route delete 0.0.0.0 mask 0.0.0.0 0.0.0.0 if $wgInterface.ifIndex metric 95"
Table = off
[Peer]
PublicKey = <...>
AllowedIPs = 0.0.0.0/0,::0/0
Endpoint = <...>