全屋去广告这件小事,硬件账只有十五块,时间账要按年算。我把ESP32-C3开源拦截器、路由器自带方案和公共DNS三条路的材料、实测和翻车记录并在一起,这篇就摊开算这笔账。
账本从一块十五块的小板开始
主角是一块ESP32-C3 SuperMini开发板,社区实测量价十五块上下,RISC-V单核,400KB内存,4MB闪存,USB-C供电,直接插到路由器背后的USB口上。海外开源项目esp32-c3-adblock把Pi-hole式的DNS拦截塞进了这块小板,固件和黑名单构建脚本全开源。
它敢装在内存只有几百KB的单片机上,靠的是换了存法。不保存域名字符串,把每个域名算成40位哈希排好序存进闪存,查询时二分查找。14万条域名只占0.67MB,运行时内存50KB上下,单次查询10毫秒左右,含Wi-Fi往返。哈希位数的取舍也算得清楚,降到32位省两成空间,但25万条会撞出7个碰撞,撞上就是误杀正常网站;升到64位每条记录空间多六成,4MB闪存放不下多少。40位在14万条规模零碰撞,53.7万条也只误拦1个。

上手是四步,PlatformIO里填Wi-Fi账号密码,跑脚本生成黑名单表,烧录,浏览器打开 c3adblock.local 进控制台。默认列表用StevenBlack加Hagezi Light,14万条上下起步,黑白名单、客户端管理、固件空中升级都在网页里操作。有个容易忽略的取舍,闪存就4MB,想留Wi-Fi升级能力就得保留双应用分区,黑名单空间缩到1.3MB左右,标题里的53.7万条对应的是单分区配置。日常用,一份维护干净的10万条列表比堆满更重要。
先说都不用买板子的那两档
这笔账有个零元的开头。腾讯云公共DNS早年就内置了去广告选项,开通即生效,每月送300万次解析,拦截规则里就有AdGuard系条目,不用部署任何服务。安卓侧有个坑,安卓只支持DoT接入而DoT通道不带拦截规则,要走常规DNS并绑定IP才有效。省心的代价是解析交给别人,出门在外图方便可以用,认真当家用了,后面两档更稳。
第二档花的是路由器本身的力气,不添硬件。MikroTik的RouterOS从7.15起内置AdList,DNS缓存里挂社区列表,实测做法是把缓存从默认2MiB调到8192KiB,列表每4小时自动更新,match-count数字自己往上涨。配完在电脑上nslookup一个列表里的广告域名,返回0.0.0.0就算生效。


OpenWrt和各家NAS装AdGuard Home是同一思路的完整版,网页向导里能直接看到它要占两个端口,Web管理口和DNS的53。53端口没有商量余地,改了它全家设备都得跟着改,坑基本都埋在这里,后面细说。
拦得住的和谁都拦不住的
所有DNS方案守的是同一道门,域名解析。设备问广告域名在哪,服务器直接回0.0.0.0,广告在加载前就断了。电视、手机、电脑、智能家居一起生效,不用挨台装软件,这是它最大的价值。实测数据也直观,一台树莓派跑AdGuard Home,一天27182次查询拦掉13244次,接近一半;小红书有人晒了45天的使用记录,日常请求里被过滤掉的占四成上下。

但有三类钱花了也白花的广告要提前知道。B站和YouTube的贴片和视频同域名,DNS分不出来,所有方案都一样,别把它当bug去修。抖音微博类App的信息流广告和内容混排,同样拦不到。还有自家App内置加密DNS的,查询直接绕开你家网关去外面解析,列表管不着,除非在防火墙上把53端口出站重定向,这么做容易误伤,先观察再决定。另外规则堆多了会反噬,列表越大解析越慢,网页加载要等一等,256MB内存的路由器加两三个大列表就开始swap,一台路由一条StevenBlack就够。
想再走一步,树莓派那一档贵在哪
把AdGuard Home当成常设服务,树莓派、NAS、CasaOS都能跑,512MB的小设备能用,4G内存以上完全不用操心。已有机器的前提下硬件零成本,部署耗时实测20分钟上下,从拉容器到过滤器出规则数。真正值钱的是它比小板多做的那些事,正则和修饰符规则、按设备分组管理、查询日志逐条排查,误杀了去日志里找到域名加白名单,一分钟的事。


这一档的门槛在系统层面。Debian和OMV默认有systemd-resolved占着53端口,容器绑不上去,要么把它的本地监听关掉,要么给容器单独挂一个IP,教程里一句“注意端口冲突”,实际撞上去才知道53改不了;远程连着SSH改的人,顺序错了能把自己关在门外。规则清单也要自己补,AdGuard默认两份国外列表对国内App的广告域名命中率一般,加一条中文区的规则,总数从19万涨到43万,拦截立竿见影。
宕机和耐心才是真实持有成本
三类翻车在近期记录里反复出现,都便宜不了。第一类,板子或容器挂了,全屋设备解析不到域名,页面打不开。开发者文档里“插上就能用”这一条还挂在待办清单上,普通路由器也很少带USB口,买板前先翻自己路由器背面。解法在安装时就定好,路由器DNS里主填拦截器、备填一个公共DNS,拦截器下线时只失去过滤不断网,这一步值回票价。

第二类,误杀。哈希碰撞是理论风险,规则列表出错是现实风险,某个正常域名进了列表,全家就打不开某个服务。自建服务用域名访问的,还要提前在DNS重写里登记,否则过滤器和反代互相抢答。排查习惯就一条,网站打不开先查拦截日志,看到了加白名单,别急着拆方案。第三类,USB供电的命门,路由器重启或者端口欠压,板子跟着下线,全屋DNS一起失联,所以备用DNS那一行永远别省。
持有期算到三年,硬件支出十五块起步,闲鱼成品模块三十块上下,板子本身谈不上残值,坏了认了再刷一张。电费在USB口供电的量级里几乎看不见,比软路由省电是玩家的原话。真实支出是工时,首次配置半小时到一小时,之后每次误杀排查几分钟,列表自动更新不用管。拿闲鱼刷好的成品省事,但固件来路自己心里要有数,能自己烧就别赌别人烧的。
合规红线和我不囤的第二块
这套动作的合法性账要放在最后摊开。它做的事,是替你自己家的设备换一个解析器,广告主拿不到你的请求,运营商的劫持跳转也落不到你屏幕上。控制台走的是本地地址,管理页面只在内网打开,这东西从设计上就不打算出门服务别人。监管这一头的火力本来就对着投放侧,《广告法》和《互联网广告管理办法》写明未经当事人同意不得向住宅、交通工具、智能家电投放广告,央视网也点名过App未经同意跳转广告涉嫌违法,家用过滤站在被骚扰的一方。行业里也有过先例,极路由和魅族都因为机器内置屏蔽广告吃过官司,那是厂商拿用户网络做产品,你在自己内网给自己设过滤器,两回事。红线清楚,服务只留内网,别把自建DNS挂到公网对外解析,那才是可能触碰法规的方向。孩子设备上那种看完广告领金币的游戏,拦了广告金币也没了,先想清楚再动手。

我的账本这么落。零元档先试,公共DNS十分钟见效,不合适随时退。想认真管全家网络又有一台常开的小机器,AdGuard Home是终点,20分钟的部署换几年的安静。ESP32-C3那一档,十五块买的是看懂整条DNS链路的门票,够用、便宜,折腾一圈学到的东西比板子贵,但它接不了DHCP、怕路由器没USB口、宕机要靠备用DNS兜底。囤,我不囤第二块板,这种百元内的东西坏了再买,值得先囤的是备用DNS那一行配置和白名单的习惯;清,各台设备里吃灰的网页广告插件可以下了,网关立起来之后它们是重复建设;等,官方待办里“插上就能用”划掉之前,动手党现在入场正合适,伸手党再等等。硬件永远是那十五块,耐心才是三年的持有成本。