Bloquear publicidad en varios dispositivos de una casa normalmente implica instalar extensiones en cada navegador o montar soluciones como Pi-hole en una Raspberry Pi. Sin embargo, un proyecto open source demuestra que algo parecido puede ejecutarse en un diminuto ESP32-C3 que cuesta apenas unos pocos dólares.
El proyecto, denominado esp32-c3-adblock, utiliza una placa ESP32-C3 como un pequeño DNS sinkhole. En lugar de bloquear anuncios directamente dentro del navegador, analiza las consultas DNS realizadas por los dispositivos y compara los dominios solicitados contra una lista de direcciones conocidas por servir publicidad o realizar seguimiento.
Cuando encuentra una coincidencia, el sistema responde con una dirección vacía como 0.0.0.0, evitando que el dispositivo pueda conectarse al dominio publicitario. Las consultas legítimas simplemente se envían hacia un servidor DNS externo.
¿Cómo cabe todo eso en un ESP32?
Aquí está precisamente lo interesante del proyecto.
El ESP32-C3 dispone de recursos extremadamente limitados comparado con una Raspberry Pi. Para evitar guardar cientos de miles de nombres de dominio completos en memoria, el desarrollador almacena representaciones hash FNV-1a de 40 bits ordenadas dentro de la memoria flash.
Esto permite realizar búsquedas binarias extremadamente compactas. El proyecto original indica que puede trabajar utilizando alrededor de 50 KB de RAM y resolver determinadas búsquedas bloqueadas en aproximadamente 10 milisegundos.
Dependiendo de cómo se configure la memoria del dispositivo, el sistema puede manejar listas considerablemente grandes. Algunas configuraciones llegan hasta aproximadamente 537.000 dominios, aunque existen compromisos entre el espacio destinado a las listas y funciones como las actualizaciones OTA del firmware.
Puede esconderse literalmente detrás del router
Una de las demostraciones que hizo popular al proyecto utilizaba el propio puerto USB del router para alimentar el ESP32-C3.
El USB únicamente proporciona energía. La comunicación del dispositivo con la red se realiza mediante el Wi-Fi integrado del ESP32. Después puede configurarse su dirección IP como servidor DNS de los dispositivos o desde el DHCP del router para que varios equipos de la red lo utilicen automáticamente.
El proyecto también incorpora actualmente funciones como panel web, configuración Wi-Fi, actualización de listas, mDNS y actualizaciones OTA, según la versión y configuración instalada. GitHub
No sustituye completamente a Pi-hole
Hay que tener en cuenta una limitación importante: estamos hablando de bloqueo por DNS.
Esto significa que puede bloquear conexiones hacia dominios conocidos de publicidad, telemetría y rastreo, pero no puede eliminar cualquier anuncio existente en Internet. Servicios donde publicidad y contenido se sirven desde los mismos dominios pueden evitar este tipo de filtrado.
También existen dispositivos y aplicaciones que utilizan DNS cifrado o servidores DNS propios, lo que puede reducir la efectividad del sistema.
Por tanto, el ESP32-C3 AdBlock tiene más sentido como una alternativa extremadamente económica o como servidor DNS secundario de respaldo, que fue precisamente uno de los usos planteados originalmente por su desarrollador.
Lo interesante no es únicamente bloquear publicidad: el proyecto demuestra hasta dónde puede llevarse un microcontrolador de unos pocos dólares utilizando estructuras de datos optimizadas.
El código está publicado bajo licencia MIT, por lo que cualquier desarrollador puede estudiarlo, modificarlo o experimentar con él.