<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Devair Fernandes</title>
    <description>The latest articles on DEV Community by Devair Fernandes (@devair_fernandes_0051b209).</description>
    <link>https://dev.to/devair_fernandes_0051b209</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4011368%2Fb37ada0f-d8d7-4476-bebc-6034a5f3de51.jpg</url>
      <title>DEV Community: Devair Fernandes</title>
      <link>https://dev.to/devair_fernandes_0051b209</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devair_fernandes_0051b209"/>
    <language>en</language>
    <item>
      <title>built a self-deploying DNS Firewall Appliance for ISPs (ISO + 3D Dashboard)</title>
      <dc:creator>Devair Fernandes</dc:creator>
      <pubDate>Sun, 05 Jul 2026 22:34:32 +0000</pubDate>
      <link>https://dev.to/devair_fernandes_0051b209/built-a-self-deploying-dns-firewall-appliance-for-isps-iso-3d-dashboard-3b36</link>
      <guid>https://dev.to/devair_fernandes_0051b209/built-a-self-deploying-dns-firewall-appliance-for-isps-iso-3d-dashboard-3b36</guid>
      <description>&lt;p&gt;If you've ever managed network infrastructure for an Internet Service Provider (ISP) or a large corporate network, you know that DNS is the Achilles' heel. A slow DNS resolver frustrates thousands of users, and a compromised one leads to massive security breaches.&lt;/p&gt;

&lt;p&gt;Most solutions out there require hours of manual Linux tuning, kernel adjustments, and painful dashboard setups. I wanted to solve this by creating something that deploys itself and optimizes its own performance based on the hardware it's running on.&lt;/p&gt;

&lt;p&gt;So, I built Sentinel DNS — an open-source, high-performance DNS Firewall appliance built on top of Rocky Linux and Unbound.&lt;/p&gt;

&lt;p&gt;Here is a look at what I built and how it works under the hood.&lt;/p&gt;

&lt;p&gt;🚀 The Core Features&lt;br&gt;
Instead of distributing just a script, I decided to remaster a full Linux ISO. The goal was to go from "bare metal" to "production-ready DNS Firewall" in less than 5 minutes, 100% offline.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Unattended Kickstart Installation&lt;br&gt;
You just boot the ISO. A custom ks.cfg (Kickstart) automatically partitions the LVM (isolating logs to prevent disk exhaustion), installs Node.js, Redis, and Unbound, and sets up the dashboard without a single keystroke from the user.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dynamic OS &amp;amp; Services Auto-Tuning&lt;br&gt;
This is the part I'm most proud of. On every boot, a startup script calculates the physical hardware (CPU cores and RAM) and automatically adjusts the system:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Linux Kernel UDP Buffers (rmem_max and rmem_default) are expanded up to 16MB to prevent UDP packet drops during heavy loads.&lt;br&gt;
Unbound Cache Slabs are calculated as a Power of 2 matching the CPU cores for lock-less memory access.&lt;br&gt;
Cache limits are dynamically scaled up to 4GB of RAM.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-Time 3D NOC Dashboard
Most DNS dashboards are boring tables. I wanted something that looked like a futuristic Network Operations Center. I used Three.js to build a holographic 3D globe that draws real-time geographic arcs connecting local clients to the global malware threats that the DNS firewall is blocking.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sentinel DNS 3D DashboardThe NOC Dashboard measuring ICMP/TCP jitter and rendering 3D threat arcs.&lt;/p&gt;

&lt;p&gt;🛡️ Security &amp;amp; Resilience&lt;br&gt;
To make it bulletproof for ISPs, I implemented several advanced DNS RFCs natively:&lt;/p&gt;

&lt;p&gt;RFC 8767 (Serve-Expired): If the global root servers go offline or suffer a DDoS attack, Sentinel continues to serve cached records for up to 24 hours.&lt;br&gt;
RFC 7706 (Hyperlocal): It runs a local copy of the root zone, meaning resolution for root servers happens in exactly 0 milliseconds.&lt;br&gt;
Cyber Threat Intelligence (CTI): An asynchronous Node.js engine processes up to 20,000 lines of Unbound logs per execution, blocking malware and Algorithmically Generated Domains (DGAs) in real-time.&lt;br&gt;
🛠️ The Tech Stack&lt;br&gt;
Base OS: Rocky Linux 9.7 (Minimal)&lt;br&gt;
DNS Engine: Unbound (with DNSSEC active by default)&lt;br&gt;
Backend: Node.js + Redis (for high-speed temporary metrics and cache persistence)&lt;br&gt;
Frontend: HTML5, Vanilla JS, CSS, and Three.js (no heavy frontend frameworks to keep the dashboard blazing fast).&lt;br&gt;
📥 Try it out&lt;br&gt;
The project is fully open-source. You can download the remastered ISO directly from the website and test it in a Virtual Machine (Proxmox, VMware, VirtualBox).&lt;/p&gt;

&lt;p&gt;Official Website: dns.sentineldns.uk&lt;br&gt;
GitHub Repository: devairfernandes/dns.sentineldns&lt;br&gt;
If you are into networking, self-hosting, or Linux administration, I’d love to hear your feedback! Have you ever built custom Linux appliances using Kickstart? Let me know in the comments.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>networking</category>
      <category>cybersecurity</category>
      <category>linux</category>
    </item>
    <item>
      <title>Stop manually tuning Unbound DNS: How I built an auto-tuning DNS Firewall</title>
      <dc:creator>Devair Fernandes</dc:creator>
      <pubDate>Wed, 01 Jul 2026 20:19:49 +0000</pubDate>
      <link>https://dev.to/devair_fernandes_0051b209/stop-manually-tuning-unbound-dns-how-i-built-an-auto-tuning-dns-firewall-2e0m</link>
      <guid>https://dev.to/devair_fernandes_0051b209/stop-manually-tuning-unbound-dns-how-i-built-an-auto-tuning-dns-firewall-2e0m</guid>
      <description>&lt;p&gt;If you've ever managed a DNS server at scale (like for an ISP or a large corporate network), you know that standard configurations don't cut it. You have to dive deep into kernel TCP/UDP buffers, slab sizes, and thread allocations.&lt;/p&gt;

&lt;p&gt;I got tired of doing this manually, so I built an open-source appliance called &lt;a href="https://dns.sentineldns.uk" rel="noopener noreferrer"&gt;Sentinel DNS&lt;/a&gt; to solve it.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;When you run &lt;code&gt;unbound&lt;/code&gt;, the default settings are meant for a small office. If you throw 10,000 queries per second (QPS) at it, it chokes. You drop packets, latency spikes, and users complain. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution: Dynamic Auto-Tuning
&lt;/h3&gt;

&lt;p&gt;In Sentinel DNS, I wrote a boot script that reads &lt;code&gt;/proc/cpuinfo&lt;/code&gt; and &lt;code&gt;/proc/meminfo&lt;/code&gt;. Instead of static config files, the system dynamically generates the Unbound configuration. &lt;/p&gt;

&lt;p&gt;If you boot the ISO on a VM with 2 vCPUs and 4GB RAM, it allocates resources accordingly. If you move it to a bare-metal server with 16 cores and 32GB RAM, the script recalculates the &lt;code&gt;msg-cache-size&lt;/code&gt;, &lt;code&gt;rrset-cache-size&lt;/code&gt;, and &lt;code&gt;num-threads&lt;/code&gt; on the next boot, maximizing performance without running out of memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zero-Cold Start
&lt;/h3&gt;

&lt;p&gt;Another big issue was cache loss during reboots. Sentinel handles this by hooking into the shutdown process, dumping the Unbound cache to the NVMe disk, and reloading it on startup. Resolution stays at 0ms.&lt;/p&gt;

&lt;p&gt;Check out the full architecture and the NOC dashboard UI we built for it here:&lt;br&gt;
🔗 &lt;strong&gt;&lt;a href="https://dns.sentineldns.uk" rel="noopener noreferrer"&gt;Sentinel DNS Official Site&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think of this approach!&lt;/p&gt;

</description>
      <category>automation</category>
      <category>networking</category>
      <category>performance</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
