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