DNS-блокировщик рекламы в стиле Pi-hole работает на ESP32-C3 за $2 без PSRAM, храня домены списков блокировки в виде отсортированных 40-битных хешей FNV-1a в flash-памяти. Проект, представленный на Tom's Hardware, XDA Developers и Korben, вмещает более 140 000 доменов в около 0,7 МБ flash-памяти с временем поиска около 10 мс, используя только около 50 КБ ОЗУ. В отличие от типичных ESP32-ловушек, которые загружают строки доменов в ОЗУ и требуют PSRAM, этот подход избегает давления на ОЗУ, выполняя бинарный поиск хешей непосредственно из flash-памяти. При 141k доменах коллизии хешей пренебрежимо малы (~0); при 537k доменах происходит около одной коллизии. Размер хеша 40 бит обеспечивает баланс между использованием flash-памяти и риском коллизий: 32 бита увеличивают коллизии, 64 бита тратят место. Тот же метод масштабируется на более крупные чипы, такие как ESP32-S3, вмещающие около 2,7 млн доменов в 16 МБ flash-памяти по сравнению с около 466 тыс. строк в 8 МБ PSRAM. Требования к оборудованию включают любую плату ESP32-C3 с 4 МБ flash-памяти (тестировалась на C3 Super Mini), питание через USB. Доступен печатный корпус, рекомендуется оставить пространство для антенны и вентиляцию для теплового управления. Прошивка и обновление списка блокировок осуществляются по Wi-Fi после первоначальной прошивки через USB с использованием PlatformIO. Веб-панель позволяет управлять через /ban, /addblock и т.д., защищённую WEB_USER/WEB_PASS/OTA_PASS. Этапы сборки включают копирование шаблона секретов, создание таблицы хешей списка блокировок и прошивку прошивки + файловой системы.
Источник: Hacker News · Сводку подготовил HeadlinesBriefing