
字节笔记本
2026年10月29日 · 约 4 分钟读完
50KB 内存挡 53 万个广告域名,这块 2 美元的芯片做到了
全屋去广告的标配答案通常是 Pi-hole,代价是要养一台常开的小设备。现在有人把同样的事塞进了一块 2 美元、连 PSRAM 都没有的 ESP32-C3:53.7 万个广告域名、约 50KB 内存、10 毫秒内给出判定。这个项目 3.4 千星、MIT 协议,被 Tom's Hardware、XDA 和 Korben 先后报道。实物就一个 U 盘大小,插在路由器背面的备用 USB 口上取电,不用额外供电。

一、诀窍:别把名单放进内存
市面上大多数 ESP32 去广告方案把域名黑名单以字符串形式装进 RAM,于是必须上带 PSRAM 的板子,成本翻着倍地涨。这个项目的作者抓住了所有人都忽略的一点:黑名单根本不需要待在内存里。把每个域名算成定长的 5 字节 FNV-1a 哈希,排序后存进 flash,查询时二分查找。
效果用数字说话:14.1 万个域名只占约 0.67MB flash,整个服务只用约 50KB 内存,一次判定约 10 毫秒,其中还包含 WiFi 往返,实际查找约 18 次 flash 读取。哈希碰撞遵循生日界,14.1 万域名时约等于零,53.7 万时大约 1 个,也就是一个倒霉域名会被误杀。为什么是 40 位?这是 flash 预算的甜点:降到 32 位省 20% 空间,但 25 万域名时会有约 7 次误伤;升到 64 位每个域名多花 3 字节,解决一个不存在的问题。
更妙的是这招不是 C3 的权宜之计:换 16MB flash 的 ESP32-S3,同样的哈希表能装约 270 万个域名,而字符串方案在 8MB PSRAM 里只能装 46.6 万。哈希进 flash 全面胜过字符串进 PSRAM,C3 只是把这件事变得不容置疑。

二、从烧录到日常使用
硬件没有任何特殊要求:任意 ESP32-C3 板子(作者用 C3 SuperMini 实测),4MB flash,不需要 PSRAM;经典 ESP32 也能编译。配套的 3D 打印外壳有现成 STL,打印时注意给 PCB 天线留空、散热孔别堵,板子待机温度在 45 到 55 摄氏度。
USB 烧录只有一次:PlatformIO 编译上传后,名单和固件都走 WiFi 更新。默认名单是 StevenBlack 加 Hagezi Light,约 10 万条,WhatsApp 和常用社交不受影响;自建名单支持 hosts 文件、纯域名列表和 AdGuard 规则,屏蔽条目自动连带子域名,正则和美化规则这类哈希表表达不了的会被跳过并计数。连不上网时设备会开一个配置热点,手机连上去选网络输密码即可。日常管理走 c3adblock.local 的面板,官方用 GitHub Actions 每周一重建名单发布到固定地址,贴一次就自动保持最新。有一个取舍要提前想好:4MB flash 下固件 OTA 要占双分区,名单上限约 25 万条;想上 53.7 万条的终极名单就得放弃固件 OTA。
安全上作者吃过亏后补齐了:面板的只读统计保持开放,所有改动端点都加了 HTTP Basic Auth,网络 OTA 另有独立密码,这三组凭据在编译前必须自己设置。
三、适合谁
10 毫秒的判定速度在使用中完全不可感知,DNS 拦截的天花板它也如约触及:挡得住独立广告域名,挡不住与内容同源的广告。它真正打动人的是运维成本,插上、配置、忘掉,没有常开主机、没有风扇、没有月费。对想要 Pi-hole 效果又不想为它养设备的人,这块小板子是目前最便宜的全屋答案。




