Skip to Content

DNS Server πŸ”’

Paid feature. The DNS Server is gated by the orbit_dns flag 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:

  1. Local zones β€” serve private names (e.g. router.home.local) without hairpinning through your router’s DNS.
  2. Curated blocklists β€” AdGuard-style blocking backed by a small, vetted set of community-maintained hosts lists (StevenBlack, OISD basic, URLhaus, Phishing Army).
  3. 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/bin

The 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-resolved

Then 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 UI

The 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.reload is 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 coredns and that the node’s /etc/resolv.conf sends lookups through 127.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.