| rfc8914xml2.original.xml | rfc8914.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <!ENTITY rfc2119 PUBLIC "" ".//reference.RFC.2119.xml"> | ||||
| ]> | ||||
| <!-- WK: Set category, IPR, docName --> | ||||
| <rfc category="std" docName="draft-ietf-dnsop-extended-error-16" | ||||
| ipr="trust200902"> | ||||
| <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | ||||
| <?rfc toc="yes" ?> | ||||
| <?rfc symrefs="yes" ?> | ||||
| <?rfc sortrefs="yes"?> | ||||
| <?rfc iprnotified="no" ?> | ||||
| <?rfc strict="yes"?> | ||||
| <?rfc compact="yes" ?> | ||||
| <?rfc subcompact="yes" ?> | ||||
| <front> | ||||
| <!-- WK: Set long title. --> | ||||
| <title abbrev="draft-ietf-dnsop-extended-error">Extended DNS | ||||
| Errors</title> | ||||
| <author fullname="Warren Kumari" initials="W." surname="Kumari"> | ||||
| <organization>Google</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>1600 Amphitheatre Parkway</street> | ||||
| <city>Mountain View, CA</city> | ||||
| <code>94043</code> | ||||
| <country>US</country> | ||||
| </postal> | ||||
| <email>warren@kumari.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Evan Hunt" initials="E." surname="Hunt"> | ||||
| <organization>ISC</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>950 Charter St</street> | ||||
| <city>Redwood City, CA</city> | ||||
| <code>94063</code> | ||||
| <country>US</country> | ||||
| </postal> | ||||
| <email>each@isc.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Roy Arends" initials="R." surname="Arends"> | ||||
| <organization>ICANN</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>roy.arends@icann.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Wes Hardaker" initials="W." surname="Hardaker"> | ||||
| <organization>USC/ISI</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>P.O. Box 382</street> | ||||
| <city>Davis, CA</city> | ||||
| <code>95617</code> | ||||
| <country>US</country> | ||||
| </postal> | ||||
| <email>ietf@hardakers.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="David C Lawrence" initials="D." surname="Lawrence"> | ||||
| <organization>Oracle + Dyn</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>150 Dow St</street> | ||||
| <city>Manchester, NH</city> | ||||
| <code>03101</code> | ||||
| <country>US</country> | ||||
| </postal> | ||||
| <email>tale@dd.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <date day="05" month="May" year="2020"/> | ||||
| <abstract> | ||||
| <t>This document defines an extensible method to return | ||||
| additional information about the cause of DNS errors. Though | ||||
| created primarily to extend SERVFAIL to provide additional | ||||
| information about the cause of DNS and DNSSEC failures, the | ||||
| Extended DNS Errors option defined in this document allows all | ||||
| response types to contain extended error information. Extended | ||||
| DNS Error information does not change the processing of RCODEs.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-dnsop-extend | |||
| <section title="Introduction and background" anchor="intro"> | ed-error-16" number="8914" ipr="trust200902" obsoletes="" updates="" submissionT | |||
| <t>There are many reasons that a DNS query may fail, some of | ype="IETF" category="std" consensus="true" xml:lang="en" tocInclude="true" symRe | |||
| them transient, some permanent; some can be resolved by querying | fs="true" sortRefs="true" version="3"> | |||
| another server, some are likely best handled by stopping | ||||
| resolution. Unfortunately, the error signals that a DNS server | ||||
| can return are very limited, and are not very expressive. This | ||||
| means that applications and resolvers often have to "guess" at | ||||
| what the issue is - e.g. was the answer marked REFUSED because | ||||
| of a lame delegation, or because the nameserver is still | ||||
| starting up and loading zones? Is a SERVFAIL a DNSSEC validation | ||||
| issue, or is the nameserver experiencing some other failure? | ||||
| What error messages should be presented to the user or logged | ||||
| under these conditions?</t> | ||||
| <t>A good example of issues that would benefit from additional | <!-- xml2rfc v2v3 conversion 2.44.0 --> | |||
| error information are errors caused by DNSSEC validation | ||||
| issues. When a stub resolver queries a name which is DNSSEC | ||||
| bogus <xref target="RFC8499" /> (using a validating resolver), | ||||
| the stub resolver receives only a SERVFAIL in | ||||
| response. Unfortunately, the SERVFAIL Response Code (RCODE) is | ||||
| used to signal many sorts of DNS errors, and so the stub | ||||
| resolver's only option is to ask the next configured DNS | ||||
| resolver. The result of trying the next resolver is one of two | ||||
| outcomes: either the next resolver also validates, and a | ||||
| SERVFAIL is returned again, or the next resolver is not a | ||||
| validating resolver, and the user is returned a potentially | ||||
| harmful result. With an Extended DNS Error (EDE) option | ||||
| enclosed in the response message, the resolver is able to return | ||||
| a more descriptive reason as to why any failures happened, or | ||||
| add additional context to a message containing a NOERROR | ||||
| RCODE.</t> | ||||
| <t>This document specifies a mechanism to extend DNS errors to | <front> | |||
| provide additional information about the cause of an error. | ||||
| These extended DNS error codes are described in this document | ||||
| can be used by any system that sends DNS queries and receives a | ||||
| response containing an EDE option. Different codes are useful | ||||
| in different circumstances, and thus different systems (stub | ||||
| resolvers, recursive resolvers, and authoritative resolvers) | ||||
| might receive and use them.</t> | ||||
| <section title="Requirements notation"> | <title abbrev="Extended DNS Errors">Extended DNS | |||
| <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL | Errors</title> | |||
| NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", | <seriesInfo name="RFC" value="8914"/> | |||
| "MAY", and "OPTIONAL" in this document are to be interpreted as | <author fullname="Warren Kumari" initials="W." surname="Kumari"> | |||
| described in BCP 14 <xref target="RFC2119"/> <xref | <organization>Google</organization> | |||
| target="RFC8174"/> when, and only when, they appear in all | <address> | |||
| capitals, as shown here.</t> | <postal> | |||
| </section> | <street>1600 Amphitheatre Parkway</street> | |||
| </section> | <city>Mountain View</city><region>CA</region> | |||
| <code>94043</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>warren@kumari.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Evan Hunt" initials="E." surname="Hunt"> | ||||
| <organization>ISC</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>950 Charter St</street> | ||||
| <city>Redwood City</city><region>CA</region> | ||||
| <code>94063</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>each@isc.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Roy Arends" initials="R." surname="Arends"> | ||||
| <organization>ICANN</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street/> | ||||
| </postal> | ||||
| <email>roy.arends@icann.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Wes Hardaker" initials="W." surname="Hardaker"> | ||||
| <organization>USC/ISI</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>P.O. Box 382</street> | ||||
| <city>Davis</city><region>CA</region> | ||||
| <code>95617</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>ietf@hardakers.net</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="David C Lawrence" initials="D." surname="Lawrence"> | ||||
| <organization>Salesforce</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <street>415 Mission St</street> | ||||
| <city>San Francisco</city><region>CA</region> | ||||
| <code>94105</code> | ||||
| <country>United States of America</country> | ||||
| </postal> | ||||
| <email>tale@dd.org</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="October" year="2020"/> | ||||
| <section title="Extended DNS Error EDNS0 option format"> | <keyword>DNS</keyword> | |||
| <t>This draft uses an EDNS0 (<xref target="RFC6891" />) option to include | <keyword>Error</keyword> | |||
| Extended DNS Error (EDE) information in DNS messages. The option | <keyword>Domain</keyword> | |||
| is structured as follows:</t> | <keyword>Name</keyword> | |||
| <keyword>System</keyword> | ||||
| <figure> | <abstract> | |||
| <artwork align="left"><![CDATA[ | <t>This document defines an extensible method to return | |||
| additional information about the cause of DNS errors. Though | ||||
| created primarily to extend SERVFAIL to provide additional | ||||
| information about the cause of DNS and DNSSEC failures, the | ||||
| Extended DNS Errors option defined in this document allows all | ||||
| response types to contain extended error information. Extended | ||||
| DNS Error information does not change the processing of RCODEs.</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | ||||
| <section anchor="intro" numbered="true" toc="default"> | ||||
| <name>Introduction and Background</name> | ||||
| <t>There are many reasons that a DNS query may fail -- some of | ||||
| them transient, some permanent; some can be resolved by querying | ||||
| another server, some are likely best handled by stopping | ||||
| resolution. Unfortunately, the error signals that a DNS server | ||||
| can return are very limited and are not very expressive. This | ||||
| means that applications and resolvers often have to "guess" at | ||||
| what the issue is, e.g., was the answer marked REFUSED because | ||||
| of a lame delegation or because the nameserver is still | ||||
| starting up and loading zones? Is a SERVFAIL a DNSSEC validation | ||||
| issue, or is the nameserver experiencing some other failure? | ||||
| What error messages should be presented to the user or logged | ||||
| under these conditions?</t> | ||||
| <t>A good example of issues that would benefit from additional | ||||
| error information are errors caused by DNSSEC validation | ||||
| issues. When a stub resolver queries a name that is DNSSEC | ||||
| bogus <xref target="RFC8499" format="default"/> (using a validating resolve | ||||
| r), | ||||
| the stub resolver receives only a SERVFAIL in | ||||
| response. Unfortunately, the SERVFAIL Response Code (RCODE) is | ||||
| used to signal many sorts of DNS errors, and so the stub | ||||
| resolver's only option is to ask the next configured DNS | ||||
| resolver. The result of trying the next resolver is one of two | ||||
| outcomes: either the next resolver also validates and a | ||||
| SERVFAIL is returned again or the next resolver is not a | ||||
| validating resolver and the user is returned a potentially | ||||
| harmful result. With an Extended DNS Error (EDE) option | ||||
| enclosed in the response message, the resolver is able to return | ||||
| a more descriptive reason as to why any failures happened or | ||||
| add additional context to a message containing a NOERROR | ||||
| RCODE.</t> | ||||
| <t>This document specifies a mechanism to extend DNS errors to | ||||
| provide additional information about the cause of an error. | ||||
| The Extended DNS Error codes described in this document | ||||
| can be used by any system that sends DNS queries and receives a | ||||
| response containing an EDE option. Different codes are useful | ||||
| in different circumstances, and thus different systems (stub | ||||
| resolvers, recursive resolvers, and authoritative resolvers) | ||||
| might receive and use them.</t> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Requirements Notation</name> | ||||
| <t> | ||||
| The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | ||||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | ||||
| NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", | ||||
| "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
| "<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> | ||||
| </section> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Extended DNS Error EDNS0 Option Format</name> | ||||
| <t>This document uses an Extended Mechanism for DNS (EDNS0) <xref | ||||
| target="RFC6891" format="default"/> option to include | ||||
| Extended DNS Error (EDE) information in DNS messages. The option | ||||
| is structured as follows:</t> | ||||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| 1 1 1 1 1 1 | 1 1 1 1 1 1 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| 0: | OPTION-CODE | | 0: | OPTION-CODE | | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| 2: | OPTION-LENGTH | | 2: | OPTION-LENGTH | | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| 4: | INFO-CODE | | 4: | INFO-CODE | | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| 6: / EXTRA-TEXT ... / | 6: / EXTRA-TEXT ... / | |||
| +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
| ]]></artwork> | ]]></artwork> | |||
| </figure> | <t/> | |||
| <t>Field definition details:</t> | ||||
| <t/> | <dl newline="true"> | |||
| <dt>OPTION-CODE: </dt> | ||||
| <t>Field definition details:</t> | <dd>2 octets / 16 bits (defined in <xref target="RFC6891" | |||
| format="default"/>) contains the value 15 for EDE.</dd> | ||||
| <t><list style="symbols"> | ||||
| <t>OPTION-CODE, 2-octets/16-bits (defined in <xref target="RFC6891" | ||||
| />]), for EDE is TBD. | ||||
| [RFC Editor: change TBD to the proper code once assigned by IANA.]</t> | ||||
| <t>OPTION-LENGTH, 2-octets/16-bits ((defined in <xref | ||||
| target="RFC6891" />]) contains | ||||
| the length of the payload (everything after OPTION-LENGTH) | ||||
| in octets and should be 2 plus the length of the EXTRA-TEXT | ||||
| field (which may be a zero-length string).</t> | ||||
| <t>INFO-CODE, 16-bits, which is the principal contribution | ||||
| of this document. This 16-bit value, encoded in network | ||||
| (MSB) byte order, provides the additional context for the | ||||
| RESPONSE-CODE of the DNS message. The INFO-CODE serves as an | ||||
| index into the "Extended DNS Errors" registry defined and | ||||
| created in <xref target="IANA" />.</t> | ||||
| <t>EXTRA-TEXT, a variable length, UTF-8 encoded <xref | ||||
| target="RFC5198" />, text field that may hold additional | ||||
| textual information. This information is intended for human | ||||
| consumption (not automated parsing). EDE text may be null | ||||
| terminated but MUST NOT be assumed to be; the length MUST be | ||||
| derived from the OPTION-LENGTH field. The EXTRA-TEXT field | ||||
| may be zero octets in length, indicating that there is no | ||||
| EXTRA-TEXT included. Care should be taken not to include | ||||
| private information in the EXTRA-TEXT field that an observer | ||||
| would not otherwise have access to, such as account | ||||
| numbers.</t> | ||||
| </list></t> | ||||
| <t>The Extended DNS Error (EDE) option can be included in any | ||||
| response (SERVFAIL, NXDOMAIN, REFUSED, and even NOERROR, etc) to | ||||
| a query that includes OPT Pseudo-RR <xref target="RFC6891" />. | ||||
| This document includes a set of initial codepoints, but is | ||||
| extensible via the IANA registry defined and created in <xref | ||||
| target="IANA" />.</t> | ||||
| </section> | ||||
| <section title="Extended DNS Error Processing"> | ||||
| <t>When the response grows beyond the requestor's UDP payload | ||||
| size <xref target="RFC6891" />, servers SHOULD truncate messages | ||||
| by dropping EDE options before dropping other data from packets. | ||||
| Implementations SHOULD set the truncation bit when dropping EDE | ||||
| options. Because long EXTRA-TEXT fields may trigger truncation | ||||
| (which is undesirable given the supplemental nature of | ||||
| EDE) implementers and operators creating EDE options SHOULD | ||||
| avoid lengthy EXTRA-TEXT contents.</t> | ||||
| <t>When a resolver or forwarder receives an EDE option, whether | <dt>OPTION-LENGTH: </dt> | |||
| or not (and how) to pass along EDE information on to their | <dd>2 octets / 16 bits (defined in <xref target="RFC6891" format="defau | |||
| original client is implementation dependent. Implementations MAY | lt"/>) contains | |||
| choose to not forward information, or they MAY choose to create | the length of the payload (everything after OPTION-LENGTH) | |||
| a new EDE option(s) that conveys the information encoded in the | in octets and should be 2 plus the length of the EXTRA-TEXT | |||
| received EDE. When doing so, the source of the error SHOULD be | field (which may be a zero-length string).</dd> | |||
| attributed in the EXTRA-TEXT field, since an EDNS0 option | ||||
| received by the original client will appear to have come from | ||||
| the resolver or forwarder sending it.</t> | ||||
| <t>This document does not allow or prohibit any particular | <dt>INFO-CODE:</dt> | |||
| extended error codes and information to be matched with any | <dd>16 bits, which is the principal contribution | |||
| particular RCODEs. Some combinations of extended error codes and | of this document. This 16-bit value, encoded in network | |||
| RCODEs may seem nonsensical (such as resolver-specific extended | most significant bit (MSB) byte order, provides the additional context | |||
| error codes in responses from authoritative servers), so systems | for the | |||
| interpreting the extended error codes MUST NOT assume that a | RESPONSE-CODE of the DNS message. The INFO-CODE serves as an | |||
| combination will make sense. Receivers MUST be able to accept | index into the "Extended DNS Errors" registry, defined and | |||
| EDE codes and EXTRA-TEXT in all messages, including those with a | created in <xref target="IANA" format="default"/>.</dd> | |||
| NOERROR RCODE, but need not act on them. Applications MUST | ||||
| continue to follow requirements from applicable specifications on how to | ||||
| process RCODEs no matter what EDE values are also received. | ||||
| Senders MAY include more than one EDE option and receivers MUST | ||||
| be able to accept (but not necessarily process or act on) | ||||
| multiple EDE options in a DNS message.</t> | ||||
| </section> | ||||
| <section title="Defined Extended DNS Errors"> | <dt>EXTRA-TEXT: </dt> | |||
| <t>This document defines some initial EDE codes. The mechanism | <dd>a variable-length, UTF-8-encoded <xref target="RFC5198" | |||
| is intended to be extensible, and additional code-points can be | format="default"/> text field that may hold additional | |||
| registered in the "Extended DNS Errors" registry <xref | textual information. This information is intended for human | |||
| target="IANA" />. The INFO-CODE from the EDE EDNS option is | consumption (not automated parsing). EDE text may be null | |||
| used to serve as an index into the "Extended DNS Error" IANA | terminated but <bcp14>MUST NOT</bcp14> be assumed to be; the length <bc | |||
| registry, the initial values for which are defined in the | p14>MUST</bcp14> be | |||
| following sub-sections.</t> | derived from the OPTION-LENGTH field. The EXTRA-TEXT field | |||
| may be zero octets in length, indicating that there is no | ||||
| EXTRA-TEXT included. Care should be taken not to include | ||||
| private information in the EXTRA-TEXT field that an observer | ||||
| would not otherwise have access to, such as account | ||||
| numbers.</dd> | ||||
| </dl> | ||||
| <section anchor="errother" title="Extended DNS Error Code 0 - Other"> | <t>The Extended DNS Error (EDE) option can be included in any | |||
| <t>The error in question falls into a category that does | response (SERVFAIL, NXDOMAIN, REFUSED, even NOERROR, etc.) to | |||
| a query that includes an OPT pseudo-RR <xref target="RFC6891" format="defau | ||||
| lt"/>. | ||||
| This document includes a set of initial codepoints but is | ||||
| extensible via the IANA registry defined and created in <xref target="IANA" | ||||
| format="default"/>.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Extended DNS Error Processing</name> | ||||
| <t>When the response grows beyond the requestor's UDP payload | ||||
| size <xref target="RFC6891" format="default"/>, servers <bcp14>SHOULD</bcp1 | ||||
| 4> truncate messages | ||||
| by dropping EDE options before dropping other data from packets. | ||||
| Implementations <bcp14>SHOULD</bcp14> set the truncation bit when dropping | ||||
| EDE | ||||
| options. Because long EXTRA-TEXT fields may trigger truncation | ||||
| (which is undesirable given the supplemental nature of | ||||
| EDE), implementers and operators creating EDE options <bcp14>SHOULD</bcp14> | ||||
| avoid lengthy EXTRA-TEXT contents.</t> | ||||
| <t>When a resolver or forwarder receives an EDE option, whether | ||||
| or not (and how) to pass along EDE information on to their | ||||
| original client is implementation dependent. Implementations <bcp14>MAY</bc | ||||
| p14> | ||||
| choose to not forward information, or they <bcp14>MAY</bcp14> choose to cre | ||||
| ate | ||||
| a new EDE option(s) that conveys the information encoded in the | ||||
| received EDE. When doing so, the source of the error <bcp14>SHOULD</bcp14> | ||||
| be | ||||
| attributed in the EXTRA-TEXT field, since an EDNS0 option | ||||
| received by the original client will appear to have come from | ||||
| the resolver or forwarder sending it.</t> | ||||
| <t>This document does not allow or prohibit any particular | ||||
| extended error codes and information to be matched with any | ||||
| particular RCODEs. Some combinations of extended error codes and | ||||
| RCODEs may seem nonsensical (such as resolver-specific extended | ||||
| error codes received in responses from authoritative servers), so systems | ||||
| interpreting the extended error codes <bcp14>MUST NOT</bcp14> assume that a | ||||
| combination will make sense. Receivers <bcp14>MUST</bcp14> be able to acce | ||||
| pt | ||||
| EDE codes and EXTRA-TEXT in all messages, including those with a | ||||
| NOERROR RCODE but need not act on them. Applications <bcp14>MUST</bcp14> | ||||
| continue to follow requirements from applicable specifications on how to | ||||
| process RCODEs no matter what EDE values are also received. | ||||
| Senders <bcp14>MAY</bcp14> include more than one EDE option and receivers < | ||||
| bcp14>MUST</bcp14> | ||||
| be able to accept (but not necessarily process or act on) | ||||
| multiple EDE options in a DNS message.</t> | ||||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <name>Defined Extended DNS Errors</name> | ||||
| <t>This document defines some initial EDE codes. The mechanism | ||||
| is intended to be extensible, and additional codepoints can be | ||||
| registered in the "Extended DNS Errors" registry (<xref target="IANA" | ||||
| format="default"/>). The INFO-CODE from the EDE EDNS option is | ||||
| used to serve as an index into the "Extended DNS Error" IANA | ||||
| registry, the initial values for which are defined in the | ||||
| following subsections.</t> | ||||
| <section anchor="errother" numbered="true" toc="default"> | ||||
| <name>Extended DNS Error Code 0 - Other</name> | ||||
| <t>The error in question falls into a category that does | ||||
| not match known extended error codes. Implementations | not match known extended error codes. Implementations | |||
| SHOULD include an EXTRA-TEXT value to augment this error | <bcp14>SHOULD</bcp14> include an EXTRA-TEXT value to augment this e rror | |||
| code with additional information.</t> | code with additional information.</t> | |||
| </section> | </section> | |||
| <section anchor="errbaddnskeyalg" numbered="true" toc="default"> | ||||
| <section anchor="errbaddnskeyalg" | <name>Extended DNS Error Code 1 - Unsupported DNSKEY Algorithm</name> | |||
| title="Extended DNS Error Code 1 - | <t>The resolver attempted to perform DNSSEC validation, but a DNSKEY | |||
| Unsupported DNSKEY Algorithm"> | RRset contained only unsupported DNSSEC algorithms.</t> | |||
| <t>The resolver attempted to perform DNSSEC validation, but a DNSKEY | </section> | |||
| RRSET contained only unsupported DNSSEC algorithms.</t> | <section anchor="errbaddsdigest" numbered="true" toc="default"> | |||
| </section> | <name>Extended DNS Error Code 2 - Unsupported DS Digest Type</name> | |||
| <t>The resolver attempted to perform DNSSEC validation, but a DS | ||||
| <section anchor="errbaddsdigest" | RRset contained only unsupported Digest Types.</t> | |||
| title="Extended DNS Error Code 2 - Unsupported DS | </section> | |||
| Digest Type"> | <section anchor="stalenoerror" numbered="true" toc="default"> | |||
| <t>The resolver attempted to perform DNSSEC validation, but a DS | <name>Extended DNS Error Code 3 - Stale Answer</name> | |||
| RRSET contained only unsupported Digest Types.</t> | <t>The resolver was unable to resolve the answer within its | |||
| </section> | time limits and decided to answer with previously cached | |||
| data instead of answering with an error. This is typically | ||||
| <section anchor="stalenoerror" | caused by problems communicating with an authoritative | |||
| title="Extended DNS Error Code 3 - Stale Answer"> | server, possibly as result of a denial of service (DoS) | |||
| <t>The resolver was unable to resolve the answer within its | attack against another network. (See also Code 19.)</t> | |||
| time limits and decided to answer with previously cached | </section> | |||
| data instead of answering with an error. This is typically | <section anchor="forgedanswer" numbered="true" toc="default"> | |||
| caused by problems communicating with an authoritative | <name>Extended DNS Error Code 4 - Forged Answer</name> | |||
| server, possibly as result of a denial of service (DoS) | <t>For policy reasons (legal obligation or malware | |||
| attack against another network. (See also Code 19.)</t> | filtering, for instance), an answer was forged. Note that | |||
| </section> | this should be used when an answer is still provided, not | |||
| when failure codes are returned instead. See Blocked (15), | ||||
| <section anchor="forgedanswer" | Censored (16), and Filtered (17) for use when returning | |||
| title="Extended DNS Error Code 4 - Forged Answer"> | other response codes.</t> | |||
| <t>For policy reasons (legal obligation, or malware | </section> | |||
| filtering, for instance), an answer was forged. Note that | <section anchor="errindeterminate" numbered="true" toc="default"> | |||
| this should be used when an answer is still provided, not | <name>Extended DNS Error Code 5 - DNSSEC Indeterminate</name> | |||
| when failure codes are returned instead. See Blocked(15), | <t>The resolver attempted to perform DNSSEC validation, but | |||
| Censored (16), and Filtered (17) for use when returning | validation ended in the Indeterminate state <xref target="RFC4035" form | |||
| other response codes.</t> | at="default"/>.</t> | |||
| </section> | </section> | |||
| <section anchor="errbogus" numbered="true" toc="default"> | ||||
| <section anchor="errindeterminate" | <name>Extended DNS Error Code 6 - DNSSEC Bogus</name> | |||
| title="Extended DNS Error Code 5 - DNSSEC Indeterminate"> | <t>The resolver attempted to perform DNSSEC validation, but | |||
| <t>The resolver attempted to perform DNSSEC validation, but | validation ended in the Bogus state.</t> | |||
| validation ended in the Indeterminate state <xref | </section> | |||
| target="RFC4035" />.</t> | <section anchor="errexpired" numbered="true" toc="default"> | |||
| </section> | <name>Extended DNS Error Code 7 - Signature Expired</name> | |||
| <t>The resolver attempted to perform DNSSEC validation, but | ||||
| <section anchor="errbogus" | no signatures are presently valid and some (often all) are | |||
| title="Extended DNS Error Code 6 - DNSSEC Bogus"> | expired.</t> | |||
| <t>The resolver attempted to perform DNSSEC validation, but | </section> | |||
| validation ended in the Bogus state.</t> | <section anchor="errprior" numbered="true" toc="default"> | |||
| </section> | <name>Extended DNS Error Code 8 - Signature Not Yet Valid</name> | |||
| <t>The resolver attempted to perform DNSSEC validation, but | ||||
| <section anchor="errexpired" | no signatures are presently valid and at least some are | |||
| title="Extended DNS Error Code 7 - Signature Expired"> | not yet valid.</t> | |||
| <t>The resolver attempted to perform DNSSEC validation, but | </section> | |||
| no signatures are presently valid and some (often all) are | <section anchor="errnodnskey" numbered="true" toc="default"> | |||
| expired.</t> | <name>Extended DNS Error Code 9 - DNSKEY Missing</name> | |||
| </section> | <t>A DS record existed at a parent, but no supported | |||
| matching DNSKEY record could be found for the child.</t> | ||||
| <section anchor="errprior" | </section> | |||
| title="Extended DNS Error Code 8 - Signature Not Yet Valid"> | <section anchor="errnorrsig" numbered="true" toc="default"> | |||
| <t>The resolver attempted to perform DNSSEC validation, but | <name>Extended DNS Error Code 10 - RRSIGs Missing</name> | |||
| but no signatures are presently valid and at least some are | <t>The resolver attempted to perform DNSSEC validation, but no | |||
| not yet valid.</t> | RRSIGs could be found for at least one RRset where RRSIGs were | |||
| </section> | expected.</t> | |||
| </section> | ||||
| <section anchor="errnodnskey" | <section anchor="errnozonekey" numbered="true" toc="default"> | |||
| title="Extended DNS Error Code 9 - DNSKEY Missing"> | <name>Extended DNS Error Code 11 - No Zone Key Bit Set</name> | |||
| <t>A DS record existed at a parent, but no supported | <t>The resolver attempted to perform DNSSEC validation, but no Zone | |||
| matching DNSKEY record could be found for the child.</t> | Key Bit was set in a DNSKEY.</t> | |||
| </section> | </section> | |||
| <section anchor="nonsec" numbered="true" toc="default"> | ||||
| <section anchor="errnorrsig" | <name>Extended DNS Error Code 12 - NSEC Missing</name> | |||
| title="Extended DNS Error Code 10 - RRSIGs Missing"> | <t>The resolver attempted to perform DNSSEC validation, but | |||
| <t>The resolver attempted to perform DNSSEC validation, but no | the requested data was missing and a covering NSEC or NSEC3 | |||
| RRSIGs could be found for at least one RRset where RRSIGs were | was not provided.</t> | |||
| expected.</t> | </section> | |||
| </section> | <section anchor="cachederror" numbered="true" toc="default"> | |||
| <name>Extended DNS Error Code 13 - Cached Error</name> | ||||
| <section anchor="errnozonekey" | <t>The resolver is returning the SERVFAIL RCODE from its cache.</t> | |||
| title="Extended DNS Error Code 11 - No Zone Key Bit Set"> | </section> | |||
| <t>The resolver attempted to perform DNSSEC validation, but no Zone | <section anchor="notready" numbered="true" toc="default"> | |||
| Key Bit was set in a DNSKEY.</t> | <name>Extended DNS Error Code 14 - Not Ready</name> | |||
| </section> | <t>The server is unable to answer the query, as it was not | |||
| fully functional when the query was received.</t> | ||||
| <section anchor="nonsec" | </section> | |||
| title="Extended DNS Error Code 12 - NSEC Missing"> | <section anchor="errblocked" numbered="true" toc="default"> | |||
| <t>The resolver attempted to perform DNSSEC validation, but | <name>Extended DNS Error Code 15 - Blocked</name> | |||
| the requested data was missing and a covering NSEC or NSEC3 | <t>The server is unable to respond to the request because | |||
| was not provided.</t> | the domain is on a blocklist due to an internal security policy | |||
| </section> | imposed by the operator of the server resolving or forwarding | |||
| the query.</t> | ||||
| <section anchor="cachederror" | </section> | |||
| title="Extended DNS Error Code 13 - Cached Error"> | <section anchor="errcensored" numbered="true" toc="default"> | |||
| <t>The resolver is returning the SERVFAIL RCODE from its cache.</t> | <name>Extended DNS Error Code 16 - Censored</name> | |||
| </section> | <t>The server is unable to respond to the request because | |||
| the domain is on a blocklist due to an external requirement | ||||
| <section anchor="notready" | imposed by an entity other than the operator of the server | |||
| title="Extended DNS Error Code 14 - Not Ready"> | resolving or forwarding the query. Note that how the imposed | |||
| <t>The server is unable to answer the query as it was not | policy is applied is irrelevant (in-band DNS filtering, | |||
| fully functional when the query was received.</t> | court order, etc.).</t> | |||
| </section> | </section> | |||
| <section anchor="errfiltered" numbered="true" toc="default"> | ||||
| <section anchor="errblocked" | <name>Extended DNS Error Code 17 - Filtered</name> | |||
| title="Extended DNS Error Code 15 - Blocked"> | <t>The server is unable to respond to the request because | |||
| <t>The server is unable to respond to the request because | the domain is on a blocklist as requested by the client. | |||
| the domain is blacklisted due to an internal security policy | Functionally, this amounts to "you requested that we filter | |||
| imposed by the operator of the server resolving or forwarding | domains like this one."</t> | |||
| the query.</t> | </section> | |||
| </section> | <section anchor="errprohibted" numbered="true" toc="default"> | |||
| <name>Extended DNS Error Code 18 - Prohibited</name> | ||||
| <section anchor="errcensored" | <t>An authoritative server or recursive resolver that receives a query fr | |||
| title="Extended DNS Error Code 16 - Censored"> | om | |||
| <t>The server is unable to respond to the request because | an "unauthorized" client can annotate its REFUSED message with this | |||
| the domain is blacklisted due to an external requirement | code. Examples of "unauthorized" clients are recursive queries from | |||
| imposed by an entity other than the operator of the server | IP addresses outside the network, blocklisted IP addresses, local | |||
| resolving or forwarding the query. Note that how the imposed | policy, etc.</t> | |||
| policy is applied is irrelevant (in-band DNS filtering, | </section> | |||
| court order, etc).</t> | <section anchor="stalenx" numbered="true" toc="default"> | |||
| </section> | <name>Extended DNS Error Code 19 - Stale NXDOMAIN Answer</name> | |||
| <t>The resolver was unable to resolve an answer within its | ||||
| <section anchor="errfiltered" | configured time limits and decided to answer with a | |||
| title="Extended DNS Error Code 17 - Filtered"> | previously cached NXDOMAIN answer instead of answering with | |||
| <t>The server is unable to respond to the request because | an error. This may be caused, for example, by problems | |||
| the domain is blacklisted as requested by the client. | communicating with an authoritative server, possibly as | |||
| Functionally, this amounts to "you requested that we filter | result of a denial of service (DoS) attack against another | |||
| domains like this one."</t> | network. (See also Code 3.) </t> | |||
| </section> | </section> | |||
| <section anchor="errlame" numbered="true" toc="default"> | ||||
| <section anchor="errprohibted" | <name>Extended DNS Error Code 20 - Not Authoritative</name> | |||
| title="Extended DNS Error Code 18 - Prohibited"> | <t>An authoritative server that receives a query with the Recursion | |||
| <t>An authoritative server or recursive resolver that receives a query | Desired (RD) bit clear, | |||
| from | or when it is not configured for recursion for a domain for which it is | |||
| an "unauthorized" client can annotate its REFUSED message with this | not authoritative, <bcp14>SHOULD</bcp14> include this EDE code in the RE | |||
| code. Examples of "unauthorized" clients are recursive queries from | FUSED | |||
| IP addresses outside the network, blacklisted IP addresses, local | response. A resolver that receives a query with the RD bit clear | |||
| policy, etc.</t> | <bcp14>SHOULD</bcp14> include this EDE code in the REFUSED response.</t> | |||
| </section> | </section> | |||
| <section anchor="deprecated" numbered="true" toc="default"> | ||||
| <section anchor="stalenx" | <name>Extended DNS Error Code 21 - Not Supported</name> | |||
| title="Extended DNS Error Code 19 - Stale NXDOMAIN Answer"> | <t>The requested operation or query is not supported.</t> | |||
| <t>The resolver was unable to resolve an answer within its | </section> | |||
| configured time limits and decided to answer with a | <section anchor="noreachable" numbered="true" toc="default"> | |||
| previously cached NXDOMAIN answer instead of answering with | <name>Extended DNS Error Code 22 - No Reachable Authority</name> | |||
| an error. This may be caused, for example, by problems | <t>The resolver could not reach any of the authoritative name servers | |||
| communicating with an authoritative server, possibly as | (or they potentially refused to reply).</t> | |||
| result of a denial of service (DoS) attack against another | </section> | |||
| network. (See also Code 3.) </t> | <section anchor="networkerror" numbered="true" toc="default"> | |||
| <name>Extended DNS Error Code 23 - Network Error</name> | ||||
| </section> | <t>An unrecoverable error occurred while communicating with | |||
| another server.</t> | ||||
| <section anchor="errlame" | </section> | |||
| title="Extended DNS Error Code 20 - Not Authoritative"> | <section anchor="invaliddata" numbered="true" toc="default"> | |||
| <t>An authoritative server that receives a query with the RD bit clear | <name>Extended DNS Error Code 24 - Invalid Data</name> | |||
| , | <t>The authoritative server cannot answer with data for | |||
| or when it is not configured for recursion for a domain for which it is | a zone it is otherwise configured to support. Examples of | |||
| not authoritative SHOULD include this EDE code in the REFUSED | this include its most recent zone being too old or having | |||
| response. A resolver that receives a query with the RD bit clear | expired.</t> | |||
| SHOULD include this EDE code in the REFUSED response.</t> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section anchor="deprecated" | <name>IANA Considerations</name> | |||
| title="Extended DNS Error Code 21 - Not Supported"> | <section numbered="true" toc="default"> | |||
| <t>The requested operation or query is not supported.</t> | <name>A New Extended DNS Error Code EDNS Option</name> | |||
| </section> | <t>This document defines a new EDNS(0) option, entitled | |||
| "Extended DNS Error", with the assigned value of 15 from the "DNS | ||||
| <section anchor="noreachable" | EDNS0 Option Codes (OPT)" registry: | |||
| title="Extended DNS Error Code 22 - No Reachable Authority"> | </t> | |||
| <t>The resolver could not reach any of the authoritative name servers | ||||
| (or they potentially refused to reply).</t> | ||||
| </section> | ||||
| <section anchor="networkerror" | ||||
| title="Extended DNS Error Code 23 - Network Error"> | ||||
| <t>An unrecoverable error occurred while communicating with | ||||
| another server.</t> | ||||
| </section> | ||||
| <section anchor="invaliddata" | ||||
| title="Extended DNS Error Code 24 - Invalid Data"> | ||||
| <t>The authoritative server cannot answer with data for | ||||
| a zone it is otherwise configured to support. Examples of | ||||
| this include its most recent zone being too old, or having | ||||
| expired.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="IANA Considerations"> | ||||
| <section title="A New Extended DNS Error Code EDNS Option"> | ||||
| <t>This document defines a new EDNS(0) option, entitled | ||||
| "Extended DNS Error", assigned a value of TBD from the "DNS | ||||
| EDNS0 Option Codes (OPT)" registry [to be removed upon | ||||
| publication: | ||||
| [http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns | ||||
| -parameters-11]</t> | ||||
| <t><figure> | ||||
| <artwork><![CDATA[Value Name Status Reference | ||||
| TBD Extended DNS Error Standard [ This document ]]]></artwork> | ||||
| </figure></t> | ||||
| </section> | ||||
| <section title="New Registry for Extended DNS Error Codes" anchor="IANA"> | ||||
| <t>IANA is requested to create and maintain a new registry | ||||
| table called "Extended DNS Error Codes" on the "Domain Name | ||||
| System (DNS) Parameters" web page as follows:</t> | ||||
| <t>Registry Name: Extended DNS Error Codes</t> | ||||
| <t>Registration Procedures:</t> | ||||
| <t><list style="symbols"> | ||||
| <t>0 - 49151: First come, first served.</t> | ||||
| <t>49152 - 65535: Private use.</t> | ||||
| </list></t> | ||||
| <t>Reference: [this document]</t> | ||||
| <t>The Extended DNS Error Codes registry is a table with | ||||
| three columns: INFO-CODE, Purpose, and Reference. The initial | ||||
| contents is as below with [this document] added to | ||||
| each reference given.</t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">0</t> | ||||
| <t hangText="Purpose:">Other Error</t> | ||||
| <t hangText="Reference:"><xref target="errother" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">1</t> | ||||
| <t hangText="Purpose:">Unsupported DNSKEY Algorithm</t> | ||||
| <t hangText="Reference:"><xref target="errbaddnskeyalg" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">2</t> | ||||
| <t hangText="Purpose:">Unsupported DS Digest Type</t> | ||||
| <t hangText="Reference:"><xref target="errbaddsdigest" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">3</t> | ||||
| <t hangText="Purpose:">Stale Answer</t> | ||||
| <t hangText="Reference:"><xref target="stalenoerror" />, | ||||
| <xref target="RFC8767" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">4</t> | ||||
| <t hangText="Purpose:">Forged Answer</t> | ||||
| <t hangText="Reference:"><xref target="forgedanswer" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">5</t> | ||||
| <t hangText="Purpose:">DNSSEC Indeterminate</t> | ||||
| <t hangText="Reference:"><xref target="errindeterminate" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">6</t> | ||||
| <t hangText="Purpose:">DNSSEC Bogus</t> | ||||
| <t hangText="Reference:"><xref target="errbogus" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">7</t> | ||||
| <t hangText="Purpose:">Signature Expired</t> | ||||
| <t hangText="Reference:"><xref target="errexpired" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">8</t> | ||||
| <t hangText="Purpose:">Signature Not Yet Valid</t> | ||||
| <t hangText="Reference:"><xref target="errprior" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">9</t> | ||||
| <t hangText="Purpose:">DNSKEY Missing</t> | ||||
| <t hangText="Reference:"> <xref target="errnodnskey" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">10</t> | ||||
| <t hangText="Purpose:">RRSIGs Missing</t> | ||||
| <t hangText="Reference:"><xref target="errnorrsig" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">11</t> | ||||
| <t hangText="Purpose:">No Zone Key Bit Set</t> | ||||
| <t hangText="Reference:"><xref target="errnozonekey" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | ||||
| <t hangText="INFO-CODE:">12</t> | ||||
| <t hangText="Purpose:">NSEC Missing</t> | ||||
| <t hangText="Reference:"><xref target="nonsec" /></t> | ||||
| </list></t> | ||||
| <t><list style="hanging" hangIndent="10"> | <table anchor="ext-DNS"> | |||
| <t hangText="INFO-CODE:">13</t> | <thead> | |||
| <t hangText="Purpose:">Cached Error</t> | <tr> | |||
| <t hangText="Reference:"><xref target="cachederror" /></t> | <th> Value </th> | |||
| </list></t> | <th> Name </th> | |||
| <th> Status </th> | ||||
| <th> Reference </th> | ||||
| </tr> | ||||
| </thead> | ||||
| <t><list style="hanging" hangIndent="10"> | <tbody> | |||
| <t hangText="INFO-CODE:">14</t> | <tr> | |||
| <t hangText="Purpose:">Not Ready.</t> | <td>15</td> | |||
| <t hangText="Reference:"><xref target="notready" /></t> | <td>Extended DNS Error</td> | |||
| </list></t> | <td>Standard</td> | |||
| <td>RFC 8914</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| <t><list style="hanging" hangIndent="10"> | </table> | |||
| <t hangText="INFO-CODE:">15</t> | </section> | |||
| <t hangText="Purpose:">Blocked</t> | <section anchor="IANA" numbered="true" toc="default"> | |||
| <t hangText="Reference:"><xref target="errblocked" /></t> | <name>New Registry for Extended DNS Error Codes</name> | |||
| </list></t> | <t>IANA has created and will maintain a new registry | |||
| called "Extended DNS Error Codes" on the "Domain Name | ||||
| System (DNS) Parameters" web page as follows:</t> | ||||
| <t><list style="hanging" hangIndent="10"> | <table anchor="reg_proc"> | |||
| <t hangText="INFO-CODE:">16</t> | <thead> | |||
| <t hangText="Purpose:">Censored</t> | <tr> | |||
| <t hangText="Reference:"><xref target="errcensored" /></t> | <th>Range</th> | |||
| </list></t> | <th>Registration Procedures</th> | |||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td>0 - 49151</td><td>First Come First Served</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>49152 - 65535</td><td>Private Use</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t><list style="hanging" hangIndent="10"> | <t>The "Extended DNS Error Codes" registry is a table with | |||
| <t hangText="INFO-CODE:">17</t> | three columns: INFO-CODE, Purpose, and Reference. The initial | |||
| <t hangText="Purpose:">Filtered</t> | content is as below.</t> | |||
| <t hangText="Reference:"><xref target="errfiltered" /></t> | <table> | |||
| </list></t> | <thead> | |||
| <tr> | ||||
| <th>INFO-CODE </th> | ||||
| <th>Purpose </th> | ||||
| <th>Reference </th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td> 0 </td> | ||||
| <td> Other Error</td> | ||||
| <td> <xref target="errother" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 1 </td> | ||||
| <td align="center"> Unsupported DNSKEY Algorithm </td> | ||||
| <td> <xref target="errbaddnskeyalg" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 2 </td> | ||||
| <td>Unsupported DS Digest Type </td> | ||||
| <td> <xref target="errbaddsdigest" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 3 </td> | ||||
| <td> Stale Answer </td> | ||||
| <td> <xref target="stalenoerror" format="default"/> and | ||||
| <xref target="RFC8767" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 4 </td> | ||||
| <td> Forged Answer </td> | ||||
| <td> <xref target="forgedanswer" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 5 </td> | ||||
| <td> DNSSEC Indeterminate </td> | ||||
| <td> <xref target="errindeterminate" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 6 </td> | ||||
| <td>DNSSEC Bogus </td> | ||||
| <td> <xref target="errbogus" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td> 7 </td> | ||||
| <td> Signature Expired </td> | ||||
| <td> <xref target="errexpired" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>8 </td> | ||||
| <td>Signature Not Yet Valid </td> | ||||
| <td> <xref target="errprior" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>9 </td> | ||||
| <td>DNSKEY Missing </td> | ||||
| <td> <xref target="errnodnskey" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>10 </td> | ||||
| <td>RRSIGs Missing </td> | ||||
| <td> <xref target="errnorrsig" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>11 </td> | ||||
| <td>No Zone Key Bit Set </td> | ||||
| <td> <xref target="errnozonekey" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>12 </td> | ||||
| <td>NSEC Missing </td> | ||||
| <td> <xref target="nonsec" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>13 </td> | ||||
| <td>Cached Error </td> | ||||
| <td> <xref target="cachederror" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>14 </td> | ||||
| <td>Not Ready</td> | ||||
| <td> <xref target="notready" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>15 </td> | ||||
| <td>Blocked </td> | ||||
| <td> <xref target="errblocked" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>16 </td> | ||||
| <td>Censored </td> | ||||
| <td> <xref target="errcensored" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>17 </td> | ||||
| <td>Filtered </td> | ||||
| <td> <xref target="errfiltered" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>18 </td> | ||||
| <td>Prohibited </td> | ||||
| <td> <xref target="errprohibted" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>19 </td> | ||||
| <td>Stale NXDomain Answer </td> | ||||
| <td> <xref target="stalenx" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>20 </td> | ||||
| <td>Not Authoritative </td> | ||||
| <td> <xref target="errlame" format="default"/> </td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td>21 </td> | ||||
| <td>Not Supported </td> | ||||
| <td><xref target="deprecated" format="default"/> </td> | ||||
| </tr> | ||||
| <t><list style="hanging" hangIndent="10"> | <tr> | |||
| <t hangText="INFO-CODE:">18</t> | <td>22 </td> | |||
| <t hangText="Purpose:">Prohibited</t> | <td>No Reachable Authority </td> | |||
| <t hangText="Reference:"><xref target="errprohibted" /></t> | <td> <xref target="noreachable" format="default"/> </td> | |||
| </list></t> | </tr> | |||
| <t><list style="hanging" hangIndent="10"> | <tr> | |||
| <t hangText="INFO-CODE:">19</t> | <td>23 </td> | |||
| <t hangText="Purpose:">Stale NXDomain Answer</t> | <td>Network Error </td> | |||
| <t hangText="Reference:"><xref target="stalenx" /></t> | <td> <xref target="networkerror" format="default"/> </td> | |||
| </list></t> | </tr> | |||
| <t><list style="hanging" hangIndent="10"> | <tr> | |||
| <t hangText="INFO-CODE:">20</t> | <td>24 </td> | |||
| <t hangText="Purpose:">Not Authoritative</t> | <td>Invalid Data </td> | |||
| <t hangText="Reference:"><xref target="errlame" /></t> | <td> <xref target="invaliddata" format="default"/> </td> | |||
| </list></t> | </tr> | |||
| <t><list style="hanging" hangIndent="10"> | <tr> | |||
| <t hangText="INFO-CODE:">21</t> | <td>25-49151</td> | |||
| <t hangText="Purpose:">Not Supported</t> | <td>Unassigned</td> | |||
| <t hangText="Reference:"><xref target="deprecated" /></t> | <td></td> | |||
| </list></t> | </tr> | |||
| <tr> | ||||
| <td>49152-65535</td> | ||||
| <td>Reserved for Private Use</td> | ||||
| <td><xref target="IANA"/></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t><list style="hanging" hangIndent="10"> | </section> | |||
| <t hangText="INFO-CODE:">22</t> | </section> | |||
| <t hangText="Purpose:">No Reachable Authority</t> | <section anchor="security" numbered="true" toc="default"> | |||
| <t hangText="Reference:"><xref target="noreachable" /></t> | <name>Security Considerations</name> | |||
| </list></t> | <t>Though DNSSEC continues to be deployed, unfortunately a | |||
| significant number of clients (~11% according to <xref target="GeoffValidat | ||||
| ion" format="default"/>) that receive a SERVFAIL from a | ||||
| validating resolver because of a DNSSEC validation issue will | ||||
| simply ask the next (potentially non-validating) resolver in | ||||
| their list and thus don't get the protections that | ||||
| DNSSEC should provide.</t> | ||||
| <t>EDE information is unauthenticated information, unless | ||||
| secured by a form of secured DNS transaction, such as <xref | ||||
| target="RFC2845" format="default"/>, <xref target="RFC2931" | ||||
| format="default"/>, <xref target="RFC8094" format="default"/>, or <xref | ||||
| target="RFC8484" format="default"/>. An attacker (e.g., a man in the | ||||
| middle (MITM) or malicious | ||||
| recursive server) could insert an extended error response into | ||||
| untrusted data -- although, ideally, clients and resolvers | ||||
| would not trust any unauthenticated information. As such, EDE | ||||
| content should be treated only as diagnostic information and | ||||
| <bcp14>MUST NOT</bcp14> alter DNS protocol processing. Until all DNS answe | ||||
| rs | ||||
| are authenticated via DNSSEC or the other mechanisms mentioned | ||||
| above, there are some trade-offs. As an example, an attacker who | ||||
| is able to insert the DNSSEC Bogus Extended Error into a DNS | ||||
| message could instead simply reply with a fictitious address (A | ||||
| or AAAA) record. Note that DNS RCODEs also | ||||
| contain no authentication and can be just as easily manipulated. | ||||
| </t> | ||||
| <t>By design, EDE potentially exposes additional information | ||||
| via DNS resolution processes that may leak information. | ||||
| <t><list style="hanging" hangIndent="10"> | An example | |||
| <t hangText="INFO-CODE:">23</t> | of this is the Prohibited EDE code (18), which may leak the fact | |||
| <t hangText="Purpose:">Network Error</t> | that the name is on a blocklist.</t> | |||
| <t hangText="Reference:"><xref target="networkerror" /></t> | </section> | |||
| </list></t> | </middle> | |||
| <back> | ||||
| <references> | ||||
| <name>References</name> | ||||
| <references> | ||||
| <name>Normative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.4035.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.5198.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.6891.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8499.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8767.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.2845.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.2931.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8094.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refere | ||||
| nce.RFC.8484.xml"/> | ||||
| <t><list style="hanging" hangIndent="10"> | <reference anchor="GeoffValidation" target="http://www.potaroo.net/presen | |||
| <t hangText="INFO-CODE:">24</t> | tations/2016-06-27-dnssec.pdf"> | |||
| <t hangText="Purpose:">Invalid Data</t> | <front> | |||
| <t hangText="Reference:"><xref target="invaliddata" /></t> | <title abbrev="Validation today">A quick review of DNSSEC Validation | |||
| </list></t> | in today's Internet</title> | |||
| <author initials="G" surname="Huston" fullname="Geoff Huston"> | ||||
| <organization>APNIC</organization> | ||||
| </author> | ||||
| <date month="June" year="2016"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | ||||
| <section numbered="false" toc="default"> | ||||
| <name>Acknowledgements</name> | ||||
| <t><list style="hanging" hangIndent="10"> | <t>The authors wish to thank <contact fullname=" Joe Abley"/>, <contact | |||
| <t hangText="INFO-CODE:">25-65535</t> | fullname="Mark Andrews"/>, <contact fullname="Tim April"/>, <contact | |||
| <t hangText="Purpose:">Unassigned</t> | fullname="Vittorio Bertola"/>, <contact fullname="Stephane | |||
| <t hangText="Reference:"><xref target="IANA" /></t> | Bortzmeyer"/>, <contact fullname="Vladimir Cunat"/>, <contact | |||
| </list></t> | fullname="Ralph Dolmans"/>, <contact fullname="Peter DeVries"/>, | |||
| <contact fullname="Peter van Dijk"/>, <contact fullname="Mats | ||||
| Dufberg"/>, <contact fullname=" Donald Eastlake"/>, <contact | ||||
| fullname="Bob Harold"/>, <contact fullname="Paul Hoffman"/>, <contact | ||||
| fullname="Geoff Huston"/>, <contact fullname=" Shane Kerr"/>, <contact | ||||
| fullname="Edward Lewis"/>, <contact fullname="Carlos M. Martinez"/>, | ||||
| <contact fullname="George Michelson"/>, <contact fullname="Eric Orth"/>, | ||||
| <contact fullname="Michael Sheldon"/>, <contact fullname="Puneet | ||||
| Sood"/>, <contact fullname="Petr Spacek"/>, <contact fullname=" Ondrej | ||||
| Sury"/>, <contact fullname="John Todd"/>, <contact fullname="Loganaden | ||||
| Velvindron"/>, and <contact fullname="Paul Vixie"/>. They also vaguely | ||||
| remember discussing this with a number of people over the years but have | ||||
| forgotten who all of them were. Apologies if we forgot to acknowledge | ||||
| your contributions.</t> | ||||
| <t>One author also wants to thank the band Infected Mushroom | ||||
| for providing a good background soundtrack (and to see if he can | ||||
| get away with this in an RFC!). Another author would like to | ||||
| thank the band Mushroom Infectors. This was funny at the time | ||||
| we wrote it, but we cannot remember why...</t> | ||||
| </section> | </section> | |||
| </section> | </back> | |||
| <section anchor="security" title="Security Considerations"> | ||||
| <t>Though DNSSEC continues to be deployed, unfortunately a | ||||
| significant number of clients (~11% according to <xref | ||||
| target="GeoffValidation"/>) that receive a SERVFAIL from a | ||||
| validating resolver because of a DNSSEC validation issue will | ||||
| simply ask the next (potentially non-validating) resolver in | ||||
| their list, and thus don't get the protections which | ||||
| DNSSEC should provide.</t> | ||||
| <t>EDE information is unauthenticated information, unless | ||||
| secured by a form of secured DNS transaction such as <xref | ||||
| target="RFC2845"/>, <xref target="RFC2931"/>, <xref | ||||
| target="RFC8094"/> or <xref target="RFC8484" />. An attacker (e.g a MITM o | ||||
| r malicious | ||||
| recursive server) could insert an extended error response into | ||||
| untrusted data — although ideally clients and resolvers | ||||
| would not trust any unauthenticated information. As such, EDE | ||||
| content should be treated only as diagnostic information and | ||||
| MUST NOT alter DNS protocol processing. Until all DNS answers | ||||
| are authenticated via DNSSEC or the other mechanisms mentioned | ||||
| above, there are some tradeoffs. As an example, an attacker who | ||||
| is able to insert the DNSSEC Bogus Extended Error into a DNS | ||||
| message could instead simply reply with a fictitious address (A | ||||
| or AAAA) record. Note that DNS Response Codes (RCODEs) also | ||||
| contain no authentication and can be just as easily manipulated. | ||||
| </t> | ||||
| <t>By design, EDE potentially exposes additional information | ||||
| DNS resolution processes that may leak information. An example | ||||
| of this is the Prohibited EDE code (18), which may leak the fact | ||||
| that the name is on a blacklist.</t> | ||||
| </section> | ||||
| <section title="Acknowledgements"> | ||||
| <t>The authors wish to thank Joe Abley, Mark Andrews, Tim April, | ||||
| Vittorio Bertola, Stephane Bortzmeyer, Vladimir Cunat, Ralph | ||||
| Dolmans, Peter DeVries, Peter van Dijk, Mats Dufberg, Donald | ||||
| Eastlake, Bob Harold, Paul Hoffman, Geoff Huston, Shane Kerr, | ||||
| Edward Lewis, Carlos M. Martinez, George Michelson, Eric Orth, | ||||
| Michael Sheldon, Puneet Sood, Petr Spacek, Ondrej Sury, John | ||||
| Todd, Loganaden Velvindron, and Paul Vixie. They also vaguely | ||||
| remember discussing this with a number of people over the years, | ||||
| but have forgotten who all they were -- if you were one of them, | ||||
| and are not listed, please let us know and we'll acknowledge | ||||
| you.</t> | ||||
| <t>One author also wants to thank the band "Infected Mushroom" | ||||
| for providing a good background soundtrack (and to see if he can | ||||
| get away with this in an RFC!). Another author would like to | ||||
| thank the band "Mushroom Infectors". This was funny at the time | ||||
| we wrote it, but we cannot remember why...</t> | ||||
| </section> | ||||
| </middle> | ||||
| <back> | ||||
| <references title="Normative References"> | ||||
| <?rfc include='reference.RFC.2119' ?> | ||||
| <?rfc include='reference.RFC.4035' ?> | ||||
| <?rfc include='reference.RFC.5198' ?> | ||||
| <?rfc include='reference.RFC.6891' ?> | ||||
| <?rfc include='reference.RFC.8174' ?> | ||||
| <?rfc include='reference.RFC.8499' ?> | ||||
| <?rfc include='reference.RFC.8767' ?> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <?rfc include='reference.RFC.2845' ?> | ||||
| <?rfc include='reference.RFC.2931' ?> | ||||
| <?rfc include='reference.RFC.8094' ?> | ||||
| <?rfc include='reference.RFC.8484' ?> | ||||
| <reference anchor="GeoffValidation" | ||||
| target="http://www.potaroo.net/presentations/2016-06-27-dnssec. | ||||
| pdf"> | ||||
| <front> | ||||
| <title abbrev="Validation today">A quick review of DNSSEC Validation | ||||
| in today’s Internet</title> | ||||
| <author fullname="Geoff Huston, APNIC"> | ||||
| <organization>IANA</organization> | ||||
| </author> | ||||
| <date month="June" year="2016"/> | ||||
| </front> | ||||
| </reference> | ||||
| </references> | ||||
| </back> | ||||
| </rfc> | </rfc> | |||
| End of changes. 29 change blocks. | ||||
| 719 lines changed or deleted | 703 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||