重要
Windows Server 上支持 DoH (DNS over HTTPS) 的 DNS 服务器目前处于预览版。 这些与预发行产品相关的信息在发布前可能进行重大修改。 Microsoft 不对此处提供的信息作任何明示或默示的担保。
客户端是否无法使用 DoH 连接到 DNS 服务器,或者加密的 DNS 查询失败,没有明确原因? 本文可帮助你识别和修复 Windows DNS Server 上的 HTTPS(DoH)常见 DNS 问题。 无论你是处理证书绑定错误、端口冲突还是性能问题,你都会找到分步指南,以便 DoH 正常工作。
从故障排除清单开始,快速查明问题,然后按照特定于症状的部分执行详细解决步骤。 本文适用于启用了 DoH 预览功能的 Windows Server 2025 及更高版本。
先决条件
在解决 DoH 问题之前,请确保您已满足以下条件:
安装了 2026-02 安全更新(KB5075899)或更高版本的 Windows Server 2025。
要在 DNS 服务器服务中启用 DNS over HTTPS,需先请求访问权限,然后按照提供的说明进行操作:Windows DNS 服务器上的 DoH:公共预览版注册。
对托管 DNS 服务器服务的 Windows Server 的管理或等效访问权限。
DoH 证书必须满足以下要求:
增强型密钥用法扩展:必须包括服务器身份验证(1.3.6.1.5.5.7.3.1) 对象标识符
主题或主题备用名称:具有主题备用名称(SAN)的签名证书,该证书具有与您配置的 DoH URI 模板匹配的完全限定域名或 IP 地址。
私钥:必须存在于本地计算机的存储中,正确与证书关联,并且不得启用强私钥保护
信任链:必须由 DNS 客户端信任的 CA 颁发
故障排除清单
请通过此清单来识别你的 DoH 问题。 每个检查都链接到详细的解决步骤。
1.验证 DoH 状态
✅ DoH 已启用: Get-DnsServerEncryptionProtocol 显示 EnableDoh : True
✅ DNS 服务正在运行: Get-Service DNS 显示 Running
✅ 配置的端口正在侦听: netstat -an | findstr :<port> 显示 LISTENING。 默认端口为 443。
若要解决服务配置问题,请参阅 症状:未配置或运行 DoH。
2. 验证 DoH 初始化
✅ 服务重启后,DNS 服务器事件日志中会显示事件 ID 822
✅ 事件日志中没有错误事件(823、824、825、826)
✅ 证书绑定到配置的端口: netsh http show sslcert
若要解决初始化失败,请参阅 症状:DoH 无法初始化。
3.验证客户端连接
✅ 客户端可以在配置的 DoH 端口(使用浏览器进行测试)上访问 DNS 服务器,默认情况下为 443
✅ 防火墙允许配置的 DoH 端口上的入站 TCP
✅ 客户端信任服务器证书(无证书警告)
若要解决连接问题,请参阅 症状:客户端无法使用 DoH 进行连接。
4.验证查询处理
✅ 事件 ID 597(收到的查询)显示在分析日志中。
✅ 事件 ID 598(发送的响应)显示在分析日志中
✅ 无事件 ID 599(响应失败)或事件 ID 600(查询被拒绝)
若要解决查询处理问题,请参阅 症状:DoH 查询失败或超时。
小窍门
如果未显示事件 ID 597,请先对客户端连接进行故障排除。 请参阅 症状:客户端无法使用 DoH 进行连接。
5.验证性能
✅ DoH 请求已删除/秒计数器 = 0
✅ 发送的 DoH 响应数/秒 ≈ DoH 请求接收/秒
✅ 查询延迟是可接受的
若要解决性能问题,请参阅 症状:DoH 性能问题。
症状:DoH 未配置或未运行
尝试使用 DoH,但客户端继续使用未加密的 DNS,或者无法验证是否在服务器上启用了 DoH。
常见原因:
服务器上未启用 DoH
DNS 服务已停止
DoH 设置中的配置错误
诊断方法:
若要检查 DoH 配置,请运行以下命令:
Get-DnsServerEncryptionProtocol
如果正确配置了 DoH,应会看到:
EnableDoh : True
UriTemplate : https://dns.contoso.com:443/dns-query
若要检查 DNS 服务状态,请运行以下命令:
Get-Service DNS
输出应显示 Status: Running。
若要验证配置的端口是否正在侦听,请运行以下命令。 如果不同,请将 443 替换为您配置的端口:
netstat -an | findstr :443
你应该看到处于 LISTENING 状态的 TCP 条目。
有关详细的监视过程,请参阅 通过 HTTPS 监视 DNS。
解决方法:
EnableDoh如果是False,若要启用 DoH,请运行以下命令:
Set-DnsServerEncryptionProtocol -EnableDoh $true -UriTemplate "https://dns.contoso.com:443/dns-query"
将 dns.contoso.com 替换为与您的证书 SAN 匹配的 DNS 服务器的 FQDN。
若要重启 DNS 服务器服务,请运行以下命令:
Restart-Service -Name DNS
如果以前未配置 DoH,请参阅在 Windows DNS Server 上通过 HTTPS 启用 DNS 以获取完整的设置说明,包括证书要求。
症状:DoH 无法初始化
启用 DoH,但服务未正确初始化。 客户端无法使用 DoH 进行连接。
常见原因:
证书绑定问题(事件 ID 823)。
端口冲突(事件 ID 825、826)。
URI 模板配置无效。
诊断方法:
检查 Windows 事件查看器中的 DNS 服务器事件。 转到 应用程序和服务>DNS 服务器。
有关完整的事件详细信息,请参阅 “通过 HTTPS 监视 DNS - 服务器事件”。
检查这些特定事件:
事件 ID 823 (DNS_EVENT_HTTP_SERVER_INIT_FAILED):HTTP 服务器初始化失败,通常是由于证书绑定问题或端口冲突。
事件 ID 824 (DNS_EVENT_HTTP_SERVER_SESSION_FAILED):HTTP 服务器会话创建失败,通常是由于资源约束。
事件 ID 825 (DNS_EVENT_HTTP_CREATE_URL_FAILED):由于 URI 格式或端口冲突无效,URL 注册失败。
查找事件 ID 822(DNS_EVENT_HTTP_URL_REGISTERED),标志着成功初始化。 如果在服务重启后缺少此事件,则初始化失败。
解决方法:
证书绑定问题
如果看到事件 ID 823,请运行以下命令来验证证书绑定:
netsh http show sslcert
查找与 IP 地址和端口匹配的条目(例如)。 0.0.0.0:443 确认它显示 DNS 服务器的证书指纹。
如果证书未绑定或显示不正确的指纹,请参阅 “绑定证书 ”以获取绑定正确证书的步骤。
确保证书满足以下要求:
有效的 SSL/TLS 证书 位于
LocalMachine\My store主题备用名称(SAN)与 DoH URI 中的 FQDN 匹配
已安装私钥
未过期
有关详细的证书设置,请参阅 在 Windows DNS Server 上通过 HTTPS 启用 DNS。
端口冲突
如果看到事件 ID 825 或 826,则其他服务可能正在使用端口 443。 若要检查哪个程序在使用该端口,请运行以下命令:
netstat -ano | findstr :443
如果另一个进程使用端口 443,则为:
- 停止冲突服务,或
- 若要将 DoH 配置为使用其他端口,请运行以下命令:
Set-DnsServerEncryptionProtocol -EnableDoh $true -UriTemplate "https://dns.contoso.com:8443/dns-query"
然后将证书绑定到新端口并相应地更新防火墙规则。
配置错误
验证 URI 模板的格式是否正确:
以
https://开头包括与您的证书中的 SAN 匹配的 FQDN
包括路径
/dns-query示例:
https://dns.contoso.com:443/dns-query
若要检查当前的 URI 模板配置,请运行以下命令:
Get-DnsServerEncryptionProtocol | Select-Object UriTemplate
如果 URI 模板不正确或缺失,请运行以下命令以重新配置它:
Set-DnsServerEncryptionProtocol -EnableDoh $true -UriTemplate "https://dns.contoso.com:443/dns-query"
将 dns.contoso.com 替换为 DNS 服务器的完全限定域名(FQDN)。 确保 FQDN 与证书中的使用者可选名称(SAN)完全匹配。
解决问题后,运行以下命令以重启 DNS 服务。 检查事件 ID 822 以确认成功初始化。
Restart-Service -Name DNS
症状:客户端无法使用 DoH 进行连接
在服务器上配置和启动 DoH,但客户端无法连接或收到证书错误。
常见原因:
网络或防火墙阻止配置的 DoH 端口,默认情况下为 443。
证书信任问题。
客户端使用错误的 URI 或配置。
诊断方法:
从客户端计算机测试连接性,方法是打开 Web 浏览器并转到您的 DoH URI(例如,https://dns.contoso.com/dns-query)。 应会看到以下结果之一:
空白页或最小响应指示服务器正在侦听,网络连接正常工作。
证书错误指示证书信任问题,但确认网络连接和防火墙规则正确。
连接超时表示由于网络或防火墙问题,无法通过 DoH 访问 DNS 服务器。
若要检查 DNS 服务器上的防火墙规则,请运行以下命令:
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*DNS*" -or $_.DisplayName -like "*443*"} | Format-Table DisplayName, Enabled, Direction, Action
通过检查浏览器中的证书详细信息来验证客户端证书信任。 检查证书链是否有效且受信任。
解决方法:
网络连接
首先,通过 HTTPS 验证从客户端到 DNS 服务器的网络连接。 运行以下命令,如果配置了非默认端口,请替换端口:
Test-NetConnection -ComputerName dns.contoso.com -Port 443
如果 TcpTestSucceeded 返回 False,请检查客户端和服务器之间的网络路由和防火墙规则。
若要在服务器上创建新的 Windows 防火墙规则以允许入站连接,请运行以下命令。 如果不同,请将 443 替换为您配置的端口:
New-NetFirewallRule -DisplayName "DNS over HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
如果您使用硬件防火墙或网络安全组,请确保它允许在您配置为 DoH 的端口上向 DNS 服务器传入的 TCP 流量。
证书信任
如果使用专用证书颁发机构(CA):
确保 DNS 客户端信任该 CA。
在客户端计算机上安装根 CA 证书。
验证证书链是否已在服务器上完成。
或者,使用由客户端已信任的公开信任 CA 签名的证书。
若要从客户端测试与 DNS 服务器的 DoH 端口的网络连接,请运行以下命令。 如果不同,请将 443 替换为您配置的端口:
Test-NetConnection -ComputerName dns.contoso.com -Port 443
若要验证证书是否受客户端信任,请打开 Web 浏览器并转到 https://dns.contoso.com/dns-query。 如果浏览器显示证书警告,则客户端不信任证书链。
有关证书部署指南,请参阅 在 Windows DNS Server 上通过 HTTPS 启用 DNS。
客户端配置
验证客户端的 DoH 配置是否与服务器的 URI 完全匹配:
Windows 11:设置 > 网络和 Internet > [连接] > DNS 设置
DoH 模板必须匹配:
https://dns.contoso.com:443/dns-query如果使用非默认端口,请确保客户端指定它。
如果配置客户端但仍使用未加密的 DNS,请检查客户端网络设置中的 DNS 服务器 IP 地址是否与启用 DoH 的 DNS 服务器匹配。
症状:DoH 查询失败或超时
客户端连接到 DNS 服务器,但查询失败或未收到响应。
常见原因:
上游 DNS 解析问题 (事件 ID 599)
客户端协议不兼容(事件 ID 600)
客户端 DoH 配置问题
DNS 服务器配置问题
诊断方法:
启用分析日志记录以捕获详细的每查询事件:
打开事件查看器,转到Windows>DNS-Server>>。
右键单击 “分析 ”,然后选择“ 启用日志”。
有关详细的分析日志记录过程,请参阅 通过 HTTPS 监视 DNS - 分析事件。
检查以下关键事件:
事件 ID 597:收到 DoH 查询 - 确认加密 DNS 查询到达服务器
事件 ID 598:发送 DoH 响应 - 确认成功响应
事件 ID 599:DoH 响应失败 - 指示服务器尝试回答但无法(可能上游解决问题)
事件 ID 600:拒绝 DoH 查询 - 服务器正在主动删除某些 DoH 请求
事件 ID 601:DoH 通道故障 - 在某些错误情况下,可能伴随 600 或 599
查找模式:
多个事件 ID 597 条目,但没有事件 ID 598 条目表明服务器无法解析查询。
事件 ID 600 条目可能指示 HTTP 版本不兼容或格式不正确的请求。
事件 ID 599,其中
SERVFAIL RCODE表明上游转发器故障。
解决方法:
上游 DNS 问题 (事件 ID 599)
如果看到事件 ID 599 出现 SERVFAIL 或类似错误,请检查 DNS 服务器上的上游 DNS 配置。 运行下面的命令:
Get-DnsServerForwarder
若要测试与转发器的连接,请运行以下命令:
Test-NetConnection -ComputerName <forwarder-ip> -Port 53
如果转发器无法访问或配置错误,请使用以下命令尝试备用转发器:
Set-DnsServerForwarder -IPAddress <new-forwarder-ip>
若要手动测试解析,请运行以下命令:
Resolve-DnsName -Name microsoft.com -Server localhost
有关传统 DNS 故障排除,请参阅 DNS 服务器故障排除。
查询拒绝(事件 ID 600)
事件 ID 600 指示拒绝的查询。 常见原因包括:
HTTP 请求不兼容:由于 HTTP 请求特征不受支持或无效,DNS 服务器拒绝请求。
格式不正确的请求:查询不符合 RFC 8484。
DNS 策略限制:DNS 策略可能会删除查询。
不符合服务器端请求要求:在接收接口上未启用 DoH,或者 URI 模板不匹配或服务器端验证、配置或策略检查。
检查事件详细信息以了解拒绝原因。 如果客户端使用不兼容的 HTTP 版本,请更新客户端软件或使用不同的 DoH 客户端应用程序。
若要验证没有 DNS 策略干扰,请运行以下命令:
Get-DnsServerQueryResolutionPolicy
客户端 DoH 配置
如果查询从特定客户端失败,但从其他客户端正常工作,请验证客户端的 DoH 配置。 常见问题包括:
- DoH URI 模板不正确
- DNS 服务器 IP 地址与用于 DoH 的 DNS 服务器不匹配
- 客户端未配置为使用 DoH
有关客户端配置指南,请参阅通过 HTTPS 保护 DNS 客户端(DoH)。
服务器配置
如果查询失败是由于本文前面未列出的原因,请检查常规 DNS 服务器配置:
请确认根提示的配置是否正确。
检查权威区域的区域加载。
检查是否应让服务器执行递归解析的设置。
有关全面的 DNS 故障排除,请参阅 对 DNS 服务器进行故障排除。
若要避免过度生成事件,请在故障排除完成后禁用分析日志。
症状:DoH 性能问题
DoH 有效,但与未加密的 DNS 相比,会出现高延迟、丢弃的查询或性能不佳的情况。
常见原因:
服务器容量限制
TLS 握手开销
网络拥塞或 CPU 使用率较高
诊断方法:
请使用 监视 DNS over HTTPS - 监视性能,启用以下计数器监控:
- 每秒接收的 DoH 请求数
- 每秒发送的 DoH 响应数
- DoH 请求已删除/秒
性能问题的关键指标:
DoH 请求已删除/秒 > 0:服务器放弃查询。
接收的请求数/秒远高于发送的响应数/秒:许多查询不会得到答案。
DoH 查询处理期间,CPU 使用率较高或突增。
同时监视系统资源:
CPU 使用率
内存使用情况
网络吞吐量
如果只有某些查询速度缓慢,则问题可能位于 DoH 外部。 例如,对特定域的上游服务器的递归速度缓慢。 若要将 DoH 开销与常规 DNS 延迟隔离,请比较相同查询的 DoH 和未加密的 DNS 性能。 如果两者都是缓慢的,则问题可能是上游解决方案,而不是特定于 DoH 的问题。
解决方法:
已删除的查询
如果 DoH Requests Dropped/sec 大于 0,请执行以下步骤:
与 DNS 服务器日志中的事件 ID 600 相关联,以识别删除的原因。
检查服务器是否受资源约束。
Get-Counter '\Processor(_Total)\% Processor Time' Get-Counter '\Memory\Available MBytes'如果 CPU 或内存一直很高,请考虑:
- 使用更多 CPU 或 RAM 资源纵向扩展服务器。
- 添加额外的 DNS 服务器以分发负载。
- 实现 DNS 负载均衡。
高延迟
与未加密的 DNS 相比,TLS 握手开销会增加查询延迟。 诊断延迟问题:
将 DoH 查询时间与相同查询的未加密 DNS 基线进行比较。
使用客户端工具测量端到端 DoH 查询时间。
如果同一查询的 DoH 和未加密 DNS 速度都很慢,问题在于上游解析问题,而不是 DoH 特有的问题。
若要减少特定于 DoH 的延迟,请按以下步骤进行:
验证服务器 CPU 容量:TLS作占用大量 CPU。 若要检查 CPU 是否是 DoH 流量期间的瓶颈,请运行以下命令:
Get-Counter '\Processor(_Total)\% Processor Time' -SampleInterval 1 -MaxSamples 30如果在 DoH 流量期间 CPU 持续超过 70-80%,请考虑升级服务器资源或分配负载。
查看证书链长度:较短的证书链验证速度更快。 确保正确配置中间证书以避免额外的查找。
检查网络路径:客户端和 DNS 服务器之间的网络延迟较高直接影响查询时间。 使用
Test-NetConnection或traceroute查找网络瓶颈。
资源约束
如果服务器预配不足:
在正常作期间监视基线资源使用情况。
确定高峰使用时间,并将其与查询量相关联。
如下所示:
- 垂直缩放(更大的 VM 或物理服务器)。
- 水平缩放(负载均衡器后面的多个 DNS 服务器)。
- 优化 DNS 区域配置以减少区域传输开销。
若要监视长期趋势和计划容量,请运行以下命令:
Get-Counter '\DNS-over-HTTPS\DoH Requests Received/sec' -Continuous
有关容量规划指南,请参阅 “通过 HTTPS 监视 DNS - 监视性能”。
高级诊断
当基本故障排除无法解决问题时,请使用这些高级技术来收集详细的诊断信息。
启用分析日志记录
DNS 服务器分析日志详细捕获每个查询事件,包括特定于 DoH 的操作。 启用日志记录时,它会为每个 DoH 查询、响应、失败和拒绝的事件记录事件 ID 597-600。
有关启用和使用分析日志记录的分步说明,请参阅 通过 HTTPS 监视 DNS - 分析事件。
重要
完成后禁用分析日志记录,因为它会在繁忙的服务器上生成大量事件。
详细事件分析
查看 DoH 事件时,请检查这些事件字段以获取诊断线索:
QNAME:查询的域名。 此字段可帮助你确定问题是否特定于域。
QTYPE:DNS 记录类型,如 A、AAAA、MX 等。
RCODE:响应代码,如 NOERROR、SERVFAIL、NXDOMAIN 等。
原因:对于事件 ID 600,此字段提供拒绝原因。
客户端 IP:查询的源。 此字段可帮助你识别有问题的客户端。
随时间推移关联事件:
查找模式。 故障是否在特定时间发生?
检查多个客户端是否遇到相同的问题。
确定故障是否与高负载周期相关。
与其他日志交叉引用:
Schannel TLS 错误的系统日志。
DNS 服务器操作日志,用于记录区域和转发器问题。
服务级错误的应用程序日志。
性能分析
进行深入性能分析:
在正常作期间建立基线指标。
将当前性能与基线进行比较。
识别偏差,并与事件或配置更改相关联。
要随时间推移监视的关键性能计数器:
Get-Counter -Counter @(
'\DNS-over-HTTPS\DoH Requests Received/sec',
'\DNS-over-HTTPS\DoH Responses Sent/sec',
'\DNS-over-HTTPS\DoH Requests Dropped/sec',
'\Processor(_Total)\% Processor Time',
'\Memory\Available MBytes'
) -SampleInterval 5 -MaxSamples 60
此命令每隔 5 秒采样一次 5 分钟,提供趋势数据。
分析趋势:
性能随时间推移是否下降?
一天中的特定时间是否显示问题?
性能是否与查询量相关?
使用此数据可以:
规划容量升级。
确定配置瓶颈。
优化 DNS 服务器设置。
有关全面的性能监视指南,请参阅 通过 HTTPS 监视 DNS。