Відкритий проєкт esp32-c3-adblock пропонує зробити з компактної плати ESP32-C3 DNS-блокувальник для домашньої або невеликої офісної мережі. DNS – це служба, що перетворює назву сайту на мережеву адресу. Коли запит надходить до такого пристрою, він звіряє назву з блоклистом: для доменів реклами чи стеження повертає адресу 0.0.0.0, а решту запитів передає налаштованому DNS-серверу.
Блоклист зберігається у flash-пам’яті
Замість повних назв доменів у оперативній пам’яті прошивка зберігає у flash короткі 40-бітні хеші. Хеш тут є скороченим цифровим відбитком назви домену. Записи відсортовані, тому пристрій може швидко знайти потрібний відбиток без завантаження всього списку в пам’ять.
Автор проєкту заявляє, що список із понад 140 тисяч доменів займає близько 0,7 МБ flash-пам’яті та приблизно 50 КБ оперативної пам’яті. Це дає змогу працювати без PSRAM, тобто окремої додаткової оперативної пам’яті, яку мають не всі плати на ESP32.
Вебпанель проєкту показує дозволені й заблоковані DNS-запити для окремих пристроїв, дозволяє блокувати клієнтів мережі та додавати власні домени. Початкове підключення до Wi-Fi відбувається через сторінку налаштування, яку створює сама плата. Також заявлені автоматичне завантаження блоклистів і оновлення програмного забезпечення мережею.
Максимальний список вимикає оновлення прошивки мережею
На платі з 4 МБ flash оновлення прошивки мережею потребує двох окремих місць для її версій. За такої схеми для блоклиста лишається місткість приблизно на 250 тисяч доменів. Максимальна заявлена конфігурація на 537 тисяч записів використовує лише одне місце для прошивки, тому оновлювати її мережею вже не можна.
Більша місткість має ще один компроміс. Оскільки система порівнює скорочені відбитки, різні домени теоретично можуть мати однаковий хеш. Автор очікує приблизно одну таку колізію у режимі на 537 тисяч доменів, а це може призвести до помилкового блокування одного домену. Код проєкту, інструкції для збирання та файл корпусу для 3D-друку доступні у відкритому репозиторії.
Репозиторії, згадані в матеріалі:
