Features Compare FAQ Docs GitHub ↗
Open Source · Raspberry Pi 3B · ~25 MB RAM

Privacy-First DNS
for Your Network

A lightweight, high-performance DNS server built for Raspberry Pi 3B. Blocks ads, manages authoritative zones, syncs across nodes — all in ~25 MB RAM.

~25 MB RAM usage
220k+ Blocked domains
O(1) Blocklist lookup
< 1 ms Query latency
Why DomU DNS

Built because the alternatives weren't enough

Every existing DNS blocker was either too heavy for a Raspberry Pi 3B, or lacked the features needed for a proper home network.

🔴

PiHole

Great at blocking ads, but dnsmasq underneath uses 80+ MB RAM, has no authoritative zone support, and integrating DHCP DDNS requires complex workarounds.

🟡

AdGuard Home

Polished UI and good blocking, but 120+ MB RAM footprint, no authoritative DNS, no zone transfers, and no native DDNS support.

🟡

Technitium

Feature-complete DNS server, but runs on .NET (150–200+ MB RAM) — too heavy for Raspberry Pi 3B. Requires the .NET runtime as a separate dependency and a considerably more complex initial setup.

DomU DNS

Single Go binary, ~25 MB RAM, full authoritative DNS, RFC 2136 DDNS, Split-Horizon, Master/Slave cluster — no database, just JSON files.

Comparison

Feature by Feature

How DomU DNS stacks up against the most popular alternatives on Raspberry Pi 3B.

Feature DomU DNS PiHole AdGuard Technitium
RAM on Pi 3B ~25 MB 80–160 MB 50–130 MB 200 MB+
Authoritative DNS
RFC 2136 DDNS
Split-Horizon DNS Via App
Zone Transfer AXFR
Master/Slave Cluster
DoH + DoT Partial
DNS Rebinding Protection
No database required
Built-in Dashboard
Let's Encrypt DNS-01 Partial
Runtime Go binary C / FTL + dnsmasq Go .NET runtime
TSIG Authentication
DNSSEC Signing
LRU Cache + Warming
Zone Import / Export Partial
Client-Group Policies Partial Partial
All Features

Everything you need, nothing you don't

Built specifically for resource-constrained hardware without sacrificing functionality.

🛡️

Ad & Tracker Blocking

220k+ domains from curated sources. O(1) hash lookup, wildcard and regex support.

🌐

Authoritative DNS Zones

Full support for A, AAAA, MX, CNAME, PTR, TXT, SRV, CAA, NS records. JSON file backend.

🔄

RFC 2136 DDNS

ISC dhcpd / Kea DHCP integration via TSIG-authenticated DNS updates. Auto PTR records.

🔀

Split-Horizon DNS

Different answers for internal vs external clients. Perfect for accessing services by name.

🔗

Master/Slave Cluster

File-based sync with HMAC-SHA256 authentication. No database, just atomic JSON writes.

🔒

DoH + DoT

DNS over HTTPS (RFC 8484) and DNS over TLS (RFC 7858) with your own certificates.

🚫

DNS Rebinding Protection

Blocks external domains resolving to private IPs. Defends against SSRF attacks.

📊

Built-in Dashboard

Real-time statistics, zone management, query log, cluster status — all in one UI.

🔐

Let's Encrypt / ACME DNS-01

Built-in ACME DNS-01 provider. Manages _acme-challenge TXT records via REST API. Works with Traefik httpreq, Certbot DNS plugin, and acme.sh/Proxmox. No open port 80 required.

LRU Cache + Warming

Configurable LRU cache with TTL enforcement. Cache warming resolves your top-N domains from query history at startup — eliminating cold-start latency after every reboot.

📥

Zone Import & Export

Import zones from RFC 1035 zone files or via live AXFR transfer from any DNS server. Export any zone as a standard zone file. Merge semantics preserve unaffected records.

🗄️

Cache Management

Live cache dashboard: inspect all cached entries with remaining TTLs, delete individual entries by FQDN and type, or flush the entire cache in one click. RFC 1035-compliant TTL decrement — clients always see the correct remaining lifetime.

👥

Client-Group Policies

Assign IP ranges to named client groups and configure per-group blocklist categories (ads, malware, adult, social, gambling, tracking). Synced across the cluster. Default behavior protects all unmatched clients.

🔁

ALIAS Record Type

Transparent CNAME-like resolution at the zone apex and subdomains. Returns synthesized A/AAAA records with correct TTLs — the ALIAS record is never exposed to clients. Eliminates the CNAME-at-apex limitation.

Performance

Numbers that matter

~25 MB Total RAM on Pi 3B
220k+ Blocked Domains
< 1 ms Avg. Query Time
1 Binary No DB · no runtime
Use Cases

Built for real homelabs

From network-wide ad blocking to automated TLS certificates — use cases that actually come up in a homelab.

🏠

Network-Wide Ad Blocking

Block ads and trackers for every device on the network — phones, smart TVs, IoT. No agent, no browser extension, no per-device config.

Ad Blocking 220k+ Domains All Devices
🖥️

Local Domain Resolution

Authoritative DNS for your internal domains like nas.home.lan or media.internal. Split-Horizon serves local IPs internally and public IPs externally — no hairpin NAT.

Authoritative Zones Split-Horizon Local Domains
🔐

Let's Encrypt Automation

Automated TLS certificates for internal services — no open port 80 required. DomU DNS handles the _acme-challenge DNS record directly. Works with Traefik, Certbot, and acme.sh.

ACME DNS-01 Traefik No Port 80
📡

DHCP / DDNS Sync

Every DHCP lease becomes a DNS record automatically via RFC 2136 DDNS. Supports ISC dhcpd, Kea DHCP (OPNsense, pfSense), and Fritz!Box lease files.

RFC 2136 Kea / OPNsense Fritz!Box
🔗

High Availability Cluster

Two Raspberry Pi nodes as Master/Slave DNS. The master pushes changes automatically; clients fall back to the slave if the master goes down. Set both IPs in your DHCP server — done.

Master/Slave HMAC-SHA256 Auto Failover
🐳

Docker & Proxmox Homelab

Auto-register containers and VMs as DNS records via DDNS. Split-Horizon serves internal IPs locally. Integrates natively with Traefik, Nginx Proxy Manager, and Proxmox clusters.

Docker Proxmox Traefik
Quick Start

Up and running in under 5 minutes

No database setup. No Docker required. Just copy the binary, write a config file, start the service.

1

Build for Raspberry Pi

Cross-compile for ARMv7 on your local machine.

2

Copy to Pi & configure

Copy the binary and a minimal config file.

3

Start the service

Install the systemd service and start.

bash
# 1. Clone & build for Pi 3B (ARMv7)
git clone https://github.com/mw7101/domudns.git
cd domudns && make build-arm

# 2. Copy binary to Pi
scp build/domudns-arm pi@dns-node-1:/usr/local/bin/domudns
ssh pi@dns-node-1 "chmod +x /usr/local/bin/domudns"

# 3. Install & start service
sudo cp scripts/domudns.service /etc/systemd/system/
sudo systemctl enable --now domudns

# 4. Open dashboard
http://<pi-ip>/setup  # First-time setup wizard

Documentation

Everything you need to get DomU DNS running.

FAQ

Frequently Asked Questions

Everything you need to know about DomU DNS.

DomU DNS is a lightweight, open-source DNS server written in Go, designed for Raspberry Pi 3B. It combines ad blocking (220,000+ domains), authoritative DNS zones, RFC 2136 DDNS, Split-Horizon DNS, Let's Encrypt DNS-01, and Master/Slave clustering — all in a single binary using approximately 25 MB RAM. No database required.
Yes. DomU DNS blocks ads and trackers just like Pi-hole but adds full authoritative DNS zones, DDNS, Split-Horizon, and cluster support. It uses significantly less RAM (~25 MB vs. ~80–160 MB for Pi-hole v6) and requires no database — just plain JSON files.
Yes, natively. DomU DNS has a built-in ACME DNS-01 provider that manages _acme-challenge TXT records directly via a REST API. It integrates with Traefik (httpreq provider), Certbot (DNS plugin), and acme.sh/Proxmox. HTTP port 80 is not required.
Approximately 25 MB, even with the full 220,000+ domain blocklist loaded in memory. This makes it the most memory-efficient choice: Pi-hole uses ~80 MB, AdGuard Home ~120 MB, and Technitium ~200 MB.
Yes. DomU DNS supports a Master/Slave cluster via file-based sync with HMAC-SHA256 authentication. The master automatically pushes zone changes, blocklist updates, and config changes to the slave. Set both node IPs in your router's DHCP settings for automatic failover.
DomU DNS supports A, AAAA, CNAME, MX, TXT, PTR, SRV, NS, CAA, and SOA records. It also supports wildcard records, forward zones (FWD), and regex-based blocking. DNSSEC (DNSKEY/RRSIG) is available for signing zones.
No. DomU DNS runs on any Linux system: AMD64, ARM64, and ARMv7. It was optimized for Raspberry Pi 3B but works equally well on any home server, VPS, NAS, Docker container, or Proxmox VM.
Yes. Mount /var/lib/domudns/data as a volume to persist zones and config across container restarts. Expose port 53/udp and 53/tcp for DNS, and port 80/tcp for the dashboard and API. A docker-compose example is available in the repository.
BIND9 is powerful but requires manual zone file syntax, has no ad-blocking, no dashboard, and no GUI. Unbound is a recursive resolver only — it cannot serve authoritative zones. Many homelabs run Pi-hole + Unbound + BIND9 as three separate daemons. DomU DNS replaces all three in a single binary.