Un desarrollador ha conseguido meter una lista de bloqueo de 537.000 dominios dentro de un microcontrolador ESP32-C3 que cuesta apenas cinco dólares, plantando cara a soluciones mucho más caras y voluminosas como Pi-hole. El proyecto, bautizado esp32-c3-adblock y publicado en GitHub, demuestra que no hace falta una Raspberry Pi ni un mini PC para levantar un sumidero DNS capaz de filtrar publicidad y rastreadores en toda una red doméstica. La gracia del asunto está en cómo se las ingenia el firmware para exprimir un chip con apenas unos cientos de kilobytes de memoria RAM disponible, algo que hasta ahora parecía territorio exclusivo de equipos con muchos más recursos. El resultado es un aparato del tamaño de un pendrive USB que responde a las consultas bloqueadas en unos 10 milisegundos, sin necesidad de memoria PSRAM adicional ni de sacrificar apenas presupuesto.

Cómo cabe media España de dominios en un chip tan pequeño

El truco central del proyecto no es tanto de hardware como de estructura de datos. En lugar de guardar las cadenas de texto completas de cada dominio bloqueado —que es lo que hacen la mayoría de sumideros DNS para ESP32 y por lo que necesitan chips con PSRAM—, el firmware convierte cada nombre de dominio en un hash FNV-1a de 40 bits, es decir, cinco bytes fijos por entrada. Esos hashes se almacenan ya ordenados en la memoria flash del chip y se localizan mediante búsqueda binaria, un método que permite resolver una consulta entre cientos de miles de registros en un puñado de comparaciones. Según la documentación del proyecto, con esta técnica 140.000 dominios ocupan apenas 0,7 MB de flash y se consultan en unos 10 milisegundos utilizando solo unos 50 KB de RAM, una cifra ridícula si se compara con los 60 MB de RAM que puede necesitar un servidor dnsmasq tradicional para manejar listas de un tamaño similar, tal y como recoge un análisis independiente sobre bloqueo de anuncios en routers Mikrotik.

La elección de 40 bits para el hash no es casual, sino un cálculo deliberado de compromiso. El autor explica que ese tamaño es el punto óptimo dado el presupuesto de flash disponible: las colisiones siguen la conocida paradoja del cumpleaños, de manera que con 141.000 dominios la probabilidad de colisión es prácticamente nula, mientras que al escalar hasta los 537.000 dominios de la lista más agresiva aparece, de media, solo una colisión, es decir, un único dominio que terminaría bloqueado por error. Reducir el hash a 32 bits ahorraría un 20% de espacio en flash, pero dispararía las colisiones hasta unas siete con 250.000 dominios; subir a 64 bits, por el contrario, malgastaría tres bytes por entrada para resolver un problema que en la práctica no existe. Es una decisión de ingeniería muy pragmática, y probablemente uno de los aspectos más interesantes del proyecto para cualquiera que trabaje con sistemas embebidos de recursos limitados.

El funcionamiento del sumidero DNS paso a paso

El flujo de trabajo del dispositivo es sencillo de entender aunque técnicamente esté muy afinado. Cuando llega una consulta DNS, el firmware extrae el nombre de dominio solicitado y calcula su hash, comprobando también los sufijos de dominio padre para poder bloquear subdominios sin necesidad de listarlos uno a uno. Ese hash se busca en la tabla ordenada guardada en flash mediante búsqueda binaria; si hay coincidencia, el dispositivo responde directamente con la dirección 0.0.0.0, cortando la petición sin más trámite. Si no hay coincidencia, la consulta se reenvía a un resolutor DNS ascendente y la respuesta se retransmite al cliente original tal cual llega. Todo el proceso, desde que entra la consulta hasta que se devuelve la respuesta bloqueada, se completa en el rango de los 10 milisegundos mencionados, una latencia perfectamente aceptable para uso doméstico y que no debería notarse al navegar.

El propio autor ofrece dos configuraciones según el tipo de memoria flash del módulo empleado. En un chip de 4 MB, si se quiere reservar espacio para actualizaciones de firmware por aire (OTA), quedan disponibles alrededor de 1,3 MB para la lista de bloqueo, lo que limita el catálogo a unos 250.000 dominios como máximo. La lista «definitiva» de 537.000 dominios solo cabe si se renuncia a la partición doble necesaria para el OTA y se usa una única partición de aplicación, algo que cada usuario puede ajustar editando el archivo partitions.csv del proyecto. Para comprobar que todo funciona basta con apuntar el DNS de cualquier dispositivo a la IP del ESP32-C3, o añadirlo como resolutor secundario detrás del DNS principal de la red, y lanzar una consulta de prueba contra un dominio publicitario conocido para verificar que la respuesta vuelve como 0.0.0.0.

Por qué elegir un ESP32-C3 en lugar de un Pi-hole tradicional

Aquí es donde entra en juego el producto protagonista de la historia: el ESP32-C3, una variante económica de la familia ESP32 diseñada por Espressif Systems, equipada con un núcleo RISC-V de un solo procesador y pensada precisamente para proyectos de bajo coste y bajo consumo. Frente a un Pi-hole ejecutándose en una Raspberry Pi 4 o 5, que exige una fuente de alimentación dedicada, una tarjeta SD o almacenamiento USB y un consumo eléctrico constante de varios vatios, el ESP32-C3 apenas necesita una fracción de esa energía y su coste de adquisición ronda entre los dos y los ocho dólares según el módulo concreto y el vendedor. Como señalaba recientemente un análisis publicado en XDA Developers, montar Pi-hole para bloquear anuncios en casa es en muchos casos como cazar una mosca a cañonazos, y una placa mucho más pequeña puede cumplir sobradamente la misma función con un coste y una huella energética muchísimo menores. Este proyecto concreto no es el primero que intenta portar la idea de un sumidero DNS a un ESP32 —existen alternativas previas como Esper o ESP32_AdBlocker—, pero sí destaca por la eficiencia con la que gestiona listas de bloqueo verdaderamente grandes sin depender de memoria adicional, algo que hasta ahora obligaba a recurrir a chips con PSRAM más caros.

Conviene matizar que un dispositivo de estas características no sustituye punto por punto todas las funciones de un Pi-hole completo, que suele incluir un panel web más elaborado, estadísticas detalladas de consultas y una comunidad de soporte mucho más extensa. Aun así, para quien solo busca un bloqueador de anuncios eficaz a nivel de red, sin complicaciones y con un gasto mínimo, este tipo de soluciones basadas en microcontroladores empiezan a resultar muy atractivas, sobre todo en entornos con recursos limitados o en instalaciones donde el consumo energético y el tamaño físico son factores determinantes.

Reflexiones finales

Lo más llamativo de este proyecto no es tanto que exista un bloqueador de anuncios barato basado en ESP32 —hay varios desde hace años—, sino la elegancia de la solución técnica empleada para resolver un problema muy concreto de restricción de memoria. Convertir un problema de almacenamiento de texto en un problema de hashing con búsqueda binaria es una lección de ingeniería aplicable mucho más allá del bloqueo de publicidad, y demuestra que con un diseño cuidadoso incluso el hardware más modesto puede rendir a un nivel sorprendente. También deja patente que el ecosistema de proyectos de código abierto en torno a microcontroladores baratos sigue muy vivo, y que cada vez es más habitual ver soluciones caseras que igualan o superan en eficiencia a herramientas comerciales mucho más conocidas. Habrá que ver si en el futuro este enfoque de hashing de dominios se adopta también en otros proyectos similares, o si incluso terminan integrándose funciones de estadísticas y panel web sin comprometer el bajísimo consumo de memoria que hace tan interesante a esta propuesta.

58
Suscribirse
Notificación
0 Comments
0
¡Aquí puedes dejar tus comentarios!x