draft-ietf-dnsop-extended-error-02.txt | draft-ietf-dnsop-extended-error-03.txt | |||
---|---|---|---|---|
Network Working Group W. Kumari | Network Working Group W. Kumari | |||
Internet-Draft Google | Internet-Draft Google | |||
Intended status: Standards Track E. Hunt | Intended status: Standards Track E. Hunt | |||
Expires: March 25, 2019 ISC | Expires: June 23, 2019 ISC | |||
R. Arends | R. Arends | |||
ICANN | ICANN | |||
W. Hardaker | W. Hardaker | |||
USC/ISI | USC/ISI | |||
D. Lawrence | D. Lawrence | |||
Oracle + Dyn | Oracle + Dyn | |||
September 21, 2018 | December 20, 2018 | |||
Extended DNS Errors | Extended DNS Errors | |||
draft-ietf-dnsop-extended-error-02 | draft-ietf-dnsop-extended-error-03 | |||
Abstract | Abstract | |||
This document defines an extensible method to return additional | This document defines an extensible method to return additional | |||
information about the cause of DNS errors. The primary use case is | information about the cause of DNS errors. Though created primarily | |||
to extend SERVFAIL to provide additional information about the cause | to extend SERVFAIL to provide additional information about the cause | |||
of DNS and DNSSEC failures. | of DNS and DNSSEC failures, the Extended DNS Errors option defined in | |||
this document allows all response types to contain extended error | ||||
information. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on March 25, 2019. | This Internet-Draft will expire on June 23, 2019. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction and background . . . . . . . . . . . . . . . . . 2 | 1. Introduction and background . . . . . . . . . . . . . . . . . 3 | |||
1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3 | 1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3 | |||
2. Extended Error EDNS0 option format . . . . . . . . . . . . . 3 | 2. Extended Error EDNS0 option format . . . . . . . . . . . . . 3 | |||
3. Use of the Extended DNS Error option . . . . . . . . . . . . 5 | 3. Use of the Extended DNS Error option . . . . . . . . . . . . 4 | |||
3.1. The R (Retry) flag . . . . . . . . . . . . . . . . . . . 5 | ||||
3.2. The RESPONSE-CODE field . . . . . . . . . . . . . . . . . 5 | ||||
3.3. The INFO-CODE field . . . . . . . . . . . . . . . . . . . 5 | ||||
3.4. The EXTRA-TEXT field . . . . . . . . . . . . . . . . . . 5 | ||||
4. Defined Extended DNS Errors . . . . . . . . . . . . . . . . . 5 | 4. Defined Extended DNS Errors . . . . . . . . . . . . . . . . . 5 | |||
4.1. SERVFAIL(2) extended information codes . . . . . . . . . 5 | 4.1. INFO-CODEs for use with RESPONSE-CODE: SERVFAIL(2) . . . 6 | |||
4.1.1. Extended DNS Error Code 1 - DNSSEC Bogus . . . . . . 6 | 4.1.1. SERVFAIL Extended DNS Error Code 1 - DNSSEC Bogus . . 6 | |||
4.1.2. Extended DNS Error Code 2 - DNSSEC Indeterminate . . 6 | 4.1.2. SERVFAIL Extended DNS Error Code 2 - DNSSEC | |||
4.1.3. Extended DNS Error Code 3 - Signature Expired . . . . 6 | Indeterminate . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1.4. Extended DNS Error Code 4 - Signature Not Yet Valid . 6 | 4.1.3. SERVFAIL Extended DNS Error Code 3 - Signature | |||
4.1.5. Extended DNS Error Code 5 - Unsupported | Expired . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1.4. SERVFAIL Extended DNS Error Code 4 - Signature Not | ||||
Yet Valid . . . . . . . . . . . . . . . . . . . . . . 6 | ||||
4.1.5. SERVFAIL Extended DNS Error Code 5 - Unsupported | ||||
DNSKEY Algorithm . . . . . . . . . . . . . . . . . . 6 | DNSKEY Algorithm . . . . . . . . . . . . . . . . . . 6 | |||
4.1.6. Extended DNS Error Code 6 - Unsupported | 4.1.6. SERVFAIL Extended DNS Error Code 6 - Unsupported | |||
DS Algorithm . . . . . . . . . . . . . . . . . . . . 6 | DS Algorithm . . . . . . . . . . . . . . . . . . . . 6 | |||
4.1.7. Extended DNS Error Code 7 - DNSKEY missing . . . . . 6 | 4.1.7. SERVFAIL Extended DNS Error Code 7 - DNSKEY missing . 6 | |||
4.1.8. Extended DNS Error Code 8 - RRSIGs missing . . . . . 6 | 4.1.8. SERVFAIL Extended DNS Error Code 8 - RRSIGs missing . 7 | |||
4.1.9. Extended DNS Error Code 9 - No Zone Key Bit Set . . . 6 | 4.1.9. SERVFAIL Extended DNS Error Code 9 - No Zone Key Bit | |||
4.2. REFUSED(5) extended information codes . . . . . . . . . . 7 | Set . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
4.2.1. Extended DNS Error Code 1 - Lame . . . . . . . . . . 7 | 4.2. INFO-CODEs for use with RESPONSE-CODE: REFUSED(5) . . . . 7 | |||
4.2.2. Extended DNS Error Code 2 - Prohibited . . . . . . . 7 | 4.2.1. REFUSED Extended DNS Error Code 1 - Lame . . . . . . 7 | |||
4.3. NXDOMAIN(3) extended information codes . . . . . . . . . 7 | 4.2.2. REFUSED Extended DNS Error Code 2 - Prohibited . . . 7 | |||
4.3.1. Extended DNS Error Code 1 - Blocked . . . . . . . . . 7 | 4.3. INFO-CODEs for use with RESPONSE-CODE: NXDOMAIN(3) . . . 7 | |||
4.3.1. NXDOMAIN Extended DNS Error Code 1 - Blocked . . . . 7 | ||||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | |||
5.1. new Extended Error Code EDNS Option . . . . . . . . . . . 7 | 5.1. new Extended Error Code EDNS Option . . . . . . . . . . . 7 | |||
5.2. new Extended Error Code EDNS Option . . . . . . . . . . . 7 | 5.2. New Extended Error Code EDNS Option . . . . . . . . . . . 8 | |||
6. Open questions . . . . . . . . . . . . . . . . . . . . . . . 8 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 9 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10 | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 9 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 10 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 9 | 8.2. Informative References . . . . . . . . . . . . . . . . . 10 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 9 | Appendix A. Changes / Author Notes. . . . . . . . . . . . . . . 11 | |||
Appendix A. Changes / Author Notes. . . . . . . . . . . . . . . 9 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
1. Introduction and background | 1. Introduction and background | |||
There are many reasons that a DNS query may fail, some of them | There are many reasons that a DNS query may fail, some of them | |||
transient, some permanent; some can be resolved by querying another | transient, some permanent; some can be resolved by querying another | |||
server, some are likely best handled by stopping resolution. | server, some are likely best handled by stopping resolution. | |||
Unfortunately, the error signals that a DNS server can return are | Unfortunately, the error signals that a DNS server can return are | |||
very limited, and are not very expressive. This means that | very limited, and are not very expressive. This means that | |||
applications and resolvers often have to "guess" at what the issue is | applications and resolvers often have to "guess" at what the issue is | |||
- e.g the answer was marked REFUSED because of a lame delegation, or | - e.g. was the answer marked REFUSED because of a lame delegation, or | |||
because of a lame delegation or because the nameserver is still | because the nameserver is still starting up and loading zones? Is a | |||
starting up and loading zones? Is a SERVFAIL a DNSSEC validation | SERVFAIL a DNSSEC validation issue, or is the nameserver experiencing | |||
issue, or is the nameserver experiencing a bad hair day? | a bad hair day? | |||
A good example of issues that would benefit by additional error | A good example of issues that would benefit by additional error | |||
information is an error caused by a DNSSEC validation issue. When a | information are errors caused by DNSSEC validation issues. When a | |||
stub resolver queries a DNSSEC bogus name (using a validating | stub resolver queries a DNSSEC bogus name (using a validating | |||
resolver), the stub resolver receives only a SERVFAIL in response. | resolver), the stub resolver receives only a SERVFAIL in response. | |||
Unfortunately, SERVFAIL is used to signal many sorts of DNS errors, | Unfortunately, SERVFAIL is used to signal many sorts of DNS errors, | |||
and so the stub resolver simply asks the next configured DNS | and so the stub resolver simply asks the next configured DNS | |||
resolver. The result of trying the next resolver is one of two | resolver. The result of trying the next resolver is one of two | |||
outcomes: either the next resolver also validates, a SERVFAIL is | outcomes: either the next resolver also validates, a SERVFAIL is | |||
returned again, and the user gets an (largely) incomprehensible error | returned again, and the user gets an (largely) incomprehensible error | |||
message; or the next resolver is not a validating resolver, and the | message; or the next resolver is not a validating resolver, and the | |||
user is returned a potentially harmful result. | user is returned a potentially harmful result. | |||
This document specifies a mechanism to extend (or annotate) DNS | This document specifies a mechanism to extend (or annotate) DNS | |||
errors to provide additional information about the cause of the | errors to provide additional information about the cause of the | |||
error. This information can be used by the resolver to make a | error. When properly authenticated, this information can be used by | |||
decision regarding whether or not to retry, or by technical users | the resolver to make a decision regarding whether or not to retry or | |||
attempting to debug issues. | it can be used or by technical users attempting to debug issues. | |||
Here is a reference to an "external" (non-RFC / draft) thing: | ||||
([IANA.AS_Numbers]). And this is a link to an | ||||
ID:[I-D.ietf-sidr-iana-objects]. | ||||
1.1. Requirements notation | 1.1. Requirements notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
2. Extended Error EDNS0 option format | 2. Extended Error EDNS0 option format | |||
This draft uses an EDNS0 ([RFC2671]) option to include extended error | This draft uses an EDNS0 ([RFC2671]) option to include Extended DNS | |||
(ExtError) information in DNS messages. The option is structured as | Error (EDE) information in DNS messages. The option is structured as | |||
follows: | follows: | |||
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: | R | RESERVED | | 4: | R | RESERVED | | |||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
6: | RESPONSE-CODE | | 6: | RESPONSE-CODE | INFO-CODE | | |||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | ||||
8: | INFO-CODE | | ||||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
A: | EXTRA-TEXT | | 8: | EXTRA-TEXT | | |||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | |||
o OPTION-CODE, 2 octets (defined in [RFC6891]), for ExtError is TBD. | Field definition details: | |||
o OPTION-CODE, 2 octets (defined in [RFC6891]), for EDE is TBD. | ||||
[RFC Editor: change TBD to the proper code once assigned by IANA.] | ||||
o OPTION-LENGTH, 2 octets ((defined in [RFC6891]) contains the | o OPTION-LENGTH, 2 octets ((defined in [RFC6891]) contains the | |||
length of the payload (everything after OPTION-LENGTH) in octets | length of the payload (everything after OPTION-LENGTH) in octets | |||
and should be 4. | and should be 4 plus the length of the EXTRA-TEXT section (which | |||
may be a zero-length string). | ||||
o The RETRY flag, 1 bit; the RETRY bit (R) indicates a flag defined | ||||
for use in this specification. | ||||
o The RESERVED bits, 15 bits: these bits are reserved for future | ||||
use, potentially as additional flags. The RESERVED bits MUST be | ||||
set to 0 by the sender and SHOULD be ignored by the receiver. | ||||
o RESPONSE-CODE, 4 bits. | ||||
o INFO-CODE, 12-bits. | ||||
o EXTRA-TEXT, a variable length, ASCII encoded, text field that may | ||||
hold additional textual information. | ||||
o RESERVED, 2 octets; the first bit (R) indicates a flag defined in | 3. Use of the Extended DNS Error option | |||
this specification. The remaining bits are reserved for future | ||||
use, potentially as additional flags. | ||||
o RESPONSE-CODE, 2 octets: this SHOULD be a copy of the RCODE from | The Extended DNS Error (EDE) is an EDNS option. It can be included | |||
the primary DNS packet. When including multiple extended error | in any response (SERVFAIL, NXDOMAIN, REFUSED, etc) to a query that | |||
EDNS0 records in a response in order to provide additional error | includes an EDNS option. This document includes a set of initial | |||
information, the RESPONSE-CODE MAY be a different RCODE. | codepoints (and requests to the IANA to add them to the registry), | |||
but is extensible via the IANA registry to allow additional error and | ||||
information codes to be defined in the future. | ||||
o INFO-CODE, 2 octets. | The fields of the Extended DNS Error option are defined further in | |||
the following sub-sections. | ||||
o A variable length EXTRA-TEXT field holding additional textual | 3.1. The R (Retry) flag | |||
information. It may be zero length when no additional textual | ||||
information is included. | ||||
Currently the only defined flag is the R flag. | The R (Retry) flag provides a hint as to what the receiver may want | |||
to do with this annotated error. Specifically, the R (or Retry) flag | ||||
provides a hint to the receiver that it should retry the query to | ||||
another server. If the R bit is set (1), the sender believes that | ||||
retrying the query may provide a successful answer next time; if the | ||||
R bit is clear (0), the sender believes that the resolver should not | ||||
ask another server. | ||||
R - Retry The R (or Retry) flag provides a hint to the receiver that | The mechanism is specifically designed to be extensible, and so | |||
it should retry the query, probably by querying another server. | implementations may receive EDE codes that it does not understand. | |||
If the R bit is set (1), the sender believes that retrying the | The R flag allows implementations to make a decision as to what to do | |||
query may provide a successful answer next time; if the R bit is | if it receives a response with an unknown code - retry or drop the | |||
clear (0), the sender believes that it should not ask another | query. Note that this flag is only a suggestion. Unless a | |||
server. | protective transport mechanism (like TSIG [RFC2845] or TLS [RFC8094]) | |||
is used, the bit's value could have have been altered by a person-in- | ||||
the-middle. Receivers can choose to ignore this hint. See the | ||||
security considerations for additional considerations. | ||||
The remaining bits in the RESERVED field are reserved for future use | 3.2. The RESPONSE-CODE field | |||
and MUST be set to 0 by the sender and SHOULD be ignored by the | ||||
receiver. | ||||
INFO-CODE: A code point that, when combined with the RCODE from the | This 4-bit value SHOULD be a copy of the RCODE from the primary DNS | |||
DNS packet, serve as a joint-index into the IANA "Extended DNS | packet. Multiple EDNS0/EDE records may be included in the response. | |||
Errors" registry. | When including multiple EDNS0/EDE records in a response in order to | |||
provide additional error information, other RESPONSE-CODEs MAY use a | ||||
different RCODE. | ||||
3. Use of the Extended DNS Error option | 3.3. The INFO-CODE field | |||
The Extended DNS Error (EDE) is an EDNS option. It can be included | This 12-bit value provides the additional context for the RESPONSE- | |||
in any error response (SERVFAIL, NXDOMAIN, REFUSED, etc) to a query | CODE value. This combination of the RESPONSE-CODE and the INFO-CODE | |||
that includes an EDNS option. This document includes a set of | serve as a joint-index into the IANA "Extended DNS Errors" registry. | |||
initial codepoints (and requests to the IANA to add them to the | ||||
registry), but is extensible via the IANA registry to allow | ||||
additional error and information codes to be defined in the future. | ||||
The R (Retry) flag provides a hint (or suggestion) as to what the | 3.4. The EXTRA-TEXT field | |||
receiver may want to do with this annotated error. The mechanism is | ||||
specifically designed to be extensible, and so implementations may | ||||
receive EDE codes that it does not understand. The R flag allows | ||||
implementations to make a decision as to what to do if it receives a | ||||
response with an unknown code - retry or drop the query. Note that | ||||
this flag is only a suggestion or hint. Receivers can choose to | ||||
ignore this hint. | ||||
The EXTRA-INFO textual field may be zero-length, or may hold | The ASCII-encoded, EXTRA-TEXT field may be zero-length, or may hold | |||
additional information useful to network operators. | additional information useful to network operators. | |||
4. Defined Extended DNS Errors | 4. Defined Extended DNS Errors | |||
This document defines some initial EDE codes. The mechanism is | This document defines some initial EDE codes. The mechanism is | |||
intended to be extensible, and additional codepoints will be | intended to be extensible, and additional code-points can be | |||
registered in the "Extended DNS Errors" registry. This document | registered in the "Extended DNS Errors" registry. This document | |||
provides suggestions for the R flag, but the originating server may | provides suggestions for the R flag, but the originating server may | |||
ignore these recommendations if it knows better. | ignore these recommendations if it knows better. | |||
The RESPONSE-CODE and the INFO-CODE from the EDE EDNS option is used | The RESPONSE-CODE and the INFO-CODE from the EDE EDNS option is used | |||
to serve as a double index into the "Extended DNS Error codes" IANA | to serve as a double index into the "Extended DNS Error codes" IANA | |||
registry, the initial values for which are defined in the following | registry, the initial values for which are defined in the following | |||
sub-sections. | sub-sections. | |||
4.1. SERVFAIL(2) extended information codes | 4.1. INFO-CODEs for use with RESPONSE-CODE: SERVFAIL(2) | |||
4.1.1. Extended DNS Error Code 1 - DNSSEC Bogus | ||||
4.1.1. SERVFAIL Extended DNS Error Code 1 - DNSSEC Bogus | ||||
The resolver attempted to perform DNSSEC validation, but validation | The resolver attempted to perform DNSSEC validation, but validation | |||
ended in the Bogus state. The R flag should not be set. | ended in the Bogus state. The R flag should not be set. | |||
4.1.2. Extended DNS Error Code 2 - DNSSEC Indeterminate | 4.1.2. SERVFAIL Extended DNS Error Code 2 - DNSSEC Indeterminate | |||
The resolver attempted to perform DNSSEC validation, but validation | The resolver attempted to perform DNSSEC validation, but validation | |||
ended in the Indeterminate state. The R flag should not be set. | ended in the Indeterminate state. The R flag should not be set. | |||
4.1.3. Extended DNS Error Code 3 - Signature Expired | 4.1.3. SERVFAIL Extended DNS Error Code 3 - Signature Expired | |||
The resolver attempted to perform DNSSEC validation, but the | The resolver attempted to perform DNSSEC validation, but the | |||
signature was expired. The R flag should not be set. | signature was expired. The R flag should not be set. | |||
4.1.4. Extended DNS Error Code 4 - Signature Not Yet Valid | 4.1.4. SERVFAIL Extended DNS Error Code 4 - Signature Not Yet Valid | |||
The resolver attempted to perform DNSSEC validation, but the | The resolver attempted to perform DNSSEC validation, but the | |||
signatures received were not yet valid. The R flag should not be | signatures received were not yet valid. The R flag should not be | |||
set. | set. | |||
4.1.5. Extended DNS Error Code 5 - Unsupported DNSKEY Algorithm | 4.1.5. SERVFAIL Extended DNS Error Code 5 - Unsupported DNSKEY | |||
Algorithm | ||||
The resolver attempted to perform DNSSEC validation, but a DNSKEY | The resolver attempted to perform DNSSEC validation, but a DNSKEY | |||
RRSET contained only unknown algorithms. The R flag should not be | RRSET contained only unknown algorithms. The R flag should be set. | |||
set. | ||||
4.1.6. Extended DNS Error Code 6 - Unsupported DS Algorithm | 4.1.6. SERVFAIL Extended DNS Error Code 6 - Unsupported DS Algorithm | |||
The resolver attempted to perform DNSSEC validation, but a DS RRSET | The resolver attempted to perform DNSSEC validation, but a DS RRSET | |||
contained only unknown algorithms. The R flag should not be set. | contained only unknown algorithms. The R flag should be set. | |||
4.1.7. Extended DNS Error Code 7 - DNSKEY missing | 4.1.7. SERVFAIL Extended DNS Error Code 7 - DNSKEY missing | |||
A DS record existed at a parent, but no DNSKEY record could be found | A DS record existed at a parent, but no DNSKEY record could be found | |||
for the child. The R flag should not be set. | for the child. The R flag should not be set. | |||
4.1.8. Extended DNS Error Code 8 - RRSIGs missing | 4.1.8. SERVFAIL Extended DNS Error Code 8 - RRSIGs missing | |||
The resolver attempted to perform DNSSEC validation, but no RRSIGs | The resolver attempted to perform DNSSEC validation, but no RRSIGs | |||
could be found for at least one RRset where RRSIGs were expected. | could be found for at least one RRset where RRSIGs were expected. | |||
4.1.9. Extended DNS Error Code 9 - No Zone Key Bit Set | 4.1.9. SERVFAIL Extended DNS Error Code 9 - No Zone Key Bit Set | |||
The resolver attempted to perform DNSSEC validation, but no Zone Key | The resolver attempted to perform DNSSEC validation, but no Zone Key | |||
Bit was set in a DNSKEY. | Bit was set in a DNSKEY. | |||
4.2. REFUSED(5) extended information codes | 4.2. INFO-CODEs for use with RESPONSE-CODE: REFUSED(5) | |||
4.2.1. Extended DNS Error Code 1 - Lame | 4.2.1. REFUSED Extended DNS Error Code 1 - Lame | |||
An authoritative resolver that receives a query (with the RD bit | An authoritative resolver that receives a query (with the RD bit | |||
clear) for a domain for which it is not authoritative SHOULD include | clear) for a domain for which it is not authoritative SHOULD include | |||
this EDE code in the REFUSED response. Implementations should set | this EDE code in the REFUSED response. Implementations should set | |||
the R flag in this case (another nameserver might not be lame). | the R flag in this case (another nameserver might not be lame). | |||
4.2.2. Extended DNS Error Code 2 - Prohibited | 4.2.2. REFUSED Extended DNS Error Code 2 - Prohibited | |||
An authoritative or recursive resolver that receives a query from an | An authoritative or recursive resolver that receives a query from an | |||
"unauthorized" client can annotate its REFUSED message with this | "unauthorized" client can annotate its REFUSED message with this | |||
code. Examples of "unauthorized" clients are recursive queries from | code. Examples of "unauthorized" clients are recursive queries from | |||
IP addresses outside the network, blacklisted IP addresses, local | IP addresses outside the network, blacklisted IP addresses, local | |||
policy, etc. | policy, etc. | |||
Implementations SHOULD allow operators to define what to set the R | Implementations SHOULD allow operators to define what to set the R | |||
flag to in this case. | flag to in this case. | |||
4.3. NXDOMAIN(3) extended information codes | 4.3. INFO-CODEs for use with RESPONSE-CODE: NXDOMAIN(3) | |||
4.3.1. Extended DNS Error Code 1 - Blocked | 4.3.1. NXDOMAIN Extended DNS Error Code 1 - Blocked | |||
The resolver attempted to perfom a DNS query but the domain is | The resolver attempted to perfom a DNS query but the domain is | |||
blacklisted due to a security policy. The R flag should not be set. | blacklisted due to a security policy. The R flag should not be set. | |||
5. IANA Considerations | 5. IANA Considerations | |||
[This section under construction, beware. ] | ||||
5.1. new Extended Error Code EDNS Option | 5.1. new Extended Error Code EDNS Option | |||
This document defines a new EDNS(0) option, entitled "Extended DNS | This document defines a new EDNS(0) option, entitled "Extended DNS | |||
Error", assigned a value of TBD1 from the "DNS EDNS0 Option Codes | Error", assigned a value of TBD1 from the "DNS EDNS0 Option Codes | |||
(OPT)" registry [to be removed upon publication: | (OPT)" registry [to be removed upon publication: | |||
[http://www.iana.org/assignments/dns-parameters/dns- | [http://www.iana.org/assignments/dns-parameters/dns- | |||
parameters.xhtml#dns-parameters-11] | parameters.xhtml#dns-parameters-11] | |||
Value Name Status Reference | Value Name Status Reference | |||
----- ---------------- ------ ------------------ | ----- ---------------- ------ ------------------ | |||
TBD Extended DNS Error TBD [ This document ] | TBD Extended DNS Error TBD [ This document ] | |||
5.2. new Extended Error Code EDNS Option | 5.2. New Extended Error Code EDNS Option | |||
This document defines a new double-index IANA registry table, where | This document defines a new double-index IANA registry table, where | |||
the first index value is the RCODE value and the second index value | the first index value is the RCODE value and the second index value | |||
is the INFO-CODE from the Extended DNS Error EDNS option defined in | is the INFO-CODE from the Extended DNS Error EDNS option defined in | |||
this document. The IANA is requested to create and maintain this | this document. The IANA is requested to create and maintain this | |||
"Extended DNS Error codes" registry. The codepoint space for each | "Extended DNS Error codes" registry. The codepoint space for each | |||
RCODE index is to be broken into 3 ranges: | INFO-CODE index is to be broken into 3 ranges: | |||
o 1 - 16384: Specification required. | o 0 - 3583: Specification required. | |||
o 3584 - 3839: First Come First Served. | ||||
o 3840 - 4095: Experimental / Private use | ||||
o 16385 - 65000: First Come First Served | A starting set of entries, based on the contents of this document, is | |||
as follows: | ||||
o 65000 - 65534: Experimental / Private use | RESPONSE-CODE: 2 (SERVFAIL) | |||
INFO-CODE: 1 | ||||
Purpose: DNSSEC Bogus | ||||
Reference: Section 4.1.1 | ||||
The codepoints 0, 65535 are reserved. | RESPONSE-CODE: 2 (SERVFAIL) | |||
INFO-CODE: 2 | ||||
Purpose: DNSSEC Indeterminate | ||||
Reference: Section 4.1.2 | ||||
A starting table, based on the contents of this document, is as | RESPONSE-CODE: 2 (SERVFAIL) | |||
follows: | INFO-CODE: 3 | |||
Purpose: Signature Expired | ||||
Reference: Section 4.1.3 | ||||
| RCODE | EDE-INFO-CODE | Meaning | Ref | | RESPONSE-CODE: 2 (SERVFAIL) | |||
|-------------+-------------------------+---------------------------------------------+------------------------------------------| | INFO-CODE: 4 | |||
| SERVFAIL(2) | DNSSEC_BOGUS(1) | DNSSEC Validation resulted in Bogus | section <xref target="errbogus" /> | | Purpose: Signature Not Yet Valid | |||
| SERVFAIL(2) | DNSSEC_INDETERMINATE(2) | DNSSEC Validation resulted in Indeterminate | section <xref target="errindeterminate" /> | | Reference: Section 4.1.4 | |||
[incomplete] | RESPONSE-CODE: 2 (SERVFAIL) | |||
INFO-CODE: 5 | ||||
Purpose: Unsupported DNSKEY | ||||
Reference: Section 4.1.5 | ||||
6. Open questions | RESPONSE-CODE: 2 (SERVFAIL) | |||
INFO-CODE: 6 | ||||
Purpose: Unsupported DS Algorithm | ||||
Reference: Section 4.1.6 | ||||
1 Can this be included in *any* response or only responses to | RESPONSE-CODE: 2 (SERVFAIL) | |||
requests that included an EDNS option? Resolvers are supposed to | INFO-CODE: 7 | |||
ignore additional. EDNS capable ones are supposed to simply | Purpose: DNSKEY missing | |||
ignore unknown options. I know the spec says you can only include | Reference: Section 4.1.7 | |||
EDNS0 in a response if in a request -- it is time to reevaluate | ||||
this? | ||||
7. Security Considerations | RESPONSE-CODE: 2 (SERVFAIL) | |||
INFO-CODE: 8 | ||||
Purpose: RRSIGs missing | ||||
Reference: Section 4.1.8 | ||||
DNSSEC is being deployed - unfortunately a significant number of | RESPONSE-CODE: 2 (SERVFAIL) | |||
clients (~11% according to [GeoffValidation]), when receiving a | INFO-CODE: 9 | |||
SERVFAIL from a validating resolver because of a DNSSEC validaion | Purpose: No Zone Key Bit Set | |||
issue simply ask the next (non-validating) resolver in their list, | Reference: Section 4.1.9 | |||
and don't get any of the protections which DNSSEC should provide. | ||||
This is very similar to a kid asking his mother if he can have | ||||
another cookie. When the mother says "No, it will ruin your | ||||
dinner!", going off and asking his (more permissive) father and | ||||
getting a "Yes, sure, cookie!". | ||||
8. Acknowledgements | RESPONSE-CODE: 3 (NXDOMAIN) | |||
INFO-CODE: 1 | ||||
Purpose: Blocked | ||||
Reference: Section 4.3.1 | ||||
The authors wish to thank Geoff Huston and Bob Harold, Carlos M. | RESPONSE-CODE: 5 (REFUSED) | |||
Martinez, Peter DeVries, George Michelson, Mark Andrews, Ondrej Sury, | INFO-CODE: 1 | |||
Edward Lewis, Paul Vixie, Shane Kerr, Loganaden Velvindron. They | Purpose: Lame | |||
also vaguely remember discussing this with a number of people over | Reference: Section 4.2.1 | |||
the years, but have forgotten who all they were -- if you were one of | ||||
RESPONSE-CODE: 5 (REFUSED) | ||||
INFO-CODE: 2 | ||||
Purpose: Prohibited | ||||
Reference: Section 4.2.2 | ||||
6. Security Considerations | ||||
Though DNSSEC continues to be deployed, unfortunately a significant | ||||
number of clients (~11% according to [GeoffValidation]) that receive | ||||
a SERVFAIL from a validating resolver because of a DNSSEC validaion | ||||
issue will simply ask the next (potentially non-validating) resolver | ||||
in their list, and thus don't get any of the protections which DNSSEC | ||||
should provide. This is very similar to a kid asking his mother if | ||||
he can have another cookie. When the mother says "No, it will ruin | ||||
your dinner!", going off and asking his (more permissive) father and | ||||
getting a "Yes, sure, have a cookie!". | ||||
This information is unauthenticated information, and an attacker (e.g | ||||
MITM or malicious recursive server) could insert an extended error | ||||
response into already untrusted data -- ideally clients and resolvers | ||||
would not trust any unauthenticated information, but until we live in | ||||
an era where all DNS answers are authenticated via DNSSEC or other | ||||
mechanisms, there are some tradeoffs. As an example, an attacker who | ||||
is able to insert the DNSSEC Bogus Extended Error into a packet could | ||||
instead simply reply with a fictitious address (A or AAAA) record. | ||||
The R bit hint and extended error information are informational - | ||||
implementations can choose how much to trust this information and | ||||
validating resolvers / stubs may choose to put a different weight on | ||||
it. | ||||
7. Acknowledgements | ||||
The authors wish to thank Joe Abley, Mark Andrews, Peter DeVries, | ||||
Peter van Dijk, Donald Eastlake, Bob Harold, Evan Hunt, Geoff Huston, | ||||
Shane Kerr, Edward Lewis, Carlos M. Martinez, George Michelson, Petr | ||||
Spacek, Ondrej Sury, 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 | them, and are not listed, please let us know and we'll acknowledge | |||
you. | you. | |||
I also want to thank the band "Infected Mushroom" for providing a | I also want to thank the band "Infected Mushroom" for providing a | |||
good background soundtrack (and to see if I can get away with this!) | good background soundtrack (and to see if I can get away with this!) | |||
Another author would like to thank the band "Mushroom Infectors". | Another author would like to thank the band "Mushroom Infectors". | |||
This was funny at the time we wrote it, but I cannot remember why... | This was funny at the time we wrote it, but I cannot remember why... | |||
We would like to especially thank Peter van Dijk, who sent GitHub | 8. References | |||
pull requests. | ||||
9. References | ||||
9.1. Normative References | ||||
[IANA.AS_Numbers] | 8.1. Normative References | |||
IANA, "Autonomous System (AS) Numbers", | ||||
<http://www.iana.org/assignments/as-numbers>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, <https://www.rfc- | |||
<https://www.rfc-editor.org/info/rfc2119>. | editor.org/info/rfc2119>. | |||
9.2. Informative References | 8.2. Informative References | |||
[GeoffValidation] | [GeoffValidation] | |||
IANA, "A quick review of DNSSEC Validation in today's | IANA, "A quick review of DNSSEC Validation in today's | |||
Internet", June 2016, <http://www.potaroo.net/ | Internet", June 2016, <http://www.potaroo.net/ | |||
presentations/2016-06-27-dnssec.pdf>. | presentations/2016-06-27-dnssec.pdf>. | |||
[I-D.ietf-sidr-iana-objects] | [RFC2845] Vixie, P., Gudmundsson, O., Eastlake 3rd, D., and B. | |||
Manderson, T., Vegoda, L., and S. Kent, "RPKI Objects | Wellington, "Secret Key Transaction Authentication for DNS | |||
issued by IANA", draft-ietf-sidr-iana-objects-03 (work in | (TSIG)", RFC 2845, DOI 10.17487/RFC2845, May 2000, | |||
progress), May 2011. | <https://www.rfc-editor.org/info/rfc2845>. | |||
[RFC8094] Reddy, T., Wing, D., and P. Patil, "DNS over Datagram | ||||
Transport Layer Security (DTLS)", RFC 8094, | ||||
DOI 10.17487/RFC8094, February 2017, <https://www.rfc- | ||||
editor.org/info/rfc8094>. | ||||
Appendix A. Changes / Author Notes. | Appendix A. Changes / Author Notes. | |||
[RFC Editor: Please remove this section before publication ] | [RFC Editor: Please remove this section before publication ] | |||
From -00 to -01: | From -00 to -01: | |||
o Address comments from IETF meeting. | o Address comments from IETF meeting. | |||
o document copying the response code | o document copying the response code | |||
o mention zero length fields are ok | o mention zero length fields are ok | |||
o clarify lookup procedure | o clarify lookup procedure | |||
o mention that table isn't done | o mention that table isn't done | |||
From -03 to -IETF 00: | From -03 to -IETF 00: | |||
o Renamed to draft-ietf-dnsop-extended-error | o Renamed to draft-ietf-dnsop-extended-error | |||
From -02 to -03: | From -02 to -03: | |||
o Added David Lawrence -- I somehow missed that in last version. | o Added David Lawrence -- I somehow missed that in last version. | |||
End of changes. 79 change blocks. | ||||
173 lines changed or deleted | 231 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |