如何利用 OpenWrt 旁路由和 AdGuard Home 实现全屋去广告
Table of Contents
- 一、网络环境与目标
- 一、网络环境与目标
- 1.1 设备与拓扑
- 1.2 目标
- 二、整体思路:旁路由只做 DNS 过滤
- 三、步骤一:在 OpenWrt 上安装并配置 AdGuard Home
- 3.1 选择上游 DNS
- 3.2 配置过滤规则(黑名单)
- 四、步骤二:手动设置终端 DNS(关键)
- 4.1 Windows 11:手动设置 IPv4 / IPv6 DNS
- 4.2 手机:手动设置 DNS
- 五、步骤三:验证效果与日常使用
- 5.1 在 AdGuard Home 后台查看查询日志
- 5.2 故障时的回退方式
- 六、常见错误、现象与排查思路
- 6.1 DNS 没走到 AdGuard Home
- 6.2 53 端口冲突(dnsmasq 和 AdGuard Home 都想占用)
- 6.3 只配置 IPv4 DNS,IPv6 直接绕过
- 6.4 使用 VPN / 安全软件篡改 DNS
- 七、总结与反思:为什么最后选择“旁路由 + 手动 DNS”
如何利用 OpenWrt 旁路由和 AdGuard Home 实现全屋去广告
这篇文章记录的是我在宿舍网络中,利用一台没有开启 DHCP 的 OpenWrt 设备(作为旁路由 / 交换机),在上面部署 AdGuard Home,并通过手动设置终端 DNS 来实现“全屋去广告”的过程。
这里的“全屋”并不通过强制接管路由或 DHCP 实现,而是依靠:
- OpenWrt 设备提供一个 统一的 DNS 过滤入口;
- 各终端(电脑、手机)显式地把 DNS 指向这台 OpenWrt。
这种方式比较温和,不会干扰原有主路由的行为,也适合合租、宿舍等场景。
一、网络环境与目标
一、网络环境与目标
1.1 设备与拓扑
设备清单(与系列其他文章保持一致):
- 上游网络:Selfnet(德国学生宿舍网),负责分配 IP、做 NAT、提供上网出口
- 主路由器:红米 AX6(刷了 AE86Wrt 固件),当前工作模式:
- 不做 NAT,不做 DHCP
- LAN 与上游处于同一网段,更像一台 交换机 + 无线 AP
- MacBook Air:便携开发设备,在宿舍和工位之间通勤
- Windows 电脑:长期位于德国学生宿舍
- Linux 工作站:位于中国大陆,Linuxmint 系统(本文不涉及)
- 其他终端:手机等移动设备,需要去广告
路由器在局域网中的地址是:
- IPv4:
192.168.7.2(我自己设定的管理/别名地址) - IPv6:有一个本地链路地址,比如
fe80::6664:4aff:fe99:f1e9(实际以系统显示为准)
1.2 目标
在不改变上游网络的前提下,实现:
-
所有 愿意去广告的设备,只需要:
- 把 DNS 指向
192.168.7.2(IPv4) - 把 IPv6 DNS 指向路由器的
fe80::...(本地链路地址)
- 把 DNS 指向
-
OpenWrt 上运行的 AdGuard Home 负责:
- 过滤广告域名;
- 拦截恶意重定向、欺诈站点;
- 把”干净的” DNS 结果再转发给上游或公共解析器。
这意味着:
- 不需要在路由器上开启 DHCP;
- 不需要把路由器做成默认网关;
- 不会影响不想去广告的其它设备(它们可以继续用”自动获取 DNS”)。
二、整体思路:旁路由只做 DNS 过滤
很多”全屋去广告”的教程会让 OpenWrt 路由器变成:
- 局域网的默认网关;
- DHCP 服务器;
- 同时还承担去广告、代理等角色。
在合租/宿舍场景,这种做法有两个问题:
- 需要改动原有网络拓扑(把自己设备变成”主路由”),对其它人有影响;
- 一旦自己的路由器出问题,整间宿舍的网都不稳定。
我这次采用的是另一种思路:
- 路由器不改动路由结构,只负责 DNS 过滤;
- 哪些设备要去广告,就在这些设备上显式把 DNS 指向路由器;
- 不需要动 DHCP,也不需要劫持 53 端口。
核心流程可以简化为:
终端 → 把 DNS 请求发给路由器(AdGuard Home) → AdGuard Home 过滤 → 转发给上游 DNS → 返回结果
三、步骤一:在 OpenWrt 上安装并配置 AdGuard Home
这一节只写关键点,不覆盖所有 OpenWrt 细节。你可以通过 opkg 或手动下载二进制方式安装 AdGuard Home,安装完成后,确保它能:
- 监听 LAN 接口的 53 端口(UDP/TCP);
- 提供一个 Web 管理页面(默认在 3000 或 80/3000 端口,视安装方式而定)。
如果系统中仍然运行着 dnsmasq,并且占用 53 端口,需要避免端口冲突。常见做法有:
- 把 dnsmasq 的 DNS 功能关掉,只保留 DHCP(如果你在用);
- 或把 dnsmasq 的监听端口改为 5353,再让 AdGuard Home 把 127.0.0.1:5353 作为上游。
3.1 选择上游 DNS
在 AdGuard Home 的“设置 → DNS 设置”中,指定你的上游 DNS。例如:
-
直接用公共 DNS:
https://dns.google/dns-queryhttps://1.1.1.1/dns-query
-
或者用运营商提供的 DNS 地址;
根据需求选择是否启用 DoH(DNS-over-HTTPS)。如果只是宿舍普通使用,普通 UDP/TCP DNS 也足够。
3.2 配置过滤规则(黑名单)
广告拦截的效果,主要取决于使用的规则列表。我最终启用的几类规则是:
- AdGuard Simplified Domain Names AdGuard 官方的核心规则,覆盖常见国际广告域名。
- AdAway 经典的移动端广告拦截规则,对手机端效果比较明显。
- MalwareDomainList.com Hosts 安全向规则,用于拦截已知恶意软件域名、钓鱼站点。
- anti-AD / Adblock / neoHosts / YouTube 等中文聚合列表 这一类列表对中文网站上的弹窗、恶意跳转广告效果较好,重点处理“莫名其妙被重定向到直播间”这类问题。
在 AdGuard Home 的“过滤器 → DNS 黑名单”页面中,可以把这些规则列表的 URL 加进去。配置完成大致效果如下:

四、步骤二:手动设置终端 DNS(关键)
在这个方案里,最关键的不是路由器配置,而是终端是否真的在使用这台 DNS 服务器。如果终端继续用”自动获取”,请求会直接发给上游(Selfnet),AdGuard Home 完全不会被经过。
4.1 Windows 11:手动设置 IPv4 / IPv6 DNS
路径(Windows 11):
- 设置 → “网络和 Internet”;
- 选择当前使用的网络(例如”以太网”或 Wi-Fi);
- 点击”硬件属性”或”DNS 服务器分配”;
- 将”DNS 服务器分配”从”自动 (DHCP)“改为”手动”。
在”手动”模式下,启用 IPv4 和 IPv6,并填入:
- IPv4 DNS 服务器:
192.168.7.2对应 OpenWrt 路由器的 IPv4 地址。 - IPv6 DNS 服务器:
fe80::6664:4aff:fe99:f1e9示例为路由器的 IPv6 本地链路地址(实际值请以你自己的网卡信息为准)。
为什么要填 IPv6 DNS? 如果你的网络环境有原生 IPv6,系统很可能会优先使用 IPv6 DNS。 只设置 IPv4 DNS 的话,部分请求可能直接走上游的 IPv6 DNS,从而绕开 AdGuard Home。
设置完成后,界面类似这样:

配置完成后,可以在 PowerShell 中检查一下:
Get-DnsClientServerAddress -InterfaceAlias "以太网"
确认 IPv4/IPv6 的 DNS 地址都指向了设备 B。
4.2 手机:手动设置 DNS
不同系统略有差异,这里只说通用思路。
大致步骤:
-
连接到宿舍的 Wi-Fi;
-
打开该 Wi-Fi 的“详细信息”或“高级设置”;
-
找到 IP 设置 / DNS 设置;
-
把“自动”改成“静态 / 手动”;
-
在 DNS 1(及 DNS 2)中填入:
192.168.7.2(IPv4);- 有的系统支持单独填 IPv6 DNS,可以填设备 B 的
fe80::...。
如果你不确定手机是否在用这台 DNS,可以在 AdGuard Home 的“查询日志”里观察:当你在手机上打开网页时,日志中应出现该手机 IP 发出的请求。
五、步骤三:验证效果与日常使用
5.1 在 AdGuard Home 后台查看查询日志
在浏览器访问 AdGuard Home 的管理地址(例如 http://192.168.7.2:3000/,以实际配置为准),打开“查询日志”页面。
如果配置成功,你应该能看到:
- 来自电脑/手机 IP(如
192.168.7.x)的 DNS 查询; - 部分请求被标记为“已拦截”;
- 拦截的域名包括一些典型广告域名(如
googleads.g.doubleclick.net)、统计域名,以及你规则列表中已有的恶意域名。
此时,再打开之前广告比较多的网站,对比一下体验差异,一般会比较明显。
5.2 故障时的回退方式
这种方案的一个优点是“回退成本低”:
- 如果 AdGuard Home / OpenWrt 出问题,只要在终端把 DNS 恢复为“自动获取”即可;
- 不会影响整个宿舍/家里的其它人,不需要重启主路由。
六、常见错误、现象与排查思路
这里列几个我踩过或者容易踩的坑。
6.1 DNS 没走到 AdGuard Home
现象:
- AdGuard Home 查询日志几乎没有记录;
- 去广告效果和改 DNS 之前没区别。
排查:
-
在终端上执行:
nslookup example.com看看显示的“服务器”地址是不是
192.168.7.2(或对应 IPv6); -
在 AdGuard Home 日志中,搜索某个你刚查过的域名;
-
如果终端显示 DNS 服务器不是 B,说明终端设置没生效; 如果终端显示的是 B,但日志没有记录,说明 B 上的防火墙/监听地址可能有问题。
6.2 53 端口冲突(dnsmasq 和 AdGuard Home 都想占用)
现象:
- AdGuard Home 后台显示 DNS 监听失败;
netstat -lnp | grep :53显示端口已被 dnsmasq 占用。
解决:
-
如果你不再用路由器发布 DHCP/DNS,可以在
/etc/config/dhcp中关闭 dnsmasq 的 DNS 功能,或者直接停掉服务:/etc/init.d/dnsmasq stop /etc/init.d/dnsmasq disable -
如果仍需保留 DHCP,可以让 dnsmasq 只监听 127.0.0.1:5353,然后在 AdGuard Home 中把
127.0.0.1:5353作为上游 DNS。
6.3 只配置 IPv4 DNS,IPv6 直接绕过
现象:
- 部分网站广告明显减少,但又有一些“怎么也拦不住”;
- 在 IPv6 测试网站上可以看到自己有完整 IPv6 连接。
原因:
- 系统在访问支持 IPv6 的站点时,优先用 IPv6 DNS 解析;
- IPv6 DNS 仍然是自动从上游拿到的,绕过了 AdGuard Home。
排查与修正:
- 在终端网络设置中同时填入 IPv6 DNS(设备 B 的
fe80::...); - 或者在系统层面关闭 IPv6(不推荐,除非你明确不需要 IPv6)。
6.4 使用 VPN / 安全软件篡改 DNS
现象:
- 明明之前去广告正常,打开某个 VPN 或安全软件后又恢复成“广告满天飞”;
- AdGuard Home 查询日志中几乎没有新请求。
原因:
- 某些 VPN / 安全软件会把 DNS 强制改为自己的服务器;
- 或者直接把 DNS 查询封装进 VPN 通道。
排查与应对:
- 关闭 VPN / 安全软件后再测试;
- 查看该软件的 DNS 设置,有些支持自定义 DNS 或“遵循系统设置”。
七、总结与反思:为什么最后选择“旁路由 + 手动 DNS”
相比“把 OpenWrt 变成主路由 + 跑一堆服务”的方案,这次的做法刻意保持了简单:
-
不触碰上游网络的“核心职责”
- 上游(运营商/校园网)负责 IP 分配、NAT、IPv6;
- 我自己的设备只做一件事:过滤 DNS。
这减少了很多不必要的复杂度,也避免对其它宿舍成员造成影响。
-
把“控制权”交给终端,而不是强行改全局
- 谁愿意去广告,就在自己的电脑/手机上改 DNS;
- 谁不愿意,就继续用自动获取,不会被强制过滤。
这比在路由器上全局劫持 DNS 要更温和,也更容易沟通。
-
用可控的复杂度换取足够的效果
对于我的使用场景来说,这套方案已经:
- 明显减少了网页和 App 中的广告;
- 拦掉了一部分恶意重定向;
- 保持了 IPv6 不受影响。
再往上堆功能(例如全局代理、复杂分流),收益就不再那么明显,出问题时排查成本会显著增加。
-
故障回退很简单
- 任何时候,只要把终端 DNS 改回“自动”,就能绕过这整套配置;
- 路由器挂掉或 AdGuard Home 崩溃,不会把整个网络“拉闸”。
-
先把这一条链路打磨顺,再考虑后续优化
这篇文章只解决了“旁路由 + AdGuard Home + 手动 DNS”的基本链路。 后面如果要进一步优化(比如在 AdGuard Home 上做 per-client 统计、为不同设备启用不同过滤规则),可以在这个基础上迭代,而不需要再去动网络拓扑。
对我来说,这是一个在“折腾”和“可维护性”之间做出的折中:不是最“极客”的方案,但足够清晰、足够稳定,也更符合自己长期维护的能力。