如何在 Windows 上使用 Wireguard 进行拆分 DNS

如何在 Windows 上使用 Wireguard 进行拆分 DNS

我想在 Windows 上使用 Wireguard 实现“拆分 DNS”,其中特定域的 DNS 请求由可通过 Wireguard 隧道访问的特定 DNS 服务器解析,而其他 DNS 请求由普通 DNS 服务器解析。

在 Windows 上如何执行此操作?在 Linux 上,我将使用自定义调用,resolvconf而不是使用DNS=选项wg-quick(请参阅wg-quick(8))。

答案1

您可以使用 Windows'NRPT(网络策略响应表)将特定区域中的域名路由到特定 DNS 服务器。NRPT 具有大量其他功能,我们将在此用例中介绍这些功能。

我们将使用过程:使用 Powershell 配置 NRPT为此,利用一些轻量级的 Powershell 脚本和Add-DnsClientNrptRulecmdlet Get-DnsClientNrptRuleRemove-DnsClientNrptRule记录在Powershell dnsclient 参考


因此,让我们为名为 的隧道配置 NRPT example-tunnel(隧道名称实际上并不重要),我们希望将所有 DNS 名称路由example.com到侦听的 DNS 服务器172.16.2.53

[Interface]
PrivateKey = KGtxx2By12kE/Ru0qkhM/41H0Lu2JzvCSB8dM61MIX0=
Address = 172.16.1.2/32
PostUp = powershell.exe -Command "& { Add-DnsClientNrptRule -Comment 'wg-example-tunnel' -Namespace '.example.com' -NameServers 172.16.2.53 }"
PostDown = powershell.exe -Command "& { Get-DnsClientNrptRule | where Comment -eq 'wg-example-tunnel' | foreach { Remove-DnsClientNrptRule -Name $_.Name -Force } }"

[Peer]
PublicKey = +ZDFdUwa6NZwI8YVQewnl1bBi1D2qKor8/JPLwj6m0=
Endpoint = 203.0.113.234:51820
AllowedIPs = 172.16.1.0/24, 172.16.2.0/24

启用隧道后,应该有一个 NRPT 规则,它应该如下所示:

PS C:\Users\joost> Get-DnsClientNrptRule | fl -Property Name,Namespace,NameServers,Comment


Name        : {6105290F-37C2-439C-A25E-F62A8DCE22AC}
Namespace   : {.example.com}
NameServers : 172.16.2.53
Comment     : wg-example-tunnel

因此这是PostUp=命令:

Add-DnsClientNrptRule -Comment 'wg-example-tunnel' -Namespace '.example.com' -NameServers 172.16.2.53

它设置带有管理注释的路由规则,以便我们稍后找到并删除它。


命令如下PostDown=

Get-DnsClientNrptRule `
    | where Comment -eq 'wg-example-tunnel' `
    | foreach { Remove-DnsClientNrptRule -Name $_.Name -Force }

这是一个枚举所有 NRPT 规则的管道,它过滤掉与命令中的管理注释相匹配的规则PostUp=,然后将其删除。


如果 Wireguard 阻止脚本执行,请创建一个注册表项以启用危险脚本执行

if (-not (Test-Path -Path HKLM:\SOFTWARE\Wireguard)) {
    New-Item -Path HKLM:\SOFTWARE\Wireguard -ItemType Directory -ErrorAction Stop
}
Set-ItemProperty -Path HKLM:\SOFTWARE\Wireguard -Name DangerousScriptExecution -Type DWord -Value 1
Get-ItemProperty -Path HKLM:\SOFTWARE\Wireguard

请阅读 Wireguard-Windows 的安全警告管理员注册表.md启用此功能之前请先阅读文档!

相关内容