Repolode
M-Abozaid

M-Abozaid/esp32-c3-adblock

DNS-блокировщик рекламы в стиле Pi-hole для ESP32-C3 за $2: хранит хеши блок-листа во flash-памяти и не требует PSRAM.

Open source альтернатива:Pi-hole

Звёзды
3,519
Форки
395
Открытые issues
34
Последний коммит
вчера

Что это?

esp32-c3-adblock превращает компактную плату на базе микроконтроллера ESP32-C3 в сетевой DNS sinkhole. Устройства в вашей сети направляют DNS-запросы на плату: она отвечает 0.0.0.0 для заблокированных доменов, а остальные запросы пересылает вышестоящему резолверу.

Основная идея — хранить каждый заблокированный домен во flash-памяти в виде отсортированного 40-битного хеша FNV-1a и искать его в таблице бинарным поиском. Благодаря этому блок-лист не занимает RAM: прошивке требуется около 50 КБ RAM, и она работает без PSRAM. По данным проекта, в примерно 0,7 МБ flash-памяти помещается около 141 тыс. доменов, а с увеличенным списком — около 537 тыс.

На плате работает веб-панель со статистикой блокировок для каждого клиента, пользовательскими списками блокировки и разрешений, а также обновлением блок-листов и прошивки по WiFi. Блок-листы собираются Python-скриптом из hosts-файлов, обычных списков доменов или правил в стиле AdGuard.

Ключевые возможности

  • 01Отвечает 0.0.0.0 на DNS-запросы по UDP для заблокированных доменов, остальные запросы пересылает вышестоящему резолверу.
  • 02Хранит блок-лист во flash-памяти в виде 40-битных хешей, используя около 50 КБ RAM и не требуя PSRAM.
  • 03Веб-панель со статистикой блокировок для каждого клиента и пользовательскими списками блокировки и разрешений.
  • 04Обновление прошивки и блок-листов по воздуху, а также запланированная загрузка блок-листов с удалённого источника.
  • 05Настройка WiFi через captive portal и обнаружение по mDNS-адресу c3adblock.local.
  • 06Сборщик блок-листов поддерживает hosts-файлы, обычные списки доменов и базовые правила AdGuard.

Сценарии использования

  • Добавить блокировку рекламы и трекеров во всей домашней сети через роутер, не покупая Raspberry Pi.
  • Запустить маломощный дополнительный DNS-резолвер, который блокирует домены за основным DNS-сервером.
  • Экспериментировать с фильтрацией DNS на недорогой плате ESP32-C3.

Быстрый старт

  1. 1

    Скопируйте шаблон secrets и укажите в нём учётные данные для Wi-Fi и панели управления

    cp src/secrets.example.h src/secrets.h
  2. 2

    Соберите хеш-таблицу списка блокировки

    python3 tools/build_blocklist.py data/blocklist.bin
  3. 3

    Прошейте ESP32-C3 через USB

    pio run -t upload
  4. 4

    Прошейте файловую систему списка блокировки через USB

    pio run -t uploadfs

Что важно знать

  • Требуется актуальная версия PlatformIO; старая версия из пакета apt не собирает проект.
  • При объёме флеш-памяти 4 МБ обновления прошивки по OTA ограничивают список блокировки примерно 250 тысячами доменов.
  • Пароли панели управления и OTA необходимо задать в secrets.h, иначе устройство загрузится с общедоступными учётными данными по умолчанию.
  • Трафик передаётся по незашифрованному HTTP с Basic Auth и поэтому не шифруется в локальной сети.

В подборках

Темы

Частые вопросы

Что такое esp32-c3-adblock?
DNS-блокировщик рекламы в стиле Pi-hole для ESP32-C3 за $2: хранит хеши блок-листа во flash-памяти и не требует PSRAM. esp32-c3-adblock превращает компактную плату на базе микроконтроллера ESP32-C3 в сетевой DNS sinkhole. Устройства в вашей сети направляют DNS-запросы на плату: она отвечает 0.0.0.0 для заблокированных доменов, а остальные запросы пересылает вышестоящему резолверу.
esp32-c3-adblock можно использовать бесплатно? Какая у него лицензия?
esp32-c3-adblock распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
esp32-c3-adblock всё ещё поддерживается?
Активно поддерживается. Последний коммит в esp32-c3-adblock — 6 нояб. 2026 г..
Для чего можно использовать esp32-c3-adblock?
Добавить блокировку рекламы и трекеров во всей домашней сети через роутер, не покупая Raspberry Pi. Запустить маломощный дополнительный DNS-резолвер, который блокирует домены за основным DNS-сервером. Экспериментировать с фильтрацией DNS на недорогой плате ESP32-C3.
Как установить esp32-c3-adblock?
Скопируйте шаблон secrets и укажите в нём учётные данные для Wi-Fi и панели управления: cp src/secrets.example.h src/secrets.h Соберите хеш-таблицу списка блокировки: python3 tools/build_blocklist.py data/blocklist.bin Прошейте ESP32-C3 через USB: pio run -t upload Прошейте файловую систему списка блокировки через USB: pio run -t uploadfs
Где скачать esp32-c3-adblock?
Исходный код и инструкции по установке — на GitHub: https://github.com/M-Abozaid/esp32-c3-adblock

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Устройство на базе ESP32 оценивает пассажиропоток, подсчитывая находящиеся поблизости мобильные устройства с Wi-Fi и Bluetooth, и передаёт данные через LoRaWAN, MQTT или на SD-карту.

2,1 тыс.+3 за неделю457C++OtherОбновлён в прошлом месяце

Кроссплатформенный инструмент командной строки и система сборки для разработки встраиваемого ПО: управление библиотеками, поддержка разных плат и фреймворков, отладка и модульное тестирование.

9,6 тыс.+8 за неделю917PythonApache-2.0Активно поддерживаетсяОбновлён 22 дня назад

Sesame — миниатюрный робот-квадрупед с открытым исходным кодом, который можно напечатать на 3D-принтере; он работает на ESP32, оснащён OLED-лицом и ходит с помощью сервоприводов.

5 тыс.+97 за неделю684CApache-2.0Обновлён 23 дня назад

Набор DNS-блоклистов для блокировки рекламы, трекеров, телеметрии, фишинга, вредоносных доменов и мошенничества во всей сети — для любого DNS-сервера или блокировщика рекламы.

28,3 тыс.+280 за неделю861TextGPL-3.0Обновлён вчера