3 votes

Comment désactiver les changements de table de routage dans WireGuard pour Windows ?

Ce que j'essaie de faire est d'avoir une interface séparée pour que certaines applications utilisent un VPN via WireGuard tandis que TOUTES les autres applications utilisent mes interfaces régulières (Split Tunneling par application). J'ai déjà résolu comment faire en sorte que des applications spécifiques utilisent mon interface WireGuard.

Mon problème maintenant est que TOUT le trafic de mes machines est dirigé à travers mon VPN lorsque mon tunnel WireGuard est ouvert.

J'ai essayé de supprimer allowedIPs = 0.0.0.0/0, ::/0 sous [Peer] et cela a eu pour effet que mon tunnel ne permettait aucun trafic de mes applications vers Internet.

J'ai également essayé d'ajouter Table = off sous [Interface] pour désactiver le fait que WireGuard ajoute mon tunnel à la table de routage de mes systèmes. Ce qui se passe dans ce cas, c'est que WireGuard refuse de sauvegarder ou d'importer la configuration et répond avec "Clé non valide pour la section [Interface]: "table".

J'utilise WireGuard pour Windows v0.3.14.

Y a-t-il un autre moyen d'accomplir cela?

3voto

Ryan Williams Points 86

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 = <...>

0voto

J'aurais aimé répondre directement à Ryan, mais je n'ai pas pu ¯\_()_/¯

En fonction de sa réponse, j'ai créé un petit script d'aide powershell.

Il peut configurer la clé de registre, redémarrer le service WireGuard Manager, et bien sûr, configurer la route par défaut (et une de plus!)

Vous le trouverez ici (avec un exemple de configuration) : https://gist.github.com/webtroter/36477c014e4cc5f169468891fa7652f2

0 votes

Poster ici est préférable que de poster des liens

0 votes

Eh bien, c'est un script très complet, avec plus d'une centaine de lignes. J'y ai réfléchi. Mais je pense qu'il vaut mieux écrire un script verbeux que viser la brièveté.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X