| rfc9520xml2.original.xml | rfc9520.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <?xml-model href="rfc7991bis.rnc"?> | ||||
| <!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> --> | ||||
| <!DOCTYPE rfc [ | <!DOCTYPE rfc [ | |||
| <!ENTITY nbsp " "> | <!ENTITY nbsp " "> | |||
| <!ENTITY zwsp "​"> | <!ENTITY zwsp "​"> | |||
| <!ENTITY nbhy "‑"> | <!ENTITY nbhy "‑"> | |||
| <!ENTITY ouml "ö"> | ||||
| <!ENTITY uuml "ü"> | ||||
| <!ENTITY wj "⁠"> | <!ENTITY wj "⁠"> | |||
| <!-- One method to get references from the online citation libraries. | ||||
| There has to be one entity for each item to be referenced. | ||||
| An alternate method (rfc include) is described in the references. --> | ||||
| <!ENTITY RFC0882 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.0882.xml"> | ||||
| <!ENTITY RFC0883 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.0883.xml"> | ||||
| <!ENTITY RFC1034 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.1034.xml"> | ||||
| <!ENTITY RFC1035 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.1035.xml"> | ||||
| <!ENTITY RFC2119 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.2119.xml"> | ||||
| <!ENTITY RFC2308 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.2308.xml"> | ||||
| <!ENTITY RFC4035 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.4035.xml"> | ||||
| <!ENTITY RFC4686 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.4686.xml"> | ||||
| <!ENTITY RFC4697 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.4697.xml"> | ||||
| <!ENTITY RFC4732 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.4732.xml"> | ||||
| <!ENTITY RFC5452 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.5452.xml"> | ||||
| <!ENTITY RFC6891 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.6891.xml"> | ||||
| <!ENTITY RFC7766 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.7766.xml"> | ||||
| <!ENTITY RFC7873 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.7873.xml"> | ||||
| <!ENTITY RFC7858 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.7858.xml"> | ||||
| <!ENTITY RFC8174 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.8174.xml"> | ||||
| <!ENTITY RFC8484 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.8484.xml"> | ||||
| <!ENTITY RFC8767 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.8767.xml"> | ||||
| <!ENTITY RFC8914 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.8914.xml"> | ||||
| <!ENTITY RFC9250 PUBLIC "" "https://xml2rfc.ietf.org/public/rfc/bibxml/reference | ||||
| .RFC.9250.xml"> | ||||
| ]> | ]> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt"?> | ||||
| <?rfc strict="yes" ?> | ||||
| <?rfc toc="yes"?> | ||||
| <?rfc tocdepth="4"?> | ||||
| <?rfc symrefs="yes"?> | ||||
| <?rfc sortrefs="yes" ?> | ||||
| <?rfc compact="yes" ?> | ||||
| <?rfc subcompact="no" ?> | ||||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ie | ||||
| tf-dnsop-caching-resolution-failures-08" ipr="trust200902" consensus="true" upda | ||||
| tes="2308, 4035, 4697" submissionType="IETF"> | ||||
| <!-- category values: std, bcp, info, exp, and historic | ||||
| ipr values: full3667, noModification3667, noDerivatives3667 | ||||
| you can add the attributes updates="NNNN" and obsoletes="NNNN" | ||||
| they will automatically be output with "(if approved)" --> | ||||
| <!-- ***** FRONT MATTER ***** --> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" category=" std" consensus="true" docName="draft-ietf-dnsop-caching-resolution-failures-08" number="9520" ipr="trust200902" updates="2308, 4035, 4697" obsoletes="" tocInclu de="true" tocDepth="4" symRefs="true" sortRefs="true" xml:lang="en" version="3"> | |||
| <front> | <front> | |||
| <!-- The abbreviated title is used in the page header - it is only necessary | ||||
| if the | ||||
| full title is longer than 39 characters --> | ||||
| <title abbrev="Caching Resolution Failures">Negative Caching of DNS Resoluti on Failures</title> | <title abbrev="Caching Resolution Failures">Negative Caching of DNS Resoluti on Failures</title> | |||
| <seriesInfo name="RFC" value="9520"/> | ||||
| <!-- add 'role="editor"' below for the editors if appropriate --> | ||||
| <!-- Another author who claims to be an editor --> | ||||
| <author fullname="Duane Wessels" initials="D." surname="Wessels"> | <author fullname="Duane Wessels" initials="D." surname="Wessels"> | |||
| <organization>Verisign</organization> | <organization>Verisign</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>12061 Bluemont Way</street> | <street>12061 Bluemont Way</street> | |||
| <city>Reston</city> | <city>Reston</city> | |||
| <region>VA</region> | <region>VA</region> | |||
| <code>20190</code> | <code>20190</code> | |||
| <country>US</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <phone>+1 703 948-3200</phone> | <phone>+1 703 948-3200</phone> | |||
| <email>dwessels@verisign.com</email> | <email>dwessels@verisign.com</email> | |||
| <uri>https://verisign.com</uri> | <uri>https://verisign.com</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="William Carroll" initials="W." surname="Carroll"> | <author fullname="William Carroll" initials="W." surname="Carroll"> | |||
| <organization>Verisign</organization> | <organization>Verisign</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>12061 Bluemont Way</street> | <street>12061 Bluemont Way</street> | |||
| <city>Reston</city> | <city>Reston</city> | |||
| <region>VA</region> | <region>VA</region> | |||
| <code>20190</code> | <code>20190</code> | |||
| <country>US</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <phone>+1 703 948-3200</phone> | <phone>+1 703 948-3200</phone> | |||
| <email>wicarroll@verisign.com</email> | <email>wicarroll@verisign.com</email> | |||
| <uri>https://verisign.com</uri> | <uri>https://verisign.com</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Matthew Thomas" initials="M." surname="Thomas"> | <author fullname="Matthew Thomas" initials="M." surname="Thomas"> | |||
| <organization>Verisign</organization> | <organization>Verisign</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>12061 Bluemont Way</street> | <street>12061 Bluemont Way</street> | |||
| <city>Reston</city> | <city>Reston</city> | |||
| <region>VA</region> | <region>VA</region> | |||
| <code>20190</code> | <code>20190</code> | |||
| <country>US</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <phone>+1 703 948-3200</phone> | <phone>+1 703 948-3200</phone> | |||
| <email>mthomas@verisign.com</email> | <email>mthomas@verisign.com</email> | |||
| <uri>https://verisign.com</uri> | <uri>https://verisign.com</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2023" month="December"/> | ||||
| <date year="2023"/> | <area>ops</area> | |||
| <workgroup>dnsop</workgroup> | ||||
| <area>General</area> | ||||
| <workgroup>Internet Engineering Task Force</workgroup> | ||||
| <keyword>DNS</keyword> | <keyword>DNS</keyword> | |||
| <keyword>Negative</keyword> | <keyword>Negative</keyword> | |||
| <keyword>Caching</keyword> | <keyword>Caching</keyword> | |||
| <abstract> | <abstract> | |||
| <t> | <t>In the DNS, resolvers employ caching to reduce both latency for end | |||
| In the DNS, resolvers employ caching to reduce both latency for | users and load on authoritative name servers. The process of resolution | |||
| end users and load on authoritative name servers. | may result in one of three types of responses: (1) a response containing | |||
| The process of | the requested data, (2) a response indicating the requested data does | |||
| resolution may result in one of three types of responses: (1) a | not exist, or (3) a non-response due to a resolution failure in which | |||
| response containing the requested data; (2) a response indicating | the resolver does not receive any useful information regarding the | |||
| the requested data does not exist; or (3) a non-response due to | data's existence. This document concerns itself only with the third | |||
| a resolution failure in which the resolver does not receive any | type.</t> | |||
| useful information regarding the data's existence. This document | <t>RFC 2308 specifies requirements for DNS negative caching. There, | |||
| concerns itself only with the third type. | caching of TYPE 2 responses is mandatory and caching of TYPE 3 | |||
| </t> | responses is optional. This document updates RFC 2308 to require | |||
| <t> | negative caching for DNS resolution failures.</t> | |||
| RFC 2308 specifies requirements for DNS | <t>RFC 4035 allows DNSSEC validation failure caching. This document | |||
| negative caching. There, caching of type (2) responses | updates RFC 4035 to require caching for DNSSEC validation failures.</t> | |||
| is mandatory | <t>RFC 4697 prohibits aggressive requerying for NS records at a failed | |||
| and caching of type (3) responses | zone's parent zone. This document updates RFC 4697 to expand this | |||
| is optional. This document updates RFC 2308 | requirement to all query types and to all ancestor zones. | |||
| to require negative caching | ||||
| for DNS resolution failures. | ||||
| </t> | ||||
| <t> | ||||
| RFC 4035 allows DNSSEC validation failure caching. This document updates | ||||
| RFC 4035 | ||||
| to require caching for DNSSEC validation failures. | ||||
| </t> | ||||
| <t> | ||||
| RFC 4697 prohibits aggressive requerying for NS records at a failed zone | ||||
| 's parent | ||||
| zone. This document updates RFC 4697 to expand this requirement to all q | ||||
| uery types and to all | ||||
| ancestor zones. | ||||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section> | ||||
| <section title="Introduction"> | <name>Introduction</name> | |||
| <t>Caching has always been a fundamental component of DNS resolution on | ||||
| <t> | the Internet. For example, <xref target="RFC0882"/> states:</t> | |||
| Caching has always been a fundamental component of DNS resolution | <blockquote> | |||
| on the Internet. For example <xref target="RFC0882"/> states: | The sheer size of the database and frequency of updates suggest | |||
| </t> | ||||
| <t> | ||||
| "The sheer size of the database and frequency of updates suggest | ||||
| that it must be maintained in a distributed manner, with local | that it must be maintained in a distributed manner, with local | |||
| caching to improve performance." | caching to improve performance. | |||
| </t> | </blockquote> | |||
| <t> | <t>The early DNS RFCs (<xref target="RFC0882"/>, <xref | |||
| The early DNS RFCs (<xref target="RFC0882"/>, <xref | target="RFC0883"/>, <xref target="RFC1034"/>, and <xref | |||
| target="RFC0883"/>, <xref target="RFC1034"/>, and <xref | target="RFC1035"/>) primarily discuss caching in the context of what | |||
| target="RFC1035"/>) primarily discuss caching in the context | <xref target="RFC2308"/> calls "positive responses", that is, when the | |||
| of what <xref target="RFC2308"/> calls "positive" responses, | response includes the requested data. In this case, a TTL is associated | |||
| that is, when the response includes the requested data. | with each Resource Record (RR) in the response. Resolvers can cache and | |||
| In this case, a TTL is associated with each resource record in | reuse the data until the TTL expires. | |||
| the response. Resolvers can cache and reuse the data until the | ||||
| TTL expires. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Section 4.3.4 of <xref target="RFC1034"/> describes negative | <xref target="RFC1034" sectionFormat="of" section="4.3.4"/> describes ne gative | |||
| response caching, but notes it is optional and only talks | response caching, but notes it is optional and only talks | |||
| about name errors (NXDOMAIN). This is the origin of using | about name errors (NXDOMAIN). This is the origin of using | |||
| the SOA MINIMUM field as a negative caching TTL. | the SOA MINIMUM field as a negative caching TTL. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="RFC2308"/> updated <xref target="RFC1034"/> | <xref target="RFC2308"/> updated <xref target="RFC1034"/> to specify | |||
| to specify new requirements for DNS negative caching, including | new requirements for DNS negative caching, including making it | |||
| making it mandatory for caching resolvers to cache | mandatory for caching resolvers to cache name error (NXDOMAIN) and no | |||
| name error (NXDOMAIN) and no data (NODATA) responses | data (NODATA) responses when an SOA record is available to provide a | |||
| when a SOA record is available to provide a TTL. | TTL. <xref target="RFC2308"/> further specified optional negative | |||
| <xref target="RFC2308"/> further specified optional negative caching for | caching for two DNS resolution failure cases: server failure and dead/un | |||
| two DNS | reachable servers. | |||
| resolution failure cases: server failure and dead / unreachable servers. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| This document updates <xref target="RFC2308"/> to require | This document updates <xref target="RFC2308"/> to require negative | |||
| negative caching of all DNS resolution failures | caching of all DNS resolution failures and provides additional | |||
| and provides additional examples of resolution failures. | examples of resolution failures, <xref | |||
| This document also updates <xref target="RFC4035"/> to require | target="RFC4035"/> to require caching for DNSSEC validation failures, | |||
| caching for DNSSEC validation failures as well as <xref target="RFC4697" | as well as <xref target="RFC4697"/> to expand the scope of prohibiting | |||
| /> | aggressive requerying for NS records at a failed zone's parent zone to | |||
| to expand the scope of prohibiting aggressive requerying for NS | all query types and to all ancestor zones. | |||
| records at a failed zone's parent zone to all query types and | ||||
| to all ancestor zones. | ||||
| </t> | </t> | |||
| <section> | ||||
| <section title="Motivation"> | <name>Motivation</name> | |||
| <t> | <t> | |||
| Operators of DNS services have known for some time that | Operators of DNS services have known for some time that | |||
| recursive resolvers become more aggressive when they | recursive resolvers become more aggressive when they | |||
| experience resolution failures. A number of different | experience resolution failures. A number of different | |||
| anecdotes, experiments, and incidents support this | anecdotes, experiments, and incidents support this | |||
| claim. | claim. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In December 2009, a secondary server for a number of | In December 2009, a secondary server for a number of | |||
| in-addr.arpa subdomains saw its traffic suddenly double, and | in-addr.arpa subdomains saw its traffic suddenly double, and | |||
| queries of type DNSKEY in particular increase by approximately | queries of type DNSKEY in particular increase by approximately | |||
| two orders of magnitude, coinciding with a DNSSEC key rollover | two orders of magnitude, coinciding with a DNSSEC key rollover | |||
| by the zone operator <xref target="roll-over-and-die"/>. | by the zone operator <xref target="DNSSEC-ROLLOVER"/>. | |||
| This predated a signed root zone and an operating system | This predated a signed root zone, and an operating system | |||
| vendor was providing non-root trust anchors to the recursive | vendor was providing non-root trust anchors to the recursive | |||
| resolver, which became out of date following the rollover. | resolver, which became out of date following the rollover. | |||
| Unable to validate responses for the affected in-addr.arpa | Unable to validate responses for the affected in-addr.arpa | |||
| zones, recursive resolvers aggressively retried their queries. | zones, recursive resolvers aggressively retried their queries. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In 2016, the internet infrastructure company Dyn experienced | In 2016, the Internet infrastructure company Dyn experienced | |||
| a large attack that impacted many high-profile customers. | a large attack that impacted many high-profile customers. | |||
| As documented in a technical presentation detailing the attack <xref t | As documented in a technical presentation detailing the attack (see <x | |||
| arget="dyn-attack"/>, Dyn staff wrote: | ref target="RETRY-STORM"/>), Dyn staff wrote:</t> | |||
| "At this point we are now experiencing botnet attack traffic | ||||
| and what is best classified as a 'retry storm'. Looking at | <blockquote><t>At this point we are now experiencing botnet attack | |||
| certain large recursive platforms > 10x normal volume." | traffic and what is best classified as a "retry storm"</t> | |||
| </t> | <t>Looking at certain large recursive platforms > 10x normal | |||
| volume</t></blockquote> | ||||
| <t> | <t> | |||
| In 2018 the root zone key signing key (KSK) was rolled over | In 2018, the root zone Key Signing Key (KSK) was rolled over | |||
| <xref target="root-ksk-roll"/>. Throughout the rollover | <xref target="KSK-ROLLOVER"/>. Throughout the rollover | |||
| period, the root servers experienced a significant increase in | period, the root servers experienced a significant increase in | |||
| DNSKEY queries. Before the rollover, a.root-servers.net and | DNSKEY queries. Before the rollover, a.root-servers.net and | |||
| j.root-servers.net together received about 15 million DNSKEY | j.root-servers.net together received about 15 million DNSKEY | |||
| queries per day. At the end of the revocation period, they | queries per day. At the end of the revocation period, they | |||
| received 1.2 billion per day -- an 80x increase. Removal of | received 1.2 billion per day: an 80x increase. Removal of | |||
| the revoked key from the zone caused DNSKEY queries to drop | the revoked key from the zone caused DNSKEY queries to drop | |||
| to post-rollover but pre-revoke levels, indicating there is | to post-rollover but pre-revoke levels, indicating there is | |||
| still a population of recursive resolvers using the previous | still a population of recursive resolvers using the previous | |||
| root trust anchor and aggressively retrying DNSKEY queries. | root trust anchor and aggressively retrying DNSKEY queries. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In 2021, Verisign researchers used botnet query traffic | In 2021, Verisign researchers used botnet query traffic to | |||
| to demonstrate that certain large, public recursive DNS | demonstrate that certain large public recursive DNS services exhibit | |||
| services exhibit very high query rates when all authoritative | very high query rates when all authoritative name servers for a zone | |||
| name servers for a zone return REFUSED or SERVFAIL <xref | return refused (REFUSED) or server failure (SERVFAIL) responses (see | |||
| target="botnet"/>. When the authoritative servers were configured norm | <xref target="BOTNET"/>). When the authoritative servers were | |||
| ally, query rates for | configured normally, query rates for a single botnet domain averaged | |||
| a single botnet domain averaged approximately 50 queries | approximately 50 queries per second. However, with the servers | |||
| per second. However, with the servers configured to return SERVFAIL, | configured to return SERVFAIL, the query rate increased to 60,000 | |||
| the query rate increased to 60,000 per second. Furthermore, | per second. Furthermore, increases were also observed at the root | |||
| increases were also observed at the Root and TLD levels, | and Top-Level Domain (TLD) levels, even though delegations at those | |||
| even though delegations at those levels were unchanged and | levels were unchanged and continued operating normally. | |||
| continued operating normally. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Later that same year, on October 4, Facebook experienced a | Later that same year, on October 4, Facebook experienced a | |||
| widespread and well-publicized outage <xref target="fb-outage"/>. Duri | widespread and well-publicized outage <xref | |||
| ng the 6-hour outage, | target="FB-OUTAGE"/>. During the 6-hour outage, none of Facebook's | |||
| none of Facebook's authoritative name servers were reachable and | authoritative name servers were reachable and did not respond to | |||
| did not respond to queries. Recursive name servers attempting to | queries. Recursive name servers attempting to resolve Facebook | |||
| resolve Facebook domains experienced timeouts. During this time, | domains experienced timeouts. During this time, query traffic on the | |||
| query traffic on the .COM/.NET infrastructure increased from | .COM/.NET infrastructure increased from 7,000 to 900,000 queries per | |||
| 7,000 to 900,000 queries per second <xref target="fb-outage-verisign"/ | second <xref target="OUTAGE-RESOLVER"/>. | |||
| >. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="Related Work"> | <name>Related Work</name> | |||
| <t> | <t> | |||
| <xref target="RFC2308"/> describes negative caching for four | <xref target="RFC2308"/> describes negative caching for four types | |||
| types of DNS queries and responses: Name errors, no data, | of DNS queries and responses: name errors, no data, server failures, | |||
| server failures, and dead / unreachable servers. It places | and dead/unreachable servers. It places the strongest | |||
| the strongest requirements on negative caching | requirements on negative caching for name errors and no data | |||
| for name errors and no data responses, while server failures | responses, while server failures and dead servers are left as | |||
| and dead servers are left as optional. | optional. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="RFC4697"/> is a Best Current Practice that | <xref target="RFC4697"/> is a Best Current Practice that | |||
| documents observed resolution misbehaviors. It describes a | documents observed resolution misbehaviors. It describes a | |||
| number of situations that can lead to excessive queries from | number of situations that can lead to excessive queries from | |||
| recursive resolvers, including: requerying for delegation data, | recursive resolvers, including requerying for delegation data, | |||
| lame servers, responses blocked by firewalls, and records | lame servers, responses blocked by firewalls, and records | |||
| with zero TTL. <xref target="RFC4697"/> makes a number of | with zero TTL. <xref target="RFC4697"/> makes a number of | |||
| recommendations, varying from "SHOULD" to "MUST." | recommendations, varying from "<bcp14>SHOULD</bcp14>" to "<bcp14>MUST< /bcp14>". | |||
| </t> | </t> | |||
| <t> | <t><xref target="I-D.muks-dnsop-dns-thundering-herd"/> describes "The | |||
| An expired Internet-Draft describes "The DNS thundering herd | DNS thundering herd problem" as a situation arising when cached data | |||
| problem" <xref target="thundering-herd"/> as a situation arising | expires at the same time for a large number of users. Although that | |||
| when cached data expires at the same time for a large number | document is not focused on negative caching, it does describe the | |||
| of users. Although that document is not focused on negative | benefits of combining multiple identical queries to upstream name | |||
| caching, it does describe the benefits of combining multiple, | servers. That is, when a recursive resolver receives multiple queries | |||
| identical queries to upstream name servers. That is, when | for the same name, class, and type that cannot be answered from cached | |||
| a recursive resolver receives multiple queries for the same | data, it should combine or join them into a single upstream query | |||
| name, class, and type that cannot be answered from cached data, | rather than emit repeated identical upstream queries. | |||
| it should combine or join them into a single upstream query, | ||||
| rather than emit repeated, identical upstream queries. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="RFC5452"/>, "Measures for Making DNS More | <xref target="RFC5452"/>, "<xref target="RFC5452" format="title"/>", | |||
| Resilient against Forged Answers," includes a section that | includes a section that describes the phenomenon known as "Birthday | |||
| describes the phenomenon known as birthday attacks. Here, | Attacks". Here, again, the problem arises when a recursive resolver | |||
| again, the problem arises when a recursive resolver emits | emits multiple identical upstream queries. Multiple outstanding | |||
| multiple, identical upstream queries. Multiple outstanding | queries make it easier for an attacker to guess and correctly match | |||
| queries makes it easier for an attacker to guess and correctly | some of the DNS message parameters, such as the port number and ID | |||
| match some of the DNS message parameters, such as the port | field. This situation is further exacerbated in the case of | |||
| number and ID field. This situation is further exacerbated in the | timeout-based resolution failures. Of course, DNSSEC is a suitable | |||
| case of timeout-based resolution failures. DNSSEC, of course, | defense to spoofing attacks. | |||
| is a suitable defense to spoofing attacks. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="RFC8767"/> describes "Serving Stale Data to Improve | <xref target="RFC8767"/> describes "<xref target="RFC8767" | |||
| DNS Resiliency." This permits a recursive resolver to return | format="title"/>". This permits a recursive resolver to return | |||
| possibly stale data when it is unable to refresh cached, | possibly stale data when it is unable to refresh cached, expired | |||
| expired data. It introduces the idea of a failure recheck | data. It introduces the idea of a failure recheck timer and | |||
| timer and says: "Attempts to refresh from non-responsive or | says:</t> | |||
| <blockquote>Attempts to refresh from non-responsive or | ||||
| otherwise failing authoritative nameservers are recommended | otherwise failing authoritative nameservers are recommended | |||
| to be done no more frequently than every 30 seconds." | to be done no more frequently than every 30 seconds.</blockquote> | |||
| </t> | ||||
| </section> | </section> | |||
| <section> | ||||
| <section title="Terminology"> | <name>Terminology</name> | |||
| <t> | <t> The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | |||
| "OPTIONAL" in this document are to be interpreted as described in | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and onl | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | |||
| y when, they appear in all | are to be interpreted as described in BCP 14 <xref | |||
| capitals, as shown here. | target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they | |||
| appear in all capitals, as shown here. | ||||
| </t> | </t> | |||
| <ul> | <dl> | |||
| <li><t>DNS Transport: In this document, DNS transport means a protocol | <dt>DNS transport:</dt> | |||
| used to transport DNS messages between a client and a server. This | ||||
| includes | <dd>In this document, "DNS transport" means a protocol used to | |||
| "classic DNS" transports, i.e., DNS-over-UDP and DNS-over-TCP <xref | transport DNS messages between a client and a server. This includes | |||
| target="RFC1034" /> <xref target="RFC7766" />, as | "classic DNS" transports, i.e., DNS-over-UDP and DNS-over-TCP <xref | |||
| well as newer encrypted DNS transports such as DNS-over-TLS <xref ta | target="RFC1034"/> <xref target="RFC7766"/>, as well as newer | |||
| rget="RFC7858" />, | encrypted DNS transports, such as DNS-over-TLS <xref | |||
| DNS-over-HTTPS <xref target="RFC8484" />, DNS-over-QUIC <xref target | target="RFC7858"/>, DNS-over-HTTPS <xref target="RFC8484"/>, | |||
| ="RFC9250" />, | DNS-over-QUIC <xref target="RFC9250"/>, and similar communication of | |||
| and similar | DNS messages using other protocols. Note: at the time of writing, | |||
| communication of DNS messages using other protocols. | not all DNS transports are standardized for all types | |||
| NOTE: at the time of this writing not all DNS transports are standar | of servers but may become standardized in the future.</dd> | |||
| dized for all types | </dl> | |||
| of servers, but may become standardized in the future.</t></li> | ||||
| </ul> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="Conditions That Lead to DNS Resolution Failures"> | <name>Conditions That Lead to DNS Resolution Failures</name> | |||
| <t> | <t> | |||
| A DNS resolution failure occurs when none of the servers available | A DNS resolution failure occurs when none of the servers available | |||
| to a resolver client provide any useful response data for a | to a resolver client provide any useful response data for a | |||
| particular query name, type, and class. A response is considered | particular query name, type, and class. A response is considered | |||
| useful when it provides either the requested data, a referral to a desce ndant zone, | useful when it provides either the requested data, a referral to a desce ndant zone, | |||
| or an indication that no data exists at the given name. | or an indication that no data exists at the given name. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| It is common for resolvers to have multiple servers from | It is common for resolvers to have multiple servers from | |||
| which to choose for a particular query. For example, | which to choose for a particular query. For example, | |||
| in the case of stub-to-recursive, the stub resolver may be | in the case of stub-to-recursive, the stub resolver may be | |||
| configured with multiple recursive resolver addresses. In the case of | configured with multiple recursive resolver addresses. In the case of | |||
| recursive-to-authoritative, a given zone usually has more than | recursive-to-authoritative, a given zone usually has more than | |||
| one name server (NS record), each of which can have multiple | one name server (NS record), each of which can have multiple | |||
| IP addresses and multiple DNS transports. | IP addresses and multiple DNS transports. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Nothing in this document prevents a resolver from retrying a | Nothing in this document prevents a resolver from retrying a | |||
| query at a different server, or the same server over a different | query at a different server or the same server over a different | |||
| DNS transport. In the case of timeouts, a resolver can retry the | DNS transport. In the case of timeouts, a resolver can retry the | |||
| same server and DNS transport a limited number of times. | same server and DNS transport a limited number of times. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If any one of the available servers provides a useful response, then | If any one of the available servers provides a useful response, then | |||
| it is not considered a resolution failure. However, if | it is not considered a resolution failure. However, if | |||
| none of the servers for a given query tuple <name, type, class> | none of the servers for a given query tuple <name, type, class> | |||
| provide a useful response, the result is a resolution failure. | provide a useful response, the result is a resolution failure. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that NXDOMAIN and NOERROR/NODATA responses are not conditions | Note that NXDOMAIN and NOERROR/NODATA responses are not conditions | |||
| for resolution failure. In these cases, the server is providing | for resolution failure. In these cases, the server is providing | |||
| a useful response, either indicating that a name does not exist, | a useful response, indicating either that a name does not exist | |||
| or that no data of the requested type exists at the name. | or that no data of the requested type exists at the name. | |||
| These negative responses can be cached as described in <xref | These negative responses can be cached as described in <xref target="RFC | |||
| target="RFC2308"/>. | 2308"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The remainder of this section describes a number of different | The remainder of this section describes a number of different | |||
| conditions that can lead to resolution failure. This section is not | conditions that can lead to resolution failure. This section is not | |||
| exhaustive. Additional conditions | exhaustive. Additional conditions | |||
| may be expected to cause similar resolution failures. | may be expected to cause similar resolution failures. | |||
| </t> | </t> | |||
| <section> | ||||
| <section title="SERVFAIL Responses"> | <name>SERVFAIL Responses</name> | |||
| <t> | <t> | |||
| Server failure is defined in <xref target="RFC1035"/> as | Server failure is defined in <xref target="RFC1035"/> as: | |||
| "The name server was unable to process this query due to a | "The name server was unable to process this query due to a | |||
| problem with the name server." A server failure is signaled | problem with the name server." A server failure is signaled | |||
| by setting the RCODE field to SERVFAIL. | by setting the RCODE field to SERVFAIL. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Authoritative servers | Authoritative servers return SERVFAIL when they don't have any valid | |||
| return SERVFAIL when they don't have | data for a zone. For example, a secondary server has been | |||
| any valid data for a zone. For example, a secondary server has | configured to serve a particular zone but is unable to retrieve or | |||
| been configured to serve a particular zone, but is unable to | refresh the zone data from the primary server. | |||
| retrieve or refresh the zone data from the primary server. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Recursive servers return SERVFAIL in response to a | Recursive servers return SERVFAIL in response to a | |||
| number of different conditions, including many described below. | number of different conditions, including many described below. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Although the extended DNS errors method exists "primarily to extend SE | Although the extended DNS errors method exists "primarily to extend | |||
| RVFAIL to | SERVFAIL to provide additional information," it "does not change the | |||
| provide additional information," it "does not change the processing of | processing of RCODEs" <xref target="RFC8914"/>. This document | |||
| RCODEs" | operates at the level of resolution failure and does not concern | |||
| <xref target="RFC8914"/>. | particular causes. | |||
| This document operates at the level of resolution failure and does not | ||||
| concern particular causes. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="REFUSED Responses"> | <name>REFUSED Responses</name> | |||
| <t> | <t> | |||
| A name server returns a message with the RCODE field set to REFUSED wh en it refuses to | A name server returns a message with the RCODE field set to REFUSED wh en it refuses to | |||
| process the query, e.g., for policy or other reasons <xref target="RFC 1035"/>. | process the query, e.g., for policy or other reasons <xref target="RFC 1035"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Authoritative servers generally return REFUSED when processing | Authoritative servers generally return REFUSED when processing | |||
| a query for which they are not authoritative. For example, | a query for which they are not authoritative. For example, | |||
| a server that is configured to be authoritative for only the | a server that is configured to be authoritative for only the | |||
| example.net zone, may return REFUSED in response to a query | example.net zone may return REFUSED in response to a query | |||
| for example.com. | for example.com. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Recursive servers generally return REFUSED for query | Recursive servers generally return REFUSED for query | |||
| sources that do not match configured access control lists. | sources that do not match configured access control lists. | |||
| For example, a server that is configured to allow queries from | For example, a server that is configured to allow queries from | |||
| only 2001:db8:1::/48 may return REFUSED in response to a query | only 2001:db8:1::/48 may return REFUSED in response to a query | |||
| from 2001:db8:5::1. | from 2001:db8:5::1. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="Timeouts and Unreachable Servers"> | <name>Timeouts and Unreachable Servers</name> | |||
| <t> | <t> | |||
| A timeout occurs when a resolver fails to receive any | A timeout occurs when a resolver fails to receive any response from | |||
| response from a server within a reasonable amount of time. | a server within a reasonable amount of time. Additionally, a DNS | |||
| Additionally, a DNS transport may more quickly indicate lack | transport may more quickly indicate lack of reachability in a way | |||
| of reachability in a way that wouldn't be considered a timeout. | that wouldn't be considered a timeout: for example, an ICMP port | |||
| For example: an ICMP port unreachable message, a TCP "connection refus | unreachable message, a TCP "connection refused" error, or a TLS | |||
| ed" error, or a TLS handshake failure. | handshake failure. <xref target="RFC2308"/> refers to these | |||
| <xref target="RFC2308"/> refers to these conditions collectively as "d | conditions collectively as "dead / unreachable servers". | |||
| ead / unreachable | ||||
| servers." | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that resolver implementations may have two types of | Note that resolver implementations may have two types of | |||
| timeouts: a smaller timeout which might trigger a query retry | timeouts: a smaller timeout that might trigger a query retry | |||
| and a larger timeout after which the server is considered | and a larger timeout after which the server is considered | |||
| unresponsive. <xref target="reqs-retries-timeouts"/> discusses | unresponsive. <xref target="reqs-retries-timeouts"/> discusses | |||
| the requirements for resolvers when retrying queries. | the requirements for resolvers when retrying queries. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Timeouts can present a particular problem for negative | Timeouts can present a particular problem for negative | |||
| caching, depending on how the resolver handles multiple, | caching, depending on how the resolver handles multiple | |||
| outstanding queries for the same <query name, type, | outstanding queries for the same <query name, type, | |||
| class> tuple. For example, consider a very popular | class> tuple. For example, consider a very popular | |||
| website in a zone whose name servers are all unresponsive. | website in a zone whose name servers are all unresponsive. | |||
| A recursive resolver might receive tens or hundreds of queries | A recursive resolver might receive tens or hundreds of queries | |||
| per second for the popular website. If the recursive server | per second for that website. If the recursive server | |||
| implementation "joins" these outstanding queries together, | implementation joins these outstanding queries together, | |||
| then it only sends one recursive-to-authoritative query for | then it only sends one recursive-to-authoritative query for | |||
| the numerous pending stub-to-recursive queries. If, however, | the numerous pending stub-to-recursive queries. However, if | |||
| the implementation does not join outstanding queries together, | the implementation does not join outstanding queries together, | |||
| then it sends one recursive-to-authoritative query for each | then it sends one recursive-to-authoritative query for each | |||
| stub-to-recursive query. If the incoming query rate is high | stub-to-recursive query. If the incoming query rate is high | |||
| and the timeout is large, this might result in hundreds or | and the timeout is large, this might result in hundreds or | |||
| thousands of recursive-to-authoritative queries while waiting | thousands of recursive-to-authoritative queries while waiting | |||
| for an authoritative server to time out. | for an authoritative server to time out. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A recursive resolver that does not join outstanding queries | A recursive resolver that does not join outstanding queries together | |||
| together is more susceptible to birthday attacks (<xref | is more susceptible to Birthday Attacks (<xref target="RFC5452" | |||
| target="RFC5452"/> Section 5), especially when those queries | sectionFormat="comma" section="5"/>), especially when those queries | |||
| result in timeouts. | result in timeouts. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Delegation Loops"> | <section> | |||
| <name>Delegation Loops</name> | ||||
| <t> | <t> | |||
| A delegation loop, or cycle, can occur when one domain utilizes | A delegation loop, or cycle, can occur when one domain utilizes | |||
| name servers in a second domain, and the second domain uses | name servers in a second domain, and the second domain uses | |||
| name servers in the first. For example: | name servers in the first. For example: | |||
| </t> | </t> | |||
| <figure><artwork align="left"><![CDATA[ | <sourcecode type="dns-rr"><![CDATA[ | |||
| FOO.EXAMPLE. NS NS1.EXAMPLE.COM. | FOO.EXAMPLE. NS NS1.EXAMPLE.COM. | |||
| FOO.EXAMPLE. NS NS2.EXAMPLE.COM. | FOO.EXAMPLE. NS NS2.EXAMPLE.COM. | |||
| EXAMPLE.COM. NS NS1.FOO.EXAMPLE. | EXAMPLE.COM. NS NS1.FOO.EXAMPLE. | |||
| EXAMPLE.COM. NS NS2.FOO.EXAMPLE. | EXAMPLE.COM. NS NS2.FOO.EXAMPLE. | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | <t> | |||
| In this example, no names under foo.example or example.com can be | In this example, no names under foo.example or example.com can be | |||
| resolved because of the delegation loop. Note that a delegation loop | resolved because of the delegation loop. Note that a delegation loop | |||
| may involve more than two domains. A resolver that does not | may involve more than two domains. A resolver that does not | |||
| detect delegation loops may generate DDoS-levels of attack traffic | detect delegation loops may generate DDoS-levels of attack traffic | |||
| to authoritative name servers, as documented in the TsuNAME vulnerabil ity | to authoritative name servers, as documented in the TsuNAME vulnerabil ity | |||
| <xref target="TsuNAME"/>. | <xref target="TsuNAME"/>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="Alias Loops"> | <name>Alias Loops</name> | |||
| <t> | <t> | |||
| An alias loop, or cycle, can occur when one CNAME or DNAME RR refers t o | An alias loop, or cycle, can occur when one CNAME or DNAME RR refers t o | |||
| a second name, which in turn is specified as an alias for the first. | a second name, which, in turn, is specified as an alias for the first. | |||
| For example: | For example: | |||
| </t> | </t> | |||
| <figure><artwork align="left"><![CDATA[ | <sourcecode type="dns-rr"><![CDATA[ | |||
| APP.FOO.EXAMPLE. CNAME APP.EXAMPLE.NET. | APP.FOO.EXAMPLE. CNAME APP.EXAMPLE.NET. | |||
| APP.EXAMPLE.NET. CNAME APP.FOO.EXAMPLE. | APP.EXAMPLE.NET. CNAME APP.FOO.EXAMPLE. | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| <t> | <t> | |||
| The need to detect CNAME loops has been known since at least | The need to detect CNAME loops has been known since at least <xref | |||
| <xref target="RFC1034"/> which states in Section 3.6.2: | target="RFC1034"/>, which states in Section <xref target="RFC1034" | |||
| </t> | sectionFormat="bare" section="3.6.2"/>: | |||
| <t> | </t> | |||
| "Of course, by the robustness principle, domain software should | <blockquote> | |||
| Of course, by the robustness principle, domain software should | ||||
| not fail when presented with CNAME chains or loops; CNAME chains | not fail when presented with CNAME chains or loops; CNAME chains | |||
| should be followed and CNAME loops signaled as an error." | should be followed and CNAME loops signalled as an error. | |||
| </t> | </blockquote> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="DNSSEC Validation Failures"> | <name>DNSSEC Validation Failures</name> | |||
| <t> | <t> | |||
| For zones that are signed with DNSSEC, a resolution failure can | For zones that are signed with DNSSEC, a resolution failure can | |||
| occur when a security-aware resolver believes it should be able | occur when a security-aware resolver believes it should be able | |||
| to establish a chain-of-trust for an RRset but is unable to do | to establish a chain of trust for an RRset but is unable to do | |||
| so, possibly after trying multiple authoritative name servers. | so, possibly after trying multiple authoritative name servers. | |||
| DNSSEC validation failures may be due to signature mismatch, | DNSSEC validation failures may be due to signature mismatch, | |||
| missing DNSKEY RRs, problems with denial-of-existence records, | missing DNSKEY RRs, problems with denial-of-existence records, | |||
| clock skew, | clock skew, | |||
| or other reasons. | or other reasons. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Section 4.7 of <xref target="RFC4035"/> already discusses | <xref target="RFC4035" sectionFormat="of" section="4.7"/> already disc usses | |||
| the requirements and reasons for caching validation failures. | the requirements and reasons for caching validation failures. | |||
| <xref target="dnssec-reqs"/> of this document strengthens those requir ements. | <xref target="dnssec-reqs"/> of this document strengthens those requir ements. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="FORMERR Responses"> | <name>FORMERR Responses</name> | |||
| <t> | <t> | |||
| A name server returns a message with the RCODE field set to | A name server returns a message with the RCODE field set to | |||
| FORMERR when it is unable to interpret the query <xref target="RFC1035 "/>. FORMERR | FORMERR when it is unable to interpret the query <xref target="RFC1035 "/>. FORMERR | |||
| responses are often associated with problems processing EDNS(0) | responses are often associated with problems processing Extension Mech | |||
| Extensions <xref target="RFC6891"/>. Authoritative servers | anisms for DNS (EDNS(0)) <xref target="RFC6891"/>. Authoritative servers | |||
| may return FORMERR when they do not implement EDNS(0), or | may return FORMERR when they do not implement EDNS(0), or | |||
| when EDNS(0) option fields are malformed, but not for unknown | when EDNS(0) option fields are malformed, but not for unknown | |||
| EDNS(0) options. | EDNS(0) options. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Upon receipt of a FORMERR response, some recursive clients will | Upon receipt of a FORMERR response, some recursive clients will | |||
| retry their queries without EDNS(0), while others will not. Nonethele ss, resolution failures | retry their queries without EDNS(0), while others will not. Nonethele ss, resolution failures | |||
| from FORMERR responses are rare. | from FORMERR responses are rare. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| skipping to change at line 556 ¶ | skipping to change at line 488 ¶ | |||
| may return FORMERR when they do not implement EDNS(0), or | may return FORMERR when they do not implement EDNS(0), or | |||
| when EDNS(0) option fields are malformed, but not for unknown | when EDNS(0) option fields are malformed, but not for unknown | |||
| EDNS(0) options. | EDNS(0) options. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Upon receipt of a FORMERR response, some recursive clients will | Upon receipt of a FORMERR response, some recursive clients will | |||
| retry their queries without EDNS(0), while others will not. Nonethele ss, resolution failures | retry their queries without EDNS(0), while others will not. Nonethele ss, resolution failures | |||
| from FORMERR responses are rare. | from FORMERR responses are rare. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="Requirements for Caching DNS Resolution Failures"> | <name>Requirements for Caching DNS Resolution Failures</name> | |||
| <section anchor="reqs-retries-timeouts"> | ||||
| <section title="Retries and Timeouts" anchor="reqs-retries-timeouts"> | <name>Retries and Timeouts</name> | |||
| <t> | <t> | |||
| A resolver MUST NOT retry a given query to a server address over a giv en DNS transport more than twice | A resolver <bcp14>MUST NOT</bcp14> retry a given query to a server add ress over a given DNS transport more than twice | |||
| (i.e., three queries in total) before considering the server address | (i.e., three queries in total) before considering the server address | |||
| unresponsive over that DNS transport for that query. | unresponsive over that DNS transport for that query. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A resolver MAY retry a given query over a different DNS transport to t he same server | A resolver <bcp14>MAY</bcp14> retry a given query over a different DNS transport to the same server | |||
| if it has reason to believe the DNS transport is available for that se rver and is | if it has reason to believe the DNS transport is available for that se rver and is | |||
| compatible with the resolver's security policies. | compatible with the resolver's security policies. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This document does not place any requirements on how long an implement ation should | This document does not place any requirements on how long an implement ation should | |||
| wait before retrying a query (aka timeout value), | wait before retrying a query (aka a timeout value), | |||
| which may be implementation- or configuration-dependent. | which may be implementation or configuration dependent. | |||
| It is generally expected that typical timeout values range | It is generally expected that typical timeout values range | |||
| from 3 to 30 seconds. | from 3 to 30 seconds. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="caching"> | ||||
| <section title="Caching" anchor="caching"> | <name>Caching</name> | |||
| <t> | <t> | |||
| Resolvers MUST implement a cache for resolution failures. | Resolvers <bcp14>MUST</bcp14> implement a cache for resolution failure s. | |||
| The purpose of this cache is to eliminate repeated upstream | The purpose of this cache is to eliminate repeated upstream | |||
| queries that cannot be resolved. | queries that cannot be resolved. | |||
| When an incoming query matches a cached resolution failure, the resolv er MUST NOT send | When an incoming query matches a cached resolution failure, the resolv er <bcp14>MUST NOT</bcp14> send | |||
| any corresponding outgoing queries until after the cache entries expir e. | any corresponding outgoing queries until after the cache entries expir e. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Implementation details for such a cache are not specified | Implementation details for such a cache are not specified | |||
| in this document. The implementation might cache different | in this document. The implementation might cache different | |||
| resolution failure conditions differently. For example, DNSSEC | resolution failure conditions differently. For example, DNSSEC | |||
| validation failures might be cached according to the queried | validation failures might be cached according to the queried | |||
| name, class, and type, whereas unresponsive servers might be | name, class, and type, whereas unresponsive servers might be | |||
| cached only according to the server's IP address. | cached only according to the server's IP address. | |||
| Developers should document their implementation choices so | Developers should document their implementation choices so | |||
| that operators know what behaviors to expect when resolution | that operators know what behaviors to expect when resolution | |||
| failures are cached. | failures are cached. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Resolvers MUST cache resolution failures for at least 1 second. | Resolvers <bcp14>MUST</bcp14> cache resolution failures for at least | |||
| Resolvers MAY cache different types of resolution failures for differe | 1 second. Resolvers <bcp14>MAY</bcp14> cache different types of | |||
| nt (i.e., longer) amounts of time. | resolution failures for different (i.e., longer) amounts of time. | |||
| Consistent with <xref target="RFC2308"/>, resolution failures MUST NOT | Consistent with <xref target="RFC2308"/>, resolution failures | |||
| be cached for longer than | <bcp14>MUST NOT</bcp14> be cached for longer than 5 minutes. | |||
| 5 minutes. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The minimum cache duration SHOULD be configurable by the operator. | The minimum cache duration <bcp14>SHOULD</bcp14> be configurable by | |||
| A longer cache duration for resolution failures will | the operator. A longer cache duration for resolution failures will | |||
| reduce the processing burden from repeated queries, but | reduce the processing burden from repeated queries but may also | |||
| may also increase the time to recover from transitory issues. | increase the time to recover from transitory issues. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Resolvers SHOULD employ an exponential or linear backoff algorithm to | Resolvers <bcp14>SHOULD</bcp14> employ an exponential or linear | |||
| increase the cache duration for persistent resolution failures. For ex | backoff algorithm to increase the cache duration for persistent | |||
| ample, | resolution failures. For example, the initial time for negatively | |||
| the initial time for negatively caching a resolution failure | caching a resolution failure might be set to 5 seconds and | |||
| might be set to 5 seconds, and increased after each retry that results | increased after each retry that results in another resolution | |||
| in another resolution failure, up to a configurable maximum, not to ex | failure, up to a configurable maximum, not to exceed the 5-minute | |||
| ceed the 5-minute upper limit. | upper limit. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Notwithstanding the above, resolvers SHOULD implement measures to miti | Notwithstanding the above, resolvers <bcp14>SHOULD</bcp14> implement | |||
| gate resource exhaustion | measures to mitigate resource exhaustion attacks on the failed | |||
| attacks on the failed resolution cache. That is, the resolver should l | resolution cache. That is, the resolver should limit the amount of | |||
| imit the amount of memory | memory and/or processing time devoted to this cache. | |||
| and/or processing time devoted to this cache. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section> | ||||
| <section title="Requerying Delegation Information"> | <name>Requerying Delegation Information</name> | |||
| <t> | <t> | |||
| Section 2.1 of <xref target="RFC4697"/> identifies circumstances in which | <xref target="RFC4697" sectionFormat="of" section="2.1"/> identifies | |||
| "every | circumstances in which:</t> | |||
| name server in a zone's NS RRSet is unreachable (e.g., during a network | <blockquote>...every name server in a zone's NS RRSet is unreachable | |||
| outage), | (e.g., during a network outage), unavailable (e.g., the name server | |||
| unavailable (e.g., the name server process is not running on the server | process is not running on the server host), or misconfigured (e.g., | |||
| host), or | the name server is not authoritative for the given zone, also known as | |||
| misconfigured (e.g., the name server is not authoritative for the give | "lame").</blockquote> | |||
| n zone, | <t>It prohibits unnecessary "aggressive requerying" to the | |||
| also known as 'lame')." It prohibits unnecessary "aggressive requeryin | ||||
| g" to the | ||||
| parent of a non-responsive zone by sending NS queries. | parent of a non-responsive zone by sending NS queries. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The problem of aggressive requerying to parent zones is not limited to | The problem of aggressive requerying to parent zones is not limited | |||
| queries of type NS. | to queries of type NS. This document updates the requirement from | |||
| This document updates the requirement from section 2.1.1 of <xref targ | <xref target="RFC4697" sectionFormat="of" section="2.1.1"/> to apply | |||
| et="RFC4697"/> | more generally:</t> | |||
| to apply more generally: | <blockquote> | |||
| Upon encountering a zone whose name servers are all non-responsive, | Upon encountering a zone whose name servers are all | |||
| a resolver MUST cache the resolution failure. | non-responsive, a resolver <bcp14>MUST</bcp14> cache the resolution | |||
| Furthermore, the resolver MUST limit queries to the non-responsive | failure. Furthermore, the resolver <bcp14>MUST</bcp14> limit | |||
| zone's parent zone (and to other ancestor zones) just as it | queries to the non-responsive zone's parent zone (and to other | |||
| would limit subsequent queries to the non-responsive zone. | ancestor zones) just as it would limit subsequent queries to the | |||
| </t> | non-responsive zone.</blockquote> | |||
| </section> | ||||
| <section title="DNSSEC Validation Failures" anchor="dnssec-reqs"> | </section> | |||
| <section anchor="dnssec-reqs"> | ||||
| <name>DNSSEC Validation Failures</name> | ||||
| <t> | <t> | |||
| Section 4.7 of <xref target="RFC4035"/> states: | <xref target="RFC4035" sectionFormat="of" section="4.7"/> states: | |||
| </t> | </t> | |||
| <t> | <blockquote> | |||
| To prevent such unnecessary DNS traffic, security-aware | To prevent such unnecessary DNS traffic, security-aware | |||
| resolvers MAY cache data with invalid signatures, with some | resolvers <bcp14>MAY</bcp14> cache data with invalid signatures, with some | |||
| restrictions. | restrictions. | |||
| </t> | </blockquote> | |||
| <t> | <t> | |||
| This document updates <xref target="RFC4035"/> with the following, str onger requirement: | This document updates <xref target="RFC4035"/> with the following, str onger, requirement: | |||
| </t> | </t> | |||
| <t> | <blockquote> | |||
| To prevent such unnecessary DNS traffic, security-aware | To prevent such unnecessary DNS traffic, security-aware | |||
| resolvers MUST cache DNSSEC validation failures, with some | resolvers <bcp14>MUST</bcp14> cache DNSSEC validation failures, with s ome | |||
| restrictions. | restrictions. | |||
| </t> | </blockquote> | |||
| <t> | <t> | |||
| One of the restrictions mentioned in <xref target="RFC4035"/> | One of the restrictions mentioned in <xref target="RFC4035"/> | |||
| is to use a small TTL when caching data that fails DNSSEC | is to use a small TTL when caching data that fails DNSSEC | |||
| validation. This is, in part, because the provided TTL cannot | validation. This is, in part, because the provided TTL cannot | |||
| be trusted. The advice from <xref target="caching"/> | be trusted. The advice from <xref target="caching"/> | |||
| herein can be used as guidance on TTLs for caching DNSSEC | herein can be used as guidance on TTLs for caching DNSSEC | |||
| validation failures. | validation failures. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="iana"> | ||||
| <section title="IANA Considerations" anchor="iana"> | <name>IANA Considerations</name> | |||
| <t> | <t> | |||
| This document has no IANA actions. | This document has no IANA actions. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="security"> | ||||
| <section title="Security Considerations" anchor="security"> | <name>Security Considerations</name> | |||
| <t> | <t> | |||
| As noted in <xref target="caching"/>, an attacker might attempt a resour ce | As noted in <xref target="caching"/>, an attacker might attempt a resour ce | |||
| exhaustion attack by sending queries for a large number | exhaustion attack by sending queries for a large number | |||
| of names and/or types that result in resolution failure. Resolvers | of names and/or types that result in resolution failure. Resolvers | |||
| SHOULD implement measures to protect themselves and bound the | <bcp14>SHOULD</bcp14> implement measures to protect themselves and bound the | |||
| amount of memory devoted to caching resolution failures. | amount of memory devoted to caching resolution failures. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| A cache poisoning attack (see section 2.2 of <xref target="RFC7873"/>) | A cache poisoning attack (see <xref target="RFC7873" | |||
| resulting in denial of service | sectionFormat="of" section="2.2"/>) resulting in denial of service may b | |||
| may be possible because failure messages cannot be | e possible | |||
| signed. An attacker might generate queries and send forged failure messa | because failure messages cannot be signed. An attacker might generate | |||
| ges, | queries and send forged failure messages, causing the resolver to | |||
| causing the resolver to cease sending queries to the authoritative name | cease sending queries to the authoritative name server (see <xref | |||
| server | target="RFC4732" sectionFormat="of" section="2.6"/> for a similar | |||
| (see 2.6 of <xref target="RFC4732"/> for a similar "data corruption atta | "data corruption attack" and Section 5.2 of <xref target="TuDoor"/> | |||
| ck"). | for a "DNSDoS attack"). However, this would require continued | |||
| However, this would require continued spoofing throughout the backoff pe | spoofing throughout the backoff period and repeated attacks due to the | |||
| riod and required attacks | 5-minute cache limit. As in <xref target="RFC4686" sectionFormat="of" | |||
| due to the 5 minute cache limit. As in section 4.1.12 of <xref target="R | section="4.1.12"/>, this attack's effects would be "localized and of | |||
| FC4686"/>, | limited duration". | |||
| this attack's effects would be "localized and of limited duration." | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="privacy"> | ||||
| <section title="Privacy Considerations" anchor="privacy"> | <name>Privacy Considerations</name> | |||
| <t>This specification has no impact on user privacy.</t> | <t>This specification has no impact on user privacy.</t> | |||
| </section> | </section> | |||
| <section title="Acknowledgments" anchor="acknowledgments"> | ||||
| <t> | ||||
| The authors wish to thank | ||||
| Mukund Sivaraman, | ||||
| Petr Spacek, | ||||
| Peter van Dijk, | ||||
| Tim Wicinksi, | ||||
| Joe Abley, | ||||
| Evan Hunt, | ||||
| Barry Leiba, | ||||
| Lucas Pardue, | ||||
| Paul Wouters, | ||||
| and other members of the DNSOP working group for their feedback and cont | ||||
| ributions. | ||||
| </t> | ||||
| </section> | ||||
| <section anchor="Changes" title="Change Log"> | ||||
| <t>RFC Editor: Please remove this section before publication.</t> | ||||
| <t>This section lists substantial changes to the document as it is being w | ||||
| orked on.</t> | ||||
| <t>From -00 to -01: | ||||
| <list style="symbols"> | ||||
| <t>use phrase "the initial TTL for negatively caching a resolution failu | ||||
| re" instead of "negative cache TTL"</t> | ||||
| <t>typos, etc</t> | ||||
| </list></t> | ||||
| <t>From dwmtwc-01 to ietf-00: | ||||
| <list style="symbols"> | ||||
| <t>Adopted by WG</t> | ||||
| </list></t> | ||||
| <t>From -00 to -01: | ||||
| <list style="symbols"> | ||||
| <t>Clarify retries and timeouts to apply on a per-query basis.</t> | ||||
| <t>Say more about the 5 second caching requirement in TTLs section.</t> | ||||
| <t>Expanded opening paragraphs of section 2, now titled "Conditions That | ||||
| Lead To DNS Resolution Failures".</t> | ||||
| <t>Text from the former section 3.3 ("Scope") moved to top of section 2. | ||||
| </t> | ||||
| <t>Section 3.2 was formerly "TTLs" and is now "Caching". The draft no l | ||||
| onger requires e.g. caching by tuples, but now just requires caching failures so | ||||
| that repeated queries are not sent out.</t> | ||||
| <t>State that resolvers should protect themselves from cache resource ex | ||||
| haustion attacks.</t> | ||||
| </list></t> | ||||
| <t>From -01 to -02: | ||||
| <list style="symbols"> | ||||
| <t>Added cache poisoning attack to Security Considerations.</t> | ||||
| </list></t> | ||||
| <t>From -02 to -03: | ||||
| <list style="symbols"> | ||||
| <t>Added missing reference to Verisign blog post.</t> | ||||
| </list></t> | ||||
| <t>From -03 to -04: | ||||
| <list style="symbols"> | ||||
| <t>Address most of Peter van Dijk's DNS Directorate review comments.</t | ||||
| > | ||||
| <t>Removed "For Discussion" section from introduction referencing appar | ||||
| ent inconsistent RFC2119 keyword use in RFC2308.</t> | ||||
| <t>Replaced "For Discussion" section from "Requerying Delegation Inform | ||||
| ation" to generalize RFC 4697 requirements not to requery parent zones to cover | ||||
| all query types.</t> | ||||
| <t>Replaced "For Discussion" section from "DNSSEC Validation Failures" | ||||
| to strengthen RFC 4035 to require caching of DNSSEC validation failures.</t> | ||||
| <t>Added RFC 4035 and RFC 4697 to updated RFCs list.</t> | ||||
| <t>Added (empty) Implementation Status section.</t> | ||||
| </list></t> | ||||
| <t>From -04 to -05: | ||||
| <list style="symbols"> | ||||
| <t>Expanded abstract to include updates to RFCs 4035 and 4697.</t> | ||||
| <t>Removed reference to unused terms from RFC 8126.</t> | ||||
| <t>Reworded "server transport" to "a server address over a given transp | ||||
| ort".</t> | ||||
| <t>Added explanatory text in "Server Failure" section for exclusion of | ||||
| extended DNS errors</t> | ||||
| <t>Changed "Timeouts" section to "Timeouts and Unreachable Servers" and | ||||
| added reference to transport layer indicators from RFC 2308.</t> | ||||
| <t>Clarified meaning of "timeout value".</t> | ||||
| </list></t> | ||||
| <t>From -05 to -06: | ||||
| <list style="symbols"> | ||||
| <t>Changed minimum 5 second caching to 1 second, with other changes to g | ||||
| ive implementors and operators more leeway.</t> | ||||
| <t>Changed "exponential backoff" to more general concept of increasing b | ||||
| ackoff.</t> | ||||
| <t>Added some implementation status notes for BIND, from dnsop list emai | ||||
| l.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>From -06 to -07: | ||||
| <list style="symbols"> | ||||
| <t>Artart review: minor editorial clarifications</t> | ||||
| <t>Genart review: remove confusing and superfluous section references.</ | ||||
| t> | ||||
| <t>Genart review: clarify resolution failure caching time range.</t> | ||||
| <t>Genart review: better define DNS transports</t> | ||||
| <t>Dnsdir review: clarify FORMERR response retries.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>From -07 to -08: | ||||
| <list style="symbols"> | ||||
| <t>"only exacerbated" -> "further exacerbated"</t> | ||||
| <t>lowercase IPv6 addresses</t> | ||||
| <t>lowercase example domain in text</t> | ||||
| <t>updated introduction to include all updated RFCs</t> | ||||
| <t>change 3.2 SHOULD to should</t> | ||||
| <t>section 3.4: say a little about "some restrictions" from RFC 4035</t> | ||||
| <t>Intdir telechat review: a few grammatical nits</t> | ||||
| <t>Various IESG reviewer suggestions</t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | ||||
| <section title="Implementation Status"> | ||||
| <t> | ||||
| RFC Editor: Please remove this section before publication. | ||||
| </t> | ||||
| <t> | ||||
| This section records the status of known implementations of the | ||||
| protocol defined by this specification at the time of posting of | ||||
| this Internet-Draft, and is based on a proposal described in | ||||
| RFC 7942. The description of implementations in this section is | ||||
| intended to assist the IETF in its decision processes in | ||||
| progressing drafts to RFCs. Please note that the listing of any | ||||
| individual implementation here does not imply endorsement by the | ||||
| IETF. Furthermore, no effort has been spent to verify the | ||||
| information presented here that was supplied by IETF contributors. | ||||
| This is not intended as, and must not be construed to be, a | ||||
| catalog of available implementations or their features. Readers | ||||
| are advised to note that other implementations may exist. | ||||
| </t> | ||||
| <section title="BIND"> | ||||
| <t> | ||||
| The following is excerpted from a message to the dnsop mailing list re | ||||
| garding | ||||
| how BIND caches resolution failures: | ||||
| </t> | ||||
| <t> | ||||
| BIND implemented a SERVFAIL cache in 2014 with a default | ||||
| cache duration of 10 seconds; after a slew of complaints, in 2015 we | ||||
| lowered it to 1 second, and also reduced the configurable maximum from | ||||
| 5 minutes to 30 seconds. The reason was that certain common failure | ||||
| conditions are transitory, and it's not unreasonable to prioritize | ||||
| rapid recovery. | ||||
| </t> | ||||
| <t> | ||||
| Now, to be clear, the comparison isn't exactly apples to apples: the B | ||||
| IND | ||||
| SERVFAIL cache is a somewhat stupider mechanism than the one outlined | ||||
| in | ||||
| the draft. It caches *all* SERVFAIL responses, regardless of the reaso | ||||
| n | ||||
| they were generated. For example: when the cache is cold, a query may | ||||
| time | ||||
| out or hit DDoS mitigation limits before it's finished getting through | ||||
| the | ||||
| whole iteration process; an immediate retry would start further along | ||||
| the | ||||
| delegation chain and would succeed. Such problems weren't noticeable u | ||||
| ntil | ||||
| we implemented the 10-second cache, but became very noticeable afterwa | ||||
| rd. | ||||
| </t> | ||||
| <t> | ||||
| If we were able to selectively cache *only* those SERVFAILs that are | ||||
| unlikely to recover soon, then five seconds might indeed be a good sta | ||||
| rting | ||||
| point. But, with our relatively dumb cache, we found that one second d | ||||
| id a | ||||
| fairly good job reducing the processing burden from repeated queries, | ||||
| and | ||||
| eliminated the user complaints about the resolver taking forever to re | ||||
| cover | ||||
| from short-lived problems. It's been working well enough that it hasn' | ||||
| t | ||||
| been a priority to develop a more complex failure cache. | ||||
| </t> | ||||
| </section> | ||||
| </section> | ||||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | <displayreference target="I-D.muks-dnsop-dns-thundering-herd" to="THUNDERING-HER | |||
| &RFC1034; | D"/> | |||
| &RFC1035; | ||||
| &RFC2119; | ||||
| &RFC2308; | ||||
| &RFC4035; | ||||
| &RFC4697; | ||||
| &RFC8174; | ||||
| </references> | ||||
| <references title="Informative References"> | <references> | |||
| &RFC0882; | <name>References</name> | |||
| &RFC0883; | <references> | |||
| &RFC4686; | <name>Normative References</name> | |||
| &RFC4732; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1 | |||
| &RFC5452; | 034.xml"/> | |||
| &RFC6891; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1 | |||
| &RFC7766; | 035.xml"/> | |||
| &RFC7858; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
| &RFC7873; | 119.xml"/> | |||
| &RFC8484; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2 | |||
| &RFC8767; | 308.xml"/> | |||
| &RFC8914; | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | |||
| &RFC9250; | 035.xml"/> | |||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | ||||
| 697.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 174.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0 | ||||
| 882.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0 | ||||
| 883.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | ||||
| 686.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4 | ||||
| 732.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5 | ||||
| 452.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6 | ||||
| 891.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 766.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 858.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7 | ||||
| 873.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 484.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 767.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8 | ||||
| 914.xml"/> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9 | ||||
| 250.xml"/> | ||||
| <reference anchor="botnet" target="https://indico.dns-oarc.net/event/38/con tributions/841/"> | <reference anchor="TuDoor" target="https://doi.ieeecomputersociety.org/10. 1109/SP54263.2024.00046"> | |||
| <front> | <front> | |||
| <title>Botnet Traffic Observed at Various Levels of the DNS Hierarchy< | <title>TuDoor Attack: Systematically Exploring and Exploiting Logic Vu | |||
| /title> | lnerabilities in DNS Response Pre-processing with Malformed Packets</title> | |||
| <author initials="D." surname="Wessels" fullname="Duane Wessels"/> | <author fullname="Xiang Li" initials="X." surname="Li"/> | |||
| <author initials="M." surname="Thomas" fullname="Matt Thomas"/> | <author fullname="Wei Xu" initials="W." surname="Xu"/> | |||
| <date year="2021" month="May"/> | <author fullname="Baojun Liu" initials="B." surname="Liu"/> | |||
| <author fullname="Mingming Zhang" initials="M." surname="Zhang"/> | ||||
| <author fullname="Zhou Li" initials="Z." surname="Li"/> | ||||
| <author fullname="Jia Zhang" initials="J." surname="Zhang"/> | ||||
| <author fullname="Deliang Chang" initials="D." surname="Chang"/> | ||||
| <author fullname="Xiaofeng Zheng" initials="X." surname="Zheng"/> | ||||
| <author fullname="Chuhan Wang" initials="C." surname="Wang"/> | ||||
| <author fullname="Jianjun Chen" initials="J." surname="Chen"/> | ||||
| <author fullname="Haixin Duan" initials="H." surname="Duan"/> | ||||
| <author fullname="Qi Li" initials="Q." surname="Li"/> | ||||
| <date year="2024"/> | ||||
| </front> | </front> | |||
| </reference> | <refcontent>IEEE Symposium on Security and Privacy (SP)</refcontent> | |||
| <seriesInfo name="DOI" value="10.1109/SP54263.2024.00046"/> | ||||
| </reference> | ||||
| <reference anchor="fb-outage" target="https://engineering.fb.com/2021/10/05 | <reference anchor="BOTNET" target="https://indico.dns-oarc.net/event/38/ | |||
| /networking-traffic/outage-details/"> | contributions/841/"> | |||
| <front> | <front> | |||
| <title>More details about the October 4 outage</title> | <title>Botnet Traffic Observed at Various Levels of the DNS Hierarch | |||
| <author initials="S." surname="Janardhan" fullname="Santosh Janardhan" | y</title> | |||
| /> | <author initials="D." surname="Wessels" fullname="Duane Wessels"/> | |||
| <date year="2021" month="October"/> | <author initials="M." surname="Thomas" fullname="Matt Thomas"/> | |||
| </front> | <date year="2021" month="May"/> | |||
| </reference> | </front> | |||
| </reference> | ||||
| <reference anchor="fb-outage-verisign" target="https://blog.verisign.com/se | <reference anchor="FB-OUTAGE" target="https://engineering.fb.com/2021/10 | |||
| curity/facebook-dns-outage/"> | /05/networking-traffic/outage-details/"> | |||
| <front> | <front> | |||
| <title>Observations on Resolver Behavior During DNS Outages</title> | <title>More details about the October 4 outage</title> | |||
| <author> | <author initials="S." surname="Janardhan" fullname="Santosh Janardha | |||
| <organization>Verisign</organization> | n"/> | |||
| </author> | <date year="2021" month="October"/> | |||
| <date year="2022" month="January" day="20"/> | </front> | |||
| </front> | </reference> | |||
| </reference> | ||||
| <reference anchor="TsuNAME" target="https://dl.acm.org/doi/10.1145/3487552. | <reference anchor="OUTAGE-RESOLVER" target="https://blog.verisign.com/se | |||
| 3487824"> | curity/facebook-dns-outage/"> | |||
| <front> | <front> | |||
| <title>TsuNAME: exploiting misconfiguration and vulnerability to DDoS | <title>Observations on Resolver Behavior During DNS Outages</title> | |||
| DNS</title> | <author> | |||
| <author initials="G. C. M." surname="Moura" fullname="Giovane C. M. Mo | <organization>Verisign</organization> | |||
| ura"/> | </author> | |||
| <author initials="S." surname="Castro" fullname="Sebastian Castro"/> | <date year="2022" month="January"/> | |||
| <author initials="J." surname="Heidemann" fullname="John Heidemann"/> | </front> | |||
| <author initials="W." surname="Hardaker" fullname="Wes Hardaker"/> | </reference> | |||
| <date year="2021" month="November"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="roll-over-and-die" target="https://www.potaroo.net/ispco | <reference anchor="TsuNAME"> | |||
| l/2010-02/rollover.html"> | <front> | |||
| <front> | <title>TsuNAME: exploiting misconfiguration and vulnerability to DDo | |||
| <title>Roll Over and Die?</title> | S DNS</title> | |||
| <author initials="G." surname="Michaleson" fullname="George Michaleson | <author initials="G. C. M." surname="Moura" fullname="Giovane C. M. | |||
| "/> | Moura"/> | |||
| <author initials="P." surname="Wallström" fullname="Patrik Wallst | <author initials="S." surname="Castro" fullname="Sebastian Castro"/> | |||
| röm"/> | <author initials="J." surname="Heidemann" fullname="John Heidemann"/ | |||
| <author initials="R." surname="Arends" fullname="Roy Arends"/> | > | |||
| <author initials="G." surname="Huston" fullname="Geoff Huston"/> | <author initials="W." surname="Hardaker" fullname="Wes Hardaker"/> | |||
| <date year="2010" month="February"/> | <date year="2021" month="November"/> | |||
| </front> | </front> | |||
| </reference> | <refcontent>IMC '21: Proceedings of the 21st ACM Internet | |||
| Measurement Conference, Pages 398-418</refcontent> | ||||
| <seriesInfo name="DOI" value="10.1145/3487552.3487824"/> | ||||
| </reference> | ||||
| <reference anchor="dyn-attack" target="https://ccnso.icann.org/sites/defaul | <reference anchor="DNSSEC-ROLLOVER" target="https://www.potaroo.net/ispc | |||
| t/files/file/field-file-attach/2017-04/presentation-oracle-dyn-ddos-dns-13mar17- | ol/2010-02/rollover.html"> | |||
| en.pdf"> | <front> | |||
| <front> | <title>Roll Over and Die?</title> | |||
| <title>Dyn, DDoS, and DNS</title> | <author initials="G." surname="Michaleson" fullname="George Michales | |||
| <author initials="A." surname="Sullivan" fullname="Andrew Sullivan"/> | on"/> | |||
| <date year="2017" month="March"/> | <author initials="P." surname="Wallström" fullname="Patrik Wallström | |||
| </front> | "/> | |||
| </reference> | <author initials="R." surname="Arends" fullname="Roy Arends"/> | |||
| <author initials="G." surname="Huston" fullname="Geoff Huston"/> | ||||
| <date year="2010" month="February"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="root-ksk-roll" target="https://dl.acm.org/doi/10.1145/33 | <reference anchor="RETRY-STORM" target="https://ccnso.icann.org/sites/de | |||
| 55369.3355570"> | fault/files/file/field-file-attach/2017-04/presentation-oracle-dyn-ddos-dns-13ma | |||
| <front> | r17-en.pdf"> | |||
| <title>Roll, Roll, Roll Your Root: A Comprehensive Analysis of the Fir | <front> | |||
| st Ever DNSSEC Root KSK Rollover</title> | <title>Dyn, DDoS, and DNS</title> | |||
| <author fullname="Moritz Müller" initials="M." surname="Müll | <author initials="A." surname="Sullivan" fullname="Andrew Sullivan"/ | |||
| er"/> | > | |||
| <author fullname="Matthew Thomas" initials="M." surname="Thomas"/> | <date year="2017" month="March"/> | |||
| <author fullname="Duane Wessels" initials="D." surname="Wessels"/> | </front> | |||
| <author fullname="Wes Hardaker" initials="W." surname="Hardaker"/> | </reference> | |||
| <author fullname="Taejoong Chung" initials="T." surname="Chung"/> | ||||
| <author fullname="Willem Toorop" initials="W." surname="Toorop"/> | ||||
| <author fullname="Roland van Rijswijk-Deij" initials="R.v." surname="R | ||||
| ijswijk-Deij"/> | ||||
| <date year="2019" month="Oct"/> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="thundering-herd" target="https://datatracker.ietf.org/d | <reference anchor="KSK-ROLLOVER"> | |||
| oc/draft-muks-dnsop-dns-thundering-herd/"> | <front> | |||
| <front> | <title>Roll, Roll, Roll Your Root: A Comprehensive Analysis of the F | |||
| <title>The DNS thundering herd problem (expired Internet-Draft)</title | irst Ever DNSSEC Root KSK Rollover</title> | |||
| > | <author fullname="Moritz Müller" initials="M." surname="Müller"/> | |||
| <author fullname="Mukund Sivaraman" initials="M." surname="Sivaraman"/ | <author fullname="Matthew Thomas" initials="M." surname="Thomas"/> | |||
| > | <author fullname="Duane Wessels" initials="D." surname="Wessels"/> | |||
| <author fullname="Cricket Liu" initials="C." surname="Liu"/> | <author fullname="Wes Hardaker" initials="W." surname="Hardaker"/> | |||
| <date year="2020" month="Jun"/> | <author fullname="Taejoong Chung" initials="T." surname="Chung"/> | |||
| </front> | <author fullname="Willem Toorop" initials="W." surname="Toorop"/> | |||
| </reference> | <author fullname="Roland van Rijswijk-Deij" initials="R." surname="v | |||
| an Rijswijk-Deij"/> | ||||
| <date year="2019" month="Oct"/> | ||||
| </front> | ||||
| <refcontent>IMC '19: Proceedings of the Internet Measurement Conference | ||||
| , Pages 1-14</refcontent> | ||||
| <seriesInfo name="DOI" value="10.1145/3355369.3355570"/> | ||||
| </reference> | ||||
| <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.m | ||||
| uks-dnsop-dns-thundering-herd.xml"/> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section anchor="acknowledgments" numbered="false"> | ||||
| <name>Acknowledgments</name> | ||||
| <t> | ||||
| The authors wish to thank <contact fullname="Mukund Sivaraman"/>, | ||||
| <contact fullname="Petr Spacek"/>, <contact fullname="Peter van | ||||
| Dijk"/>, <contact fullname="Tim Wicinksi"/>, <contact fullname="Joe | ||||
| Abley"/>, <contact fullname="Evan Hunt"/>, <contact fullname="Barry | ||||
| Leiba"/>, <contact fullname="Lucas Pardue"/>, <contact fullname="Paul | ||||
| Wouters"/>, and other members of the DNSOP Working Group for their | ||||
| feedback and contributions. | ||||
| </t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 114 change blocks. | ||||
| 701 lines changed or deleted | 468 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||