TL;DR:先确认"是不是真的没生效",再按原因清单逐项排除。
最可靠的验证方法是打开 dnsleaktest.com 点"Extended Test"扩展测试——如果列出的解析服务器是你设置的那台(如 Cloudflare、Google),说明已生效;如果还是你家运营商的 DNS,那才叫不生效。确认不生效后,按本文的"常见原因表"逐条排查,安卓手机的深度专项排查可直接看安卓手机私人DNS连不上的排查全流程。
怎么确认私人DNS到底生没生效?
很多人说"私人DNS没生效",其实是没验证过就下结论。加密DNS(DoT/DoH)配置成功后,你日常上网的体验几乎没有任何区别——网页该怎么开还怎么开,速度也不会有明显提升。判断生效与否的唯一可靠方式,是看你设备实际用哪台服务器做域名解析。
方法一:在线 DNS 泄漏检测(最简单,推荐小白)
- 打开浏览器,访问 dnsleaktest.com
- 点击 "Extended Test"(扩展测试),等待约 20 秒
- 页面会列出一串 DNS 服务器的 IP 和所属机构名称
对照判断:
- 如果列表里出现 Cloudflare、Google、Quad9、AdGuard 等你配置的服务商名称 → 已生效
- 如果列表里全是你家宽带运营商(如中国电信、中国移动、中国联通)的 DNS → 没生效,仍是明文 DNS
- 如果同时出现运营商和你配置的服务器 → 部分生效,存在泄漏
方法二:命令行查看当前解析服务器(进阶)
如果你有一定动手能力,可以用命令行工具直接查看系统当前使用的 DNS 服务器:
# Linux / macOS
dig www.example.com
# 看输出中的 "SERVER:" 一行
# Windows
nslookup www.example.com
# 看第一行显示的 Server 地址如果 SERVER 后面显示的是你配置的加密 DNS 服务器 IP,说明配置已被系统采纳。但注意:命令行只能看到"系统用了哪台 DNS",不能直接区分这是明文还是加密连接——是否加密仍需靠方法一的在线检测来交叉验证。
方法三:对照浏览器 DoH 设置
如果你在浏览器里也单独开了"安全 DNS",注意浏览器的 DoH 和系统的私人 DNS 是两套独立配置。浏览器里的加密设置只对浏览器自身的请求生效,系统级私人 DNS 才管所有 App。想确认系统级是否生效,请关掉浏览器再用方法一测。
常见原因清单:为什么私人DNS配了却不生效?
| 原因 | 典型表现 | 解决方向 |
|---|---|---|
| hostname 拼写错误 | 保存时直接报错,或显示"无法连接" | 重新复制粘贴服务商给的完整域名 |
| 只填了 IP 地址,没填 hostname | 安卓私人 DNS 字段拒绝 IP,只接受域名 | 改用服务商提供的 hostname |
| 服务器不支持 DoT(只支持 DoH) | 安卓始终连不上 | 换用支持 DoT 的服务商 |
| 853 端口被运营商/网络阻断 | Wi-Fi 下生效,切流量就失效 | 换网络测试,或改用 DoH 方案 |
| 系统时间错误 | TLS 证书校验失败,静默回退明文 | 设置→日期时间→开启自动同步 |
| DNS 缓存未刷新 | 刚改完设置,结果还是旧的 | 开关飞行模式,或重启设备 |
| 只配了 IPv4,网络实际走 IPv6 | 部分查询仍走默认 IPv6 DNS | 确认服务商同时支持 IPv6 DoT |
| 企业工作资料(Work Profile)锁定 | 灰色不可改,提示"由管理员管理" | 需要管理员解锁或移除工作资料 |
| 浏览器 DoH 和系统 DNS 互相干扰 | 部分网站加密、部分明文 | 统一用一套,避免双开 |
分设备快速检查要点
安卓手机(2-3 条快速要点)
- 确认路径正确:设置 → 网络和互联网 → 私人 DNS → 选"私人 DNS 提供程序主机名",而不是填 IP。
- 确认是 Strict 模式:输入完整 hostname 并保存后,安卓会做严格 TLS 校验;如果保存时报错,说明 hostname 或网络有问题。
- 专项排查请看这里:安卓手机的完整排障流程(包括各品牌菜单路径差异、企业资料锁定、Wi-Fi 与移动数据切换等)已经单独写过,请看安卓手机私人DNS连不上的排查全流程,本文不再重复展开。
iPhone / iPad(iOS)
- iOS 没有"私人DNS"开关:它是通过安装配置描述文件(.mobileconfig)来开启 DoT/DoH 的。检查方法:设置 → 通用 → VPN与设备管理,看是否有你装的 DNS 描述文件。
- 证书信任要手动开:如果你装的是自建或自签证书的描述文件,还需要去 设置 → 通用 → 关于本机 → 拉到最底部 → 证书信任设置,手动打开对应证书的信任开关。
- 描述文件过期会自动失效:苹果的配置描述文件有有效期,过期后 DoT 会自动停用——如果之前好好的突然不加密了,先去检查描述文件状态。
Windows 11 / 10
- Windows 的加密 DNS 叫 DoH:设置 → 网络和 Internet → 你的网卡 → DNS 服务器分配 → 编辑,改成手动后才能看到"DNS over HTTPS"选项。
- DoH 需要先填对 IP:Windows 只识别已知的 DoH 服务器 IP 列表,如果你填的服务商不在列表里,"加密"下拉框会是灰的。
- VPN 会覆盖系统 DNS:如果你挂着 VPN,Windows 的 DNS 通常走 VPN 隧道里的那台,系统 DoH 设置可能被绕过。
macOS
- 通过配置描述文件开启:macOS Big Sur 及以后原生支持 DoT/DoH,但需要安装服务商提供的描述文件,路径在 系统设置 → 隐私与安全性 → 描述文件。
- 检查"使用加密DNS"开关:系统设置 → 网络 → 你的网卡 → 详细信息 → DNS,看"使用加密DNS"是否开启。
- 描述文件删除即恢复默认:如果装了描述文件又不生效,先删掉再重装。
FAQ
Q:我按教程填了 hostname,也保存成功了,为什么 dnsleaktest 还是显示运营商 DNS?
A:保存成功只代表安卓接受了这个输入,不代表实际连上了 DoT 服务器。最常见的原因是你的网络(运营商/公司 Wi-Fi)把 853 端口封了,安卓连不上就静默回退到明文 DNS。换一个手机热点测试一下,如果热点下生效,就是原网络的端口阻断问题。
Q:私人 DNS 和浏览器里的"安全 DNS"要不要同时开?
A:不建议。两套同时配置容易互相干扰,而且浏览器 DoH 只管浏览器,系统私人 DNS 管所有 App。建议二选一:要么系统级开 DoT(推荐,全局生效),要么只在浏览器开 DoH。
Q:为什么我填了 1.1.1.1 却保存不了?
A:安卓私人 DNS 字段只接受 hostname(域名),不接受 IP 地址。Cloudflare 对应的 DoT hostname 是 one.one.one.one,不是 1.1.1.1。把 IP 换成域名就能保存了。
Q:dnsleaktest 显示了多个 DNS 服务器,正常吗?
A:正常。系统会并行查询多台服务器做负载均衡和故障转移,只要列出的所有服务器都属于你配置的服务商(而不是混进了运营商的),就说明生效了。
参考来源
- RFC 7858: Specification for DNS over TLS — IETF Datatracker — 支撑 DoT 使用 TCP 853 端口、严格证书校验等协议事实。
- DNS Leak Test FAQ — 支撑"如何通过 dnsleaktest 确认解析服务器归属、判断是否泄漏"的检测方法。
- Google Public DNS: Secure transports for DNS — 支撑安卓 9 起原生支持 DoT、DoT/DoH 客户端分类等事实。
- Apple Support: List of available trusted root certificates — 支撑 iOS 证书信任设置路径(设置→通用→关于本机→证书信任设置)。