TinyDNS tinydns.org

How DNS resolves a name, and how the servers that do it are run.

Five servers, and what each was built to be good at

Five servers, and what each was built to be good at

A rack of mixed hardware with labelled shelves in a machine room
Which server is installed matters less than the decision made before it was installed: answer for a zone, or resolve on somebody else’s behalf.Photograph

BIND, NSD, Knot, Unbound, and PowerDNS solve overlapping problems with different priorities — and the differences are architectural

DNS server software converged on five names not by accident but by a long process of failure, fork, and deliberate redesign. Each of the five has a distinct origin story, and that story still determines where it is strong and where it creates work.

The original and its inheritance

BIND — the Berkeley Internet Name Daemon — is the oldest production DNS server still in wide deployment. It emerged from the University of California in the 1980s, was eventually taken over by ISC, and has been rewritten twice since. The current version, BIND 9, does both recursive resolution and authoritative service in a single process, a design that reflects the era when those jobs were not yet understood to be architecturally distinct. That flexibility is genuinely useful during an operator's first years: one package, one configuration file, and a single daemon that answers clients and also walks the delegation tree on their behalf.

The cost shows up under load. A unified code path that handles both resolution and authoritative answers means that a cache-poisoning attempt aimed at the resolver, and a zone transfer request aimed at the authoritative function, are competing for the same process, the same memory, and the same vulnerability surface. ISC has addressed specific CVEs iteratively over many years, but the underlying shape — one program, two jobs — is structural. BIND's DNSSEC support is comprehensive and was among the first implementations, which matters when you are validating a signed zone or signing one yourself. For operators who need a single server to do everything, BIND 9 remains the default choice; for operators who can separate the jobs, its unification becomes a reason to look elsewhere.

An adult engineer at an open rack door in an exchange-point facility, hand on a labelled cable
Cable labels are the only place a delegation is written down in the physical world. Where they disagree with the zone, the zone wins and nobody finds out for months.Photograph

Purpose-built for the authoritative side

NSD, developed by NLnet Labs, arrived explicitly to serve authoritative zones and nothing else. Its design is deliberately narrow: no resolver, no cache, no recursion, and a data path optimised for answering questions about zones it has loaded. NLnet Labs built NSD after observing that the combined-server model carried complexity that pure authoritative service simply did not need. The result is an implementation whose attack surface scales with the number of zone operations it handles rather than with the entire DNS feature set.

Knot DNS, built by CZ.NIC — the Czech domain registry — starts from the same authoritative-only premise but adds an ambition NSD explicitly declines: it wants to be fast under adversarial query loads. CZ.NIC operates the .cz top-level domain and needed a server that would not degrade under the kind of query floods that hit a national registry. Knot achieves this partly through a lock-free data structure for in-memory zone storage, which lets multiple threads read zone data without serialising. It also has a loadable module layer that lets operators add per-query processing logic inside the server process rather than in a separate daemon. That is a double-edged feature: it is powerful and it is something to audit.

The difference between NSD and Knot is a difference in philosophy about complexity. NSD is minimalist in the way a good hand tool is minimalist — it does the one thing well and offers no surface for a tool to slip. Knot accepts more complexity in exchange for throughput and extensibility. Which is correct depends entirely on what you are serving.

Recursion as its own discipline

Unbound, also from NLnet Labs, is the mirror of NSD: resolver-only, no authoritative function, and built around the assumption that what a resolver is really doing is a hard problem that deserves its own codebase. Unbound was designed from the start to support DNSSEC validation, not as a later addition. Its cache management is careful — negative answers, NSEC records, and the distinction between referral and authoritative data are all handled deliberately. Because it carries no authoritative state, there is no way to confuse a locally-held zone answer with a validated upstream answer, a class of bug that has caused real-world DNSSEC failures in unified-server deployments.

Unbound's configuration is more explicit than BIND's about what it will and will not accept. That explicitness is sometimes called steep; it is better understood as honest. The server forces an operator to state, in the configuration, what the trust anchors are, what the access control rules are, and what behaviour to apply for NXDOMAIN responses. That verbosity is documentation in a language the daemon can enforce.

Knot DNS, built by CZ.NIC — the Czech domain registry — starts from the same authoritative-only premise but adds an ambition NSD explicitly declines: it wants to be fast under adversarial query loads.

The database-backend design

PowerDNS occupies a different architectural space from all four above. Its authoritative server — the project ships an authoritative and a resolver as separate binaries — reads zone data from a pluggable backend: relational databases, LDAP, plain files, or custom scripts are all possible. That design exists because there are organisations whose DNS data already lives in a relational database or a provisioning system, and writing a synchronisation layer to push it into a flat zone file is engineering work that simply generates another failure mode.

The backend flexibility is real and the failure modes are also real. A database backend introduces a network path — or at least a local socket — between the query path and the zone data. If the database is slow or unavailable, the authoritative server can be slow or unavailable. The flat-file servers (NSD, Knot, BIND in authoritative mode) load zone data into memory at startup; subsequent queries touch no external system. PowerDNS trades that simplicity for integration depth, and for operations teams managing DNS as part of a larger provisioning pipeline, the trade is frequently correct.

A patch panel with numbered ports and neatly combed fibre looms
Numbered ports are a name’s last hop. Everything above them is a chain of referrals that exists only as records in other people’s zones.Photograph

What the differences mean in practice

DNSSEC validation and signing thread through all five servers in different ways. Unbound validates; Knot signs and serves signed zones, while NSD serves pre-signed zones; BIND and PowerDNS do both. The real operator question is not which server signs best in a benchmark but which one fails in the way your team will notice and understand. A lame delegation in a PowerDNS database backend has a different diagnostic path than the same failure in a flat zone file loaded by NSD. The architecture determines the failure mode, and the failure mode determines what you need to monitor.

None of these servers is new. ISC's maintenance history for BIND ↗ and NLnet Labs' published development roadmaps for Unbound and NSD ↗ show decades of accumulated decisions, each one a response to a real failure someone, somewhere, had. Learning which failure each design was built to prevent is faster than learning why one is better in the abstract — because none of them is.

A hand-annotated zone file printout on a desk beside a keyboard
The serial at the top of the file is the one line a secondary reads before deciding whether to pull anything at all.Photograph

BIND's DNSSEC support is comprehensive and was among the first implementations, which matters when you are validating a signed zone or signing one yourself.

Read next, in this section