esp32-c3-adblock:用低成本微控制器在局域网内拦截广告域名
一分钟看懂
esp32-c3-adblock 是运行在 ESP32-C3 上的轻量 DNS 拦截器,思路类似 Pi-hole。它把广告域名转换为 40 位 FNV-1a 哈希并排序写入闪存,收到 DNS 查询时用二分查找判断是否应返回拦截结果,因此无需 PSRAM 也能处理较大的域名列表。
你可以用它做什么
- 为家庭实验网络部署低功耗 DNS 广告拦截器。
- 在 Web 仪表盘查看查询、拦截情况并管理设备。
- 按需要生成和刷入不同规模的域名黑名单。
- 研究微控制器上用闪存、哈希和二分查找实现 DNS 过滤的方法。
主要能力
- 在 4 MB 闪存、无 PSRAM 的 ESP32-C3 上运行 UDP DNS sinkhole。
- 默认列表约十万域名;官方示例显示约 14.1 万条列表占用约 0.67 MB,运行内存约 50 KB,查询约 10 毫秒。
- 提供 Web 仪表盘、设备管理和 OTA 更新支持。
- 可生成更大的约 53.7 万域名哈希列表,但空间、碰撞和更新方式会随之变化。
适合哪些人
适合熟悉 PlatformIO、ESP32 刷写和家庭网络 DNS 配置的创客与开发者。需要企业级高可用、加密管理界面、完整审计或专业支持的环境不适合直接采用它。
怎么开始使用
准备 4 MB ESP32-C3 与稳定 USB 供电,在 PlatformIO 中按仓库说明配置 Wi-Fi、管理账号和 OTA 密码,先刷入固件,再生成并刷入黑名单。设备连入网络后,把路由器或终端的 DNS 指向它,并通过仪表盘检查查询是否正常。
使用前需要知道
管理界面使用 HTTP Basic Auth 而非 TLS,在不可信局域网中凭据可能被窃听;首次设置热点也不是安全边界。40 位哈希存在碰撞概率,超大列表可能误拦截域名。4 MB 设备若保留双应用分区以支持固件 OTA,可容纳的列表约为 25 万条;使用 53.7 万条单应用布局会失去固件 OTA。项目采用 MIT 许可证。