路由器安装AdGuardHome实现去广告
1. AdGuard
AdGuard Home 是一个能在路由器上运行的 DNS 服务器。 DNS 是干嘛的?它负责 “ 把网站名解析成 IP 地址 “。
举个例子:当你访问某个 App 中的广告: ad.example.com → 设备会问 DNS:“这个域名怎么对应 IP?” → AdGuard Home 查到该域名是广告域名 → 答复一个假的地址(0.0.0.0) → 请求直接失败,广告无法加载
AdGuard Home 是靠 “ 广告域名名单 “ 来判断哪些请求需要拦截,它主要针对 DNS 层广告域名。它并不修改网页内容、也不解密 App,通过 “ 不让广告域名解析 “ 来达到 “ 广告无法下载 “ 的目的。
1.1 能去掉的广告类型
AdGuard Home 擅长的,是那些通过独立广告服务器加载的内容。
| 场景 | 示例 | 原因 |
|---|---|---|
| 各种网页广告 | 新闻门户、贴吧、论坛、购物网站 | 广告资源都来自独立广告域名 |
| 免费手游、App 内横幅 | 很多 SDK 广告(例如某某游戏启动时的开屏) | 广告 SDK 会访问广告服务器获取图片/视频 |
| 智能电视、电视盒子的广告 | 系统更新推送、开机广告等 | 同样走广告域名 |
| 网站统计、追踪与隐私跟踪 | Google Analytics、友盟、TalkingData 等 | 域名明确可封锁 |
在上面这些情况下,AdGuard Home 能直接 “ 掐断广告来源 “,因此非常有效。
1.2 去不掉的广告类型
| 场景 | 原因 |
|---|---|
| YouTube App 的视频前贴广告 | 视频数据与广告混在同一加密流里,DNS 看不出区别 |
| 小红书、抖音、微博 App 推荐流广告 | 广告数据来自同一个业务域名,DNS 层无法精确过滤 |
| App 内部写死的素材 | 一些广告图片或文本打包在 App 资源包里,根本没有网络请求 |
所以 DNS 层过滤只能 “ 拦截独立广告域名 “,无法深入到网络内容内部。
YouTube App 的广告是目前最难通过 DNS 方式屏蔽的之一。原因是,Google 非常 “ 聪明 “,他们把广告和视频内容放在了同一个或非常相似的域名(比如 *.googlevideo.com)下。如果我们把这个域名屏蔽了,那广告确实没了,但视频也可能一起看不了了。
所以通过路由器的设置,可以屏蔽掉 YouTube App 的大部分图片/横幅广告和一部分视频广告,但可能无法 100% 屏蔽掉所有的前贴片、中插视频广告。 不过,它对其他 App 和网页广告的效果依然非常出色!
2. 配置
2.1 DNS 流程
1 | 手机 / 电脑 / 电视 等设备 |
- 设置 DNS 端口:这是最关键的一步!为了避免和
dnsmasq(默认使用53端口)冲突,请不要使用53。推荐设置为5353。- 网页管理界面端口:
3000(或任意您喜欢的,方便记忆) - DNS 端口:
5353
- 网页管理界面端口:

- 设置您的管理员用户名和密码,然后完成向导。
- 现在,您应该可以通过
http://你的路由器IP:设定的管理端口(例如http://192.168.1.1:3000)或插件提供的http://你的路由器IP/adguard路径访问 AdGuard Home 的仪表盘了。

2.2 让流量走进 AdGuard Home
你的 OpenWrt 上,一般有两个 DNS 服务:
dnsmasq(默认处理 53 端口)AdGuardHome(改成监听 127.0.0.1:5353)
此时要保证: dnsmasq 接收到来自局域网客户端的请求后,正确地转发给 AGH 的 127.0.0.1#5353。否则,就算 AdGuard Home 启动成功,也会空跑。
1 | root@ImmortalWrt:~# cat /etc/config/dhcp | grep server |
1 | # ✳️ 1. 删除 LuCI 目前保存的(防止重复或覆盖) |
1 | root@ImmortalWrt:~# cat /etc/config/dhcp | grep server |
修改后发现配置,一会就会被覆盖重写,参考下面的 openclash 配合问题。
2.3 拦截测试
- 访问一些广告较多的新闻网站,看看广告是否消失了。
- 可以访问专门的测试网站,如
https://adblock-tester.com。

3. Openclash 配合问题
127.0.0.1#7874 是 openclash 的 dns 解析,127.0.0.1#5353 是 adguard home 的 dns 解析。在功能上存在冲突,如果你像现在这样把它们俩并列设置为 dnsmasq 的上游,就会产生问题。
dnsmasq 如果配置了多个上游服务器,它会并发地向所有服务器发送查询,并采用最快返回结果的那个。这就导致:
- 一个 DNS 查询可能被发给了 AdGuard Home,广告被成功拦截。
- 下一个 DNS 查询可能被发给了 OpenClash,它根据规则进行了代理,但因为没经过 AdGuard Home,所以广告没被拦截。
这样的结果就是 DNS 解析行为变得不可预测,你会发现时而能去广告,时而不能;时而能科学上网,时而不能。这显然不是我们想要的效果。
3.1 构建 DNS 处理链
解决这个冲突的正确思路不是让它们 “ 并列竞争 “,而是让它们 “ 串联协作 “,形成一个清晰的 DNS 处理链条。
推荐的流程是: 设备 -> AdGuard Home (去广告) -> OpenClash (分流) -> 最终上游 DNS
- 取消 openclash 接管


- 修改 AdGuard Home 上游 dns

- 设置 DNS 转发 127.0.0.1#5353

1 | root@ImmortalWrt:~# cat /etc/config/dhcp |