DNS Server π
Paid feature. The DNS Server is gated by the
orbit_dnsflag and requires Orbit Pro or above. See Orbit Pro for the full tier matrix and upgrade flow.
Quazzarβs DNS Server embeds CoreDNSΒ as a supervised process on your node. You get three things out of the box:
- Local zones β serve private names (e.g.
router.home.local) without hairpinning through your routerβs DNS. - Curated blocklists β AdGuard-style blocking backed by a small, vetted set of community-maintained hosts lists (StevenBlack, OISD basic, URLhaus, Phishing Army).
- Live query log β every resolution shown with rcode, client IP, and duration in the Quazzar UI.
Opening the DNS page
The DNS console is not linked from the dock or the command palette in the 0.11.0 desktop, and it has no address of its own yet. Until it returns, manage the resolver through the /api/dns/* endpoints (see the Cloud OS API reference).
The console has three tabs:
- Zones β create zones and manage their A / AAAA / CNAME / MX / TXT records.
- Blocklists β flip individual lists on/off. Changes take effect on the next CoreDNS reload (automatic, via sysctl).
- Query log β newest 200 queries refresh every 5 s.
Installing CoreDNS
Quazzar does not bundle the CoreDNS binary. Install it separately:
# Debian/Ubuntu
sudo apt install coredns
# Arch
sudo pacman -S coredns
# Upstream release (any distro)
curl -sSL https://github.com/coredns/coredns/releases/latest/download/coredns_linux_amd64.tgz \
| sudo tar -xz -C /usr/local/binThe Quazzar DNS supervisor finds coredns by $PATH and manages it
through systemd (systemctl kill -s HUP coredns). On Debian/Ubuntu
the distro package ships a service unit already; on other distros you
may need to write one.
Freeing port 53
Most modern Linux distros pin systemd-resolved to 127.0.0.1:53.
Quazzarβs CoreDNS binds the same address + port by default; you need
to move resolved first:
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/quazzar.conf <<'EOF'
[Resolve]
DNSStubListener=no
EOF
sudo systemctl restart systemd-resolvedThen point /etc/resolv.conf at 127.0.0.1 so host-level lookups go
through the new CoreDNS.
Where Quazzar stores state
Everything lives under <data_dir>/dns:
<data_dir>/dns/
βββ Corefile # auto-generated from zones + options
βββ zones/
β βββ home.local.zone
βββ blocklist.hosts # concatenated enabled blocklists
βββ queries.log # CoreDNS `log` plugin output, tailed for the UIThe files are rewritten atomically on every zone / blocklist mutation;
the supervisor then asks sysctl to SIGHUP CoreDNS. Idle reconciles
(Corefile bytes unchanged) skip the SIGHUP.
Security
- All actuator calls flow through the sysctl whitelist
β
coredns.reloadis the only action the DNS Server can trigger. - Blocklist fetches run on the server with a 24 h cadence and honour each upstreamβs license (we proxy through the hosts directive, not a DNS-level redirect).
- DoH/DoT upstream is not enabled by default β forwarders go to Cloudflare + Google plaintext. The roadmap includes DoT on upgrade.
Troubleshooting
/api/dns/*returns 402 β Youβre on Community; the feature is paid. Open the dialog from the lock card to upgrade.- Queries tab is empty β CoreDNS may be down, or no clients have
pointed at the resolver yet. Check
systemctl status corednsand that the nodeβs/etc/resolv.confsends lookups through127.0.0.1. - Blocklists show 0 entries β The initial fetch failed; check outbound HTTPS to GitHub + abuse.ch from the node, and wait for the next 24 h refresh cycle or re-toggle the list.