☰
esp32-c3-adblock 快速切换上游 DNS 到 1.1.1.1:10 分钟不改源码
2026/11/2 1:10:10 网站建设 项目流程

esp32-c3-adblock 快速切换上游 DNS 到 1.1.1.1:10 分钟不改源码

【免费下载链接】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?feature=share项目地址: https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock

这篇文章只解决一个问题:把 esp32-c3-adblock 默认的 9.9.9.9(Quad9)上游解析器换成 1.1.1.1 或你指定的其他解析器。改动只落在 platformio.ini 的一行编译参数里,源码一个字节都不用动。

任务目标

设备收到 DNS 查询后的流程是固定的:先对域名做哈希,在 flash 的哈希表里二分查找。命中就回 0.0.0.0,查询到此为止;未命中才把查询转发给上游解析器,再把答复回传给客户端。所以你的任务只有一个——把"未命中"那一支的目的地从 Quad9 换成新地址,拦截行为保持原样。

前提与风险

动手前确认三件事:

  1. 项目已克隆且本地能正常编译:
git clone https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock
  1. C3 已完成配网并在网内,你的电脑能打开 http://c3adblock.local 。
  2. 你所在网络能直连目标解析器的 53 端口。如果家里网络本身就出不了 1.1.1.1,换上游没有意义。

执行步骤

第 1 步:确认默认上游写在哪里

打开 src/main.cpp,看前 30 行。你应该能看到这样的定义:

#define UPSTREAM_IP 9, 9, 9, 9 // Quad9 #define UPSTREAM_PORT 53

两个宏都被#ifndef包住,意思是编译时只要传入了同名的值,就会覆盖这里的默认值。这就是官方预留的自定义入口,也是后面一切操作的基础。看完你应确认:全文件只有这一处定义默认上游。

第 2 步:platformio.ini 里加哪一行

打开 platformio.ini,找到[env:c3]段(对应 C3 开发板),在build_flags末尾追加一行:

build_flags = -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 -DUPSTREAM_IP=1, 1, 1, 1

保存后你应看到新增行排在build_flags的最后一行,且UPSTREAM_IP只出现这一次。如果上游走非标准端口,再追加一行-DUPSTREAM_PORT=5353。

第 3 步:编译并烧录

在仓库根目录执行:

pio run -t upload

烧录完成后你应看到传输结束的提示,设备自动重启。不想用 USB 也可以:编译出.pio/build/c3/firmware.bin后,打开 http://c3adblock.local 的控制台,进入 Firmware → OTA update 上传该文件,设备校验通过后自行重启进新镜像。完成后等几秒,重新打开控制台应能正常访问。

验收:dig 结果怎么读

从一台能访问 C3 的电脑执行两条命令:

命令预期结果异常时指向
dig @<c3-ip> doubleclick.net返回 0.0.0.0说明拦截链路没生效,检查 blocklist.bin 是否已刷入设备
dig @<c3-ip> github.com返回真实 IP无应答或超时,检查 C3 所在网络能否直连 1.1.1.1:53

再打开控制台,确认顶部 "Total allowed" 计数持续增长——这表示未命中的查询正在从新上游正常返回。

回退与排障

  • 回退:把参数值改回-DUPSTREAM_IP=9, 9, 9, 9,重复第 2、3 步即可。
  • 设备失联、控制台打不开:属于配网问题,与本次换上游无关。点控制台里的 Forget WiFi,或按住 BOOT 键重新进入配网流程,方法见 README.md。
  • 想更新拦截列表:用 tools/build_blocklist.py 构建blocklist.bin,从控制台 Blocklist → Upload 上传,或配置 Remote auto-update 定时自动拉取。这条链路与上游解析器完全独立。

完成度自查

  • platformio.ini 里已追加一行-DUPSTREAM_IP,且仅一处
  • 编译成功,USB 烧录或 OTA 均已完成
  • doubleclick.net 返回 0.0.0.0,github.com 返回真实 IP
  • 控制台 "Total allowed" 持续增加

【免费下载链接】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?feature=share项目地址: https://gitcode.com/GitHub_Trending/es/esp32-c3-adblock

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询