AdGuard Home 广告过滤

广告过滤是 OpenWrt 上最受欢迎的服务之一,而 AdGuard Home 是目前功能最完整的全网络过滤方案。它不仅仅是个拦截列表,还提供查询日志、客户端统计、家长控制和可视化界面。本篇讲清它在 OpenWrt 上的安装、与 dnsmasq 的共存之道,以及过滤策略的调优。

为什么选 AdGuard Home

OpenWrt 上的过滤方案有好几套,先看它们各自的定位再选。

方案 资源占用 界面 适用场景
dnsmasq 加 hosts 极低 无 只想挡几个固定域名
adblock 低 LuCI 页面 轻量过滤够用就好
AdGuard Home 中高 独立 Web 面板 要统计、要管理、硬件够

AdGuard Home 的独立面板是它最大的差异化:每一次 DNS 查询都有记录,哪个客户端在几点请求了什么域名、被没被拦截,全部一目了然。排查设备联网行为、验证过滤有没有生效,靠的就是这些数据。代价是资源占用——安装后约三十多 MB 闪存、运行时近百 MB 内存,小闪存老设备要先掂量一下空间。空间和依赖检查的方法见《opkg 包管理与软件源》,这里不重复。

安装与首次配置

从 OpenWrt 21.02 起官方源直接提供 adguardhome 包,安装和别的软件没区别:

opkg update
opkg install adguardhome
/etc/init.d/adguardhome enable
/etc/init.d/adguardhome start

启动后浏览器打开 http://路由器IP:3000 进入安装向导。向导会问两件事:管理界面监听哪里、DNS 服务监听哪里。管理界面填所有接口、端口 3000;DNS 服务这里有个坑——53 端口默认被 dnsmasq 占着,直接填 53 会启动失败。两种处理思路:先填 5353 或 54 之类的高端口应付过去,后面再调整;或者按官方文档先改 dnsmasq 监听端口、释放 53 给 AdGuard Home。两种思路对应两种部署架构,下面分开讲。

设好管理员账号密码,向导完成,之后日常管理就都在这个独立面板里,LuCI 里没有它的配置入口(这也是它 和 adblock 插件的使用习惯差别之一)。

访问控制设置值得专门留意:面板默认允许所有能访问路由器的设备打开管理页面,最省心的做法是把允许访问的 IP 范围限制为局域网网段,外网进来的请求直接拒之门外。配合防火墙只开 LAN 侧端口,整个 AdGuard Home 服务对外完全隐形。投入运行后更新 AdGuard Home 本体要走 opkg,不要去面板里点内置的更新按钮——opkg 装的版本由 OpenWrt 软件源统一管理,混着更新容易出现二进制版本与脚本不匹配的故障。

AdGuard Home 首次安装流程

与 dnsmasq 的两种共存方案

DNS 入口只能有一个 53 端口,AdGuard Home 和 dnsmasq 谁来守这个门,决定了整体架构。

方案一:AdGuard Home 直接占用 53,dnsmasq 挪走端口。好处是所有客户端查询直达 AdGuard Home,统计里能看到真实客户端 IP;代价是 DHCP 下发的 DNS 参数要同步调整,而且 .lan 本地域名和反向解析要额外配置——在 AdGuard Home 的上游设置里加分域规则,把 arpa 反查和 .lan 域名指向本机的 dnsmasq 新端口。官方文档给的示例是 [/lan/]127.0.0.1:12353 这种语法。

方案二:dnsmasq 守 53,把 AdGuard Home 设为它的上游,再用防火墙重定向把客户端的 53 端口请求强制转给 AdGuard Home。好处是 DHCP、域名解析、租约全部保持原样,改动小;代价是如果做重定向,同样需要小心查询循环。切记不要 dnsmasq 转发给 AdGuard Home、AdGuard Home 又把本地域名转发回 dnsmasq,两头转圈会把查询转成死循环。

对比项 方案一 方案二
客户端统计 真实 IP 需重定向才保真
配置复杂度 中等 较低
DHCP 影响 需调整 无
循环风险 需配分域规则 需避免互相转发

无论哪种方案,上游 DNS 都建议配加密(DoH/DoT)地址并开 DNSSEC 校验。公共 DNS 的具体选择与加密原理,见 DNS 加密与解析。

家庭过滤的目标分层

家庭环境的过滤目标通常分三层,每层对应不同规则来源。隐私层:屏蔽已知追踪器与分析平台,这类域名列表社区维护得很全,订阅一批即可。体验层:屏蔽视频前贴片广告、应用内推广,这是感知最强的一层,需要中文规则订阅。安全层:屏蔽恶意软件域名与钓鱼站点,规则比前两层要谨慎,误伤会直接影响正常网站。

三层规则叠加是常见做法,注意观察面板里每层的拦截量分布——如果安全层拦截量异常高,往往说明家里有设备行为不正常,值得单独排查。有了数据才谈得上管理,这也是为什么 AdGuard Home 的面板被视作核心价值而非附属功能。

过滤规则与调优

安装向导会自带一批官方订阅规则,国内环境还需要补充中文规则。添加方式是面板里 过滤器 → DNS 拦截规则 → 添加规则订阅,贴上订阅链接保存,然后手动点一次更新。订阅生效后,面板顶部的 拦截统计 就开始有数据。

几个调优要点。第一,规则不是越多越好:每条规则都要参与匹配,几十万条的巨型列表会拖慢解析速度,两三个针对中文广告的订阅加官方默认列表足够了。第二,用查询日志精准排障:某个网站打不开,先去日志里搜它的域名,看是不是被误伤拦截了,找到了就在规则里加白名单例外。第三,善用客户端分组功能:给孩子的设备分到严格组、给自己分到宽松组,一套服务满足全家不同需求。

验证过滤是否生效,最简单的办法是在设备上 nslookup 一个已知广告域名,返回 0.0.0.0 类的空地址就说明拦住了;同时面板的查询日志会立刻出现这条记录,双确认最可靠。远程排查时,SSH 密钥登录 配置好再动手,比反复输密码高效。

上游 DNS 的选择

AdGuard Home 本身不生产解析,它只是转发,上游质量直接决定整体体验。面板里的 DNS 设置支持几十家公共 DNS,配两到四家做冗余是标准做法。推荐组合思路:一到两家国内公共 DNS(延迟低,国内站点解析快)加一到两家国际公共 DNS 的加密端点(国外站点解析更准)。并行模式选 并行请求 时所有上游同时查、取最快的响应,解析速度最优;选 快速 模式按顺序试,流量节省但偶发慢请求。

上游加密(DoH/DoT)是否开启取决于你的网络环境:有些地区对明文 DNS 有劫持,加密能彻底绕开;如果完全没问题,明文解析反而更快更简单。开启加密后务必同步开 DNSSEC 校验,它能验证解析结果没被中间人篡改,两者配合才是完整的加固。所有这些选择别照抄教程,面板里有 测试上游 DNS 按钮,一键测出每家的实际延迟,用数据说话。这些公共 DNS 的地址选择与对比测试方法,详见 DNS 基础与加密 一章。

与 adblock 方案的取舍

如果你的设备闪存在 16MB 以下,AdGuard Home 可能装都装不下;8GB 内存的老设备也可能捉襟见肘。这时候 adblock 插件是合理的折中:基于 dnsmasq 的拦截列表,无独立面板、无统计,但日常使用过滤效果相当,配置全部在 LuCI 里完成,学习成本低得多。判断逻辑很简单——硬件够、想知道过滤在发生什么,选 AdGuard Home;硬件紧、只要广告别出来,选 adblock。两者不要同时开启,列表冲突会让排障变成噩梦。

日常使用与维护

装好不是结束,AdGuard Home 的价值在于长期运维。面板上值得养成习惯看的几个地方:仪表盘的每秒查询数和拦截率是整体体检指标;查询日志按客户端筛选,能发现哪个设备在狂请求某个域名,往往是智能设备固件里的埋点行为;设置里的速率控制给每个客户端限速(比如 50 查询每秒),防止某个失控设备拖垮整个解析。

规则更新有个常见误区:订阅链接更新不等于本地规则刷新,面板里有手动更新按钮,默认的自动更新间隔通常是一周,想立刻生效必须点一下。如果某天发现拦截率突然下降,第一反应去查规则订阅是不是过期失效了,第二反应才是怀疑配置问题。遇到误伤时,最快的处理不是改规则订阅(下次更新会被覆盖),而是在面板的白名单里加例外,白名单优先级高于所有订阅规则。

NTP 时间同步是另一个隐形依赖:使用了 DoH/DoT 加密上游后,SSL 证书校验依赖系统时间,开机时 NTP 还没同步就会导致加密解析全挂。官方文档给出的解法是在上游里给 pool.ntp.org 加一条明文查询的例外规则,这个小细节能解决一类很迷惑的偶发故障。

两种端口方案对比;方案一AdGuard守53;方案二dnsmasq守53加重定向

延伸阅读

  • 《自建 DNS 与 hosts 去广告》:不需要 AdGuard Home 也能做的轻量替代方案。
  • 《DDNS 动态域名》:过滤体系搭好之后,远程访问是自然的下一步。
  • 《系统日志与监控》:AdGuard Home 的查询日志长期保存与分析思路。