一种 Pi-hole 风格的 DNS 广告拦截器运行在无 PSRAM 的 2 美元 ESP32-C3 上,通过在闪存内存中存储排序的 40 位 FNV-1a 哈希来拦截域名。该项目登载于 Tom's Hardware、XDA Developers 和 Korben,在闪存的 ~0.7 MB 中容纳了 140,000+ 个域名,查找时间约为 10 毫秒,仅使用 ~50 KB 的 RAM。与将域名字符串加载到 RAM 并需要 PSRAM 的典型 ESP32 诱骗设备不同,这种方法通过直接从闪存中对哈希进行二分查找,避免了 RAM 压力。拥有 141k 个域名时,哈希冲突可忽略不计(约为 0);拥有 537k 个域名时,约会发生一次冲突。40 位哈希大小在闪存使用和冲突风险之间取得平衡——32 位会增加冲突,64 位则浪费空间。相同方法可扩展到更大的芯片,如 ESP32-S3,在 16 MB 闪存中可容纳约 270 万个域名,相比之下 8 MB PSRAM 中仅能容纳约 466k 个字符串。硬件要求包括任何带有 4 MB 闪存的 ESP32-C3 板(在 C3 Super Mini 上测试),通过 USB 供电。提供可打印的外壳,建议为天线留出空间和通风孔以进行热管理。固件和屏蔽列表通过 Wi-Fi 更新,在使用 PlatformIO 进行初始 USB 刷写后。Web 仪表板支持通过 /ban、/addblock 等进行管理,受 WEB_USER/WEB_PASS/OTA_PASS 保护。构建步骤包括复制 secrets 模板、构建屏蔽列表哈希表以及刷写固件 + 文件系统。
来源: Hacker News · 由HeadlinesBriefing整理摘要