AdGuardHome 去广告保姆级教程:在 OpenWrt 上部署

打开 APP 先看 5 秒开屏广告,打开网页弹窗关都关不掉——这些烦人的广告,其实大多可以通过一台"DNS 级别的拦截器"挡掉。AdGuardHome 就是这样一个开源工具,装在 OpenWrt 路由器上,全家所有设备的广告一次搞定,连手机 APP 的开屏广告都能拦。本文从安装到调优,一步一步讲清楚。

AdGuardHome 是什么:DNS 层面拦截的原理

先理解它为什么能去广告。APP 或网页要显示广告,得先向广告服务器的域名(如 ad.example.com)发起请求。AdGuardHome 冒充你家的 DNS 服务器,流程是这样的:

  1. 手机想加载广告,向 AdGuardHome 查询广告域名的 IP;
  2. AdGuardHome 查过滤规则,发现这是广告域名;
  3. 直接返回 0.0.0.0(一个无效地址),广告内容根本下载不下来;
  4. APP 拿不到广告素材,开屏页要么秒过,要么显示空白。

它能挡住的东西:网页横幅广告、视频网站贴片(部分)、APP 开屏广告、各种追踪器。但也要说清楚局限:信息流里的原生广告(比如短视频里混着的推广内容,和正常内容走同一个域名)是挡不住的,别指望 100% 纯净。

安装方式一:opkg 一键安装(最省事)

如果你的 OpenWrt 软件源里有 AdGuardHome,一条命令搞定:

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

优点是省心、能随系统更新;缺点是软件源里的版本通常比较旧,新功能和新规则格式可能跟不上。对性能弱的老路由器,这种方式最稳。

安装方式二:手动下载二进制(推荐,讲详细步骤)

想用最新版就手动装。AdGuardHome 是 Go 写的单文件程序,不挑系统,关键是选对 CPU 架构。先查你的路由器是什么架构:

uname -m

对照表:

uname -m 输出下载哪个版本常见设备
x86_64linux/amd64x86 软路由、工控机
aarch64linux/arm64NanoPi R4S、树莓派 4
armv7llinux/armv7部分 ARM 路由器
mipsel / mipslinux/mipsle_softfloatMT7621 等 MIPS 老设备

然后按步骤装(以 arm64 为例,其他架构换文件名即可):

# 1. 新建目录并下载(版本号以官网最新为准)
mkdir -p /opt/AdGuardHome
cd /opt/AdGuardHome
wget https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.XX/AdGuardHome_linux_arm64.tar.gz

# 2. 解压
tar xzf AdGuardHome_linux_arm64.tar.gz --strip-components=1

# 3. 安装为系统服务
./AdGuardHome -s install

# 4. 启动并设开机自启
/etc/init.d/AdGuardHome enable
/etc/init.d/AdGuardHome start

看到 AdGuard Home is successfully installed 就算成了。如果 wget 下载慢,可以先在电脑上下载好再用 SCP 传到路由器。

首次配置向导:5 分钟填完

浏览器打开 http://路由器IP:3000,进入初始化向导,关键几项这样填:

配置项建议值说明
管理界面监听全 0(所有网卡)或内网 IP别暴露到公网
DNS 监听端口53标准 DNS 端口,下面会处理冲突
上游 DNS223.5.5.5、119.29.29.29国内公共 DNS,响应快
Bootstrap DNS119.29.29.29解析加密 DNS 域名用的
加密 DNS可选开启对隐私要求高再开,普通家庭没必要

上游 DNS 推荐国内公共的:阿里 223.5.5.5、腾讯 119.29.29.29、百度 180.76.76.76、114 的 114.114.114.114,填一两个就行。并行请求、测速选优这些保持默认即可。

OpenWrt 侧配合:DHCP 与 53 端口冲突处理

这是最容易卡住的一步。OpenWrt 自带的 dnsmasq 默认占用了 53 端口,AdGuardHome 也要 53,两个只能活一个。推荐方案:让 AdGuardHome 接管 53,dnsmasq 只保留 DHCP 功能。

编辑 /etc/config/dhcp,在 config dnsmasq 段加一行:

config dnsmasq
    option port '0'
    ...

port '0' 的意思就是关闭 dnsmasq 的 DNS 服务。然后在 LuCI 的"网络 → DHCP/DNS"里,把"DNS 转发"填上 127.0.0.1(即 AdGuardHome 本机),或者直接让 DHCP 下发的 DNS 指向路由器 IP:

# DHCP 下发 DNS(option 6),让全屋设备都用 AdGuardHome
# 在 /etc/config/dhcp 的 lan 段确认:
config dhcp 'lan'
    option interface 'lan'
    list dhcp_option '6,192.168.1.1'

改完重启相关服务:

/etc/init.d/dnsmasq restart
/etc/init.d/network restart
/etc/init.d/AdGuardHome restart

验证:找台电脑执行 nslookup www.baidu.com,看返回的 Server 是不是路由器 IP,是就说明全屋 DNS 已经走了 AdGuardHome。

过滤规则订阅:国内常用规则推荐

AdGuardHome 自带几条基础规则,想挡国内 APP 的开屏广告,建议再加 1~2 条国内维护的规则订阅(在"过滤器 → DNS 封锁清单"里添加):

  • anti-AD:国内个人维护的知名去广告规则,对国产 APP 开屏广告效果好;
  • AdGuard 简体中文过滤器:AdGuard 官方的中文规则,更新勤快;
  • EasyList China:老牌中文补充规则。

注意"贪多嚼不烂":规则不是越多越好,2~3 条高质量规则足够覆盖 95% 的场景。规则太多会拖慢 DNS 查询,还容易误杀。添加后点"检查更新",设个每周自动更新。另外建议开启"拦截规则更新失败时保留旧规则"的思路——更新前先确认当前拦截正常,万一新规则出问题,回滚到上一版只需一分钟,别让全家断网来验证你的运气。

效果验证与白名单:误杀了怎么办

验证三步走:

  1. 命令行验证:nslookup ad.doubleclick.net,如果返回 0.0.0.0,说明拦截生效;
  2. 手机验证:打开几个广告多的 APP,看开屏广告是否消失或秒过;
  3. 网页验证:打开广告多的门户网站,看横幅和弹窗是否没了。

误杀是难免的,比如某银行 APP 的登录页打不开。处理方法:去 AdGuardHome 的"查询日志"里搜这台设备的记录,找到被拦的域名,点"解除封锁"加入白名单。建议白名单只加"确认是误杀"的域名,别图省事整段放行。另外可以给家人的主力设备单独建"客户端"配置,误杀时只给这台设备放行,不影响全屋的拦截强度,精细化管理更省心。

进阶:自定义规则与家长控制

手写自定义规则:在"过滤器 → 自定义过滤规则"里可以自己加,语法很直观:

# 拦截整个域名及其子域名
||ad.example.com^
# 把某个子域名从拦截中放出来
@@||safe.ad.example.com^

遇到规则订阅没覆盖的漏网广告,先去查询日志找到它的域名,再手写一条规则,5 分钟见效。

家长控制:AdGuardHome 自带"家长控制"开关,打开后自动拦截成人网站;再到"常规设置"里开启"强制安全搜索",搜索引擎会自动过滤不良结果。有孩子的家庭建议两个都开,老人机也不用单独设置。

加密 DNS 上游(DoH/DoT):如果你在意运营商能否看到你的 DNS 查询记录,可以把上游换成加密 DNS,例如 https://dns.alidns.com/dns-query。注意 Bootstrap DNS 必须填一个普通 IP(如 223.5.5.5),否则连加密 DNS 服务器自己的域名都解析不了,整个查询链就断了。普通家庭内网用明文上游完全够用,知道有这个选项即可。

性能与注意事项

  • 内存:AdGuardHome 常驻内存约几十 MB,128MB 内存的老路由器也能跑,但别同时开太多规则;
  • 查询日志:默认保留 90 天很占空间,家用设 7 天足够;
  • 上游超时:如果某天全屋上不了网,先看是不是上游 DNS 挂了,换一组备用 DNS 即可;
  • 重启自启:确认 /etc/init.d/AdGuardHome enable 已执行,路由器断电重启后能自己起来。
  • 上游 DNS 故障切换:上游只填一个 DNS 有单点风险,建议至少填两个不同服务商的(如阿里 + 腾讯),AdGuardHome 会自动测速选优,其中一个挂了另一个顶上,全屋断网的概率小很多。

总结

AdGuardHome 去广告的完整链路就是:装对架构的版本 → 向导配好上游 DNS → 让出 53 端口给 AdGuardHome → DHCP 下发路由器 DNS → 加 1~2 条中文规则。配完之后全屋设备自动生效,不用每台手机单独装去广告软件,老人小孩的设备也一并受益。这大概是软路由上"幸福感提升最明显"的一个服务,值得花半小时折腾。