macos doh配置非一键全局生效,需按版本(ventura+图形化、monterey需.mobileconfig、12.2及更早不支持)、应用(safari/mail走加密,curl/dig仍明文udp 53)和工具(需dnscrypt-proxy或stubby转发)分层实现。

macOS 配置 DoH 加密 DNS 不是打开一个开关就能全局生效的操作,它分版本、分应用、分工具——系统设置里填对地址,Safari 和 Mail 就走加密,但 curl、dig 还是直连明文 UDP 53。想真正加密所有 DNS 流量,得组合配置。
确认你的 macOS 版本是否支持图形化 DoH
macOS Ventura(13.0)及更新版本才在「系统设置 > 网络 > DNS」中提供直接输入 HTTPS 地址的入口;Monterey(12.3–12.6)仅支持通过配置描述文件(.mobileconfig)启用;12.2 及更早版本完全不识别 DoH,无论怎么填都不会生效。
- 查看方式:点击左上角苹果图标 → 「关于本机」→ 查看版本号
- Ventura+ 用户可跳过配置文件步骤,直接进入图形界面配置
- Monterey 用户需用 Apple Configurator 2 生成签名有效的 .mobileconfig 文件,手写 XML 极易失败
在系统设置中添加合法 DoH 地址
只填对格式的地址才会被识别并启用加密,填错会静默失败——不会报错,也不会显示锁图标。
- 必须是 HTTPS 协议,且服务端支持 HTTP/2 + TLS 1.3
- 有效地址示例:
https://dns.google/dns-query、https://cloudflare-dns.com/dns-query - 无效写法举例:
http://...、https://dns.google/dns-query?ct=...、https://1.1.1.1/dns-query(证书域名不匹配) - 添加后,该条目旁出现小锁图标即表示启用成功(协议类型不显示,属正常)
- 务必拖动该条目到 DNS 列表顶部,确保为首选解析器
验证 DoH 是否真正生效
不能只看图形界面有没有锁,要从系统底层和网络层双重确认。
- 运行
scutil --dns,检查输出中 resolver 条目是否含Server = https://...或Encryption = encrypted - 访问
https://1.1.1.1/help并查看响应头:via: cloudflare或X-Client-IP等字段说明请求经由 Cloudflare DoH 处理 - 用 Wireshark 抓包,过滤
tls.handshake.type == 1且http.host == "cloudflare-dns.com",看到大量 TLS 握手流量即为工作正常
让终端命令也走加密 DNS
系统原生 DoH 只影响 CFHost/NWEndpoint 框架(即 Safari、Mail、Finder 等),curl 默认调用 libc 的 getaddrinfo(),dig 直连 UDP 53 —— 它们绕过了系统 DNS 解析器。
- 解决方案是部署本地转发器,如
dnscrypt-proxy或stubby - 安装后监听
127.0.0.1:53,再用networksetup -setdnsservers Wi-Fi 127.0.0.1强制接口使用本地 DNS -
dnscrypt-proxy支持 DoH/DoT 双协议,适合需要广告过滤或日志分析的用户 -
stubby专注 DoT,轻量稳定,适合追求标准协议兼容性的场景











