通过 HTTPS 保护 DNS 客户端 (DoH)

从 Windows Server 2022 开始,DNS 客户端支持基于 HTTPS 的 DNS (DoH)。 启用 DoH 后,Windows Server 的 DNS 客户端和 DNS 服务器之间的 DNS 查询会通过安全的 HTTPS 连接传递,而不是以纯文本形式传递。 通过加密连接传递 DNS 查询,可以保护它免受不受信任的第三方的拦截。

将 DNS 客户端配置为支持 DoH

只有在为网络接口选择的主 DNS 服务器或辅助 DNS 服务器位于已知 DoH 服务器的列表中的情况下,才能将 Windows Server 客户端配置为使用 DoH。 可以将 DNS 客户端配置为需要 DoH、请求 DoH 或仅使用传统的纯文本 DNS 查询。 若要将 DNS 客户端配置为支持具有桌面体验的 Windows Server 上的 DoH,请执行以下步骤:

  1. 在“Windows 设置”控制面板中,选择“网络和 Internet”

  2. 在“网络和 Internet”页面中,选择“以太网”

  3. 在“以太网”屏幕上,选择要为 DoH 配置的网络接口。

    screen shot of ethernet settings

  4. 在“网络”屏幕上,向下滚动到“DNS 设置”,然后选择“编辑”按钮。

  5. 在“编辑 DNS 设置”屏幕上,从自动或手动 IP 设置下拉列表中选择“手动”。 此设置允许配置首选 DNS 和备用 DNS 服务器。 如果已知 DoH 服务器的列表中存在这些服务器的地址,则会启用“首选 DNS 加密”下拉列表。 可以在以下设置之间进行选择,以设置首选的 DNS 加密:

    • 仅已加密(基于 HTTPS 的 DNS)。 选择此设置后,所有 DNS 查询流量都将通过 HTTPS 传递。 此设置为 DNS 查询流量提供最佳保护。 但是,这也意味着如果目标 DNS 服务器无法支持 DoH 查询,则不会进行 DNS 解析。

    • 首选已加密,允许未加密。 选择此设置后,DNS 客户端将尝试使用 DoH,然后回退到未加密的 DNS 查询(如果不可能那样做)。 此设置为支持 DoH 的 DNS 服务器提供最佳兼容性,但如果将 DNS 查询从 DoH 切换到纯文本,则不会为你提供任何通知。

    • 仅未加密。 发到指定 DNS 服务器的所有 DNS 查询流量均未加密。 此设置将 DNS 客户端配置为使用传统的纯文本 DNS 查询。

      screen shot of dns settings

  6. 选择“保存”,将 DoH 设置应用于 DNS 客户端。

如果使用 PowerShell 通过 Set-DNSClientServerAddress cmdlet 为客户端配置 DNS 服务器地址,则 DoH 设置取决于服务器的回退设置是否在已知 DoH 服务器的列表中。 目前无法使用 Windows Admin Center 或 sconfig.cmd 在 Windows Server 2022 上为 DNS 客户端配置 DoH 设置。

通过组策略配置 DoH

Windows Server 2022 的本地和域组策略设置包括“配置基于 HTTPS 的 DNS (DoH)名称解析”策略。 可以使用它将 DNS 客户端配置为使用 DoH。 此策略位于 Computer Configuration\Policies\Administrative Templates\Network\DNS Client 节点中。 启用后,此策略可以通过以下设置进行配置:

  • 允许 DoH。 如果指定的 DNS 服务器支持此协议,则使用 DoH 执行查询。 如果服务器不支持 DoH,则发出非加密查询。

  • 禁止 DoH。 将阻止 DoH 与 DNS 客户端查询的配合使用。

  • 需要 DoH。 将要求使用 DoH 执行查询。 如果配置的 DNS 服务器不支持 DoH,则名称解析将失败。

    screenshot of dns configuration.

不要为加入域的计算机启用“需要 DoH”选项,因为 Active Directory 域服务严重依赖 DNS(因为 Windows Server DNS 服务器服务不支持 DoH 查询)。 如果需要加密 Active Directory 域服务网络上的 DNS 查询流量,请考虑实施基于 IPsec 的连接安全规则来保护此流量。 有关详细信息,请参阅使用 IKEv2 保护端到端 IPsec 连接

确定哪些 DoH 服务器位于已知服务器列表中

Windows Server 附带一个已知支持 DoH 的服务器的列表。 你可以使用 Get-DNSClientDohServerAddress PowerShell cmdlet 确定此列表中有哪些 DNS 服务器。

screenshot of powershell command

已知 DoH 服务器的默认列表如下所示:

服务器所有者 DNS 服务器 IP 地址
Cloudflare 1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001
Google 8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
Quad 9 9.9.9.9
149.112.112.112
2620:fe::fe
2620:fe::fe:9

将新 DoH 服务器添加到已知服务器的列表

可以使用 Add-DnsClientDohServerAddress PowerShell cmdlet 将新的 DoH 服务器添加到已知服务器的列表中。 指定 DoH 模板的 URL,并指定是否允许客户端在安全查询失败时回退到未加密的查询。 此命令的语法是:

Add-DnsClientDohServerAddress -ServerAddress '<resolver-IP-address>' -DohTemplate '<resolver-DoH-template>' -AllowFallbackToUdp $False -AutoUpgrade $True

将名称解析策略表与 DoH 配合使用

可以使用名称解析策略表 (NRPT) 将特定 DNS 命名空间的查询配置为使用特定的 DNS 服务器。 如果已知 DNS 服务器支持 DoH,则与该域相关的查询将使用 DoH 执行,而不是以未加密的方式执行。