黑客将53.7万域名塞进5美元ESP32广告拦截器
速览
一位黑客巧妙地将53.7万个域名列表压缩进仅售5美元的ESP32微控制器,制作成便携式广告拦截器。该设备无需连接电脑即可在网络上拦截广告。这一创意展示了低成本硬件在网络安全领域的应用潜力。
AI 深度解读
背景
网络广告屏蔽是许多用户刚需。传统方案如 Pi-hole 或 AdGuard Home 通常运行在 Raspberry Pi 或迷你 PC 上,成本较高且功耗不低。在芯片价格飙升的背景下,能否用更便宜、更小巧的硬件实现类似功能?埃及全栈开发者 ZedAxis(GitHub 用户名 @M-Abozaid)给出了一个令人惊讶的答案:用一块售价仅 5 美元的 ESP32-C3 微控制器,就能实现一个可屏蔽超过 50 万个域名的 DNS 广告过滤备份设备。
核心内容
ZedAxis 使用一块 ESP32-C3 "SuperMini" 开发板,为家庭网络构建了一个备用 DNS 服务器,专门在主 DNS 服务器(Pi-hole)重启或不可用时提供广告屏蔽功能。ESP32-C3 是 ESP32 系列的低成本版本,仅有 400KB RAM 和 4MB 闪存,没有高端型号的 8MB PSRAM。
面对如此有限的存储空间,直接存储明文黑名单是不可行的——数据量太大。ZedAxis 采用了一种巧妙的哈希压缩技巧:在构建固件时,从公共黑名单下载域名列表,剔除重复项和注释,然后对每个域名使用 40 位 FNV-1a 哈希算法(32 位冲突太多,64 位浪费空间),生成哈希值,排序后存入 ESP32 的闪存。这样,在仅 4MB 闪存中,可以存储约 537,000 个域名的哈希表。
当 DNS 查询到达时,设备对请求的主机名进行同样的哈希计算,然后在排序哈希表中执行二分查找。如果找到匹配项,则直接阻止该请求;否则将查询转发到上游解析器。据 ZedAxis 介绍,固件运行时仅占用约 50KB RAM,处理被屏蔽的查询耗时约 10 毫秒。
此外,项目还做了一个权衡:ESP32 通常保留两倍固件空间以支持无线(OTA)更新。如果用户不需要 OTA,可以释放第二个固件分区用于存储黑名单数据库。支持 OTA 时最多可屏蔽约 25 万个域名;放弃 OTA 后,可屏蔽约 53.7 万个域名。ZedAxis 称成本为 2 美元,但实际 SuperMini 板最低约 5 美元。
该设备不是为了替代完整的 Pi-hole 或 AdGuard Home,它只有简陋的仪表盘,没有客户端统计、历史查询日志等高级功能。它的设计定位是“小保险”:安静地待在网络中,功耗仅几十毫安,当主 DNS 服务器因重启或停电消失时,客户端仍能获得过滤后的 DNS 响应,而不是退回到路由器默认的未过滤解析器。
有趣的是,ZedAxis 将整个设备供电来自 ISP 提供的华为 OptiXstar 光纤网关的 USB 端口(仅供电,不传数据),通过 ESP32 的集成 Wi-Fi 进行网络通信,设备小到几乎可以藏在路由器后面。
关键要点
- 硬件成本极低:使用 ESP32-C3 SuperMini 开发板,售价约 5 美元(甚至更低),无需额外 Raspberry Pi 或迷你 PC。
- 存储巧妙:利用 40 位 FNV-1a 哈希,将 53.7 万个域名压缩到 4MB 闪存,固件运行时仅占用约 50KB RAM。
- 处理速度可观:被屏蔽域名查询响应时间约 10 毫秒,二分查找效率高。
- 功能取舍:支持 OTA 更新时屏蔽约 25 万域名;放弃 OTA 可翻倍至 53.7 万域名。
- 定位为备用:不提供高级统计或管理界面,主 DNS 失败时自动接管,确保广告屏蔽不中断。
- 供电方式:通过 ISP 网关的 USB 端口供电,仅用 Wi-Fi 通信,无需额外电源或数据线。
意义与影响
该项目展示了在极低成本、极低功耗的微控制器上实现网络级广告屏蔽的可行性,突破了传统印象中“必须用 Linux 单板计算机”的思维定式。它并非要取代 Pi-hole 等成熟方案,而是为家庭网络提供了一种廉价、可靠的备份方案。在硬件成本敏感或功耗受限的场景(如露营、远程部署)中,这种思路具有参考价值。
此外,哈希压缩、二分查找、固件分区权衡等设计技巧,对嵌入式开发者有很好的启发。虽然普通用户可能不会自行搭建,但该项目证明了“用 5 美元芯片也能做大事”的 hacker 精神,也为未来更复杂、更智能的嵌入式网络工具提供了思路。
