DNSentinel
Hardware- 5 Devlogs
- 11 Total hours
An ESP32-powered DNS firewall that blocks trackers and protects your network.
An ESP32-powered DNS firewall that blocks trackers and protects your network.
The -board Part 2 (okay maybe this joke is getting old) The DNSentinel dashboard is no longer just a webpage, it can now communicate with the ESP32. After separating the frontend from the firmware, the next step was creating API endpoints that allow the dashboard to request live data. The dashboard now uses JavaScript to request JSON data from the ESP32 and update the webpage without needing to reload. This also sets up the foundation for the next major feature i plan on adding: a web configuration panel where DNSentinel settings can be changed directly from the dashboard.
“The -board” get it? no? okay. DNSentinel now has a real web dashboard! The first version of the dashboard was generated directly inside my C++ code. it worked, but as the dashboard started growing it became obvious that it wasn’t the best design choice. Managing HTML inside C++ strings gets messy quickly. So i refactored it. The dashboard frontend now lives separately in LittleFS on the ESP32, allowing the firmware and webpage to be developed independently. This makes it much easier to add styling, live updates, settings, and other features in the future. Next step: building an API so the dashboard can display live DNS statistics instead of just being a static page.
DNSentinel is coming together! Im starting to really pull together the DNS logic, I think the coolest part so far was doing the IPV6 blocking logic. Next up: building a dashboard so DNSentinel can display statistics, recent queries, and system status without needing a serial monitor. Still a lot to improve, but it’s been really fun watching a small ESP32 turn into a real network appliance.
Today I worked on DNSentinel, my ESP32-S3 based DNS sinkhole. I added a response cache so DNS requests can be answered locally instead of always forwarding upstream. I also implemented cache expiration using DNS TTL values, meaning the cache now follows the rules used by real DNS resolvers. Along the way I debugged DNS packet behavior, learned more about DNS records, and improved the modular structure of the project.
Today I migrated DNSentinel from the Arduino IDE to PlatformIO, fixed ESP32-S3 board configuration issues, and verified my DNS sinkhole is correctly forwarding normal requests while blocking selected domains by returning 0.0.0.0. I also started refactoring the project into modules (dns_server, dns_parser, blocklist, and wifi_manager) and added a compile-time debug logging system to make the codebase easier to maintain.