快科技 7 月 21 日消息,埃及全栈开发者 ZedAxis 使用一块售价约 5 美元的 ESP32-C3 SuperMini 开发板,打造了一个可拦截超过 53 万个广告域名的硬件 DNS 过滤器,固件仅占用约 50KB 内存,响应延迟约 10 毫秒。
ESP32-C3 SuperMini 是一块搭载 Wi-Fi 功能的微型单片机,仅有 400KB 内存和 4MB 闪存,这个规格无法存储任何有意义的明文黑名单域名列表,数据量太大。

ZedAxis 的解决方案是对域名进行哈希压缩,先下载公开的广告拦截列表,去除重复项和注释后,将每个域名用 40 位 FNV-1a 算法哈希为一个 40 位数值,排序后写入 ESP32 的闪存。选择 40 位哈希也是经过权衡的结果,32 位碰撞率太高,64 位则浪费存储空间。

查询匹配阶段当 DNS 查询到达时,设备用相同方式对请求的域名进行哈希,然后对排好序的哈希表执行二分查找。命中则拦截请求,未命中则转发给上游 DNS 解析器。

据 ZedAxis 介绍,最终固件仅使用约 50KB RAM 内存,拦截响应耗时约 10 毫秒。
设计中还有一个巧妙的取舍,ESP32 通常会保留两份完整固件用于 OTA 无线更新,以防刷写失败导致设备变砖。如果放弃 OTA 功能,就可以将第二份固件分区腾出来存放黑名单数据库。保留 OTA 时项目最多支持约 25 万个域名,放弃 OTA 后容量直接翻倍到约 53.7 万个。

供电方式也很有意思,ZedAxis 直接从 ISP 提供的华为 OptiXstar 光猫背面的 USB 口取电,USB 连接不传输任何数据,纯粹就是路由器提供 5V 供电。且所有网络通信都通过 ESP32 集成的 Wi-Fi 模块完成,设备体积小到几乎可以藏在路由器后面。
【本文结束】如需转载请务必注明出处:快科技
责任编辑:黑白


登录后才可以发布评论哦
打开小程序可以发布评论哦