ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Win11 原生 DoH 配置:自定义 DNS over HTTPS 服务器

Win11 原生 DoH 配置:自定义 DNS over HTTPS 服务器 Win11 从 22H2 开始把 DoHDNS over HTTPS做进了系统底层这件事本身不算新闻但真去动手的人经常会卡在同一个地方填完 DNS 的 IP点开通过 HTTPS 的 DNS下拉框发现里面只有关和开自动模板两个选项想用的那家服务根本不在列表里也不知道自定义 DoH 服务该往哪里填。更尴尬的是网上很多教程还在教人装第三方客户端去接管系统 DNS其实完全没必要——Win11 自带的 DNS 客户端Dnscache 服务已经能直接跑加密查询配好之后任务栏多一个进程、少一层封装干净得多。这篇内容适合三类人刚把系统重装完想顺手把 DNS 加密打开的普通用户手里有自建或小众 DoH 服务、想知道怎么让 Win11 认它的折腾党以及需要在企业环境里统一配置、要搞清楚注册表和命令行怎么写的人。我会把版本门槛、界面路径、PowerShell 与 netsh 命令、注册表字段、验证手段、以及我自己踩过的坑全部摊开讲。里面涉及的参数计算和路径都经过实机核对你照着抄基本不会翻车。1. 先搞清楚 Win11 原生 DoH 的实现位置1.1 明文 DNS 到底差在哪DoH 补的是哪一块传统 DNS 走 UDP 53 端口整个报文是裸奔的没有加密也没有完整性校验。链路中间任何一台设备都能看到你查了哪些域名也能直接改应答内容。表现出来就是熟悉的那几种——网页右下角被塞进运营商的推广浮窗、输入一个不存在的域名跳到了导航页、明明域名没换但解析出来的 IP 隔三差五变一次。这些现象背后大多是 DNS 应答在传输路径上被改写过。DoH 的思路很直接把 DNS 的查询和应答报文当成普通 HTTP 数据封装进 TLS 连接里走 443 端口。对链路上的设备而言这就是一段加密流量看不出里面问的是什么改不了也插不进东西。Windows 的实现位置在 Dnscache 服务里也就是DNS 客户端这个系统服务它负责缓存、解析、以及决定这次查询用明文还是加密发出去。这里必须把边界说清楚免得期望过高DoH 加密的是你问了什么域名这一层不加密你最终连接的目标 IP。也就是说链路上的设备依然能看见你连了哪个地址只是不知道你为了连它而查询了哪个名字。同时DoH 服务提供商本身是能完整看到你的查询记录的选服务商本质上是在选把这份记录交给谁。理解了这个取舍后面的配置选择自然就有依据了。1.2 版本门槛与三项前置检查原生 DoH 在 Windows 11 22H2Build 22621之后的版本才正式可用早期的 21H2 是没有这个能力的无论如何改注册表都调不出来。第一步先确认自己系统的版本号winver弹窗看最直观也可以在 PowerShell 里跑Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber拿到 OsBuildNumber 之后对照一下22621 及以上就具备条件。顺便说一句如果你看到的是 26100 这类更高的版本号那也是没问题的功能是向前兼容的只是界面文案可能略有差异。第二项检查是 DNS 客户端服务必须在运行状态Get-Service Dnscache | Select-Object Name, Status, StartType状态要是 Running启动类型一般是 Automatic。这个服务被禁用或者被某些优化工具关掉了加密 DNS 一定起不来界面上的下拉框也可能残缺。第三项是权限单纯在设置界面里给某块网卡配 DNS 和 DoH普通账户就能做但只要涉及把服务器注册进系统全局的已知 DoH 清单后面第 3 节会讲就必须用管理员身份打开 PowerShell 或终端否则命令会直接报拒绝访问。这三项检查加起来不到一分钟但能省掉后面大量的无效排查。1.3 已知服务器清单决定下拉框里有没有自动模板的关键Windows 内部维护了一份已知 DoH 服务器清单里面是若干条IP 地址 - DoH 模板 URL的对应关系。设置界面里那个下拉框的行为完全由这份清单决定当你填的首选 DNS 地址命中了清单里的某一项下拉框就会出现开自动模板选中后系统会自动套用清单里记录的 URL如果这个 IP 不在清单里你能选的通常只有关和开手动模板后者需要你自己把模板地址填进去。清单可以直接查出来Get-DnsClientDohServerAddress | Format-Table ServerAddress, DohTemplate, AutoUpgrade, AllowFallbackToUdp -AutoSize输出里的 ServerAddress 是 IPDohTemplate 是系统会去访问的 HTTPS 地址AutoUpgrade 表示是否允许系统在条件允许时自动把明文查询升级为加密查询AllowFallbackToUdp 表示加密通道打不通时是否允许退回明文。这四个字段就是整个 Win11 原生 DoH 的全部配置维度理解了它们剩下的操作只是换不同的入口去改这几个值而已。很多人第一次配置失败就是因为用了一家不在清单里的 DNS比如某些地区性服务商或者自建服务却一直在等自动模板出现。正确做法是走手动模板或者主动把这个服务器注册进清单让系统认识它。第 3 节的命令就是干这个的。2. 五分钟上手图形界面把加密查询打开2.1 手动 DNS 分配的完整点击路径图形界面的入口在这设置 → 网络和 Internet → 以太网用无线就选 Wi-Fi→ 往下找到DNS 服务器分配→ 点右边的编辑。弹出的面板里把类型从自动(DHCP)改成手动然后打开IPv4开关在首选 DNS里填服务器地址备用 DNS 可以填同一家的第二个地址也可以留空。保存之后不要急着关页面退回到上一层你会看到多出来一个通过 HTTPS 的 DNS下拉项——注意它只有在 DNS 被设为手动模式之后才会出现。点开它如果是命中清单的服务器就能看到开自动模板否则是开手动模板选后者之后下面会多出一个输入框把 DoH 模板地址粘贴进去再点保存。整套操作不涉及命令行两分钟能做完。这里有个容易被忽略的细节以太网和 Wi-Fi 是两套独立配置笔记本在家用无线、到工位插网线那么两块网卡都要各配一遍。IPv6 也是独立的如果你的网络下发了 IPv6 的 DNS 地址而 IPv6 那一侧仍走明文加密就是残缺的只是平时不容易察觉。2.2 自动模板和手动模板该怎么选两种模式的差别不只是要不要手填地址它背后对应的是配置来源不同。自动模板的 URL 来自系统内置清单你改不了手动模板是你自己指定的系统会直接用你给的那一条。对比项自动模板手动模板URL 来源系统内置清单你填写的地址适用服务器只限于清单内的 IP任意符合规范的 DoH 服务界面表现只显示开无输入框出现输入框必填出错概率低URL 由系统保证正确取决于你填得对不对灵活性无法自定义路径可指定任意路径与模板参数实际选择上我的一般原则是能用自动模板就用自动模板。原因是内置清单里的 URL 是经过验证的跟服务商当前的接口路径一致不会因为服务商改了路径而失效。手动模板适合两种情况一是你用的服务器确实不在清单内二是你想用某个服务的特定入口比如带域名过滤策略的地址。还有一个参数值得单独拎出来讲UDP 回退。手动模板面板里通常能看到一个类似允许回退到明文 UDP的开关默认是开的。开着的好处是加密通道断了还能上网坏处是你以为自己一直在用加密 DNS实际上某些查询已经悄悄走明文了。要不要关掉取决于你对确定性的需求有多强——关掉之后一旦 DoH 服务不可达域名解析会直接失败表现就是网页打不开这种故障很显眼但也很难受。2.3 配完立刻验三条命令看清真实状态界面点完保存只是配置写入不代表生效并正在使用。三行命令可以直接确认# 1. 看网卡上实际生效的 DNS 地址 Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object { $_.ServerAddresses } | Format-Table InterfaceAlias, ServerAddresses -AutoSize # 2. 看系统已知的 DoH 服务器及其策略 Get-DnsClientDohServerAddress | Format-Table ServerAddress, DohTemplate, AutoUpgrade, AllowFallbackToUdp -AutoSize # 3. 看每块网卡当前的加密设置 netsh dns show encryptionnetsh dns show encryption的输出形式是一张表列出接口、DNS 服务器、DoH 模板、是否自动升级、是否允许 UDP 回退。如果这里对应网卡的行是空的或者模板一栏显示否那就说明配置没落到接口上通常是保存时选错了网卡或者保存后被别的配置覆盖了。确认配置到位之后再打一次实际查询Resolve-DnsName www.example.com -Server 223.5.5.5 -Type A这个命令走的是系统解析器如果你已经把该服务器配成默认 DNS 并且开启了 DoH那么这次查询理论上就是加密发出的。要更严格地验证它真的走了 HTTPS需要看端口和日志这部分放到第 5 节细说。3. 自定义 DoH 服务的三种配置姿势3.1 PowerShell 的 DnsClient 模块最省心的路子Windows 11 自带了一个DnsClient模块里面四个 cmdlet 专门管加密 DNSGet-、Add-、Set-、Remove-DnsClientDohServerAddress。它们操作的是系统全局的已知服务器清单也就是第 1.3 节里那份决定下拉框内容的清单。用管理员身份打开 PowerShell一条命令就能把自定义服务注册进去Add-DnsClientDohServerAddress -ServerAddress 223.5.5.5 -DohTemplate https://dns.alidns.com/dns-query -AllowFallbackToUdp $false -AutoUpgrade $true四个参数的含义逐个说-ServerAddress是 DNS 服务器的 IP必须和你在网卡上填的地址一致不一致就匹配不上-DohTemplate是 HTTPS 模板地址-AllowFallbackToUdp设成$false表示不允许回退明文我在这里关掉是因为这是台固定环境的台式机断了我能立刻发现-AutoUpgrade设成$true表示允许系统自动升级配合前面的手动配置使用。注册完之后再执行一次Get-DnsClientDohServerAddress应该能在列表里看到你刚加的这一条。这时候回到设置界面重新打开下拉框对应 IP 的选项就会从开手动模板变成开自动模板因为系统已经认识这个 IP 了。要改策略用Set-DnsClientDohServerAddress要删掉用Remove-DnsClientDohServerAddress -ServerAddress 223.5.5.5删除时会提示确认加-Force可以静默执行。注意这类改动写在系统级位置对所有用户和所有网卡生效。如果这台机器是共用的改之前最好先记下原始状态避免别人配置好的企业内网解析被你覆盖。3.2 netsh dns 命令行批量与脚本化首选netsh里的dns上下文是从 Win11 这批版本才开始有的功能覆盖和 PowerShell 那套基本重合但它在批处理和自动化脚本里更顺手因为它不依赖 PowerShell 的执行策略也不会被语言模式限制。常用命令如下:: 查看当前所有接口的加密设置 netsh dns show encryption :: 添加一条自定义 DoH 服务器 netsh dns add encryption server223.5.5.5 dohtemplatehttps://dns.alidns.com/dns-query autoupgradeyes udpfallbackno :: 查看全局设置 netsh dns show global :: 修改已有条目 netsh dns set encryption server223.5.5.5 dohtemplatehttps://dns.alidns.com/dns-query autoupgradeyes udpfallbackyes :: 删除条目 netsh dns delete encryption server223.5.5.5参数名的读法很直白server是 IPdohtemplate是模板 URLautoupgrade控制自动升级udpfallback控制明文回退。这四个开关的含义跟 PowerShell 那套是一一对应的只是写法从布尔值变成了 yes/no。全局层面还有一个开关netsh dns show global netsh dns set global /?第二条命令是用来查帮助的因为不同小版本对全局参数的命名可能有细微差别我一般不凭记忆写先看帮助再敲能少踩很多坑。全局开关的作用是控制整个 DNS 客户端是否启用加密能力正常情况下保持默认即可只有在做故障定位时可以临时关掉做对照。提示netsh dns add encryption添加的条目同样是全局清单跟 PowerShell 添加的效果一致两个入口不要重复加同一条重复加会报对象已存在之类的错误。3.3 直接改注册表搞清 DohTemplate 与 DohFlags如果你需要为特定网卡单独指定模板而不是全局注册或者想了解系统内部到底存了什么那就得看注册表。接口级的配置放在这里HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\InterfaceSpecificParameters\{接口GUID}\DohInterfaceSettings\Doh\{DNS服务器IP}路径里的两个大括号变量需要先取出来。接口 GUID 这样拿Get-NetAdapter | Select-Object Name, InterfaceGuid, Status | Format-Table -AutoSize找到你实际在用的那块网卡复制对应的 InterfaceGuid不带大括号写路径时自己补上。然后建键、写值用 PowerShell 操作比手点注册表编辑器安全得多$guid (Get-NetAdapter -Name 以太网).InterfaceGuid $base HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\InterfaceSpecificParameters\{$guid}\DohInterfaceSettings\Doh\223.5.5.5 New-Item -Path $base -Force | Out-Null New-ItemProperty -Path $base -Name DohTemplate -PropertyType String -Value https://dns.alidns.com/dns-query -Force | Out-Null New-ItemProperty -Path $base -Name DohFlags -PropertyType DWord -Value 2 -Force | Out-Null Get-ItemProperty -Path $base两个值的含义DohTemplate是字符串就是模板 URLDohFlags是 DWORD 位标志常见的理解是按位控制策略低位管明文回退次低位管自动升级所以我这里写 2表示允许自动升级、不允许回退。需要说明的是这两个位在不同小版本上的解释偶有调整所以我不建议凭记忆直接写数字——更稳的做法是先用界面或 PowerShell 配一遍然后回注册表看系统自己写进去的是什么值照抄即可这也是我平时确认字段含义的惯用手法。改完之后配置不会立即加载因为 Dnscache 服务在启动时读取这些项。可以重启服务强制刷新Restart-Service Dnscache -Force但这个服务跟网络栈关联紧密重启瞬间会断一下网某些正在传输的任务可能中断。如果你的场景对中断敏感直接重启系统更稳妥。想要撤销配置把{DNS服务器IP}这一级键整个删掉就行父级目录留着不影响。4. 一个 DoH 服务要被 Win11 接受得满足哪些硬条件4.1 模板 URL 与 RFC 8484 的 {?dns} 语法DoH 的接口规范来自 RFC 8484查询可以通过 GET 或 POST 发出。GET 方式是把 DNS 查询报文做 Base64URL 编码后作为参数附加在路径上POST 方式则是把报文放在请求体里。模板 URL 的写法决定了系统用哪种方式。{?dns}是 URI 模板里的保留写法表示这里会被替换成 dns 参数。如果服务商给的模板形如https://doh.example.com/dns-query{?dns}系统会按 GET 方式构造请求把编码后的报文填进去如果模板是https://doh.example.com/dns-query这种没有占位符的形式系统会改用 POST把查询体放在请求正文里。这就解释了一个常见的失败原因有人看到模板里带{?dns}觉得是多余的模板语法手动删掉结果服务商那边只接受 GET 不接受 POST查询就全失败了。所以规则很简单——服务商给什么就填什么一个字符都别改。如果服务商同时提供两种形式的地址优先选带{?dns}的那个因为 GET 请求更便于中间层缓存实际感知上首次解析会快一点点。4.2 证书、SNI、443 端口这三件套系统对 DoH 服务端的校验是按标准 HTTPS 来的任何一个环节不满足都会导致加密通道建立失败然后按你的回退设置决定是走明文还是直接报错。证书方面有四个硬性要求证书链必须能被系统信任自签名证书除非手动导入到受信任根否则不认证书的有效期必须覆盖当前时间证书的 SAN 列表里必须包含你模板中使用的主机名泛域名证书只覆盖同一级子域系统时间必须准确时间偏差过大会直接判定证书无效——这一点在虚拟机里特别常见休眠恢复后时间没同步结果怎么都连不上。SNI 方面模板里的主机名会作为 SNI 发出服务端必须能正确处理这个主机名并返回对应证书多域名共用 IP 时这一点尤其关键。端口方面必须是 443Windows 不支持自定义端口的 DoH 服务端这一点没有配置项可以绕。如果你的服务跑在非标准端口上方案只能是在前面加一层标准的 HTTPS 入口。还有一点常被忽略网络出口必须放行到目标 IP 的 443。办公网络里常见的情况是内网 DNS 只能用内网服务器外部地址的 443 被出口设备限制。这种环境下配 DoH 是白费力气加密通道根本建不起来最终要么走回退要么解析失败。4.3 引导解析顺序DoH 域名自己先被谁解析这是整个链路里最容易被忽视的一环。你配的 DNS 服务器是一个 IP但 DoH 模板里写的是一个主机名系统在建立加密连接之前必须先把dns.alidns.com这类主机名解析成 IP而这次解析走的是常规的明文 DNS。顺序大致是这样系统先按当前配置的 DNS 服务器发起明文查询拿到模板主机名的 A/AAAA 记录然后跟这个 IP 建立 TLS 连接之后的 DNS 查询才通过这条加密通道发出。也就是说整个加密体系的入口依然依赖一次明文解析。这次解析的结果会被缓存缓存在ipconfig /displaydns里能看到缓存过期前不会重复解析。理解了这一点两个现象就说得通了。第一DNS 服务器本身不可达时DoH 也起不来因为连引导解析都完不成第二某些环境下引导解析的结果被改写指向了一个不属于该服务商的 IPTLS 握手时证书校验必然失败表现就是配置看起来没问题但死活连不上。排查这类问题先在命名行里手动解析一次模板主机名确认拿到的 IP 是否合理再看能不能对这个 IP 建立 443 连接两步就能定位。4.4 常用公共 DoH 地址与模板对照表下面这张表是常见的公共服务及其 IP 与模板对应关系照抄即可。需要提醒的是前几项在部分网络环境下的 443 连通性可能不理想验证阶段建议先挑连通性好的来做确认机制通了再换成你想长期用的那家。服务常用 IPv4 地址DoH 模板Cloudflare1.1.1.1 / 1.0.0.1https://cloudflare-dns.com/dns-queryGoogle Public DNS8.8.8.8 / 8.8.4.4https://dns.google/dns-queryQuad99.9.9.9 / 149.112.112.112https://dns.quad9.net/dns-queryAdGuard DNS94.140.14.14 / 94.140.15.15https://dns.adguard-dns.com/dns-query阿里公共 DNS223.5.5.5 / 223.6.6.6https://dns.alidns.com/dns-queryDNSPod 公共 DNS119.29.29.29 / 119.28.28.28https://doh.pub/dns-query360 安全 DNS101.226.4.6 / 218.30.118.6https://doh.360.cn/dns-query选哪家主要看三个维度解析准确性、响应速度、以及它对你查询记录的可见程度。带广告过滤能力的服务比如表格里第四项会拦截部分域名好处是页面干净代价是偶尔会误拦正常站点遇到某个网站就是打不开但别人能开的情况先怀疑这一层。5. 真机验证确认你的查询真的走了 HTTPS5.1 命令行侧的几个观测点配置写完不等于生效最直接的验证是看接口状态和实际解析是否成功# 接口上实际生效的服务器 Get-DnsClientServerAddress -AddressFamily IPv4 | Format-Table InterfaceAlias, ServerAddresses -AutoSize # 逐条服务器的加密策略 netsh dns show encryption # 实际解析测试 Resolve-DnsName www.example.com -Type A -DnsOnlyResolve-DnsName加-DnsOnly可以跳过本机缓存去实际发起查询对于判断当前这次是不是真的发出去了很有用。如果配置正确且服务可用命令会正常返回 A 记录和 TTL。如果报超时而把同样一条命令指向另一台服务器又能通那就说明是这台 DoH 服务那一侧的问题而不是本机配置问题。还有一种情况需要留意解析成功不代表走了加密。因为 UDP 回退是默认允许的加密通道建不起来时系统会悄悄走明文解析照样成功。想确认到底走的哪条路就得看端口和日志这是下面两小节的内容。5.2 端口与抓包看 53 还是看 443判断依据非常直观如果查询走的是加密通道那么跟 DNS 服务器之间应该存在到 443 端口的连接如果走的是明文则会有到 53 端口的 UDP 流量。# 看当前有没有到 443 的活动连接 Get-NetTCPConnection -RemotePort 443 -State Established | Where-Object { $_.RemoteAddress -in (223.5.5.5,223.6.6.6) } | Select-Object LocalAddress, RemoteAddress, State, OwningProcess如果能看到目标 DNS 服务器的 443 连接说明加密通道已经建立。为了让连接出现最好在做检查前先清一下缓存并重新解析一个域名Clear-DnsClientCache Resolve-DnsName www.example.com -Type A -DnsOnly更彻底的做法是抓包。Windows 自带的pktmon就能干这事管理员权限打开命令行pktmon filter remove pktmon filter add -p 53 pktmon start --etw -m real-time然后在另一个窗口反复解析几个域名观察输出里有没有 53 端口的流量。如果一条 53 的包都没有而域名又能正常解析那基本可以确定查询全部走的加密通道。看完按 CtrlC 停止再执行pktmon filter remove清理过滤器。这套流程我做过很多次比起装抓包工具用系统自带的最省事。注意清空 DNS 缓存后首次访问某个站点会稍慢这是正常的因为所有解析都要重新走一遍。别把这种一次性的延迟当成 DoH 的性能损耗。5.3 事件日志里的 DoH 痕迹DNS 客户端有专门的操作日志路径是应用程序和服务日志 → Microsoft → Windows → DNS Client → Operational。这个日志默认是关闭的需要先在事件查看器里右键该日志选择启用日志。启用之后PowerShell 里可以直接筛Get-WinEvent -LogName Microsoft-Windows-DNS-Client/Operational -MaxEvents 200 -ErrorAction SilentlyContinue | Where-Object { $_.Message -match DoH|HTTPS|加密 } | Select-Object TimeCreated, Id, LevelDisplayName, Message -First 20里面能看到加密通道的建立、失败、以及回退相关的记录。我不去背具体事件 ID因为不同版本号上 ID 会有差异按关键字筛更靠谱。这个日志对排查为什么偶发解析慢特别有用——如果看到大量失败后回退的记录说明你的 DoH 服务在某些时段不可用系统一直在尝试加密、超时、再退回明文这个来回的过程就是延迟的来源。日志开启后会产生一定量的记录长期开着对磁盘影响可以忽略但如果你在排查完之后不想留着回事件查看器把日志关掉就行。6. 踩坑记录与常见问题速查6.1 配完上不了网或者只有部分站点能开这是最典型的一类。表现是配置保存之后浏览器转圈但把 DoH 关掉立刻恢复。原因排下来通常是三个服务端不可达TLS 握手失败又关掉了明文回退、模板 URL 填错路径不对或者漏了{?dns}、以及证书校验失败系统时间偏了或者模板主机名跟证书不匹配。定位顺序建议固定下来先用手动解析确认模板主机名能解析出 IP再确认这个 IP 的 443 能连通可以先在浏览器里访问模板地址能通的话通常会返回一个错误页或提示至少说明 TLS 建起来了最后看事件日志里有没有证书相关的报错。三步走完基本能定位到具体环节。临时恢复的办法是把 UDP 回退打开或者干脆在下拉框里选关让系统回到明文状态。我一般会先把回退打开确认能上网了再慢慢查加密那一侧的问题避免一边修一边断网。6.2 下拉框里只有关没有模板选项这种情况通常是 IP 没填对、或者填完之后没有保存。界面上的逻辑是只有存在手动配置的 DNS 地址才会出现加密相关的下拉项。如果 DNS 那一栏还是自动(DHCP)下拉框就是灰的或者干脆不显示。还有一种可能是网卡上同时存在 DHCP 下发和手动配置的地址导致系统取到了一个不在清单里的地址。用Get-DnsClientServerAddress看一眼实际生效的是哪些把多余的清掉。另外如果你用的是带有虚拟网卡的环境虚拟机、容器宿主记得确认自己改的是真正出网的那块网卡而不是某个虚拟适配器。6.3 内网域名解析失败与企业环境这是我认为最需要提前想清楚的一个坑。企业内网的 DNS 服务器通常只提供明文服务而且承担着解析内部系统、内部域名、内部服务的职责这些域名在公共 DNS 上根本查不到。如果你把默认 DNS 换成了公共 DoH 服务结果是外网访问一切正常但所有内部系统全部打不开而且报错信息往往只是找不到主机很容易被误判成网络故障。稳妥的做法有两种。一是在路由器或本机层面做域名分流内部域名走内网 DNS其余走 DoH但这在 Win11 原生能力里没有直接支持需要额外手段实现成本较高。二是干脆不在办公机器上启用 DoH只在个人设备上开。我自己的做法是台式机按接口分开——连家里网络的那块网卡开 DoH出差用的无线网卡保持自动获取切换场景时不用改配置插上就能用。6.4 其他零碎故障速查表现象常见原因处理方式配置后首次访问变慢缓存被清空解析全部重来等待一两分钟属正常现象时好时坏日志里有回退记录DoH 服务间歇不可用换服务商或打开 UDP 回退某站点始终打不开服务商有广告/域名过滤策略换一个不带过滤的 DoH 服务命令提示拒绝访问没用管理员权限以管理员身份重开终端重启后配置丢失配置写在了临时接口上用注册表或命令行重配并确认 GUID虚拟机里怎么都连不上系统时间偏差导致证书失效同步时间后重试改了没反应Dnscache 未重新加载配置重启服务或重启系统这张表是我这两年攒下来的基本覆盖了日常能碰到的绝大多数情况。遇到问题时按表里的顺序对一遍比漫无目的地翻设置快得多。7. 长期使用后的个人心得7.1 延迟与缓存的真实体感关于性能我实测下来的感受是日常浏览几乎没有可感知的差异。原因是 DNS 查询本身占比极小而且结果会被缓存二次访问同一个站点时根本不发起新查询。真正能感觉到差别的是刚开机或者刚清完缓存的那几个请求加密握手会多花几十毫秒但一次握手建立的连接会被复用后续查询基本没有额外开销。需要留意的是首次握手的超时时间。如果 DoH 服务不可达系统要等到超时才回退这个等待在关闭回退的情况下会直接变成网页打不开。所以我给自己定的策略是家里固定环境关掉回退追求确定性移动场景打开回退追求可用性。同一个开关不同场景下取舍完全不同这个判断只能由使用者自己来做。另外DNS 的 TTL 也值得关注。TTL 短的域名会频繁重新解析加密带来的开销在极端情况下会被放大。用ipconfig /displaydns能查当前缓存和剩余 TTL遇到疑似解析压力大的情况可以看一眼。7.2 我现在的配置策略和维护习惯折腾了几轮之后我把配置固定成了这样家里台式机的以太网卡手动指定两个来自同一服务商的 DNS 地址注册进全局已知清单AutoUpgrade 打开UDP 回退关闭笔记本的无线网卡保持 DHCP 自动获取不做任何 DoH 配置出差换个网络就能用虚拟机里只在做实验时临时开做完就删掉注册表里那两级键。维护上有三个习惯值得分享。第一改配置前先导出当前状态netsh dns show encryption doh-before.txt一行就能留个底出问题随时对照。第二把配好的命令存成一个脚本文件重装系统之后跑一遍就恢复不用重新摸索。第三也是最重要的——定期检查一次实际运行状态尤其在你感觉网页打开变慢的时段看一眼事件日志里有没有成片的回退记录这类问题不会主动报错只会表现为网络有点卡很容易被忽略。说一句我自己的结论Win11 原生这套 DoH 已经足够日常使用不需要额外装任何东西。它的能力边界很清楚——只管 DNS 这一层不解决连接本身的问题配上自定义服务的关键在于搞清楚已知服务器清单和模板 URL 语法这两件事。把这两个点吃透剩下的都是熟练度问题。
返回列表