Resolution
How Labyrinth turns a name into a validated answer. Recursive only — it never serves zones of its own; it navigates root, TLD and authoritative servers, and caches what it learns.
The iterative walk
A query for example.com travels:
- The client asks Labyrinth on
:53(UDP or TCP — or DoT/DoH). - The blocklist is consulted first; a match is refused without touching the network.
- The cache is checked per shard. A hit answers in microseconds.
- On a miss, Labyrinth walks the delegation chain — root, then the .com TLD, then the authoritative server for the zone — following referrals at each level.
- The answer and its signatures are validated against the DNSSEC chain before anything is returned.
The landing page renders this as an interactive trace: blocklist, cache, QNAME-minimised referrals, the RRSIG verdict, and the reply with the AD bit set — about 34 ms cold on a typical lookup.
QNAME minimisation (RFC 9156)
At each level Labyrinth sends only the part of the name that level needs to
answer — the root is asked for com, the TLD for example.com. Less of the
query leaks to intermediate servers.
DNSSEC at every step
Validation runs from the root KSK down: trust anchors, DS records at each delegation, RRSIGs on the answers. The AD bit is set only for answers that validate (RFC 4035 §3.2.2), DNSSEC records are stripped for non-DO clients (§3.2.1), and the CD bit is honoured on forwarding (RFC 6840 §5.9).
Aggressive NSEC / NSEC3 (RFC 8198)
Negative answers are not just cached — they are synthesized. From a cached NSEC or NSEC3 proof, Labyrinth answers NXDOMAIN (§5.2) and NODATA (§5.4) for any name the proof covers, without asking anyone again.
Source: the project README. See also: Caching, Wire protocol.