| rfc8767.original.v2v3.xml | rfc8767.form.xml | |||
|---|---|---|---|---|
| <?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
| <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.9 --> | <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.9 --> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" | |||
| -ietf-dnsop-serve-stale-10" category="std" updates="1034, 1035, 2181" obsoletes= | docName="draft-ietf-dnsop-serve-stale-10" number="0000" category="std" updates= | |||
| "" submissionType="IETF" xml:lang="en" tocInclude="true" symRefs="true" sortRefs | "1034, 1035, 2181" obsoletes="" submissionType="IETF" consensus="true" xml:lang= | |||
| ="true" version="3"> | "en" tocInclude="true" symRefs="true" sortRefs="true" version="3"> | |||
| <!-- xml2rfc v2v3 conversion 2.39.0 --> | <!-- xml2rfc v2v3 conversion 2.39.0 --> | |||
| <front> | <front> | |||
| <title abbrev="DNS Serve Stale">Serving Stale Data to Improve DNS Resiliency </title> | <title abbrev="DNS Serve Stale">Serving Stale Data to Improve DNS Resiliency </title> | |||
| <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-serve-stale-10"/> | <seriesInfo name="RFC" value="0000"/> | |||
| <author initials="D.C." surname="Lawrence" fullname="David C Lawrence"> | <author initials="D.C." surname="Lawrence" fullname="David C Lawrence"> | |||
| <organization>Oracle</organization> | <organization>Oracle</organization> | |||
| <address> | <address> | |||
| <email>tale@dd.org</email> | <email>tale@dd.org</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="W." surname="Kumari" fullname="Warren "Ace" Kuma ri"> | <author initials="W." surname="Kumari" fullname="Warren "Ace" Kuma ri"> | |||
| <organization>Google</organization> | <organization>Google</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>1600 Amphitheatre Parkway</street> | <street>1600 Amphitheatre Parkway</street> | |||
| <city>Mountain View</city> | <city>Mountain View</city> | |||
| <code>CA 94043</code> | <region>CA</region> | |||
| <country>USA</country> | <code>94043</code> | |||
| <country>United States of America</country> | ||||
| </postal> | </postal> | |||
| <email>warren@kumari.net</email> | <email>warren@kumari.net</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author initials="P." surname="Sood" fullname="Puneet Sood"> | <author initials="P." surname="Sood" fullname="Puneet Sood"> | |||
| <organization>Google</organization> | <organization>Google</organization> | |||
| <address> | <address> | |||
| <email>puneets@google.com</email> | <email>puneets@google.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date year="2019" month="December" day="09"/> | <date year="2020" month="March"/> | |||
| <area>Internet</area> | <area>Internet</area> | |||
| <workgroup>DNSOP Working Group</workgroup> | <workgroup>DNSOP Working Group</workgroup> | |||
| <keyword>Internet-Draft</keyword> | <keyword>Internet-Draft</keyword> | |||
| <!-- Reviewer: There is also a "0000" in Section 4 that will need to be | ||||
| updated. --> | ||||
| <abstract> | <abstract> | |||
| <t>This draft defines a method (serve-stale) for recursive resolvers to | <t>This draft defines a method (serve-stale) for recursive resolvers to | |||
| use stale DNS data to avoid outages when authoritative nameservers | use stale DNS data to avoid outages when authoritative nameservers | |||
| cannot be reached to refresh expired data. One of the motivations | cannot be reached to refresh expired data. One of the motivations | |||
| for serve-stale is to make the DNS more resilient to DoS attacks, | for serve-stale is to make the DNS more resilient to DoS attacks, | |||
| and thereby make them less attractive as an attack vector. | and thereby make them less attractive as an attack vector. | |||
| This document updates the definitions of TTL from RFC 1034 | This document updates the definitions of TTL from RFC 1034 | |||
| and RFC 1035 so that data can be kept in the cache beyond | and RFC 1035 so that data can be kept in the cache beyond | |||
| the TTL expiry, updates RFC 2181 by interpreting | the TTL expiry, updates RFC 2181 by interpreting | |||
| values with the high order bit set as being positive, rather | values with the high order bit set as being positive, rather | |||
| skipping to change at line 74 ¶ | skipping to change at line 77 ¶ | |||
| <t>We describe a method below for this use of stale data, balancing the | <t>We describe a method below for this use of stale data, balancing the | |||
| competing needs of resiliency and freshness.</t> | competing needs of resiliency and freshness.</t> | |||
| <t>This document updates the definitions of TTL from <xref target="RFC1034 " format="default"/> | <t>This document updates the definitions of TTL from <xref target="RFC1034 " format="default"/> | |||
| and <xref target="RFC1035" format="default"/> so that data can be kept in the ca che beyond | and <xref target="RFC1035" format="default"/> so that data can be kept in the ca che beyond | |||
| the TTL expiry, and also updates <xref target="RFC2181" format="default"/> by in terpreting | the TTL expiry, and also updates <xref target="RFC2181" format="default"/> by in terpreting | |||
| values with the high order bit set as being positive, rather | values with the high order bit set as being positive, rather | |||
| than 0, and also suggests a cap of 7 days.</t> | than 0, and also suggests a cap of 7 days.</t> | |||
| </section> | </section> | |||
| <section anchor="terminology" numbered="true" toc="default"> | <section anchor="terminology" numbered="true" toc="default"> | |||
| <name>Terminology</name> | <name>Terminology</name> | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
| "OPTIONAL" in this document are to be interpreted as described in | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
| BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format=" | "<bcp14>SHOULD NOT</bcp14>", | |||
| default"/> when, and only when, they appear in all | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| capitals, as shown here.</t> | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | |||
| are to be interpreted as described in BCP 14 | ||||
| <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | ||||
| when, they appear in all capitals, as shown here.</t> | ||||
| <t>For a glossary of DNS terms, please see <xref target="RFC8499" format=" default"/>.</t> | <t>For a glossary of DNS terms, please see <xref target="RFC8499" format=" default"/>.</t> | |||
| </section> | </section> | |||
| <section anchor="background" numbered="true" toc="default"> | <section anchor="background" numbered="true" toc="default"> | |||
| <name>Background</name> | <name>Background</name> | |||
| <t>There are a number of reasons why an authoritative server may become | <t>There are a number of reasons why an authoritative server may become | |||
| unreachable, including Denial of Service (DoS) attacks, network | unreachable, including Denial of Service (DoS) attacks, network | |||
| issues, and so on. If a recursive server is unable to contact the | issues, and so on. If a recursive server is unable to contact the | |||
| authoritative servers for a query but still has relevant data that has | authoritative servers for a query but still has relevant data that has | |||
| aged past its TTL, that information can still be useful for generating | aged past its TTL, that information can still be useful for generating | |||
| an answer under the metaphorical assumption that "stale bread is | an answer under the metaphorical assumption that "stale bread is | |||
| better than no bread."</t> | better than no bread."</t> | |||
| <t><xref target="RFC1035" format="default"/> Section 3.2.1 says that the T | <!-- Is quoted text DNE? --> | |||
| TL "specifies the time | <t><xref target="RFC1035" sectionFormat="comma" section="3.2.1"/> | |||
| says that the TTL "specifies the time | ||||
| interval that the resource record may be cached before the source of | interval that the resource record may be cached before the source of | |||
| the information should again be consulted", and Section 4.1.3 further | the information should again be consulted", and <xref target="RFC1035" sectionFo | |||
| rmat="comma" section="4.1.3"/> further | ||||
| <!-- Is quoted text DNE? --> | ||||
| says the TTL, "specifies the time interval (in seconds) that the | says the TTL, "specifies the time interval (in seconds) that the | |||
| resource record may be cached before it should be discarded."</t> | resource record may be cached before it should be discarded."</t> | |||
| <t>A natural English interpretation of these remarks would seem to be | <t>A natural English interpretation of these remarks would seem to be | |||
| clear enough that records past their TTL expiration must not be used. | clear enough that records past their TTL expiration must not be used. | |||
| However, <xref target="RFC1035" format="default"/> predates the more rigorous te rminology of | However, <xref target="RFC1035" format="default"/> predates the more rigorous te rminology of | |||
| <xref target="RFC2119" format="default"/> which softened the interpretation of " may" and "should".</t> | <xref target="RFC2119" format="default"/> which softened the interpretation of " may" and "should".</t> | |||
| <t><xref target="RFC2181" format="default"/> aimed to provide "the precise | <!-- Is quoted text DNE? --> | |||
| definition of the Time to | <t><xref target="RFC2181" format="default"/> aimed to provide "the | |||
| Live", but in Section 8 was mostly concerned with the numeric range of | precise definition of the Time to | |||
| Live", but in <xref target="RFC2181" sectionFormat="of" section="8"/> | ||||
| was mostly concerned with the numeric range of | ||||
| values rather than data expiration behavior. It does, however, close | values rather than data expiration behavior. It does, however, close | |||
| <!-- Is quoted text DNE? --> | ||||
| that section by noting, "The TTL specifies a maximum time to live, not | that section by noting, "The TTL specifies a maximum time to live, not | |||
| a mandatory time to live." This wording again does not contain BCP 14 | a mandatory time to live." This wording again does not contain BCP 14 | |||
| <xref target="RFC2119" format="default"/> key words, but does convey the natural language | <xref target="RFC2119" format="default"/> key words, but does convey the natural language | |||
| connotation that data becomes unusable past TTL expiry.</t> | connotation that data becomes unusable past TTL expiry.</t> | |||
| <t>As of the time of this writing, several large-scale operators use stale | <t>As of the time of this writing, several large-scale operators use stale | |||
| data for answers in some way. A number of recursive resolver packages, | data for answers in some way. A number of recursive resolver packages, | |||
| including BIND, Knot, OpenDNS, and Unbound, provide options to use stale data. | including BIND, Knot, OpenDNS, and Unbound, provide options to use stale data. | |||
| Apple MacOS can also use stale data as part of the Happy Eyeballs algorithms in | Apple MacOS can also use stale data as part of the Happy Eyeballs algorithms in | |||
| mDNSResponder. The collective operational experience is that using stale data | mDNSResponder. The collective operational experience is that using stale data | |||
| can provide significant benefit with minimal downside.</t> | can provide significant benefit with minimal downside.</t> | |||
| </section> | </section> | |||
| <section anchor="standards-action" numbered="true" toc="default"> | <section anchor="standards-action" numbered="true" toc="default"> | |||
| <name>Standards Action</name> | <name>Standards Action</name> | |||
| <t>The definition of TTL in <xref target="RFC1035" format="default"/> Sect | <t>The definition of TTL in Sections <xref target="RFC1035" section=" | |||
| ions 3.2.1 and 4.1.3 is | 3.2.1" | |||
| sectionFormat="bare"/> and <xref target="RFC1035" section="4.1.3" | ||||
| sectionFormat="bare"/> of <xref target="RFC1035"/> is | ||||
| amended to read:</t> | amended to read:</t> | |||
| <dl newline="false" spacing="normal"> | <dl newline="false" spacing="normal" indent="5"> | |||
| <dt>TTL</dt> | <dt>TTL</dt> | |||
| <dd> | <dd> | |||
| a 32-bit unsigned integer number of seconds that specifies the | a 32-bit unsigned integer number of seconds that specifies the | |||
| duration that the resource record MAY be cached before the source of | duration that the resource record <bcp14>MAY</bcp14> be cached before the source | |||
| the information MUST again be consulted. Zero values are interpreted | of | |||
| the information <bcp14>MUST</bcp14> again be consulted. Zero values are interpr | ||||
| eted | ||||
| to mean that the RR can only be used for the transaction in progress, | to mean that the RR can only be used for the transaction in progress, | |||
| and should not be cached. Values SHOULD be capped on the orders of | and should not be cached. Values <bcp14>SHOULD</bcp14> be capped on the orders of | |||
| days to weeks, with a recommended cap of 604,800 seconds (seven days). If the | days to weeks, with a recommended cap of 604,800 seconds (seven days). If the | |||
| data is unable to be authoritatively refreshed when the TTL expires, | data is unable to be authoritatively refreshed when the TTL expires, | |||
| the record MAY be used as though it is unexpired. See [RFC Editor: | the record <bcp14>MAY</bcp14> be used as though it is unexpired. See Sections&nb | |||
| replace by RFC number] <xref target="example-method" format="default"/> | sp;<xref target="example-method" format="counter"/> | |||
| and <xref target="implementation-considerations" format="default"/> for details. | and <xref target="implementation-considerations" format="counter"/> of | |||
| </dd> | RFC 0000 for details.</dd> | |||
| </dl> | </dl> | |||
| <t>Interpreting values which have the high-order bit set as being | <t>Interpreting values which have the high-order bit set as being | |||
| positive, rather than 0, is a change from <xref target="RFC2181" format="default "/>, the rationale | positive, rather than 0, is a change from <xref target="RFC2181" format="default "/>, the rationale | |||
| for which is explained in <xref target="implementation-considerations" format="d efault"/>. | for which is explained in <xref target="implementation-considerations" format="d efault"/>. | |||
| Suggesting a cap of seven days, rather than the 68 years allowed by | Suggesting a cap of seven days, rather than the 68 years allowed by | |||
| <xref target="RFC2181" format="default"/>, reflects the current practice of majo r modern DNS | <xref target="RFC2181" format="default"/>, reflects the current practice of majo r modern DNS | |||
| resolvers.</t> | resolvers.</t> | |||
| <t>When returning a response containing stale records, a recursive | <t>When returning a response containing stale records, a recursive | |||
| resolver MUST set the TTL of each expired record in the message to a | resolver <bcp14>MUST</bcp14> set the TTL of each expired record in the message t | |||
| value greater than 0, with a RECOMMENDED value of 30 seconds. See | o a | |||
| value greater than 0, with a <bcp14>RECOMMENDED</bcp14> value of 30 seconds. See | ||||
| <xref target="implementation-considerations" format="default"/> for explanation. </t> | <xref target="implementation-considerations" format="default"/> for explanation. </t> | |||
| <t>Answers from authoritative servers that have a DNS Response Code of | <t>Answers from authoritative servers that have a DNS Response Code of | |||
| either 0 (NoError) or 3 (NXDomain) and the Authoritative Answers (AA) | either 0 (NoError) or 3 (NXDomain) and the Authoritative Answers (AA) | |||
| bit set MUST be considered to have refreshed the data at the resolver. | bit set <bcp14>MUST</bcp14> be considered to have refreshed the data at the reso lver. | |||
| Answers from authoritative servers that have any other response code | Answers from authoritative servers that have any other response code | |||
| SHOULD be considered a failure to refresh the data and therefore leave | <bcp14>SHOULD</bcp14> be considered a failure to refresh the data and therefore leave | |||
| any previous state intact. See <xref target="implementation-considerations" form at="default"/> for | any previous state intact. See <xref target="implementation-considerations" form at="default"/> for | |||
| a discussion.</t> | a discussion.</t> | |||
| </section> | </section> | |||
| <section anchor="example-method" numbered="true" toc="default"> | <section anchor="example-method" numbered="true" toc="default"> | |||
| <name>Example Method</name> | <name>Example Method</name> | |||
| <t>There is more than one way a recursive resolver could | <t>There is more than one way a recursive resolver could | |||
| responsibly implement this resiliency feature while still respecting | responsibly implement this resiliency feature while still respecting | |||
| the intent of the TTL as a signal for when data is to be refreshed.</t> | the intent of the TTL as a signal for when data is to be refreshed.</t> | |||
| <t>In this example method four notable timers drive considerations for | <t>In this example method four notable timers drive considerations for | |||
| the use of stale data:</t> | the use of stale data:</t> | |||
| skipping to change at line 255 ¶ | skipping to change at line 271 ¶ | |||
| <t>The client response timer is another variable which deserves | <t>The client response timer is another variable which deserves | |||
| consideration. If this value is too short, there exists the risk that | consideration. If this value is too short, there exists the risk that | |||
| stale answers may be used even when the authoritative server is | stale answers may be used even when the authoritative server is | |||
| actually reachable but slow; this may result in undesirable answers | actually reachable but slow; this may result in undesirable answers | |||
| being returned. Conversely, waiting too long will negatively impact | being returned. Conversely, waiting too long will negatively impact | |||
| user experience.</t> | user experience.</t> | |||
| <t>The balance for the failure recheck timer is responsiveness in | <t>The balance for the failure recheck timer is responsiveness in | |||
| detecting the renewed availability of authorities versus the extra | detecting the renewed availability of authorities versus the extra | |||
| resource use for resolution. If this variable is set too large, stale | resource use for resolution. If this variable is set too large, stale | |||
| answers may continue to be returned even after the authoritative | answers may continue to be returned even after the authoritative | |||
| server is reachable; per <xref target="RFC2308" format="default"/>, Section 7, t his should be no | server is reachable; per <xref target="RFC2308" sectionFormat="comma" section="7 "/>, this should be no | |||
| more than five minutes. If this variable is too small, authoritative | more than five minutes. If this variable is too small, authoritative | |||
| servers may be targeted with a significant amount of excess traffic.</t> | servers may be targeted with a significant amount of excess traffic.</t> | |||
| <t>Regarding the TTL to set on stale records in the response, | <t>Regarding the TTL to set on stale records in the response, | |||
| historically TTLs of zero seconds have been problematic for some | historically TTLs of zero seconds have been problematic for some | |||
| implementations, and negative values can't effectively be communicated | implementations, and negative values can't effectively be communicated | |||
| to existing software. Other very short TTLs could lead to congestive | to existing software. Other very short TTLs could lead to congestive | |||
| collapse as TTL-respecting clients rapidly try to refresh. The | collapse as TTL-respecting clients rapidly try to refresh. The | |||
| recommended value of 30 seconds not only sidesteps those potential problems | recommended value of 30 seconds not only sidesteps those potential problems | |||
| with no practical negative consequences, it also rate limits | with no practical negative consequences, it also rate limits | |||
| further queries from any client that honors the TTL, such as a | further queries from any client that honors the TTL, such as a | |||
| skipping to change at line 303 ¶ | skipping to change at line 319 ¶ | |||
| previously looked up.</t> | previously looked up.</t> | |||
| <t>The directive in <xref target="standards-action" format="default"/> tha t only NoError and NXDomain | <t>The directive in <xref target="standards-action" format="default"/> tha t only NoError and NXDomain | |||
| responses should invalidate any previously associated answer stems | responses should invalidate any previously associated answer stems | |||
| from the fact that no other RCODEs that a resolver normally | from the fact that no other RCODEs that a resolver normally | |||
| encounters make any assertions regarding the name in the question or | encounters make any assertions regarding the name in the question or | |||
| any data associated with it. This comports with existing resolver | any data associated with it. This comports with existing resolver | |||
| behavior where a failed lookup (say, during pre-fetching) doesn't | behavior where a failed lookup (say, during pre-fetching) doesn't | |||
| impact the existing cache state. Some authoritative server operators | impact the existing cache state. Some authoritative server operators | |||
| have said that they would prefer stale answers to be used in the event | have said that they would prefer stale answers to be used in the event | |||
| that their servers are responding with errors like ServFail instead of | that their servers are responding with errors like ServFail instead of | |||
| giving true authoritative answers. Implementers MAY decide to return | giving true authoritative answers. Implementers <bcp14>MAY</bcp14> decide to re turn | |||
| stale answers in this situation.</t> | stale answers in this situation.</t> | |||
| <t>Since the goal of serve-stale is to provide resiliency for all obvious | <t>Since the goal of serve-stale is to provide resiliency for all obvious | |||
| errors to refresh data, these other RCODEs are treated as though they | errors to refresh data, these other RCODEs are treated as though they | |||
| are equivalent to not getting an authoritative response. Although | are equivalent to not getting an authoritative response. Although | |||
| NXDomain for a previously existing name might well be an error, it is | NXDomain for a previously existing name might well be an error, it is | |||
| not handled that way because there is no effective way to distinguish | not handled that way because there is no effective way to distinguish | |||
| operator intent for legitimate cases versus error cases.</t> | operator intent for legitimate cases versus error cases.</t> | |||
| <t>During discussion in the IETF, it was suggested that, | <t>During discussion in the IETF, it was suggested that, | |||
| if all authorities return responses with RCODE of Refused, | if all authorities return responses with RCODE of Refused, | |||
| it may be an explicit signal to take down the zone from | it may be an explicit signal to take down the zone from | |||
| servers that still have the zone's delegation pointed to them. | servers that still have the zone's delegation pointed to them. | |||
| Refused, however, is also | Refused, however, is also | |||
| overloaded to mean multiple possible failures which could represent | overloaded to mean multiple possible failures which could represent | |||
| transient configuration failures. Operational experience has shown | transient configuration failures. Operational experience has shown | |||
| that purposely returning Refused is a poor way to achieve an | that purposely returning Refused is a poor way to achieve an | |||
| explicit takedown of a zone compared to either updating the delegation | explicit takedown of a zone compared to either updating the delegation | |||
| or returning NXDomain with a suitable SOA for extended negative | or returning NXDomain with a suitable SOA for extended negative | |||
| caching. Implementers MAY nonetheless consider whether to | caching. Implementers <bcp14>MAY</bcp14> nonetheless consider whether to | |||
| treat all authorities returning Refused as preempting the use of stale | treat all authorities returning Refused as preempting the use of stale | |||
| data.</t> | data.</t> | |||
| </section> | </section> | |||
| <section anchor="implementation-caveats" numbered="true" toc="default"> | <section anchor="implementation-caveats" numbered="true" toc="default"> | |||
| <name>Implementation Caveats</name> | <name>Implementation Caveats</name> | |||
| <t>Stale data is used only when refreshing has failed in order to adhere | <t>Stale data is used only when refreshing has failed in order to adhere | |||
| to the original intent of the design of the DNS and the behaviour | to the original intent of the design of the DNS and the behaviour | |||
| expected by operators. If stale data were to always be used | expected by operators. If stale data were to always be used | |||
| immediately and then a cache refresh attempted after the client | immediately and then a cache refresh attempted after the client | |||
| response has been sent, the resolver would frequently be sending data | response has been sent, the resolver would frequently be sending data | |||
| skipping to change at line 373 ¶ | skipping to change at line 389 ¶ | |||
| on Akamai's production network since 2011, and effectively | on Akamai's production network since 2011, and effectively | |||
| smoothed over transient failures and longer outages that would have | smoothed over transient failures and longer outages that would have | |||
| resulted in major incidents. The patch was contributed to Internet | resulted in major incidents. The patch was contributed to Internet | |||
| Systems Consortium and the functionality is now available in BIND 9.12 | Systems Consortium and the functionality is now available in BIND 9.12 | |||
| and later via the options stale-answer-enable, stale-answer-ttl, and | and later via the options stale-answer-enable, stale-answer-ttl, and | |||
| max-stale-ttl.</t> | max-stale-ttl.</t> | |||
| <t>Unbound has a similar feature for serving stale answers, and will | <t>Unbound has a similar feature for serving stale answers, and will | |||
| respond with stale data immediately if it has recently tried and | respond with stale data immediately if it has recently tried and | |||
| failed to refresh the answer by pre-fetching.</t> | failed to refresh the answer by pre-fetching.</t> | |||
| <t>Knot Resolver has a demo module here: | <t>Knot Resolver has a demo module here: | |||
| https://knot-resolver.readthedocs.io/en/stable/modules.html#serve-stale</t> | <eref | |||
| target="https://knot-resolver.readthedocs.io/en/stable/modules.html#serve-st | ||||
| ale" brackets="angle"/></t> | ||||
| <t>Apple's system resolvers are also known to use stale answers, but the | <t>Apple's system resolvers are also known to use stale answers, but the | |||
| details are not readily available.</t> | details are not readily available.</t> | |||
| <t>In the research paper "When the Dike Breaks: Dissecting DNS Defenses | <t>In the research paper "When the Dike Breaks: Dissecting DNS Defenses | |||
| During DDoS" <xref target="DikeBreaks" format="default"/>, the authors detected some use of | During DDoS" <xref target="DikeBreaks" format="default"/>, the authors detected some use of | |||
| stale answers by resolvers when authorities came under attack. Their | stale answers by resolvers when authorities came under attack. Their | |||
| research results suggest that more widespread adoption of the technique | research results suggest that more widespread adoption of the technique | |||
| would significantly improve resiliency for the large number of requests | would significantly improve resiliency for the large number of requests | |||
| that fail or experience abnormally long resolution times during an attack.</t> | that fail or experience abnormally long resolution times during an attack.</t> | |||
| </section> | </section> | |||
| <section anchor="edns-option" numbered="true" toc="default"> | <section anchor="edns-option" numbered="true" toc="default"> | |||
| skipping to change at line 438 ¶ | skipping to change at line 455 ¶ | |||
| <section anchor="nat-considerations" numbered="true" toc="default"> | <section anchor="nat-considerations" numbered="true" toc="default"> | |||
| <name>NAT Considerations</name> | <name>NAT Considerations</name> | |||
| <t>The method described here is not affected by the use of NAT devices.</t > | <t>The method described here is not affected by the use of NAT devices.</t > | |||
| </section> | </section> | |||
| <section anchor="iana-considerations" numbered="true" toc="default"> | <section anchor="iana-considerations" numbered="true" toc="default"> | |||
| <name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
| <t>There are no IANA considerations.</t> | <t>There are no IANA considerations.</t> | |||
| </section> | </section> | |||
| <section anchor="acknowledgements" numbered="true" toc="default"> | <section anchor="acknowledgements" numbered="true" toc="default"> | |||
| <name>Acknowledgements</name> | <name>Acknowledgements</name> | |||
| <t>The authors wish to thank Brian Carpenter, Robert Edmonds, Tony Finch, | <t>The authors wish to thank <contact fullname="Brian Carpenter"/>, <conta | |||
| Bob Harold, Tatuya Jinmei, Matti Klock, Jason Moreau, Giovane Moura, | ct fullname="Robert Edmonds"/>, <contact fullname="Tony Finch"/>, | |||
| Jean Roy, Mukund Sivaraman, Davey Song, Paul Vixie, Ralf Weber and | <contact fullname="Bob Harold"/>, <contact fullname="Tatuya Jinmei"/>, <contact | |||
| Paul Wouters for their review and feedback. Paul Hoffman deserves | fullname="Matti Klock"/>, <contact fullname="Jason Moreau"/>, <contact fullname= | |||
| "Giovane Moura"/>, | ||||
| <contact fullname="Jean Roy"/>, <contact fullname="Mukund Sivaraman"/>, <contact | ||||
| fullname="Davey Song"/>, <contact fullname="Paul Vixie"/>, <contact fullname="R | ||||
| alf Weber"/> and | ||||
| <contact fullname="Paul Wouters"/> for their review and feedback. <contact full | ||||
| name="Paul Hoffman"/> deserves | ||||
| special thanks for submitting a number of Pull Requests.</t> | special thanks for submitting a number of Pull Requests.</t> | |||
| <t>Thank you also to the following members of the IESG for their final | <t>Thank you also to the following members of the IESG for their final | |||
| review: Roman Danyliw, Benjamin Kaduk, Suresh Krishnan, Mirja | review: <contact fullname="Roman Danyliw"/>, <contact fullname="Benjamin | |||
| Kuehlewind, and Adam Roach.</t> | Kaduk"/>, <contact fullname="Suresh Krishnan"/>, <contact fullname="Mirja | |||
| Kuehlewind"/>, and <contact fullname="Adam Roach"/>.</t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references> | <references> | |||
| <name>References</name> | <name>References</name> | |||
| <references> | <references> | |||
| <name>Normative References</name> | <name>Normative References</name> | |||
| <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1035. | |||
| 035" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.10 | xml"/> | |||
| 35.xml"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2181. | |||
| <front> | xml"/> | |||
| <title>Domain names - implementation and specification</title> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.1034. | |||
| <seriesInfo name="DOI" value="10.17487/RFC1035"/> | xml"/> | |||
| <seriesInfo name="RFC" value="1035"/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
| <seriesInfo name="STD" value="13"/> | xml"/> | |||
| <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
| tris"> | xml"/> | |||
| <organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2308. | |||
| </author> | xml"/> | |||
| <date year="1987" month="November"/> | ||||
| <abstract> | ||||
| <t>This RFC is the revised specification of the protocol and forma | ||||
| t used in the implementation of the Domain Name System. It obsoletes RFC-883. T | ||||
| his memo documents the details of the domain name client - server communication. | ||||
| </t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC2181" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 181" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.21 | ||||
| 81.xml"> | ||||
| <front> | ||||
| <title>Clarifications to the DNS Specification</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2181"/> | ||||
| <seriesInfo name="RFC" value="2181"/> | ||||
| <author initials="R." surname="Elz" fullname="R. Elz"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="R." surname="Bush" fullname="R. Bush"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="1997" month="July"/> | ||||
| <abstract> | ||||
| <t>This document considers some areas that have been identified as | ||||
| problems with the specification of the Domain Name System, and proposes remedie | ||||
| s for the defects identified. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC1034" target="https://www.rfc-editor.org/info/rfc1 | ||||
| 034" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.10 | ||||
| 34.xml"> | ||||
| <front> | ||||
| <title>Domain names - concepts and facilities</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC1034"/> | ||||
| <seriesInfo name="RFC" value="1034"/> | ||||
| <seriesInfo name="STD" value="13"/> | ||||
| <author initials="P.V." surname="Mockapetris" fullname="P.V. Mockape | ||||
| tris"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="1987" month="November"/> | ||||
| <abstract> | ||||
| <t>This RFC is the revised basic definition of The Domain Name Sys | ||||
| tem. It obsoletes RFC-882. This memo describes the domain style names and thei | ||||
| r used for host address look up and electronic mail forwarding. It discusses th | ||||
| e clients and servers in the domain name system and the protocol used between th | ||||
| em.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 119" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.21 | ||||
| 19.xml"> | ||||
| <front> | ||||
| <title>Key words for use in RFCs to Indicate Requirement Levels</tit | ||||
| le> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
| <seriesInfo name="RFC" value="2119"/> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="1997" month="March"/> | ||||
| <abstract> | ||||
| <t>In many standards track documents several words are used to sig | ||||
| nify the requirements in the specification. These words are often capitalized. | ||||
| This document defines these words as they should be interpreted in IETF document | ||||
| s. This document specifies an Internet Best Current Practices for the Internet | ||||
| Community, and requests discussion and suggestions for improvements.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
| 174" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.81 | ||||
| 74.xml"> | ||||
| <front> | ||||
| <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
| tle> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
| <seriesInfo name="RFC" value="8174"/> | ||||
| <seriesInfo name="BCP" value="14"/> | ||||
| <author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2017" month="May"/> | ||||
| <abstract> | ||||
| <t>RFC 2119 specifies common key words that may be used in protoco | ||||
| l specifications. This document aims to reduce the ambiguity by clarifying tha | ||||
| t only UPPERCASE usage of the key words have the defined special meanings.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC2308" target="https://www.rfc-editor.org/info/rfc2 | ||||
| 308" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.23 | ||||
| 08.xml"> | ||||
| <front> | ||||
| <title>Negative Caching of DNS Queries (DNS NCACHE)</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC2308"/> | ||||
| <seriesInfo name="RFC" value="2308"/> | ||||
| <author initials="M." surname="Andrews" fullname="M. Andrews"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="1998" month="March"/> | ||||
| <abstract> | ||||
| <t>RFC1034 provided a description of how to cache negative respons | ||||
| es. It however had a fundamental flaw in that it did not allow a name server to | ||||
| hand out those cached responses to other resolvers, thereby greatly reducing th | ||||
| e effect of the caching. This document addresses issues raise in the light of e | ||||
| xperience and replaces RFC1034 Section 4.3.4. [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | </references> | |||
| <references> | <references> | |||
| <name>Informative References</name> | <name>Informative References</name> | |||
| <reference anchor="DikeBreaks" target="https://www.isi.edu/~johnh/PAPERS /Moura18b.pdf"> | <reference anchor="DikeBreaks" target="https://www.isi.edu/~johnh/PAPERS /Moura18b.pdf"> | |||
| <front> | <front> | |||
| <title>When the Dike Breaks: Dissecting DNS Defenses During DDos</ti tle> | <title>When the Dike Breaks: Dissecting DNS Defenses During DDos</ti tle> | |||
| <seriesInfo name="DOI" value="10.1145/3278532.3278534"/> | <seriesInfo name="DOI" value="10.1145/3278532.3278534"/> | |||
| <seriesInfo name="ACM" value="2018 Internet Measurement Conference"/ > | <seriesInfo name="ACM" value="2018 Internet Measurement Conference"/ > | |||
| <author initials="G.C.M." surname="Moura" fullname="Giovane C. M. Mo ura"> | <author initials="G.C.M." surname="Moura" fullname="Giovane C. M. Mo ura"> | |||
| <organization/> | <organization/> | |||
| skipping to change at line 602 ¶ | skipping to change at line 535 ¶ | |||
| </reference> | </reference> | |||
| <reference anchor="DITL" target="https://www.dns-oarc.net/oarc/data/ditl "> | <reference anchor="DITL" target="https://www.dns-oarc.net/oarc/data/ditl "> | |||
| <front> | <front> | |||
| <title>DITL Traces and Analysis | DNS-OARC</title> | <title>DITL Traces and Analysis | DNS-OARC</title> | |||
| <author> | <author> | |||
| <organization/> | <organization/> | |||
| </author> | </author> | |||
| <date>n.d.</date> | <date>n.d.</date> | |||
| </front> | </front> | |||
| </reference> | </reference> | |||
| <reference anchor="RFC8499" target="https://www.rfc-editor.org/info/rfc8 | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8499. | |||
| 499" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.84 | xml"/> | |||
| 99.xml"> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6672. | |||
| <front> | xml"/> | |||
| <title>DNS Terminology</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC8499"/> | ||||
| <seriesInfo name="RFC" value="8499"/> | ||||
| <seriesInfo name="BCP" value="219"/> | ||||
| <author initials="P." surname="Hoffman" fullname="P. Hoffman"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="A." surname="Sullivan" fullname="A. Sullivan"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="K." surname="Fujiwara" fullname="K. Fujiwara"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2019" month="January"/> | ||||
| <abstract> | ||||
| <t>The Domain Name System (DNS) is defined in literally dozens of | ||||
| different RFCs. The terminology used by implementers and developers of DNS prot | ||||
| ocols, and by operators of DNS systems, has sometimes changed in the decades sin | ||||
| ce the DNS was first defined. This document gives current definitions for many | ||||
| of the terms used in the DNS in a single document.</t> | ||||
| <t>This document obsoletes RFC 7719 and updates RFC 2308.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| <reference anchor="RFC6672" target="https://www.rfc-editor.org/info/rfc6 | ||||
| 672" xml:base="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.66 | ||||
| 72.xml"> | ||||
| <front> | ||||
| <title>DNAME Redirection in the DNS</title> | ||||
| <seriesInfo name="DOI" value="10.17487/RFC6672"/> | ||||
| <seriesInfo name="RFC" value="6672"/> | ||||
| <author initials="S." surname="Rose" fullname="S. Rose"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author initials="W." surname="Wijngaards" fullname="W. Wijngaards"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date year="2012" month="June"/> | ||||
| <abstract> | ||||
| <t>The DNAME record provides redirection for a subtree of the doma | ||||
| in name tree in the DNS. That is, all names that end with a particular suffix a | ||||
| re redirected to another part of the DNS. This document obsoletes the original | ||||
| specification in RFC 2672 as well as updates the document on representing IPv6 a | ||||
| ddresses in DNS (RFC 3363). [STANDARDS-TRACK]</t> | ||||
| </abstract> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | </references> | |||
| </references> | </references> | |||
| </back> | </back> | |||
| <!-- ##markdown-source: | <!-- ##markdown-source: | |||
| H4sIAErV7l0AA7V8W3cbR5Lme/6KXPrB0hwAIiXZltQP0xApt9UWRa1It3d3 | H4sIAErV7l0AA7V8W3cbR5Lme/6KXPrB0hwAIiXZltQP0xApt9UWRa1It3d3 | |||
| ZrdPApUA0ixUYSqrCKF7PL9s3vaPbXwRkVlVJOhxP6zPkUkCWXmJ6xeXrOl0 | ZrdPApUA0ixUYSqrCKF7PL9s3vaPbXwRkVlVJOhxP6zPkUkCWXmJ6xeXrOl0 | |||
| atrQlv6NvfbNXajW9rp1pbcXrnW2re377a6p7+jvj9f2s4+hDL5aHoxbLBp/ | atrQlv6NvfbNXajW9rp1pbcXrnW2re377a6p7+jvj9f2s4+hDL5aHoxbLBp/ | |||
| 94Y/xoNeHjNFvazclmYrGrdqp8G3q2lRxXo3jRg1jRg1PTs1hWtplH1+evZ6 | 94Y/xoNeHjNFvazclmYrGrdqp8G3q2lRxXo3jRg1jRg1PTs1hWtplH1+evZ6 | |||
| evZ8evramLBr3ti26WL7/PT09elz4xrv3tj3Veubyrdmv+b1rj7Zn+vmFlv9 | evZ8evramLBr3ti26WL7/PT09elz4xrv3tj3Veubyrdmv+b1rj7Zn+vmFlv9 | |||
| U1N3O3O77wdNL7CuWbr2jY1tYbodFopv7Nnpi5cT/P+biX1+9urMmGVd0Bxv | U1N3O3O77wdNL7CuWbr2jY1tYbodFopv7Nnpi5cT/P+biX1+9urMmGVd0Bxv | |||
| End of changes. 27 change blocks. | ||||
| 222 lines changed or deleted | 86 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||