esp32-c3-adblock 如何三步跑起来:ESP32-C3 上的 DNS 广告拦截器完整指南

发布时间:2026/10/20 10:37:51
esp32-c3-adblock 如何三步跑起来:ESP32-C3 上的 DNS 广告拦截器完整指南
esp32-c3-adblock 如何三步跑起来ESP32-C3 上的 DNS 广告拦截器完整指南【免费下载链接】esp32-c3-adblockPi-hole-class DNS ad-blocker on a $2 ESP32-C3 (no PSRAM): 537k domains as 40-bit FNV-1a hashes in flash, binary-searched. UDP DNS sinkhole web dashboard. https://youtube.com/shorts/RaxszOUMi8E?featureshare项目地址: https://gitcode.com/GitHub_Trending/es/esp32-c3-adblockesp32-c3-adblock 是一款运行在 2 美元 ESP32-C3 上的 Pi-hole 式DNS 广告拦截器它把数十万条域名做成 40 位 FNV-1a 哈希存进闪存查询时二分匹配。读完全文你能完成固件烧录、把设备接入家庭网络并独立掌握封禁设备、暂停拦截、自定义域名三件日常操作。它适合谁、什么场景用家庭或小型办公室局域网需要全网过滤广告又不想买树莓派、不想跑一台常开的服务器。出差或多网络用户C3 插路由器 USB 口即用路由器直接供电一台设备管一个网络。想自组 DNS 网关的折腾党2 美元主板起步固件与黑名单都留了 OTA 升级通道。三步跑起来准备硬件一块 ESP32-C3C3 SuperMini 即可4MB 闪存无需 PSRAM用路由器的 USB 口或手机充电器供电电源不稳会导致 WiFi 发射时掉线。获取代码、设好凭据git clone https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock cd esp32-c3-adblock cp src/secrets.example.h src/secrets.h打开secrets.h把WEB_USER / WEB_PASS / OTA_PASS填成真实值——它们把关所有状态变更接口WIFI_SSID / WIFI_PASS可留占位符首次通电走配置页。构建并烧录黑名单python3 tools/build_blocklist.py data/blocklist.bin pio run -t upload pio run -t uploadfs默认列表为 StevenBlack base Hagezi Light约10 万条uploadfs把哈希表写进设备 LittleFS。 4.首次通电连网用普通凭据启动会看到开放热点C3-AdBlock-XXXX手机连入后在弹出的配置页选择家里 WiFi、输入密码设备自动重启并入网。 5.打开控制台浏览器访问http://c3adblock.local深色主题实时仪表盘每3 秒自动刷新。 6.验证拦截任一台机器执行dig 设备IP doubleclick.net返回0.0.0.0即为命中dig 设备IP github.com应返回真实 IP。核心功能逐个上手一键封禁设备把它隔离出广告某台设备广告查询异常偏高或你想直接把某个 IP 彻底掐断时直接在仪表盘的客户端表格里操作不用碰命令行。打开c3adblock.local在客户端表格定位目标行每行显示IP、MAC、Blocked、Allowed按总查询量降序排列广告大户排在最上面。点击该行Ban按钮前端发出/ban?ip...设备立刻被打上BANNED标记。该 IP 之后的所有DNS 查询都会收到0.0.0.0等效于断网。恢复放行在同一行再点一次Unban即可。要点与上限封禁名单最多32条MAX_BAN重启后也只持久化前 32 条客户端表格最多同时跟踪96台设备MAX_CLIENTS超出不再记录被封设备全部查询按命中处理非 A 记录也返回空应答。源码参考src/main.cpp、src/page.h临时暂停 DNS 拦截到点自动恢复某个工具被误判拦截、想临时放行排查时用暂停而不是删域名或重启设备。在仪表盘顶部拦截状态条里从时长下拉框选一个档位。点击Pause前端调用/pause?s秒数状态条变为 ⏸️ Paused — resumes in Xs。暂停期间查询原样转发上游 DNS默认 Quad99.9.9.9不再拦截放行计数照常累加。到点自动恢复不想等就点Resume调用/resume立即回到拦截状态。要点与上限时长仅 4 档30 秒 / 5 分钟 / 30 分钟 / 直到我手动开启数值0即无限期暂停状态不持久化设备重启后拦截默认恢复开启。源码参考src/main.cpp、src/page.h自定义拦截域名父域名带出全部子域黑名单按周更新新出现的广告或追踪域名可能还没收录——在仪表盘里加一行就能把它连同所有子域名一起拦掉。在CUSTOM BLOCKED DOMAINS输入框填入域名例如ads.example.com。点击Block domain前端调用/addblock?d...后端自动去重、去掉www.、转小写并做哈希。立即生效该域名及其所有子域名都收到0.0.0.0父级后缀匹配。要移除点列表行的remove前端调用/unblock?d...域名从名单删掉。要点与上限自定义名单最多200条MAX_CUSTOM超出直接忽略只接受包含至少一个点的域名重复添加会被忽略名单持久化在/custom.txt重启读回不丢。源码参考src/main.cpp、src/main.cpp上限与持久化速查功能控制台入口接口或文件上限是否持久化封禁设备客户端表Ban按钮/ban?ip/banned.txt封禁32条客户端表96台是暂停拦截顶部Pause 时长下拉/pause?s//resume30s/300s/1800s/0无限期否重启恢复拦截自定义域名输入框 Block domain/addblock?d//unblock?d/custom.txt200条是黑名单上传Blocklist →Upload blocklist/upload双 OTA 分区约25 万条单分区53.7 万条是远程自动更新Remote auto-updateURL 间隔/setupdate//fetchnow/update.cfg间隔最小1小时是固件 OTAFirmware →Flash firmware/update校验通过后自动重启是在闪存WiFi 重置Forget WiFi按钮/forgetwifi—否重启进配置页排错仪表盘顶部出现 Default credentials in use ⚠️ →secrets.h里WEB_PASS / OTA_PASS仍是占位值CHANGE_ME_*→ 填入真实值重新编译烧录。点Ban / Block domain没反应直接访问接口返回 403 → 状态变更接口除 HTTP 基础认证外还要求X-Requested-With: c3-adblock请求头裸链接会被拒 → 在登录弹窗输入WEB_USER / WEB_PASS用仪表盘按钮操作不要手敲 URL。打不开 c3adblock.local只看到C3-AdBlock-XXXX热点 → 设备没有可用的 WiFi 凭据或连接失败 → 手机连入该热点完成配置通电时按住BOOT键也能清掉已存 WiFi 重进配置页。上传黑名单被拒提示 size not a multiple of 5 → 上传的不是合法哈希表文件必须是 5 字节整数倍→ 用python3 tools/build_blocklist.py重新生成blocklist.bin再上传。收尾esp32-c3-adblock 用 2 美元硬件做全了 Pi-hole 最常用的封禁、暂停、自定义域名三件事改动全部写进闪存不用重烧。哈希表构建、碰撞率与分区取舍的细节见 README.md完整 DNS 处理与 Web 接口逻辑在 src/main.cpp。【免费下载链接】esp32-c3-adblockPi-hole-class DNS ad-blocker on a $2 ESP32-C3 (no PSRAM): 537k domains as 40-bit FNV-1a hashes in flash, binary-searched. UDP DNS sinkhole web dashboard. https://youtube.com/shorts/RaxszOUMi8E?featureshare项目地址: https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考