它不是"看网页拦广告",而是在 DNS 查询这一关就把广告/追踪域名挡在门外。理解规则语法,才能精确控制拦什么、放什么。
AdGuard Home 的拦截发生在 DNS 解析阶段:客户端查询一个域名,它先拿这个域名去匹配所有已启用的过滤规则——命中拦截规则就按拦截模式返回 NXDOMAIN 或 0.0.0.0,设备拿不到广告服务器 IP;命中白名单例外(@@ 开头)则放行。规则语法以 AdGuard 风格 ||域名^ 为主,也兼容 hosts 写法与通配符。过滤列表通过订阅 URL 添加(如 StevenBlack、Hagezi),并在"查询日志/统计"里查看实际拦截效果。官方规则说明见 AdGuard Home Wiki · Filters。
一次查询从发出到被拦,中间发生了什么
page.example.com 和 tracker.ads-network.com 两个域名。tracker.ads-network.com 后,用它去匹配所有已启用的过滤列表与自定义规则。NXDOMAIN(域名不存在)或 0.0.0.0(黑洞地址)——两种都让广告请求连不出去。page.example.com 没有命中任何拦截规则,正常转发上游解析、缓存后返回给设备,网页照常打开。DNS 级规则只匹配域名,不需要浏览器那种 CSS 元素选择器
| 写法 | 含义 | 示例 |
|---|---|---|
||域名^ | AdGuard 语法:拦截该域名及其所有子域名 | ||doubleclick.net^ |
@@||域名^ | 白名单例外:即使被列表拦截也放行 | @@||needed.example.com^ |
! 注释 | 注释行,不参与匹配 | ! 这是自定义规则分组 |
0.0.0.0 域名 | hosts 风格:把该域名指向黑洞 IP | 0.0.0.0 ads.example.com |
*.域名 | 通配符:匹配该域名的任意层级子域名 | *.tracker.example.org |
DNS 重写 | 把域名指向自定义内网 IP(解析劫持到本地服务) | nas.lan → 192.168.1.20 |
完整语法细节(分隔符 ^、例外优先级、正则规则等)以官方 Filters Wiki 为准。
不用自己逐条写规则——订阅社区维护好的列表即可,AdGuard Home 会定期自动拉取更新
AdGuard 官方维护的 DNS 过滤列表,针对广告与追踪域名做了清洗,误杀率低,是默认推荐列表之一。
github.com/StevenBlack/hosts:合并多个知名 hosts 列表的聚合项目,覆盖广告/追踪/恶意软件域名,社区活跃、更新频繁。
github.com/hagezi/dns-blocklists:按激进程度分档(light / multi / pro / pro++),适合按设备粒度选择拦截强度。
任意 hosts 格式或 AdGuard 格式的 raw 文本 URL 都能添加。在"过滤 → DNS 过滤列表 → 添加过滤列表"粘贴订阅地址即可。
官方对 hosts 类列表的接入方式见 Hosts-Blocklists Wiki。
误拦了怎么救、效果怎么看,都在这两个入口
在查询日志里点某条记录的"白名单"按钮,或在自定义规则写 @@||域名^。白名单优先级高于一切拦截规则,专门用来救误杀。
针对列表没覆盖到的特定广告/统计域名,直接在自定义过滤规则里加 ||域名^,立即生效。
逐条展示经过 AdGuard Home 的 DNS 查询:时间、客户端 IP、被查询域名、是否被拦截、命中的是哪条规则。排障和追查误拦全靠它。
聚合展示拦截占比、Top 被拦域名、Top 请求客户端、每日趋势,直观看到"这台 DNS 到底挡掉了多少广告流量"。
||example.com^ 表示拦截 example.com 及其所有子域名;前面加 @@(如 @@||example.com^)就是白名单例外。hosts 风格的 0.0.0.0 ads.com 也可以直接当规则用。@@||被误拦域名^ 的例外规则,优先级高于拦截规则。