AdAway 中文文档 下载 App

Private DNS 冲突 —— Android 9+ 的 DoH/DoT 怎么和 AdAway 共存

冲突是什么

从 Android 9 (Pie) 开始,系统默认启用 Private DNS,即 DNS over TLS(DoT)或 DNS over HTTPS(DoH)。工作原理:

  1. APP 发 DNS 查询
  2. Android 把 DNS 请求加密后直接发给 Private DNS 服务器(可能是 Google、Cloudflare、你运营商指定的)
  3. 这个过程完全绕过了系统的 hosts 文件——hosts 拦截等于不存在
  4. 同时绕过了 AdAway VPN 模式的拦截——因为请求没走系统 DNS 解析流程

结果:你以为 AdAway 在拦广告,实际 Private DNS 把所有 DNS 请求加密后送出去了,广告正常加载。

怎么判断你中招了

症状:

最快验证:

  1. 系统设置 → 网络和互联网 → 高级 → 私人 DNS
  2. 如果显示"自动"或"指定的私人 DNS 主机名" → 开着
  3. 改成"关"
  4. 回浏览器打开之前广告一直有的页面,看广告还在不在

关掉 Private DNS 后广告消失 → 确认是这个问题。

解决方案

方案一:关掉 Private DNS(最稳,推荐)

  1. 系统设置 → 网络和互联网 → 高级 → 私人 DNS
  2. 选 "关"(不要"自动")
  3. 确认

简单粗暴,hosts 文件立刻恢复拦截作用。代价是 DNS 查询不再加密——但 hosts 拦截 + VPN 模式本来就在处理 DNS 请求,Private DNS 只是多加了一层加密,对大多数家庭用户来说区别不大。

方案二:指定 AdAway 兼容的 Private DNS

某些自定义 Private DNS 服务器支持不加密某些请求——或者说,AdAway v6 引入的 DOH 支持可以和某些 Private DNS 共存。但这种情况很依赖 ROM 和 Private DNS 服务器,不稳定,不推荐新手尝试。

方案三:用 VPN 模式 + Private DNS 共存(AdAway v6)

v6 版本尝试解决这个问题:AdAway VPN 模式下,它会在虚拟网卡层拦截所有 DNS 请求(包括加密的 DoT/DoH),然后用 AdAway 自己的 DOH 客户端转发。但这个实现还不够成熟,某些机型上有 bug。

目前结论:关 Private DNS 是最稳的方案。

什么时候 Private DNS 一定要开

如果你在:

这时候可以:

但这个切换需要手动,目前 AdAway 没有自动根据网络切换 Private DNS 状态的功能。

系统不同版本的差异

Android 版本Private DNS 行为AdAway 建议
8.0 (Oreo) 及以下没有 Private DNS不需要任何处理
9 (Pie)默认自动关 Private DNS
10默认自动关 Private DNS
11~14默认自动,更激进关 Private DNS + v6 VPN 模式可能共存

"自动"意味着 Android 会尝试和网络协商加密 DNS——如果路由器/运营商支持就启用,不支持就不用。但大多数现代路由器都支持,所以实际效果是"几乎总是开着"。

MIUI / One UI / EMUI 等定制 ROM

国产 ROM 通常也继承了 Private DNS 功能,位置可能略有不同:

不同 ROM 可能叫"私人 DNS""私密 DNS""加密 DNS"——都是同一个东西。

总结

Android 9+ 上 AdAway 生效的前提是:Private DNS 必须关。

关掉后 AdAway 恢复系统级拦截。如果你在公共网络需要 Private DNS 保护,可以考虑用 AdGuard 这类同时支持加密 DNS 过滤的工具作为 AdAway 的补充。