Turn it on
- Dashboard
- CLI
- First start
1
Open DNS → Forwarding
At the top, Names outside your zones has two choices.
2
Choose Recursive, from the root
The upstream list stays (and is no longer probed) for when you switch back.
3
Save
Click Save & apply. The Recursive resolver card shows the root priming, cache sizes
and the servers DNZ talks to.
Trace a name
Trace a name from the root on the Recursive resolver card (ordnz forwarding trace) resolves a
name from the root down, ignoring the caches, and lists every query: which zone, which server, how
long it took and what came back, like dig +trace. It works whatever the mode, so you can see what
recursion would do before turning it on.
Network requirements
Recursion talks to thousands of authoritative servers directly, so DNZ needs outbound UDP and TCP to port 53 anywhere (TCP for large answers). IPv6 servers are used when the host has a global IPv6 address. To check from a shell on the DNZ host:NOERROR with flags qr aa and the 13 root servers; an interceptor
answers REFUSED (or a full answer) with ra set.
How it works
- Root hints and priming (RFC 9609): the 13 root servers are built in. The first lookup asks one of them for the current root NS set, used until its TTL runs out.
- Infrastructure cache: zone cuts (name servers and glue) are kept for the NS TTL (at most a day). DNZ keeps a smoothed RTT for every server, picks the fastest of a zone’s servers (servers never asked get a chance too), and gives each try about three times its RTT (0.4 to 1.5 s). A server that times out three times in a row rests for a minute.
- Record cache: up to 100,000 RRsets with their signatures, negative answers for the SOA minimum (RFC 2308, at most an hour), and an NXDOMAIN covers every name below it (RFC 8020).
- QNAME minimisation (RFC 9156): each server only sees one label more than the zone it serves,
so the root sees
com, notwww.example.com. - Spoofing resistance (RFC 5452): a random source port and ID for every query, and 0x20 (the name in random letter case, echoed exactly). Anything a server sends outside its zone is dropped.
- EDNS with a 1232-byte buffer and the DO bit; TCP when an answer is truncated.
- CNAME and DNAME chains are followed across zones (at most 12 links).
- Lame servers (refusing, or neither answering nor referring) are skipped for that zone for 15 minutes.
- Limits: at most 100 queries and 8 seconds per client question, 30 referrals, and only 3 name servers without glue resolved per delegation (NXNSAttack).
- Locally served zones:
localhost,invalid,test,onion,home.arpaand the reverse zones of private address space are answered by DNZ itself, never sent to the root. - DNSSEC validation is on by default for recursive answers: see DNSSEC validation.
- SERVFAIL when no server of a zone answers, with an Extended DNS Error (code 22, No Reachable Authority) naming the zone.
DNSSEC validation
Reject forged answers for signed domains.
Benchmarks
DNZ against Knot, Unbound and CoreDNS.