NAS装AdGuard Home全屋去广告:一个月拦六万条,电视开机快到3秒

家里电视开机十五秒广告,去年我按域名拦截的思路治过一回,好了大半还剩个尾巴;上个月媳妇指着手机里的开屏广告问我,这玩意能不能弄。两件事的病根其实是同一个——广告域名都要走DNS解析这一步。这回我没在路由器上打补丁,直接在NAS的Docker里装了个AdGuard Home,把全家设备的DNS都指过去,跑满一个月,拦了六万八千条查询,账我后面贴出来。
先把丑话说前面:DNS拦截不是无敌的
动手之前我在网上翻了不少教程,十个里有九个把它吹成全屋广告灭绝师太,照那个预期装完是要骂人的。先说我一个月实测下来的边界在哪。
拦得干净的:电视开机广告,域名一解析失败,广告程序加载不出来就直接跳过,我家那台电视开机从十五秒干到三秒上下,这是最直观的收获;网页里的第三方广告和统计追踪,基本全灭;一部分视频App贴片的加载域名,也能拦掉一截。
拦不动的:抖音、淘宝这类大厂App的开屏。它们的广告走的是HTTPDNS——App自己通过HTTPS直接问自家服务器要IP,压根不经过你家里下发的DNS,你在NAS上拦得再狠它也看不见。所以别指望装完之后手机开屏全消失,那部分得靠手机系统里的限制追踪和关闭个性化推荐慢慢磨。
还有一类是App内容里自带的广告图,图片跟正文从同一个服务器来,域名层面根本分不开,这种DNS层无解。期望放在电视、网页、追踪这三样上,体验就是惊喜;期望放在所有App开屏上,那就是失望。想明白这一点再动手,心态稳得多。
半小时装好:Docker就四个参数
我家那台N100小主机跑的飞牛,Docker里已经住着下载器、影音库好几个容器,正好再添一个。装它的流程跟之前入门Docker装别的容器没区别,真正要留意的就四样:
| 配置项 | 填什么 | 干嘛的 |
| 镜像 | adguard/adguardhome | 官方镜像,最新版就行 |
| 端口 | 3000,加53的TCP和UDP | 3000是首次安装和后台管理,53是DNS本体,两个协议都要映射 |
| 挂载 | conf和work两个目录 | 配置存在容器外面,哪天删容器重建,规则账号都还在 |
| 重启策略 | always | 它瘫了全家上不了网,NAS重启必须自己爬起来 |
端口这里多说一句:端口映射左边是NAS右边是容器,3000照抄就行,53记得TCP和UDP各来一条,DNS查询走的UDP,但TCP也用得上,漏一条某些场景就抽风。挂载目录的道理跟升级容器前抄参数是一回事,配置在容器外面,容器随便删。
装完浏览器敲NAS的IP加3000端口,进安装向导设个管理员账号,DNS监听端口确认是53就能用。有个前提坑提前查:NAS自己的53端口不能被占。SSH进去敲一行ss -ulnp | grep :53,没输出就踏实了,飞牛我这台是空的,群晖一般也不占;万一被占了,要么停掉占用服务,要么改用5335这种非常规端口,但那样路由器下发DNS时写法麻烦,能抢回53就抢回53。
顺带说句为什么NAS适合干这活:它全年开机、在内网里有固定地址、自带Docker。你要是没NAS,拿台旧笔记本或者旧路由器改的旁路由也能装,思路一模一样,就是费一台机器的电。
光装好只能拦老外:中文规则集才是灵魂
其实最早我是偷过懒的,直接把路由器DNS改成AdGuard家的公共服务器94.140.14.14,能用,但规则没法自定义、看不到统计、电视开机广告那批域名它拦不利索,这才动的自建念头。自建也躲不开同一个问题:规则。
装完别急着用。默认勾上的AdGuard DNS Filter是官方通用规则,对英文广告管用,对中文广告覆盖得稀稀拉拉。我头一天没加规则就开用,电视开机广告一条没拦住,还以为装错了。
中文环境要加anti-AD,圈里公认中文命中率最高的一批。路径是后台的「过滤器→DNS封锁清单→添加自定义订阅」,地址填https://anti-ad.net/adguard.txt,注意用adguard.txt这个版本,别顺手填成easylist那份,格式不对解析不出来。官方默认清单我留着,两边不冲突。
两个细节拿小本记一下。一是更新间隔默认168小时,一周才更一次,我改成24小时——广告域名换得勤,规则旧了等于白搭。二是规则不是越多越好,我贪心过,四五个清单叠着加,第三天媳妇的银行App直接白屏,某条规则把银行的统计域名当广告办了。老老实实退回两个清单,再去「查询日志」里找到银行那几个域名加白名单放行。往后哪个App抽风,都照这个路子查,别急着拆整套方案。
最关键一步:让全家的DNS都指向NAS
容器跑起来只是店开张了,全家设备得知道往这儿来。要改的地方在路由器:进后台把DHCP下发的DNS改成NAS的地址,我家是192.168.31.10,这个地址我是照给打印机绑静态IP的法子钉死的,NAS必须固定,不然哪天地址一漂全家DNS跟着瞎。备用栏填223.5.5.5,后面说为什么。
这里我踩过两个坑。头一个,改完路由器不代表设备立刻生效——DHCP租约没到期,设备还攥着旧DNS不放,得让每台设备忘掉WiFi重连一次。验证的法子:手机连上WiFi点进详情看DNS那栏,出现31.10才算数,光改路由器不看这个等于白改。
第二个坑是备用DNS的分寸。NAS哪天重启或者升个系统,全家DNS就真空十来分钟,有223.5.5.5顶着,网还能用,代价是这段时间查询绕过拦截,广告漏进来。我权衡过,全家断网十分钟比漏几条广告吓人多了,备用必须填。想让设备少漏,就把NAS的更新挪到半夜,那会儿没人在意广告。
我家还有张旧路由改AP喂智能家居的IoT专网,DHCP归它自己管,得单独进去改一遍,不然扫地机摄像头那批设备还攥着老DNS。要是你家设备连着光猫自带的WiFi,那层的DNS归光猫管,得去光猫后台改,跟路由器是两码事。
拦截模式选不对,电视开机反而更慢
这个设置藏得深,但直接决定电视开机是快三秒还是黑屏十几秒。位置在「设置→常规设置」往下翻,有个「拦截模式」,默认是返回0.0.0.0。
0.0.0.0这个默认值,大部分设备拿到就死心了,但个别App傻乎乎把它当个真地址去连,连接超时前能干等十几秒——我去年拦电视开机广告时就栽在这,广告是没了,开机黑屏等得人心慌,得让域名解析到127.0.0.1立即失败才痛快。AdGuard Home里这个教训直接变成了图形界面选项。
所以我的填法:拦截模式选「自定义IPv4」,填127.0.0.1。广告域名解析到回环地址,设备一连立即失败,一秒都不等。也有人选REFUSED,直接回一句拒绝,也快,但个别老设备对这个错误码的处理比较怪,我家电视顶得住,你家设备杂就先试自定义,稳妥。改完的当天电视开机实打实快了一截,这是整套方案里画龙点睛的一格。
一个月的账本,和数据里能看出什么
装它的隐性乐趣是仪表盘。跑满一个月,我家的账长这样:
| 项目 | 数字 | 说明 |
| 日均查询 | 一万二上下 | 电视、四台手机、平板是大头 |
| 日均拦截 | 两千三四百条 | 拦截率两成左右 |
| 月累计 | 六万八千条 | 比头一个月翻倍,规则磨合到位了 |
| 被拦最多的设备 | 电视 | 开机广告域名一天刷几十遍 |
有个数字别迷信:拦截率。查询里一多半是苹果谷歌的常规心跳和推送保活,拦掉的那些不少是统计追踪,不是你肉眼看得见的广告,两成这个数看看就好,别拿去跟人攀比。真值得隔三差五看一眼的是「Top被拦域名」:我家第一名就是电视开机那批域名,第二名是个统计SDK,说明规则在干正事;哪天第一名变成个正经网站域名,那就是误杀了,赶紧加白名单。
收尾给个顺序:装容器、加anti-AD中文规则、路由器DNS指向NAS、设备重连验一遍、拦截模式改127.0.0.1,五步下来半小时。它的本质跟搞懂DNS解析那几步是一脉的:域名出不了门,广告就加载不动。至于抖音淘宝的开屏,我的态度是随缘,那是HTTPDNS的战场,DNS层打不着,省下的心力拿去关App的个性化推荐,比什么都实在。
