资讯详情

资讯详情

ESP32-C3去广告DNS日常运维:设备封禁、暂停拦截与自定义域名

去年翻出一块吃灰很久的小开发板刷了个本地去广告固件插在路由器旁边当家庭 DNS 过滤器用。头两个月风平浪静直到家里人开始抱怨“购物 App 的图片刷不出来”“视频首页一片空白”我才发现装起来只是第一步。真正天天要面对的是三个动作把不该享受过滤服务的设备挡在外面、在误伤的时候临时放行、给特定域名开小灶。这台基于 ESP32-C3 的小盒子管理面板不算复杂但 esp32-c3-adblock 这三个操作的位置分散、语义还容易混淆我前前后后踩了不少坑。下面就把封禁设备、暂停拦截、自定义域名这三大日常操作拆开讲清楚什么场景该按哪个按钮、按完之后设备和人各自会看到什么、出了问题往哪儿查。这篇适合已经刷好固件、能进管理页面、但还没摸清日常维护套路的人也适合正准备入手这类小板子、想先估量一下它到底能干多少活的人。芯片架构、编译链那些我不展开重心放在运维手感和踩坑记录上。1. 先弄清楚这台小板子在网络里到底扮演什么角色1.1 一条 DNS 请求走过的完整链路很多人一上来就点按钮结果连“封禁”封的是什么都没搞明白。先把链路理清楚后面所有操作都会变得顺理成章。家里某台手机打开一个 AppApp 要先知道服务器地址于是发出一条 DNS 查询。这条查询默认走 UDP 53 端口目标是路由器下发的 DNS 服务器地址——也就是我们这台 ESP32-C3。板子收到查询后先把域名拿出来在本地规则表里做一次匹配。命中黑名单的直接回一个0.0.0.0或者干脆返回“域名不存在”客户端拿不到真实地址广告自然加载不出来请求在这一步就被掐断了。没命中的板子把查询转发给上游解析服务器拿到结果后再原路返回给客户端同时把结果在本地缓存一小段时间减少重复查询。整条链路里板子只做两件事查表和转发。它不解析网页内容不看 HTTP 请求也不管你访问的是图片还是脚本纯粹按域名下手。这个特性决定了它的优势轻量、对所有设备一视同仁、不挑系统和短板拦不住同域名的正常内容也拦不住直连 IP 的请求。清楚了这一点你就能理解为什么“封禁设备”和“拉黑域名”是两件完全不同的事前者动的是谁可以来问后者动的是问什么不给答。两者的作用层面不一样混着用就会出现“明明封了设备它还能上网”这种错觉。1.2 三大操作分别落在管理面板的哪一层把管理面板想象成一栋三层小楼三个操作分别在不同楼层。设备层管的是客户端身份哪些设备允许查询、哪些设备跳过过滤、哪些直接拒绝。这一层通常以 IP 或者备注名列表的形式呈现因为 DNS 协议本身只看得到源 IP看不到设备主机名更看不到 MAC。全局层管的是整个过滤服务的开关状态暂停拦截就住在这儿它影响的是所有设备、所有域名属于“一刀切”的临时措施。规则层管的是域名本身自定义域名、黑白名单、订阅源都属于这一层。我见过不少人把“暂停拦截”当成“给某台设备放行”来用结果一暂停全家设备都不过滤了问题没解决还多了新麻烦。也有人想给某台电视单独放行却跑到规则层去加白名单加了半天发现是设备走了别的 DNS。先定位问题出在哪一层再去对应楼层按按钮这是省时间的唯一办法。我现在的习惯是出问题先看日志里是哪个 IP 在查、查的什么域名、命中了哪条规则三秒就能判断该去哪层。1.3 上电之前必须确认的三件小事第一件板子的地址是不是固定下来了。管理面板一般靠 DHCP 拿地址路由器重启或者租约到期后地址一变你之前配的下发地址就全废了。稳妥做法是在路由器里给板子的 MAC 做静态绑定或者在固件里直接写死静态 IP。第二件路由器下发的 DNS 是不是只指向板子。如果路由器同时还下发了备用 DNS客户端在板子响应慢的时候会自动切到备用上去这时候你会发现过滤时灵时不灵广告偶尔冒出来。第三件板子的上游解析服务器填了没有、能不能通。上游不通的表现是全家断网这个比过滤失效吓人得多第一次配置的时候最好先用手机单独测一下。提示这三件事任何一件没做扎实后面三大操作都会出现“看起来生效了其实没生效”的假象。花十分钟把地基打好比事后排查两小时划算。2. 封禁设备把特定终端挡在解析链路之外2.1 什么情况下该封设备而不是拉黑域名先明确一个概念在这类固件里“封禁设备”其实有两种语义很多面板把它们放在同一个页面里特别容易点错。第一种是拒绝服务这台设备发来的所有 DNS 查询一律不回应等于把它从网络里“半隔离”它连正常网站都打不开。第二种是跳过过滤这台设备的查询照常转发但完全不做黑名单匹配相当于给它开了后门。前者用于管控后者用于兼容。什么时候用第一种家里来了客人你不想让他连进来蹭网又懒得改密码或者某台智能设备疯狂发心跳请求日志刷屏影响排查再或者你在做网络隔离测试。什么时候用第二种智能电视、扫地机器人、某些老款游戏机它们的固件会去请求一些被黑名单误伤的域名一封就罢工报错还特别隐晦。给它们单独开个“跳过过滤”比去规则层一条条加白名单省事得多也避免污染全局规则。我的经验是能跳过的就别拒绝。拒绝服务这种手段太粗暴一旦设备是家人正在用的手机你封完五分钟就会被找上门。跳过过滤是可逆的、温和的而且出问题好定位——日志里那台设备的查询记录干干净净一看就知道是绕过了。2.2 两种识别粒度按 IP 还是按名字DNS 层面能拿到的只有源 IP所以所有设备管控本质都是 IP 管控。面板上显示的“设备名”只是固件自己维护的一张备注表改名字不会改变实际生效的对象。这就带来一个隐患IP 变了规则就跟着错位。今天 192.168.1.23 是电视明天 DHCP 把这个地址分给了新手机你的“跳过过滤”就莫名其妙落到手机上电视反而又开始被过滤故障现象极其迷惑。解决办法有两个。稳妥的是在路由器的 DHCP 静态分配里把每台需要特殊对待的设备绑一个固定地址比如电视永远拿.50板子永远拿.2。省事的办法是在板子的管理面板里把设备列表按 IP 排序后手动加备注每次重启路由后瞄一眼有没有错位。我两个都做了因为吃过一次亏某次路由器固件升级把租约表清了一夜之间全家的过滤策略乱套电视放行了、手机被拒了折腾到半夜。2.3 从设备列表到生效的完整操作流程假设你要把一台测试机加入“跳过过滤”。第一步让这台设备先随便打开一个网页产生至少一条 DNS 查询这样它才会出现在设备列表里。第二步在面板的设备页找到对应 IP确认它的查询数和最近活跃时间对得上别认错。第三步点进去选择“跳过过滤”而不是“封禁”保存。第四步清掉这台设备的本地 DNS 缓存手机可以开关一次飞行模式电脑上重启一下网络适配器否则它还在用旧结果你会以为没生效。第五步回到设备页看这条记录的命中计数有没有变化或者去查询日志里过滤一下这个 IP能看到它的请求被标记为“绕过”。注意第四步最容易被跳过。DNS 缓存的存在让“配置生效”和“现象变化”之间有个时间差短则几十秒长则十几分钟。判断规则有没有落地永远以日志为准不要以网页能不能打开为准。2.4 几个让封禁失灵的隐形因素头一个因素是客户端自带加密 DNS。现在不少手机和浏览器默认开着“安全 DNS”查询直接走加密通道发给外部服务器压根不经过你这台板子你在面板上怎么封都没用。排查方法是看日志里这台设备的查询量是不是长期为零——正常上网的设备不可能零查询零就说明它绕过去了。处理办法是在设备上把这个功能关掉或者在路由器层面把 53 端口以外的加密解析出口堵上这一步涉及网络策略量力而行。第二个因素是双栈环境下的 IPv6。很多家庭宽带同时下发 IPv4 和 IPv6 地址板子如果只监听了 IPv4客户端会优先走 IPv6 的解析路径你就只看到一个“部分生效”的假象。进面板的网络设置确认监听地址或者干脆在路由器里把 IPv6 的 DNS 下发也指到板子上。第三个因素是设备自己写死了 DNS。少数智能硬件不走 DHCP 下发的地址硬编码了公共解析服务器。这种设备你在面板上永远看不到它自然也封不了。我的处理方式是把它单独扔进一个访客网络眼不见心不烦。3. 暂停拦截给误伤留一个体面的后门3.1 暂停的到底是什么这个按钮的名字容易让人误解。它暂停的是整个过滤引擎的匹配动作不是暂停板子的转发功能。按下去之后板子依然在收查询、依然在转发、依然在缓存只是不再拿域名去比对黑名单。所以你会发现暂停期间网络完全正常广告如期出现但网络延迟没有任何变化——因为它本来就没在“拦截”这个动作上花多少时间。这里有个关键认知暂停是全局的影响所有设备。如果你想只给一台设备放行用的是上一章的“跳过过滤”别用这个。我在论坛上见过太多人把两者搞混一暂停全家裸奔还以为是固件有 bug。那什么时候该用全局暂停典型场景是家人正在用的某个网站在你加了新订阅源之后挂了你需要立刻恢复可用但又不想马上删规则万一是别的原因呢。这时候按暂停先把人安抚住等有空了再慢慢查是哪条规则误伤。还有一种场景是自己调试网页某些统计脚本被拦了导致功能异常临时放开几分钟测完再关。3.2 时长怎么设才不给自己挖坑面板一般提供几个预设30 秒、5 分钟、30 分钟、1 小时以及自定义。我的经验值是这样的调试用 30 秒到 5 分钟家人报障用 30 分钟长期放行一律不用暂停。理由很实在——暂停是有状态的你按下去之后很可能就忘了等到第二天发现广告又回来了才想起来或者反过来忘了恢复导致过滤形同虚设好几天。30 分钟这个档位是我踩坑踩出来的。有次家里人反馈某个学习网站打不开我按了 5 分钟暂停跑去倒水回来时间到了自动恢复页面又挂了家里人以为我没修。后来统一用 30 分钟足够定位问题也不至于太长。如果确实需要长期放行正确做法是去规则层加白名单让这条规则永久生效并且有迹可查别依赖一个会过期的临时状态。提示如果你的固件支持“暂停到期前提醒”打开它。这个小功能救过我两次一次是差点让过滤停摆一整晚。3.3 操作路径与状态确认进面板找到全局设置或者仪表盘首页通常有个显眼的开关或者倒计时按钮。点击后选择时长确认。这时候页面上应该出现一个倒计时或者状态标签变成“已暂停”。别只看按钮颜色变化去查询日志里随便打开一个已知被拦的域名看它这次有没有被放行——放行了才算真的暂停成功。恢复有两条路等倒计时自然结束或者手动点恢复。手动恢复后同样要验证一次随便查个广告域名看它是不是又被拦了。我遇到过一次手动恢复没生效的情况原因是页面提交后浏览器缓存了旧状态实际后台已经恢复刷新一下就好。所以判断状态永远以日志和实际查询结果为准别信界面。还有一个细节值得说暂停状态在板子重启后会不会保留。不同固件行为不一样有的重启即恢复过滤有的会把暂停状态写进存储重启后继续倒计时。前者更安全后者更符合直觉。你可以在第一次用的时候故意重启一次试试心里有数免得出远门回来发现家里过滤停了一周。3.4 三个常见误解误解一暂停等于关掉板子。不是。板子还在转发只是不匹配。关掉板子才是全家断网如果路由器只下发了它一个 DNS。误解二暂停期间新加的规则不生效。也不对。规则照样能加、能保存只是暂时不参与匹配倒计时结束后立刻按新规则执行。这一点其实挺方便——你可以在暂停期间从容地改规则改完等它自动恢复不用来回切换。误解三暂停能解决所有“网站打不开”。远远不能。如果问题是上游解析服务器挂了、板子内存吃紧丢包、或者客户端压根没走板子暂停一万次也没用。判断方法很简单暂停后问题依旧就说明跟过滤无关往网络链路的其他环节查。4. 自定义域名把规则打磨成适合自己家的样子4.1 黑名单和白名单的优先级关系几乎所有这类固件都遵循同一条铁律白名单优先于黑名单。也就是说一个域名如果同时出现在两边的规则里最终结果是放行。这个设计很合理——订阅源动辄几万条你没法逐条审查误伤在所难免白名单就是你的“人工纠错通道”。理解了这个优先级很多操作就顺了。比如某个购物 App 的图片 CDN 和广告 CDN 用了同一个主域名下的不同子域订阅源把整个主域封了导致图片也挂。你不需要去删订阅源里的规则下次更新还会回来只需要把这个图片子域加进白名单它就免疫了。这也是我一贯的做法订阅源只增不删纠错全靠白名单。删规则是跟自己较劲更新一次全白干。顺带说一个容易忽略的点白名单的匹配也遵循同样的通配规则。如果你把example.com整个加进白名单它的所有子域都会放行包括那些确实是广告的子域。所以白名单要尽量写得精确能写三级域就别写二级域。4.2 通配符和精确匹配怎么写才不出错常见的写法有三种。精确匹配只写ads.example.com只拦这一个具体域名子域不管。子域通配写*.example.com拦所有子域但通常不含example.com本身。根域加通配同时写example.com和*.example.com覆盖最全。这里有个坑我踩过很多固件的通配符实现只支持前缀星号不支持中间星号也就是ads.*.example.com这种写法无效而且保存时不报错你以为加上了实际一条都没匹配。排查办法是加完规则后去日志里搜一下这个域名的查询看有没有被标记为命中。没命中就是写法不被支持。另一个坑是大小写和结尾的点。域名在 DNS 里理论上不区分大小写但个别固件的匹配是逐字节比较的写成Ads.Example.com可能就匹配不上。规范做法是一律小写结尾不要带点。还有中文域名、国际化域名这些不要在面板里直接粘中文先转成 ASCII 形式再填。表格对比一下三种写法写法匹配范围适用场景风险ads.example.com仅此一条精确定位某条广告域无最安全*.example.com所有子域整站屏蔽某个广告平台可能误伤同主域的 CDNexample.com*.example.com根域加全部子域彻底封禁误伤面最大慎用4.3 三条我实际在用的自定义规则第一条把某个图片 CDN 加白。现象是购物 App 商品图空白日志里能看到大量该 CDN 子域的查询被拦。做法是把这个子域精确加进白名单保存后清缓存验证图片立刻回来了。这条规则我用了快半年订阅源更新过十几次一直有效因为它站在白名单这一侧优先级更高。第二条把某个统计脚本域加黑。订阅源没覆盖到但它会拖慢页面加载。做法是写精确匹配不加通配因为同主域下还有正常业务域名。加完之后在日志里确认命中再刷新页面看加载时间肉眼可见地快了一截。第三条把家里某台设备的专属域名整段放行。这台设备会周期性访问自己厂商的若干子域做固件检查被拦之后会不断重试日志刷得很快。我没有逐个加白而是写了一条*.vendor-domain.example的子域通配放行一次解决。这条规则的风险是万一该主域下真有广告子域也一并放行了但设备本身不展示广告可接受。注意加完任何自定义规则第一件事是清缓存第二件事是看日志。跳过这两步你得到的任何结论都不可靠。4.4 规则数量与板子内存的那点事ESP32-C3 的片上内存不大几百 KB 的量级跑 DNS 服务、维持连接、缓存查询结果之后留给规则表的空间相当有限。家用场景下一条域名平均几十字节十万条规则压缩存储后大概要占几 MB——这已经超出片内空间了所以固件通常会把它放到外部 flash 里做索引查询时按需读取。这意味着两件事。一是规则不是越多越好。订阅源叠了五六个规则总数冲到几十万条每次查询都要多做几次 flash 读取局域网内解析延迟会从个位数毫秒涨到几十毫秒网页首屏体感变慢。二是精简比堆砌重要。我现在只保留两个订阅源一个通用广告域一个国内常见推广域加起来十来万条够用且不拖累。加自定义规则时也尽量写精确匹配别图省事写根域通配。还有个小技巧如果你的固件支持规则分组或者启用/禁用开关把不确定的规则先禁用着观察一段时间没问题再启用。这比直接删掉再重加快得多。5. 实战排障三类操作最容易踩的坑5.1 封了设备它还能上网这个现象九成不是固件的问题。按顺序排查先看日志里有没有这台设备的查询记录。有记录但没被拒说明你选的是“跳过过滤”而不是“拒绝服务”回面板改一下。有记录且被拒了但它还能上网说明它走了别的解析路径回到 2.4 节查加密 DNS 和 IPv6。完全没有记录说明它压根没走板子去路由器看 DHCP 下发的 DNS 是不是被改了或者这台设备是不是连到了别的 Wi-Fi 或者热点上。还有一个隐蔽情况设备连着 Wi-Fi 但同时开着蜂窝数据某些系统会在 Wi-Fi 解析失败时自动切到蜂窝做 DNS。这种你怎么封都封不住只能从设备端关掉“无线局域网助理”之类的功能。我遇到过一台平板就是这样查了半天以为是固件 bug。5.2 暂停到期了但过滤没恢复先手动点一次恢复看日志里广告域名是不是又被拦了。如果手动恢复有效、自动恢复无效多半是板子的时间源出了问题——倒计时依赖系统时间时间不对到期判断就乱。进面板看看时间准不准不准就配一个时间同步源或者干脆重启一次板子让它重新对时。如果手动恢复也无效那可能是页面提交失败。换个浏览器或者用无痕窗口再点一次排除前端缓存干扰。再不行就重启板子暂停状态一般存在内存里重启即清空过滤自然恢复。这也是为什么我倾向于用短时长暂停——真出问题了等一会儿或者重启一下就回到正常状态不会有长期残留。5.3 自定义规则不生效的五个原因按出现频率从高到低排写法不被支持中间通配、大小写、带结尾点、缓存没清客户端或板子自身缓存、被白名单覆盖你加的规则和某条白名单冲突、规则保存了但引擎没重载部分固件需要手动点“应用”或者重启服务、域名根本不是它你以为的广告域名和实际请求的域名不是一回事去日志里抄准确的。最后一条最坑。比如某个 App 的广告域名是ad.xxx.com而页面资源是img.xxx.com你封了前者没效果因为真正的广告是后者加载的。永远从日志里复制域名不要凭猜测填。问题速查表现象最可能原因快速验证处理封禁后设备仍上网选成了跳过过滤看日志有无拒绝标记改选项封禁后设备仍上网客户端加密 DNS日志中该 IP 零查询关闭设备端安全 DNS暂停到期未恢复板子时间不准面板显示的时间配置时间同步自定义规则无效通配写法不支持日志搜该域名改精确匹配自定义规则无效客户端缓存换设备测试清缓存过滤时灵时不灵路由器下发了备用 DNS查 DHCP 配置只下发板子地址5.4 日志怎么看才有用日志页信息量很大但别从头翻。我的习惯是三个筛选条件按 IP 筛、按“是否命中”筛、按时间倒序。先定位到出问题的那台设备再看它最近几条被拦的域名基本就能判断是正常拦截还是误伤。如果想验证某条规则直接在搜索框里敲域名片段看有没有对应记录。有个细节日志里同一个域名可能出现多次因为客户端会重试。看到连续多条相同记录说明这台设备在反复请求被拦的域通常意味着它有个功能依赖这个域值得考虑放行。反过来某条规则一条日志都没命中说明它可能是废规则可以考虑清理。6. 长期维护的几个个人习惯6.1 规则一定要能导出不管你多小心总会有把配置搞乱的时候。面板里如果有导出功能每隔一段时间导一次存到本地或者同步盘。我吃过一次亏升级固件的时候没备份升级完规则表被重置几百条自定义白名单全没了只能凭记忆一条条加回来花了两个晚上。现在我改成每次改动超过五条就导一次文件名带上日期。6.2 订阅源别贪多前面说过规则数量对性能的影响这里补充一个维护角度订阅源越多误伤来源越难定位。两个源出问题你可以逐个关掉测试六个源出问题组合爆炸排查成本直线上升。我现在固定两个一个是通用广告域覆盖大部分场景一个是本地化补充只装自己经常访问的站点相关规则。新增源之前先问自己现有两个源解决不了的场景是什么答不上来就别加。6.3 每周花五分钟看一次概览面板首页一般有个统计总查询数、拦截数、拦截比例、Top 被拦域名、Top 活跃设备。这几个数字扫一眼就知道系统健不健康。拦截比例突然从 20% 掉到 2%多半是客户端绕过了板子某台设备的查询量突然暴涨可能是它在疯狂重试被拦的域Top 被拦域名里出现你自己的常用站点那就是误伤赶紧加白。这套习惯坚持下来我现在的状态是一个月最多动两次配置其余时间它自己安安静静蹲在角落干活。真出问题的时候因为规则干净、日志清晰、备份齐全十分钟内基本都能定位到根因。最后分享一个我自己摸索出来的小技巧给面板加个浏览器书签书签名称写成“去广告-暂停”之类容易识别的短词出问题时一秒钟能点开。听起来很傻但家里人报障的时候你正在忙别的事能不能快速打开面板按暂停直接决定了这件事是“顺手解决”还是“被打断半小时”。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →