macOS可通过系统设置配置DoH(Ventura+)、终端安装stubby实现DoT、或用dnscrypt-proxy支持旧版本DoH/DoT;验证需检查scutil输出、1.1.1.1/help页面及Wireshark抓包确认加密流量。

如果您希望在 macOS 系统中启用加密 DNS 查询,以防止本地网络中的 DNS 劫持或监听,则需手动配置基于 HTTPS 的 DNS over HTTPS(DoH)或基于 TLS 的 DNS over TLS(DoT)。以下是实现该目标的具体步骤:
一、通过系统设置配置 DoH(macOS Ventura 及更新版本)
macOS Ventura(13.0)起原生支持 DoH 配置,系统可在网络设置中直接指定兼容的 DoH 服务器地址,所有 DNS 查询将被封装在 HTTPS 请求中传输,避免明文暴露域名信息。
1、打开系统设置 → 网络,点击当前连接的网络(如 Wi-Fi),再点击右下角的详细信息按钮。
2、切换到DNS标签页,点击左下角+号添加新 DNS 服务器。
3、输入支持 DoH 的服务器地址,例如:https://dns.google/dns-query 或 https://cloudflare-dns.com/dns-query。
4、确认输入后,点击好保存设置,并在 DNS 列表中将该条目拖至顶部以设为首选。
二、使用终端命令配置 DoT(需第三方工具支持)
macOS 原生不提供图形化 DoT 配置界面,但可通过安装并运行 stubby(一款符合 IETF 标准的 DoT 客户端)实现系统级 DoT 解析。该工具会作为本地 DNS 转发器,将请求加密转发至远程 DoT 服务器。
1、在终端中执行:brew install stubby(需已安装 Homebrew)。
2、编辑配置文件:sudo nano /usr/local/etc/stubby/stubby.yml,确保其中包含有效 DoT 上游服务器,例如:address_data: "1.1.1.1" 和 tls_auth_name: "cloudflare-dns.com"。
3、启动 stubby 服务:sudo stubby -C /usr/local/etc/stubby/stubby.yml -g。
4、进入系统设置 → 网络 → 当前连接 → 详细信息 → DNS,将127.0.0.1 添加为唯一 DNS 服务器,并移除其他条目。
三、通过配置文件强制全局 DoH(适用于 macOS Monterey 及更早版本)
对于未内置 DoH 支持的老版本 macOS,可借助 dnscrypt-proxy 工具实现等效功能。该工具支持 DoH 和 DoT 双协议,并允许通过本地 socket 提供加密 DNS 解析服务。
1、执行:brew install dnscrypt-proxy。
2、运行初始化命令:sudo dnscrypt-proxy -service install。
3、编辑主配置:sudo nano /usr/local/opt/dnscrypt-proxy/homebrew.mxcl.dnscrypt-proxy.plist,确保其指向正确的配置路径。
4、修改配置文件 /usr/local/etc/dnscrypt-proxy/dnscrypt-proxy.toml,将 server_names 设为 ['cloudflare', 'google'],并确认 dnscrypt_servers = true 和 doh_servers = true 均启用。
5、启用并启动服务:sudo brew services start dnscrypt-proxy,随后在网络设置中将 DNS 设置为 127.0.0.1。
四、验证加密 DNS 是否生效
无论采用上述哪种方式,均需确认系统实际发出的 DNS 请求是否已被加密。可通过抓包或查询解析行为判断 DoH/DoT 是否被正确调用,排除传统 UDP 53 端口明文查询残留。
1、在终端运行:scutil --dns,检查输出中 nameserver[0] 是否为 127.0.0.1 或空(表示由系统 DoH 处理)。
2、访问 https://1.1.1.1/help 页面,查看 Encrypted SNI 和 DNSSEC 状态是否显示为 Yes。
3、使用 Wireshark 抓取本机流量,过滤 tcp.port == 443 or tcp.port == 853,确认存在持续的 HTTPS 或 TLS 握手流量,且无 UDP/53 数据包出现。

















