DNS 日志完整流程 —— 找出哪条规则把你的 APP 搞挂了
DNS 日志是什么
DNS 日志(Log DNS Requests)功能让 AdAway 在你运行目标 APP 时,实时记录所有被拦截/被放行的 DNS 查询。日志里会显示:
- 哪个 APP 发的请求
- 请求的域名是什么
- AdAway 是拦了还是放了
- 命中了哪条规则(Allowlist / Blocklist / Hosts Source)
靠猜"可能是这个域名被拦了"不如看日志——数据不会骗人。
什么时候用 DNS 日志
你需要它的场景:
| 场景 | 你想知道的 | 后续操作 |
|---|---|---|
| 开 AdAway 后某 APP 打不开 | 哪条被拦的域名是这个 APP 必需的 | 加进 Allowlist |
| 某 APP 里广告还在 | 广告请求用了哪个域名但没被拦 | 加进 Blocklist |
| 某 APP 加载慢/数据空白 | 哪个必需域名被 hosts 源误拦了 | 加进 Allowlist |
| 想系统梳理 Allowlist | 你的 APP 实际请求哪些域名 | 清理无用条目 |
标准操作流程(从 AdAway GitHub Wiki 整理)
前置检查
Android Pie (9+) 用户先临时关掉 Private DNS(设置 → 网络与互联网 → 高级 → 私人 DNS → 选"关")。Private DNS 会加密 DNS 请求,AdAway 的日志功能抓不到。
步骤
- 打开 AdAway → 主菜单 → Log DNS Requests
- 点 "Start logging" / "TCPDUMP IS NOT RUNNING!" — AdAway 会启动内置的 tcpdump 进程(root 设备需要 root 权限)
- 等待状态变成 "TCPDUMP IS RUNNING!"(绿色或类似)
- 回到 AdAway 主界面 → 临时禁用 AdAway(Allowlist 排查专用,见下方说明)
- 打开目标 APP,正常使用几分钟 — 触发它的各种网络请求(登录、刷新、加载广告位)
- 回到 AdAway → 主菜单 → Log DNS Requests → OPEN LOG FILE
- 在日志里找可疑主机名 — 用 AdAway 的过滤器按 APP 包名过滤,或者看日志里标记为 "Blocked" 的条目
- 长按主机名 → 直接进 Allowlist 或 Blocklist(根据你是想放行还是拦截)
- 重新应用 AdAway — 规则才生效
- 重开目标 APP 验证 — 问题解决了就好,没解决继续看日志
为什么第 4 步要临时禁用 AdAway
这一步只在排查"APP 打不开,找误杀域名"时需要:
- 如果 AdAway 开着,日志里只显示"被拦的请求"——那些请求永远到不了 APP 服务器,你看不到 APP 还需要什么
- 临时禁用后,APP 正常联网,日志里会显示"所有 DNS 请求"——包括 APP 必需的、广告的、跟踪的
- 这样你才能对比出"哪些是必需的(现在正常了),哪些是广告/跟踪的(可以继续拦)"
如果你是找"哪条广告没被拦"(补 Blocklist),第 4 步不要禁用 AdAway——保持启用,日志会显示"被放行的 DNS 请求"里哪些是广告。
日志里能看到什么
DNS 日志界面字段
| 字段 | 含义 |
|---|---|
| Hostname | 请求的域名 |
| Package | 发起请求的 APP 包名 |
| Status | Blocked / Allowed(被拦还是被放了) |
| Rules | 命中的规则(哪个 hosts 源、哪个自定义列表) |
| Time | 时间戳 |
典型日志解读
Status: Blocked
Hostname: graph.facebook.com
Package: com.facebook.katana
Rules: Hosts Source (Steven Black)
→ Facebook 需要这个域名来加载数据,被 Steven Black 误拦了 → 加进 Allowlist
Status: Allowed
Hostname: cdn1.adsrv.net
Package: com.mygame.game
Rules: No matching rule
→ 某游戏的广告域名,没有任何 hosts 源覆盖 → 加进 Blocklist
常见问题
日志里什么都没有
- Private DNS 没关(Pie+)
- TCPDUMP 进程被 SELinux 杀了(某些定制 ROM 需要刷 SELinux Permissive 补丁)
- VPN 模式下 AdAway 进程被杀了
只看到 Blocked 看不到 Allowed
这是正常的——日志默认主要记录被拦截的请求。如果想看 Allowed 的,需要在日志设置里打开"Show allowed requests"选项。
某个 APP 的请求日志里完全找不到
这种 APP 可能:
- 直接用 IP 地址(不走 DNS)
- 用了 Android 高版本的 DoH/DoT(绕过系统 DNS)
- 自建 DNS 解析器(极少数 APP 会这么做)
这种情况 DNS 日志帮不上忙,只能用 VPN 模式配合 AdGuard 的更深度流量检查。
一次完整排查的时间
熟练用户 3~10 分钟搞定一个 APP 的问题。新手第一次可能要 15~20 分钟熟悉界面。建议先拿一个你熟悉的 APP(比如某新闻 APP)练手。
