Cómo reducir un bloqueador de anuncios al tamaño de una memoria USB sin perder rendimiento

Un desarrollador egipcio, ZedAxis, montó en el microcontrolador ESP32-C3 un filtro de publicidad que bloquea más de 537 mil dominios y cuesta alrededor de $5.
El dispositivo funciona como servidor de nombres secundario para la red doméstica. La filtración principal la realiza Pi-hole en el ordenador de placa única Raspberry Pi del desarrollador, y la placa minúscula lo sustituye durante reinicios o desconexiones. Gracias a este esquema, los dispositivos domésticos no cambian a un servidor normal sin bloqueo de publicidad.
El ESP32-C3 dispone de sólo 400 KB de RAM y 4 MB de memoria flash, por lo que guardar cientos de miles de direcciones en texto plano es imposible. El desarrollador decidió no almacenar los dominios sino sus huellas digitales cortas de 40 bits. Una versión de 32 bits produciría demasiadas colisiones, y los valores de 64 bits ocuparían espacio innecesario.
Antes de cargar la base, el programa descarga listas de bloqueo públicas, elimina comentarios y entradas duplicadas, y luego convierte cada dominio en una huella digital. Los valores resultantes se ordenan y se escriben en la memoria flash de la placa. Cuando llega una petición a la red, el ESP32 procesa la dirección del sitio de la misma manera y busca una coincidencia en la base. Si el dominio se encuentra, se bloquea; las demás peticiones se redirigen a un servidor externo.
Según ZedAxis, el programa ocupa alrededor de 50 KB de RAM, y la respuesta a una petición a un dominio bloqueado tarda aproximadamente 10 milisegundos. En la placa también funciona un panel de control sencillo donde se pueden ver las estadísticas y añadir direcciones propias a la lista de bloqueo.
La cantidad de dominios depende del esquema de particionado de la memoria. Normalmente el ESP32 guarda dos copias del programa para instalar actualizaciones inalámbricas de forma segura. Si se mantiene esa posibilidad, la base contiene alrededor de 250 mil direcciones. Si se renuncia a las actualizaciones inalámbricas y se dedica la segunda partición a la lista de bloqueo, la capacidad aumenta hasta aproximadamente 537 mil dominios.
El proyecto no reemplaza a sistemas completos como Pi-hole o AdGuard Home. El filtro de tamaño reducido no registra un historial detallado de peticiones, no muestra estadísticas por dispositivo y ofrece solo ajustes básicos. En cambio, la placa consume unas decenas de miliamperios y puede funcionar de forma continua como filtro de red de respaldo.
ZedAxis conectó el dispositivo al puerto USB del router óptico doméstico Huawei OptiXstar. El puerto solo suministra alimentación, y el intercambio de datos se realiza a través del módulo Wi-Fi integrado. Como resultado, el pequeño filtro queda casi completamente oculto detrás del router y sigue bloqueando la publicidad incluso cuando el servidor principal se desconecta temporalmente.