xref: /freebsd/contrib/unbound/doc/requirements.txt (revision 8a384985ac088991f98ea10dda56816f137ce55e)
1b7579f77SDag-Erling SmørgravRequirements for Recursive Caching Resolver
2b7579f77SDag-Erling Smørgrav	(a.k.a. Treeshrew, Unbound-C)
3b7579f77SDag-Erling SmørgravBy W.C.A. Wijngaards, NLnet Labs, October 2006.
4b7579f77SDag-Erling Smørgrav
5b7579f77SDag-Erling SmørgravContents
6b7579f77SDag-Erling Smørgrav1. Introduction
7b7579f77SDag-Erling Smørgrav2. History
8b7579f77SDag-Erling Smørgrav3. Goals
9b7579f77SDag-Erling Smørgrav4. Non-Goals
10b7579f77SDag-Erling Smørgrav
11b7579f77SDag-Erling Smørgrav
12b7579f77SDag-Erling Smørgrav1. Introduction
13b7579f77SDag-Erling Smørgrav---------------
14b7579f77SDag-Erling SmørgravThis is the requirements document for a DNS name server and aims to
15b7579f77SDag-Erling Smørgravdocument the goals and non-goals of the project.  The DNS (the Domain
16b7579f77SDag-Erling SmørgravName System) is a global, replicated database that uses a hierarchical
17b7579f77SDag-Erling Smørgravstructure for queries.
18b7579f77SDag-Erling Smørgrav
19b7579f77SDag-Erling SmørgravData in the DNS is stored in Resource Record sets (RR sets), and has a
20b7579f77SDag-Erling Smørgravtime to live (TTL).  During this time the data can be cached.  It is
21b7579f77SDag-Erling Smørgravthus useful to cache data to speed up future lookups.  A server that
22b7579f77SDag-Erling Smørgravlooks up data in the DNS for clients and caches previous answers to
23b7579f77SDag-Erling Smørgravspeed up processing is called a caching, recursive nameserver.
24b7579f77SDag-Erling Smørgrav
25b7579f77SDag-Erling SmørgravThis project aims to develop such a nameserver in modular components, so
26b7579f77SDag-Erling Smørgravthat also DNSSEC (secure DNS) validation and stub-resolvers (that do not
27b7579f77SDag-Erling Smørgravrun as a server, but a linked into an application) are easily possible.
28b7579f77SDag-Erling Smørgrav
29b7579f77SDag-Erling SmørgravThe main components are the Validator that validates the security
30b7579f77SDag-Erling Smørgravfingerprints on data sets, the Iterator that sends queries to the
31b7579f77SDag-Erling Smørgravhierarchical DNS servers that own the data and the Cache that stores
32b7579f77SDag-Erling Smørgravdata from previous queries.  The networking and query management code
33b7579f77SDag-Erling Smørgravthen interface with the modules to perform the necessary processing.
34b7579f77SDag-Erling Smørgrav
35b7579f77SDag-Erling SmørgravIn Section 2 the origins of the Unbound project are documented. Section
36b7579f77SDag-Erling Smørgrav3 lists the goals, while Section 4 lists the explicit non-goals of the
37b7579f77SDag-Erling Smørgravproject. Section 5 discusses choices made during development.
38b7579f77SDag-Erling Smørgrav
39b7579f77SDag-Erling Smørgrav
40b7579f77SDag-Erling Smørgrav2. History
41b7579f77SDag-Erling Smørgrav----------
42b7579f77SDag-Erling SmørgravThe unbound resolver project started by Bill Manning, David Blacka, and
43b7579f77SDag-Erling SmørgravMatt Larson (from the University of California and from Verisign), that
44b7579f77SDag-Erling Smørgravcreated a Java based prototype resolver called Unbound.  The basic
45b7579f77SDag-Erling Smørgravdesign decisions of clean modules was executed.
46b7579f77SDag-Erling Smørgrav
47b7579f77SDag-Erling SmørgravThe Java prototype worked very well, with contributions from Geoff
48b7579f77SDag-Erling SmørgravSisson and Roy Arends from Nominet.  Around 2006 the idea came to create
49b7579f77SDag-Erling Smørgrava full-fledged C implementation ready for deployed use.  NLnet Labs
50b7579f77SDag-Erling Smørgravvolunteered to write this implementation.
51b7579f77SDag-Erling Smørgrav
52b7579f77SDag-Erling Smørgrav
53b7579f77SDag-Erling Smørgrav3. Goals
54b7579f77SDag-Erling Smørgrav--------
55b7579f77SDag-Erling Smørgravo A validating recursive DNS resolver.
56b7579f77SDag-Erling Smørgravo Code diversity in the DNS resolver monoculture.
57b7579f77SDag-Erling Smørgravo Drop-in replacement for BIND apart from config.
58b7579f77SDag-Erling Smørgravo DNSSEC support.
59b7579f77SDag-Erling Smørgravo Fully RFC compliant.
60b7579f77SDag-Erling Smørgravo High performance
61b7579f77SDag-Erling Smørgrav	* even with validation.
62b7579f77SDag-Erling Smørgravo Used as
63b7579f77SDag-Erling Smørgrav	* stub resolver.
64b7579f77SDag-Erling Smørgrav	* full caching name server.
65b7579f77SDag-Erling Smørgrav	* resolver library.
66b7579f77SDag-Erling Smørgravo Elegant design of validator, resolver, cache modules.
67b7579f77SDag-Erling Smørgrav	* provide the ability to pick and choose modules.
68b7579f77SDag-Erling Smørgravo Robust.
69b7579f77SDag-Erling Smørgravo In C, open source: The BSD license.
70b7579f77SDag-Erling Smørgravo Highly portable, targets include modern Unix systems, such as *BSD,
71b7579f77SDag-Erling Smørgravsolaris, linux, and maybe also the windows platform.
72b7579f77SDag-Erling Smørgravo Smallest as possible component that does the job.
73b7579f77SDag-Erling Smørgravo Stub-zones can be configured (local data or AS112 zones).
74b7579f77SDag-Erling Smørgrav
75b7579f77SDag-Erling Smørgrav
76b7579f77SDag-Erling Smørgrav4. Non-Goals
77b7579f77SDag-Erling Smørgrav------------
78b7579f77SDag-Erling Smørgravo An authoritative name server.
79b7579f77SDag-Erling Smørgravo Too many Features.
80b7579f77SDag-Erling Smørgrav
81b7579f77SDag-Erling Smørgrav
82b7579f77SDag-Erling Smørgrav5. Choices
83b7579f77SDag-Erling Smørgrav----------
84*8a384985SDag-Erling Smørgravo rfc2181 discourages duplicates RRs in RRsets. unbound does not create
85b7579f77SDag-Erling Smørgrav  duplicates, but when presented with duplicates on the wire from the
86b7579f77SDag-Erling Smørgrav  authoritative servers, does not perform duplicate removal.
87b7579f77SDag-Erling Smørgrav  It does do some rrsig duplicate removal, in the msgparser, for dnssec qtype
88b7579f77SDag-Erling Smørgrav  rrsig and any, because of special rrsig processing in the msgparser.
89b7579f77SDag-Erling Smørgravo The harden-glue feature, when yes all out of zone glue is deleted, when
90b7579f77SDag-Erling Smørgrav  no out of zone glue is used for further resolving, is more complicated
91b7579f77SDag-Erling Smørgrav  than that, see below.
92b7579f77SDag-Erling Smørgrav  Main points:
93b7579f77SDag-Erling Smørgrav  	* rfc2182 trust handling is used.
94b7579f77SDag-Erling Smørgrav	* data is let through only in very specific cases
95b7579f77SDag-Erling Smørgrav	* spoofability remains possible.
96b7579f77SDag-Erling Smørgrav  Not all glue is let through (despite the name of the option). Only glue
97b7579f77SDag-Erling Smørgrav  which is present in a delegation, of type A and AAAA, where the name is
98b7579f77SDag-Erling Smørgrav  present in the NS record in the authority section is let through.
99b7579f77SDag-Erling Smørgrav  The glue that is let through is stored in the cache (marked as 'from the
100b7579f77SDag-Erling Smørgrav  additional section'). And will then be used for sending queries to. It
101b7579f77SDag-Erling Smørgrav  will not be present in the reply to the client (if RD is off).
102b7579f77SDag-Erling Smørgrav  A direct query for that name will attempt to get a msg into the message
103b7579f77SDag-Erling Smørgrav  cache. Since A and AAAA queries are not synthesized by the unbound cache,
104b7579f77SDag-Erling Smørgrav  this query will be (eventually) sent to the authoritative server and its
105b7579f77SDag-Erling Smørgrav  answer will be put in the cache, marked as 'from the answer section' and
106b7579f77SDag-Erling Smørgrav  thus remove the 'from the additional section' data, and this record is
107b7579f77SDag-Erling Smørgrav  returned to the client.
108b7579f77SDag-Erling Smørgrav  The message has a TTL smaller or equal to the TTL of the answer RR.
109b7579f77SDag-Erling Smørgrav  If the cache memory is low; the answer RR may be dropped, and a glue
110b7579f77SDag-Erling Smørgrav  RR may be inserted, within the message TTL time, and thus return the
111b7579f77SDag-Erling Smørgrav  spoofed glue to a client. When the message expires, it is refetched and
112b7579f77SDag-Erling Smørgrav  the cached RR is updated with the correct content.
113b7579f77SDag-Erling Smørgrav  The server can be spoofed by getting it to visit a especially prepared
114b7579f77SDag-Erling Smørgrav  domain. This domain then inserts an address for another authoritative
115b7579f77SDag-Erling Smørgrav  server into the cache, when visiting that other domain, this address may
116b7579f77SDag-Erling Smørgrav  then be used to send queries to. And fake answers may be returned.
117b7579f77SDag-Erling Smørgrav  If the other domain is signed by DNSSEC, the fakes will be detected.
118b7579f77SDag-Erling Smørgrav
119b7579f77SDag-Erling Smørgrav  In summary, the harden glue feature presents a security risk if
120b7579f77SDag-Erling Smørgrav  disabled. Disabling the feature leads to possible better performance
121b7579f77SDag-Erling Smørgrav  as more glue is present for the recursive service to use. The feature
122b7579f77SDag-Erling Smørgrav  is implemented so as to minimise the security risk, while trying to
123b7579f77SDag-Erling Smørgrav  keep this performance gain.
124b7579f77SDag-Erling Smørgravo The method by which dnssec-lameness is detected is not secure. DNSSEC lame
125b7579f77SDag-Erling Smørgrav  is when a server has the zone in question, but lacks dnssec data, such as
126b7579f77SDag-Erling Smørgrav  signatures. The method to detect dnssec lameness looks at nonvalidated
127b7579f77SDag-Erling Smørgrav  data from the parent of a zone. This can be used, by spoofing the parent,
128b7579f77SDag-Erling Smørgrav  to create a false sense of dnssec-lameness in the child, or a false sense
129b7579f77SDag-Erling Smørgrav  or dnssec-non-lameness in the child. The first results in the server marked
130b7579f77SDag-Erling Smørgrav  lame, and not used for 900 seconds, and the second will result in a
131b7579f77SDag-Erling Smørgrav  validator failure (SERVFAIL again), when the query is validated later on.
132b7579f77SDag-Erling Smørgrav
133b7579f77SDag-Erling Smørgrav  Concluding, a spoof of the parent delegation can be used for many cases
134b7579f77SDag-Erling Smørgrav  of denial of service. I.e. a completely different NS set could be returned,
135b7579f77SDag-Erling Smørgrav  or the information withheld. All of these alterations can be caught by
136b7579f77SDag-Erling Smørgrav  the validator if the parent is signed, and result in 900 seconds bogus.
137b7579f77SDag-Erling Smørgrav  The dnssec-lameness detection is used to detect operator failures,
138b7579f77SDag-Erling Smørgrav  before the validator will properly verify the messages.
139b7579f77SDag-Erling Smørgrav
140b7579f77SDag-Erling Smørgrav  Also for zones for which no chain of trust exists, but a DS is given by the
141b7579f77SDag-Erling Smørgrav  parent, dnssec-lameness detection enables. This delivers dnssec to our
142b7579f77SDag-Erling Smørgrav  clients when possible (for client validators).
143b7579f77SDag-Erling Smørgrav
144b7579f77SDag-Erling Smørgrav  The following issue needs to be resolved:
145b7579f77SDag-Erling Smørgrav	a server that serves both a parent and child zone, where
146b7579f77SDag-Erling Smørgrav	parent is signed, but child is not. The server must not be marked
147b7579f77SDag-Erling Smørgrav	lame for the parent zone, because the child answer is not signed.
148b7579f77SDag-Erling Smørgrav  Instead of a false positive, we want false negatives; failure to
149b7579f77SDag-Erling Smørgrav  detect dnssec-lameness is less of a problem than marking honest
150b7579f77SDag-Erling Smørgrav  servers lame. dnssec-lameness is a config error and deserves the trouble.
151b7579f77SDag-Erling Smørgrav  So, only messages that identify the zone are used to mark the zone
152b7579f77SDag-Erling Smørgrav  lame. The zone is identified by SOA or NS RRsets in the answer/auth.
153b7579f77SDag-Erling Smørgrav  That includes almost all negative responses and also A, AAAA qtypes.
154b7579f77SDag-Erling Smørgrav  That would be most responses from servers.
155b7579f77SDag-Erling Smørgrav  For referrals, delegations that add a single label can be checked to be
156b7579f77SDag-Erling Smørgrav  from their zone, this covers most delegation-centric zones.
157b7579f77SDag-Erling Smørgrav
158b7579f77SDag-Erling Smørgrav  So possibly, for complicated setups, with multiple (parent-child) zones
159b7579f77SDag-Erling Smørgrav  on a server, dnssec-lameness detection does not work - no dnssec-lameness
160b7579f77SDag-Erling Smørgrav  is detected. Instead the zone that is dnssec-lame becomes bogus.
161b7579f77SDag-Erling Smørgrav
162b7579f77SDag-Erling Smørgravo authority features.
163b7579f77SDag-Erling Smørgrav  This is a recursive server, and authority features are out of scope.
164b7579f77SDag-Erling Smørgrav  However, some authority features are expected in a recursor. Things like
165b7579f77SDag-Erling Smørgrav  localhost, reverse lookup for 127.0.0.1, or blocking AS112 traffic.
166b7579f77SDag-Erling Smørgrav  Also redirection of domain names with fixed data is needed by service
167b7579f77SDag-Erling Smørgrav  providers. Limited support is added specifically to address this.
168b7579f77SDag-Erling Smørgrav
169b7579f77SDag-Erling Smørgrav  Adding full authority support, requires much more code, and more complex
170b7579f77SDag-Erling Smørgrav  maintenance.
171b7579f77SDag-Erling Smørgrav
172b7579f77SDag-Erling Smørgrav  The limited support allows adding some static data (for localhost and so),
173b7579f77SDag-Erling Smørgrav  and to respond with a fixed rcode (NXDOMAIN) for domains (such as AS112).
174b7579f77SDag-Erling Smørgrav
175b7579f77SDag-Erling Smørgrav  You can put authority data on a separate server, and set the server in
176b7579f77SDag-Erling Smørgrav  unbound.conf as stub for those zones, this allows clients to access data
177b7579f77SDag-Erling Smørgrav  from the server without making unbound authoritative for the zones.
178b7579f77SDag-Erling Smørgrav
179b7579f77SDag-Erling Smørgravo the access control denies queries before any other processing.
180b7579f77SDag-Erling Smørgrav  This denies queries that are not authoritative, or version.bind, or any.
181b7579f77SDag-Erling Smørgrav  And thus prevents cache-snooping (denied hosts cannot make non-recursive
182b7579f77SDag-Erling Smørgrav  queries and get answers from the cache).
183b7579f77SDag-Erling Smørgrav
184b7579f77SDag-Erling Smørgravo If a client makes a query without RD bit, in the case of a returned
185b7579f77SDag-Erling Smørgrav  message from cache which is:
186b7579f77SDag-Erling Smørgrav	answer section: empty
187b7579f77SDag-Erling Smørgrav	auth section: NS record present, no SOA record, no DS record,
188b7579f77SDag-Erling Smørgrav		maybe NSEC or NSEC3 records present.
189b7579f77SDag-Erling Smørgrav	additional: A records or other relevant records.
190b7579f77SDag-Erling Smørgrav  A SOA record would indicate that this was a NODATA answer.
191b7579f77SDag-Erling Smørgrav  A DS records would indicate a referral.
192b7579f77SDag-Erling Smørgrav  Absence of NS record would indicate a NODATA answer as well.
193b7579f77SDag-Erling Smørgrav
194b7579f77SDag-Erling Smørgrav  Then the receiver does not know whether this was a referral
195b7579f77SDag-Erling Smørgrav  with attempt at no-DS proof) or a nodata answer with attempt
196b7579f77SDag-Erling Smørgrav  at no-data proof. It could be determined by attempting to prove
197b7579f77SDag-Erling Smørgrav  either condition; and looking if only one is valid, but both
198b7579f77SDag-Erling Smørgrav  proofs could be valid, or neither could be valid, which creates
199b7579f77SDag-Erling Smørgrav  doubt. This case is validated by unbound as a 'referral' which
200b7579f77SDag-Erling Smørgrav  ascertains that RRSIGs are OK (and not omitted), but does not
201b7579f77SDag-Erling Smørgrav  check NSEC/NSEC3.
202b7579f77SDag-Erling Smørgrav
203b7579f77SDag-Erling Smørgravo Case preservation
204b7579f77SDag-Erling Smørgrav  Unbound preserves the casing received from authority servers as best
205b7579f77SDag-Erling Smørgrav  as possible. It compresses without case, so case can get lost there.
206b7579f77SDag-Erling Smørgrav  The casing from the query name is used in preference to the casing
207b7579f77SDag-Erling Smørgrav  of the authority server. This is the same as BIND. RFC4343 allows either
208b7579f77SDag-Erling Smørgrav  behaviour.
209b7579f77SDag-Erling Smørgrav
210b7579f77SDag-Erling Smørgravo Denial of service protection
211b7579f77SDag-Erling Smørgrav  If many queries are made, and they are made to names for which the
212b7579f77SDag-Erling Smørgrav  authority servers do not respond, then the requestlist for unbound
213b7579f77SDag-Erling Smørgrav  fills up fast.  This results in denial of service for new queries.
214b7579f77SDag-Erling Smørgrav  To combat this the first 50% of the requestlist can run to completion.
215b7579f77SDag-Erling Smørgrav  The last 50% of the requestlist get (200 msec) at least and are replaced
216b7579f77SDag-Erling Smørgrav  by newer queries when older (LIFO).
217b7579f77SDag-Erling Smørgrav  When a new query comes in, and a place in the first 50% is available, this
218b7579f77SDag-Erling Smørgrav  is preferred.  Otherwise, it can replace older queries out of the last 50%.
219b7579f77SDag-Erling Smørgrav  Thus, even long queries get a 50% chance to be resolved.  And many 'short'
220b7579f77SDag-Erling Smørgrav  one or two round-trip resolves can be done in the last 50% of the list.
221b7579f77SDag-Erling Smørgrav  The timeout can be configured.
222b7579f77SDag-Erling Smørgrav
223b7579f77SDag-Erling Smørgravo EDNS fallback. Is done according to the EDNS RFC (and update draft-00).
224b7579f77SDag-Erling Smørgrav  Unbound assumes EDNS 0 support for the first query.  Then it can detect
225b7579f77SDag-Erling Smørgrav  support (if the servers replies) or non-support (on a NOTIMPL or FORMERR).
226b7579f77SDag-Erling Smørgrav  Some middleboxes drop EDNS 0 queries, mainly when forwarding, not when
227b7579f77SDag-Erling Smørgrav  routing packets.  To detect this, when timeouts keep happening, as the
228b7579f77SDag-Erling Smørgrav  timeout approached 5-10 seconds, and EDNS status has not been detected yet,
229b7579f77SDag-Erling Smørgrav  a single probe query is sent.  This probe has a sub-second timeout, and
230b7579f77SDag-Erling Smørgrav  if the server responds (quickly) without EDNS, this is cached for 15 min.
231b7579f77SDag-Erling Smørgrav  This works very well when detecting an address that you use much - like
232b7579f77SDag-Erling Smørgrav  a forwarder address - which is where the middleboxes need to be detected.
233b7579f77SDag-Erling Smørgrav  Otherwise, it results in a 5 second wait time before EDNS timeout is
234b7579f77SDag-Erling Smørgrav  detected, which is slow but it works at least.
235b7579f77SDag-Erling Smørgrav  It minimizes the chances of a dropped query making a (DNSSEC) EDNS server
236b7579f77SDag-Erling Smørgrav  falsely EDNS-nonsupporting, and thus DNSSEC-bogus, works well with
237b7579f77SDag-Erling Smørgrav  middleboxes, and can detect the occasional authority that drops EDNS.
238b7579f77SDag-Erling Smørgrav  For some boxes it is necessary to probe for every failing query, a
239b7579f77SDag-Erling Smørgrav  reassurance that the DNS server does EDNS does not mean that path can
240b7579f77SDag-Erling Smørgrav  take large DNS answers.
241b7579f77SDag-Erling Smørgrav
242b7579f77SDag-Erling Smørgravo 0x20 backoff.
243b7579f77SDag-Erling Smørgrav  The draft describes to back off to the next server, and go through all
244b7579f77SDag-Erling Smørgrav  servers several times.  Unbound goes on get the full list of nameserver
245b7579f77SDag-Erling Smørgrav  addresses, and then makes 3 * number of addresses queries.
246b7579f77SDag-Erling Smørgrav  They are sent to a random server, but no one address more than 4 times.
247b7579f77SDag-Erling Smørgrav  It succeeds if one has 0x20 intact, or else all are equal.
248b7579f77SDag-Erling Smørgrav  Otherwise, servfail is returned to the client.
249b7579f77SDag-Erling Smørgrav
250b7579f77SDag-Erling Smørgravo NXDOMAIN and SOA serial numbers.
251b7579f77SDag-Erling Smørgrav  Unbound keeps TTL values for message formats, and thus rcodes, such
252b7579f77SDag-Erling Smørgrav  as NXDOMAIN.  Also it keeps the latest rrsets in the rrset cache.
253b7579f77SDag-Erling Smørgrav  So it will faithfully negative cache for the exact TTL as originally
254b7579f77SDag-Erling Smørgrav  specified for an NXDOMAIN message, but send a newer SOA record if
255b7579f77SDag-Erling Smørgrav  this has been found in the mean time.  In point, this could lead to a
256b7579f77SDag-Erling Smørgrav  negative cached NXDOMAIN reply with a SOA RR where the serial number
257b7579f77SDag-Erling Smørgrav  indicates a zone version where this domain is not any longer NXDOMAIN.
258b7579f77SDag-Erling Smørgrav  These situations become consistent once the original TTL expires.
259b7579f77SDag-Erling Smørgrav  If the domain is DNSSEC signed, by the way, then NSEC records are
260b7579f77SDag-Erling Smørgrav  updated more carefully.  If one of the NSEC records in an NXDOMAIN is
261b7579f77SDag-Erling Smørgrav  updated from another query, the NXDOMAIN is dropped from the cache,
262b7579f77SDag-Erling Smørgrav  and queried for again, so that its proof can be checked again.
263b7579f77SDag-Erling Smørgrav
264b7579f77SDag-Erling Smørgravo SOA records in negative cached answers for DS queries.
265b7579f77SDag-Erling Smørgrav  The current unbound code uses a negative cache for queries for type DS.
266b7579f77SDag-Erling Smørgrav  This speeds up building chains of trust, and uses NSEC and NSEC3
267b7579f77SDag-Erling Smørgrav  (optout) information to speed up lookups.  When used internally,
268b7579f77SDag-Erling Smørgrav  the bare NSEC(3) information is sufficient, probably picked up from
269b7579f77SDag-Erling Smørgrav  a referral.  When answering to clients, a SOA record is needed for
270b7579f77SDag-Erling Smørgrav  the correct message format, a SOA record is picked from the cache
271b7579f77SDag-Erling Smørgrav  (and may not actually match the serial number of the SOA for which the
272b7579f77SDag-Erling Smørgrav  NSEC and NSEC3 records were obtained) if available otherwise network
273b7579f77SDag-Erling Smørgrav  queries are performed to get the data.
274b7579f77SDag-Erling Smørgrav
275b7579f77SDag-Erling Smørgravo Parent and child with different nameserver information.
276b7579f77SDag-Erling Smørgrav  A misconfiguration that sometimes happens is where the parent and child
277b7579f77SDag-Erling Smørgrav  have different NS, glue information.  The child is authoritative, and
278b7579f77SDag-Erling Smørgrav  unbound will not trust information from the parent nameservers as the
279b7579f77SDag-Erling Smørgrav  final answer.  To help lookups, unbound will however use the parent-side
280b7579f77SDag-Erling Smørgrav  version of the glue as a last resort lookup.  This resolves lookups for
281b7579f77SDag-Erling Smørgrav  those misconfigured domains where the servers reported by the parent
282b7579f77SDag-Erling Smørgrav  are the only ones working, and servers reported by the child do not.
283b7579f77SDag-Erling Smørgrav
284b7579f77SDag-Erling Smørgravo Failure of validation and probing.
285b7579f77SDag-Erling Smørgrav  Retries on a validation failure are now 5x to a different nameserver IP
286b7579f77SDag-Erling Smørgrav  (if possible), and then it gives up, for one name, type, class entry in
287b7579f77SDag-Erling Smørgrav  the message cache.  If a DNSKEY or DS fails in the chain of trust in the
288b7579f77SDag-Erling Smørgrav  key cache additionally, after the probing, a bad key entry is created that
289b7579f77SDag-Erling Smørgrav  makes the entire zone bogus for 900 seconds.  This is a fixed value at
290b7579f77SDag-Erling Smørgrav  this time and is conservative in sending probes.  It makes the compound
291b7579f77SDag-Erling Smørgrav  effect of many resolvers less and easier to handle, but penalizes
292b7579f77SDag-Erling Smørgrav  individual resolvers by having less probes and a longer time before fixes
293b7579f77SDag-Erling Smørgrav  are picked up.
294b7579f77SDag-Erling Smørgrav
295