DNS over HTTPS 配置指南:浏览器、Windows 与 macOS 的 DoH 设置
DNS over HTTPS(DoH)把域名查询装进 HTTPS 请求里发给解析服务器,路上的设备看不到、也改不了你查了哪个域名。浏览器里打开一个开关就能用;想让整台电脑都走 DoH,Windows 11 有系统设置,macOS 要装一个描述文件。配完以后,到 cdnping 的 IP 与环境检测 看一下 DNS 泄漏结果,就能确认它是否真的生效。
DoH 能防什么,防不了什么
传统 DNS 走 UDP 53 端口,明文传输。同一个网络里的路由器、运营商设备都能看到查询内容,也能伪造应答,也就是常说的 DNS 劫持和污染。DoH 把查询放进 443 端口的 HTTPS 连接,带来三点变化:
- 查询内容加密,中间设备看不到你查的域名;
- 应答受 TLS 保护,中途无法篡改;
- 解析服务器由你指定,不再默认使用 DHCP 下发的那一个。
下面几种常见误解,容易让人高估 DoH 的效果:
| 误解 | 实际情况 |
|---|---|
| 开了 DoH 就匿名了 | 目标网站依然看得到你的出口 IP,DoH 只管解析这一步 |
| 别人看不到我访问了哪个网站 | TLS 握手里的 SNI 通常仍是明文,连接的目标 IP 也是可见的 |
| 解析服务器不知道我查了什么 | 它全都知道。DoH 只是把信任从运营商转给了你选的 DoH 服务商 |
| 浏览器开了,整台电脑都安全 | 浏览器的 DoH 只管浏览器,终端、IDE、命令行工具仍走系统 DNS |
| 越远的公共 DNS 越好 | 国内站点的 CDN 按解析器位置调度,海外解析器可能把你分到较远的节点 |
最后一条对国内开发者影响最直接。Cloudflare 公开说明 1.1.1.1 不向权威服务器发送 EDNS Client Subnet(ECS),国内 CDN 只能按解析器出口的位置来判断你在哪,结果可能是访问国内站点反而变慢。所以选 DoH 服务商时,要先想清楚自己主要访问哪些站点。
常用的公共 DoH 地址有哪些
| 服务商 | DoH 模板地址 | 对应 IP(系统级配置时需要) |
|---|---|---|
| 阿里公共 DNS | https://dns.alidns.com/dns-query | 223.5.5.5、223.6.6.6 |
| 腾讯 DNSPod | https://doh.pub/dns-query | 1.12.12.12、120.53.53.53 |
| Cloudflare | https://cloudflare-dns.com/dns-query | 1.1.1.1、1.0.0.1 |
https://dns.google/dns-query | 8.8.8.8、8.8.4.4 |
阿里也接受 https://223.5.5.5/dns-query 这种直接写 IP 的形式。用 IP 形式的好处是,连接 DoH 服务器本身不需要先做一次明文解析。
配置之前,可以先用 curl 确认本机能连通这些 DoH 服务(curl 7.62 及以上支持 --doh-url):
# 用指定的 DoH 服务解析域名,再发起请求;成功会返回 HTTP 状态行
curl --doh-url https://dns.alidns.com/dns-query -sI https://cdnping.org | head -1
curl --doh-url https://cloudflare-dns.com/dns-query -sI https://cdnping.org | head -1
# 查看 Cloudflare 的 JSON 格式应答,便于对比解析结果
curl -s -H 'accept: application/dns-json' \
'https://cloudflare-dns.com/dns-query?name=cdnping.org&type=A'
某个地址超时或失败,就说明你当前的网络到它不通,换一个再试,不要硬配。
Chrome、Edge、Firefox 怎么开启 DoH
浏览器级 DoH 改起来最快,也最容易撤销,适合先试一试。
Chrome
- 地址栏打开
chrome://settings/security。 - 在“高级”里找到“使用安全 DNS”,打开开关。
- 选择“自定义”,填入模板地址,例如
https://dns.alidns.com/dns-query。
如果开关是灰色、提示“由组织管理”,说明设备装了企业策略,或者 Chrome 检测到了家长控制等环境。这种情况应当联系管理员,不要自己去绕。
Edge
- 打开
edge://settings/privacy,在“安全性”部分找到“使用安全的 DNS 指定如何查找网站的网络地址”。 - 打开开关,选择“选择服务提供商”。
- 从下拉列表里选,或者直接输入模板地址。
不同版本的 Edge 菜单名称略有差别,在设置页顶部搜索“DNS”最快。
Firefox
- 打开
about:preferences#privacy,滚动到“DNS over HTTPS”。 - 有三档:默认保护、增强保护、最大保护。
- 增强保护:DoH 失败时回退到系统 DNS;
- 最大保护:只走 DoH,失败就报错,不回退。
- 在“选择提供商”里选“自定义”,填入模板地址。
想要排查得干净,可以选“最大保护”,这样任何一次查询都不会悄悄回退到明文。日常使用选“增强保护”就够了,公司内网域名也还能正常解析。
Windows 11 怎么配置系统级 DoH
Windows 11 的 DoH 是绑定在 DNS 服务器 IP 上的:先填 IP,再为这个 IP 指定 DoH 模板。
图形界面
- 设置 → 网络和 Internet → WLAN(或以太网)→ 点进当前连接 → 硬件属性。
- 找到“DNS 服务器分配”,点“编辑”,改成“手动”,打开 IPv4。
- 首选 DNS 填
223.5.5.5,“DNS over HTTPS”选择“开启(手动模板)”,模板填https://dns.alidns.com/dns-query。 - 备用 DNS 用同样方法填
223.6.6.6。用 IPv6 的话,IPv6 部分也要一并配置,否则 IPv6 查询仍然是明文。 - 保存后,连接详情里的 DNS 服务器旁会显示“(加密)”。
1.1.1.1、8.8.8.8 这类地址在 Windows 内置的已知列表里,可以选“开启(自动模板)”。阿里和腾讯的地址一般需要手动填模板,或者先用下面的命令登记。
命令行(管理员 PowerShell)
# 登记阿里 DoH,并禁止回退到明文 UDP
Add-DnsClientDohServerAddress -ServerAddress 223.5.5.5 `
-DohTemplate https://dns.alidns.com/dns-query `
-AllowFallbackToUdp $False -AutoUpgrade $True
Add-DnsClientDohServerAddress -ServerAddress 223.6.6.6 `
-DohTemplate https://dns.alidns.com/dns-query `
-AllowFallbackToUdp $False -AutoUpgrade $True
# 查看已登记的 DoH 服务器
Get-DnsClientDohServerAddress
# 把当前网卡的 DNS 设为这两个地址("WLAN" 换成你的网卡名,可用 Get-NetAdapter 查看)
Set-DnsClientServerAddress -InterfaceAlias "WLAN" -ServerAddresses 223.5.5.5,223.6.6.6
# 清缓存,让新配置立刻生效
Clear-DnsClientCache
-AutoUpgrade $True 的作用是:只要系统 DNS 是这个 IP,就自动改走 DoH。也可以用 netsh dns show encryption 查看同样的信息。
macOS 怎么用描述文件开启 DoH
macOS 11 起系统支持加密 DNS,但设置里没有开关,需要安装一个 .mobileconfig 描述文件。下面的模板可以直接用,保存为 alidns-doh.mobileconfig:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>DNSSettings</key>
<dict>
<key>DNSProtocol</key>
<string>HTTPS</string>
<key>ServerURL</key>
<string>https://dns.alidns.com/dns-query</string>
<key>ServerAddresses</key>
<array>
<string>223.5.5.5</string>
<string>223.6.6.6</string>
</array>
</dict>
<key>PayloadDisplayName</key>
<string>AliDNS DoH</string>
<key>PayloadIdentifier</key>
<string>local.doh.alidns.dns</string>
<key>PayloadType</key>
<string>com.apple.dnsSettings.managed</string>
<key>PayloadUUID</key>
<string>8C1A6C55-3B7E-4F4B-9E0A-2D6B1F0C7A11</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>AliDNS DoH</string>
<key>PayloadIdentifier</key>
<string>local.doh.alidns</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>4E2D9B70-6A1F-4C83-B5D2-91F0E3A7C428</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
安装步骤:
- 终端执行
plutil -lint alidns-doh.mobileconfig,输出OK表示格式没问题。两个PayloadUUID可以用uuidgen换成你自己的。 - 双击文件,系统会提示“已下载描述文件”。
- 打开“系统设置 → 隐私与安全性 → 描述文件”(部分版本在“通用 → 设备管理”),点击安装。
- 到“系统设置 → 网络 → 过滤条件”或“VPN 与过滤条件”里,确认 DNS 项已启用。
想换成 Cloudflare 或 Google,只需改 ServerURL 和 ServerAddresses。删除描述文件就能还原。来路不明的描述文件不要装,它能改的远不止 DNS。
怎么确认 DoH 生效:用 /ip 检查 DNS 泄漏
设置页显示已开启不代表所有查询都走了 DoH,要看实际有哪些解析器在替你查询。按下面的顺序检查:
- 打开 cdnping IP 与环境检测,等检测跑完,看 DNS 泄漏一项。
- 看列出的解析器归属:配的是阿里,就应该看到阿里的节点;配的是 Cloudflare,就应该是 Cloudflare。如果出现本地运营商的解析器,说明还有查询绕过了 DoH。
- 对照 WebRTC 泄漏和多出口检测:开着代理的话,DNS、WebRTC、各站点看到的出口应当互相一致。原理可以看 DNS 泄漏与 WebRTC 泄漏。
- 只在浏览器里开了 DoH 时,换另一个没开 DoH 的浏览器再测一次,就能看出浏览器级和系统级的差别。
- 需要发给同事或贴到 issue 里时,用 /ip 的“生成结果图”导出一张带水印的图片,导出前打开“隐藏 IP”,出口地址就不会出现在图里。/ip 的指纹在本地计算,不会上传。
常见的不一致和原因:
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 仍出现运营商解析器 | 浏览器 DoH 回退到了系统 DNS,或只配了 IPv4 | Firefox 改成最大保护;Windows 补上 IPv6 配置 |
| 出现代理服务商的解析器 | 代理客户端接管了 DNS | 这是代理的设置决定的,到客户端里调整 |
| 国内站点明显变慢 | 海外 DoH 导致 CDN 调度到较远节点 | 换成阿里或腾讯的 DoH,或按域名分流(见 分流的原理) |
| 公司内网域名解析失败 | 内网域名只在公司 DNS 上有记录 | 内网环境关闭 DoH,或按管理员要求配置 |
换了 DoH 以后,访问速度变了吗
换 DoH 服务商会影响 CDN 调度,最终连到哪个节点、快不快,需要实测。cdnping 首页测速 会在浏览器里测 15 个 AI 模型 API 和 9 个公共前端 CDN 的“首次连接”(含 DNS 与 TLS 握手)和“往返”,测试对象里也有 AGI Plan(AGI Plan 是 cdnping 的商业合作方)。DoH 换前、换后各测一次,主要看“首次连接”的变化。前端 CDN 怎么选,可以参考 CDN 速度榜 和 国内如何选择公共 CDN。
建议的上手顺序:先在一个浏览器里开 DoH,用 /ip 确认没有泄漏;再决定要不要配系统级;最后用首页测速对比国内和海外 DoH 对常用站点的影响。