draft-ietf-dnsop-no-response-issue-06.txt | draft-ietf-dnsop-no-response-issue-07.txt | |||
---|---|---|---|---|
Network Working Group M. Andrews | Network Working Group M. Andrews | |||
Internet-Draft ISC | Internet-Draft ISC | |||
Intended status: Best Current Practice October 27, 2016 | Intended status: Best Current Practice March 2, 2017 | |||
Expires: April 30, 2017 | Expires: September 3, 2017 | |||
A Common Operational Problem in DNS Servers - Failure To Respond. | A Common Operational Problem in DNS Servers - Failure To Respond. | |||
draft-ietf-dnsop-no-response-issue-06 | draft-ietf-dnsop-no-response-issue-07 | |||
Abstract | Abstract | |||
The DNS is a query / response protocol. Failure to respond or to | The DNS is a query / response protocol. Failure to respond or to | |||
respond correctly to queries causes both immediate operational | respond correctly to queries causes both immediate operational | |||
problems and long term problems with protocol development. | problems and long term problems with protocol development. | |||
This document identifies a number of common kinds of queries to which | This document identifies a number of common kinds of queries to which | |||
some servers either fail to respond or else respond incorrectly. | some servers either fail to respond or else respond incorrectly. | |||
This document also suggests procedures for TLD and other zone | This document also suggests procedures for TLD and other zone | |||
skipping to change at page 1, line 40 ¶ | skipping to change at page 1, line 40 ¶ | |||
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 http://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 April 30, 2017. | This Internet-Draft will expire on September 3, 2017. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2016 IETF Trust and the persons identified as the | Copyright (c) 2017 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 | |||
(http://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 | |||
skipping to change at page 2, line 38 ¶ | skipping to change at page 2, line 38 ¶ | |||
3.2.5. Truncated EDNS Responses . . . . . . . . . . . . . . 8 | 3.2.5. Truncated EDNS Responses . . . . . . . . . . . . . . 8 | |||
3.2.6. DNSSEC . . . . . . . . . . . . . . . . . . . . . . . 8 | 3.2.6. DNSSEC . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
3.2.7. EDNS over TCP . . . . . . . . . . . . . . . . . . . . 8 | 3.2.7. EDNS over TCP . . . . . . . . . . . . . . . . . . . . 8 | |||
4. Firewalls and Load Balancers . . . . . . . . . . . . . . . . 8 | 4. Firewalls and Load Balancers . . . . . . . . . . . . . . . . 8 | |||
5. Scrubbing Services . . . . . . . . . . . . . . . . . . . . . 9 | 5. Scrubbing Services . . . . . . . . . . . . . . . . . . . . . 9 | |||
6. Whole Answer Caches . . . . . . . . . . . . . . . . . . . . . 9 | 6. Whole Answer Caches . . . . . . . . . . . . . . . . . . . . . 9 | |||
7. Response Code Selection . . . . . . . . . . . . . . . . . . . 10 | 7. Response Code Selection . . . . . . . . . . . . . . . . . . . 10 | |||
8. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 8. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
8.1. Testing - Basic DNS . . . . . . . . . . . . . . . . . . . 11 | 8.1. Testing - Basic DNS . . . . . . . . . . . . . . . . . . . 11 | |||
8.1.1. Is The Server Configured For The Zone? . . . . . . . 11 | 8.1.1. Is The Server Configured For The Zone? . . . . . . . 11 | |||
8.1.2. Testing Unknown Types? . . . . . . . . . . . . . . . 11 | 8.1.2. Testing Unknown Types . . . . . . . . . . . . . . . . 11 | |||
8.1.3. Testing Header Bits . . . . . . . . . . . . . . . . . 12 | 8.1.3. Testing Header Bits . . . . . . . . . . . . . . . . . 12 | |||
8.1.4. Testing Unknown Opcodes . . . . . . . . . . . . . . . 13 | 8.1.4. Testing Unknown Opcodes . . . . . . . . . . . . . . . 14 | |||
8.1.5. Testing Rescursive Queries . . . . . . . . . . . . . 13 | 8.1.5. Testing Recursive Queries . . . . . . . . . . . . . . 15 | |||
8.1.6. Testing TCP . . . . . . . . . . . . . . . . . . . . . 14 | 8.1.6. Testing TCP . . . . . . . . . . . . . . . . . . . . . 15 | |||
8.2. Testing - Extended DNS . . . . . . . . . . . . . . . . . 14 | 8.2. Testing - Extended DNS . . . . . . . . . . . . . . . . . 16 | |||
8.2.1. Testing Minimal EDNS . . . . . . . . . . . . . . . . 14 | 8.2.1. Testing Minimal EDNS . . . . . . . . . . . . . . . . 16 | |||
8.2.2. Testing EDNS Version Negotiation . . . . . . . . . . 14 | 8.2.2. Testing EDNS Version Negotiation . . . . . . . . . . 16 | |||
8.2.3. Testing Unknown EDNS Options . . . . . . . . . . . . 15 | 8.2.3. Testing Unknown EDNS Options . . . . . . . . . . . . 17 | |||
8.2.4. Testing Unknown EDNS Flags . . . . . . . . . . . . . 15 | 8.2.4. Testing Unknown EDNS Flags . . . . . . . . . . . . . 18 | |||
8.2.5. Testing EDNS Version Negotiation With Unknown EDNS | 8.2.5. Testing EDNS Version Negotiation With Unknown EDNS | |||
Flags . . . . . . . . . . . . . . . . . . . . . . . . 16 | Flags . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
8.2.6. Testing EDNS Version Negotiation With Unknown EDNS | 8.2.6. Testing EDNS Version Negotiation With Unknown EDNS | |||
Options . . . . . . . . . . . . . . . . . . . . . . . 16 | Options . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
8.2.7. Testing DNSSEC Queries . . . . . . . . . . . . . . . 17 | 8.2.7. Testing DNSSEC Queries . . . . . . . . . . . . . . . 20 | |||
8.2.8. Testing EDNS Version Negotiation With DNSSEC . . . . 17 | 8.2.8. Testing EDNS Version Negotiation With DNSSEC . . . . 20 | |||
8.2.9. Testing With Multiple Defined EDNS Options . . . . . 18 | 8.2.9. Testing With Multiple Defined EDNS Options . . . . . 21 | |||
8.3. When EDNS Is Not Supported . . . . . . . . . . . . . . . 18 | 8.3. When EDNS Is Not Supported . . . . . . . . . . . . . . . 21 | |||
9. Remediation . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 9. Remediation . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
12. Normative References . . . . . . . . . . . . . . . . . . . . 20 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 21 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 23 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 24 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
1. Introduction | 1. Introduction | |||
The DNS [RFC1034], [RFC1035] is a query / response protocol. Failure | The DNS [RFC1034], [RFC1035] is a query / response protocol. Failure | |||
to respond to queries or to respond incorrectly causes both immediate | to respond to queries or to respond incorrectly causes both immediate | |||
operational problems and long term problems with protocol | operational problems and long term problems with protocol | |||
development. | development. | |||
Failure to respond to a query is indistinguishable from a packet loss | Failure to respond to a query is indistinguishable from a packet loss | |||
without doing a analysis of query response patterns. Additionally | without doing a analysis of query response patterns. Additionally | |||
skipping to change at page 11, line 27 ¶ | skipping to change at page 11, line 27 ¶ | |||
The tests below use dig from BIND 9.11.0. | The tests below use dig from BIND 9.11.0. | |||
8.1. Testing - Basic DNS | 8.1. Testing - Basic DNS | |||
This first set of tests cover basic DNS server behaviour and all | This first set of tests cover basic DNS server behaviour and all | |||
servers should pass these tests. | servers should pass these tests. | |||
8.1.1. Is The Server Configured For The Zone? | 8.1.1. Is The Server Configured For The Zone? | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set and without | ||||
EDNS. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may also be set [RFC1034]. We do not expect | ||||
a OPT record to be returned [RFC6891]. | ||||
Verify the server is configured for the zone: | Verify the server is configured for the zone: | |||
dig +noedns +noad +norec soa $zone @$server | dig +noedns +noad +norec soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: rd to NOT be present | ||||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
8.1.2. Testing Unknown Types? | 8.1.2. Testing Unknown Types | |||
Ask for the TYPE1000 record at the zone's name. This query is made | ||||
with no DNS flag bits set and without EDNS. TYPE1000 has been chosen | ||||
for this purpose as IANA is unlikely to allocate this type in the | ||||
near future and it is not in type space reserved for end user | ||||
allocation. | ||||
We don't expect any records to be returned in the answer section with | ||||
the rcode set to NOERROR and the AA and QR bits to be set in the | ||||
response, RA may also be set [RFC1034]. We do not expect a OPT | ||||
record to be returned [RFC6891]. | ||||
Check that queries for an unknown type work: | Check that queries for an unknown type work: | |||
dig +noedns +noad +norec type1000 $zone @$server | dig +noedns +noad +norec type1000 $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: an empty answer section. | expect: an empty answer section. | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: rd to NOT be present | ||||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
That new types are to be expected is specified in Section 3.6, | That new types are to be expected is specified in Section 3.6, | |||
[RFC1035]. Servers that don't support a new type are expected to | [RFC1035]. Servers that don't support a new type are expected to | |||
reject a zone that contains a unsupported type as per Section 5.2, | reject a zone that contains a unsupported type as per Section 5.2, | |||
[RFC1035]. This means that a server that does load a zone can answer | [RFC1035]. This means that a server that does load a zone can answer | |||
questions for unknown types with NOERROR or NXDOMAIN as per | questions for unknown types with NOERROR or NXDOMAIN as per | |||
Section 4.3.2, [RFC1034]. [RFC6895] later reserved distinct ranges | Section 4.3.2, [RFC1034]. [RFC6895] later reserved distinct ranges | |||
for meta and data types which allows servers to be definitive about | for meta and data types which allows servers to be definitive about | |||
whether a query should be answerable from zone content or not. | whether a query should be answerable from zone content or not. | |||
8.1.3. Testing Header Bits | 8.1.3. Testing Header Bits | |||
8.1.3.1. Testing CD=1 Queries | 8.1.3.1. Testing CD=1 Queries | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with only the CD DNS flag bit set and | ||||
all other DNS bits clear and without EDNS. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response. We do not expect a OPT record to be returned. | ||||
If the server supports DNSSEC, CD should be set in the response | ||||
[RFC4035] otherwise CD should be clear [RFC1034]. | ||||
Check that queries with CD=1 work: | Check that queries with CD=1 work: | |||
dig +noedns +noad +norec +cd soa $zone @$server | dig +noedns +noad +norec +cd soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: rd to NOT be present | ||||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
CD use in queries is defined in [RFC4035]. | CD use in queries is defined in [RFC4035]. | |||
8.1.3.2. Testing AD=1 Queries | 8.1.3.2. Testing AD=1 Queries | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with only the AD DNS flag bit set and | ||||
all other DNS bits clear and without EDNS. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response. We do not expect a OPT record to be returned. | ||||
If the server supports DNSSEC, AD may be set in the response | ||||
[RFC6840] otherwise AD should be clear [RFC1034]. | ||||
Check that queries with AD=1 work: | Check that queries with AD=1 work: | |||
dig +noedns +norec +ad soa $zone @$server | dig +noedns +norec +ad soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: ad to NOT be present | expect: flag: rd to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
AD use in queries is defined in [RFC6840]. | AD use in queries is defined in [RFC6840]. | |||
8.1.3.3. Testing Reserved Bit | 8.1.3.3. Testing Reserved Bit | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with only the final reserved DNS flag | ||||
bit set and all other DNS bits clear and without EDNS. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may be set. The final reserved bit must not | ||||
be set [RFC1034]. We do not expect a OPT record to be returned | ||||
[RFC6891]. | ||||
Check that queries with the last unassigned DNS header flag work and | Check that queries with the last unassigned DNS header flag work and | |||
that the flag bit is not copied to the response: | that the flag bit is not copied to the response: | |||
dig +noedns +noad +norec +zflag soa $zone @$server | dig +noedns +noad +norec +zflag soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: MBZ to NOT be in the response | expect: MBZ to NOT be in the response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: rd to NOT be present | ||||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
MBZ (Must Be Zero) presence indicates the flag bit has been | MBZ (Must Be Zero) presence indicates the flag bit has been | |||
incorrectly copied. See Section 4.1.1, [RFC1035] "Z Reserved for | incorrectly copied. See Section 4.1.1, [RFC1035] "Z Reserved for | |||
future use. Must be zero in all queries and responses." | future use. Must be zero in all queries and responses." | |||
8.1.4. Testing Unknown Opcodes | 8.1.4. Testing Unknown Opcodes | |||
Construct a DNS message that consists of only a DNS header with | ||||
opcode set to 15 (currently not allocated), no DNS header bits set | ||||
and empty question, answer, authority and additional sections. | ||||
Check that new opcodes are handled: | Check that new opcodes are handled: | |||
dig +noedns +noad +opcode=15 +norec +header-only @$server | dig +noedns +noad +opcode=15 +norec +header-only @$server | |||
expect: status: NOTIMP | expect: status: NOTIMP | |||
expect: SOA record to NOT be present | expect: SOA record to NOT be present | |||
expect: flag: aa to NOT be present | expect: flag: aa to NOT be present | |||
expect: flag: rd to NOT be present | ||||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
As unknown opcodes have no definition, including packet format other | As unknown opcodes have no definition, including packet format other | |||
than there must be a DNS header present, there is only one possible | than there must be a DNS header present (QR, OPCODE and RCODE are the | |||
rcode that make sense to return to a request with a unknown opcode | only header fields that need to be common across all opcodes, | |||
and that is NOTIMP. | everything else in the header can potentially be redefined), there is | |||
only one possible rcode that make sense to return to a request with a | ||||
unknown opcode and that is NOTIMP. | ||||
8.1.5. Testing Rescursive Queries | 8.1.5. Testing Recursive Queries | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with only the RD DNS flag bit set and | ||||
without EDNS. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA, QR and RD bits to | ||||
be set in the response, RA may also be set [RFC1034]. We do not | ||||
expect a OPT record to be returned [RFC6891]. | ||||
Check that recursive queries work: | Check that recursive queries work: | |||
dig +noedns +noad +rec soa $zone @$server | dig +noedns +noad +rec soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: ad to NOT be present | ||||
expect: flag: rd to be present | expect: flag: rd to be present | |||
expect: flag: ad to NOT be present | ||||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
8.1.6. Testing TCP | 8.1.6. Testing TCP | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set and without | ||||
EDNS. This query is to be sent using TCP. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may also be set [RFC1034]. We do not expect | ||||
a OPT record to be returned [RFC6891]. | ||||
Check that TCP queries work: | Check that TCP queries work: | |||
dig +noedns +noad +norec +tcp soa $zone @$server | dig +noedns +noad +norec +tcp soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: rd to NOT be present | ||||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
expect: the OPT record to NOT be present | expect: the OPT record to NOT be present | |||
The requirement that TCP be supported is defined in [RFC7766]. | The requirement that TCP be supported is defined in [RFC7766]. | |||
8.2. Testing - Extended DNS | 8.2. Testing - Extended DNS | |||
The next set of test cover various aspects of EDNS behaviour. If any | The next set of test cover various aspects of EDNS behaviour. If any | |||
of these tests succeed, then all of them should succeed. There are | of these tests succeed, then all of them should succeed. There are | |||
servers that support EDNS but fail to handle plain EDNS queries | servers that support EDNS but fail to handle plain EDNS queries | |||
correctly so a plain EDNS query is not a good indicator of lack of | correctly so a plain EDNS query is not a good indicator of lack of | |||
EDNS support. | EDNS support. | |||
8.2.1. Testing Minimal EDNS | 8.2.1. Testing Minimal EDNS | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 0 is used without any EDNS options or EDNS flags set. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may also be set [RFC1034]. We expect a OPT | ||||
record to be returned. There should be no EDNS flags present in the | ||||
response. The EDNS version field should be zero and there should be | ||||
no EDNS options present [RFC6891]. | ||||
Check that plain EDNS queries work: | Check that plain EDNS queries work: | |||
dig +nocookie +edns=0 +noad +norec soa $zone @$server | dig +nocookie +edns=0 +noad +norec soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
+nocookie disables sending a EDNS COOKIE option in which is on by | +nocookie disables sending a EDNS COOKIE option in which is on by | |||
default. | default in BIND 9.11.0. | |||
8.2.2. Testing EDNS Version Negotiation | 8.2.2. Testing EDNS Version Negotiation | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 1 is used without any EDNS options or EDNS flags set. | ||||
We expect the SOA record for the zone to NOT be returned in the | ||||
answer section with the extended rcode set to BADVERS and the QR bit | ||||
to be set in the response, RA may also be set [RFC1034]. We expect a | ||||
OPT record to be returned. There should be no EDNS flags present in | ||||
the response. The EDNS version field should be zero as EDNS versions | ||||
other than 0 are yet to be specified and there should be no EDNS | ||||
options present [RFC6891]. | ||||
Check that EDNS version 1 queries work (EDNS supported): | Check that EDNS version 1 queries work (EDNS supported): | |||
dig +nocookie +edns=1 +noednsneg +noad +norec soa $zone @$server | dig +nocookie +edns=1 +noednsneg +noad +norec soa $zone @$server | |||
expect: status: BADVERS | expect: status: BADVERS | |||
expect: the SOA record to NOT be present in the answer section | expect: the SOA record to NOT be present in the answer section | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to NOT be present | expect: flag: aa to NOT be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
Only EDNS Version 0 is currently defined so the response should | Only EDNS Version 0 is currently defined so the response should | |||
always be a 0 version. This will change when EDNS version 1 is | always be a 0 version. This will change when EDNS version 1 is | |||
defined. BADVERS is the expected rcode if EDNS is supported as per | defined. BADVERS is the expected rcode if EDNS is supported as per | |||
Section 6.1.3, [RFC6891]. | Section 6.1.3, [RFC6891]. | |||
8.2.3. Testing Unknown EDNS Options | 8.2.3. Testing Unknown EDNS Options | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 0 is used without any EDNS flags. A EDNS option is present | ||||
with a value from the yet to be assigned range. The unassigned value | ||||
chosen is 100 and will need to be adjusted when IANA assigns this | ||||
value formally. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may also be set [RFC1034]. We expect a OPT | ||||
record to be returned. There should be no EDNS flags present in the | ||||
response. The EDNS version field should be zero as EDNS versions | ||||
other than 0 are yet to be specified and there should be no EDNS | ||||
options present as unknown EDNS options are supposed to be ignored by | ||||
the server [RFC6891]. | ||||
Check that EDNS queries with an unknown option work (EDNS supported): | Check that EDNS queries with an unknown option work (EDNS supported): | |||
dig +nocookie +edns=0 +noad +norec +ednsopt=100 soa $zone @$server | dig +nocookie +edns=0 +noad +norec +ednsopt=100 soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: OPT=100 to NOT be present | expect: OPT=100 to NOT be present | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
Unknown EDNS options are supposed to be ignored, Section 6.1.2, | Unknown EDNS options are supposed to be ignored, Section 6.1.2, | |||
[RFC6891]. | [RFC6891]. | |||
8.2.4. Testing Unknown EDNS Flags | 8.2.4. Testing Unknown EDNS Flags | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 0 is used without any EDNS options. A unassigned EDNS flag | ||||
bit is set (0x40 in this case). | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may also be set [RFC1034]. We expect a OPT | ||||
record to be returned. There should be no EDNS flags present in the | ||||
response as unknown EDNS flags are supposed to be ignored. The EDNS | ||||
version field should be zero and there should be no EDNS options | ||||
present [RFC6891]. | ||||
Check that EDNS queries with unknown flags work (EDNS supported): | Check that EDNS queries with unknown flags work (EDNS supported): | |||
dig +nocookie +edns=0 +noad +norec +ednsflags=0x40 soa $zone @$server | dig +nocookie +edns=0 +noad +norec +ednsflags=0x40 soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: MBZ not to be present | expect: MBZ not to be present | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
MBZ (Must Be Zero) presence indicates the flag bit has been | MBZ (Must Be Zero) presence indicates the flag bit has been | |||
incorrectly copied as per Section 6.1.4, [RFC6891]. | incorrectly copied as per Section 6.1.4, [RFC6891]. | |||
8.2.5. Testing EDNS Version Negotiation With Unknown EDNS Flags | 8.2.5. Testing EDNS Version Negotiation With Unknown EDNS Flags | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 1 is used without any EDNS options. A unassigned EDNS flag | ||||
bit is set (0x40 in this case). | ||||
We expect the SOA record for the zone to NOT be returned in the | ||||
answer section with the extended rcode set to BADVERS and the QR bit | ||||
to be set in the response, RA may also be set [RFC1034]. We expect a | ||||
OPT record to be returned. There should be no EDNS flags present in | ||||
the response as unknown EDNS flags are supposed to be ignored. The | ||||
EDNS version field should be zero as EDNS versions other than 0 are | ||||
yet to be specified and there should be no EDNS options present | ||||
[RFC6891]. | ||||
Check that EDNS version 1 queries with unknown flags work (EDNS | Check that EDNS version 1 queries with unknown flags work (EDNS | |||
supported): | supported): | |||
dig +nocookie +edns=1 +noednsneg +noad +norec +ednsflags=0x40 soa \ | dig +nocookie +edns=1 +noednsneg +noad +norec +ednsflags=0x40 soa \ | |||
$zone @$server | $zone @$server | |||
expect: status: BADVERS | expect: status: BADVERS | |||
expect: SOA record to NOT be present | expect: SOA record to NOT be present | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: MBZ not to be present | expect: MBZ not to be present | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to NOT be present | expect: flag: aa to NOT be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
+noednsneg disables EDNS version negotiation in DiG; MBZ (Must Be | +noednsneg disables EDNS version negotiation in DiG; MBZ (Must Be | |||
Zero) presence indicates the flag bit has been incorrectly copied. | Zero) presence indicates the flag bit has been incorrectly copied. | |||
8.2.6. Testing EDNS Version Negotiation With Unknown EDNS Options | 8.2.6. Testing EDNS Version Negotiation With Unknown EDNS Options | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 1 is used. A unknown EDNS option is present (option code 100 | ||||
has been chosen). | ||||
We expect the SOA record for the zone to NOT be returned in the | ||||
answer section with the extended rcode set to BADVERS and the QR bit | ||||
to be set in the response, RA may also be set [RFC1034]. We expect a | ||||
OPT record to be returned. There should be no EDNS flags present in | ||||
the response. The EDNS version field should be zero as EDNS versions | ||||
other than 0 are yet to be specified and there should be no EDNS | ||||
options present [RFC6891]. | ||||
Check that EDNS version 1 queries with unknown options work (EDNS | Check that EDNS version 1 queries with unknown options work (EDNS | |||
supported): | supported): | |||
dig +nocookie +edns=1 +noednsneg +noad +norec +ednsopt=100 soa \ | dig +nocookie +edns=1 +noednsneg +noad +norec +ednsopt=100 soa \ | |||
$zone @$server | $zone @$server | |||
expect: status: BADVERS | expect: status: BADVERS | |||
expect: SOA record to NOT be present | expect: SOA record to NOT be present | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: OPT=100 to NOT be present | expect: OPT=100 to NOT be present | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
+noednsneg disables EDNS version negotiation in DiG. | +noednsneg disables EDNS version negotiation in DiG. | |||
8.2.7. Testing DNSSEC Queries | 8.2.7. Testing DNSSEC Queries | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 0 is used without any EDNS options. The only EDNS flag set | ||||
is DO. | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, AD may be set in the response if the server | ||||
supports DNSSEC otherwise it should be clear. RA may also be set | ||||
[RFC1034]. We expect a OPT record to be returned. There should be | ||||
no EDNS flags other than DO present in the response which should be | ||||
present if the server supports DNSSEC. The EDNS version field should | ||||
be zero and there should be no EDNS options present [RFC6891]. | ||||
Check that a DNSSEC queries work (EDNS supported): | Check that a DNSSEC queries work (EDNS supported): | |||
dig +nocookie +edns=0 +noad +norec +dnssec soa $zone @$server | dig +nocookie +edns=0 +noad +norec +dnssec soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: DO=1 to be present if a RRSIG is in the response | expect: DO=1 to be present if a RRSIG is in the response | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
DO=1 should be present if RRSIGs are returned as they indicate that | DO=1 should be present if RRSIGs are returned as they indicate that | |||
the server supports DNSSEC. Servers that support DNSSEC are supposed | the server supports DNSSEC. Servers that support DNSSEC are supposed | |||
to copy the DO bit from the request to the response as per [RFC3225]. | to copy the DO bit from the request to the response as per [RFC3225]. | |||
8.2.8. Testing EDNS Version Negotiation With DNSSEC | 8.2.8. Testing EDNS Version Negotiation With DNSSEC | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 1 is used without any EDNS options. The only EDNS flag set | ||||
is DO. | ||||
We expect the SOA record for the zone to NOT be returned in the | ||||
answer section with the rcode set to BADVERS and the only the QR bit | ||||
and possibly the RA bit to be set [RFC1034]. We expect a OPT record | ||||
to be returned. There should be no EDNS flags other than DO present | ||||
in the response which should be present if the server supports | ||||
DNSSEC. The EDNS version field should be zero and there should be no | ||||
EDNS options present [RFC6891]. | ||||
Check that EDNS version 1 DNSSEC queries work (EDNS supported): | Check that EDNS version 1 DNSSEC queries work (EDNS supported): | |||
dig +nocookie +edns=1 +noednsneg +noad +norec +dnssec soa \ | dig +nocookie +edns=1 +noednsneg +noad +norec +dnssec soa \ | |||
$zone @$server | $zone @$server | |||
expect: status: BADVERS | expect: status: BADVERS | |||
expect: SOA record to NOT be present | expect: SOA record to NOT be present | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: DO=1 to be present if the EDNS version 0 DNSSEC query test | expect: DO=1 to be present if the EDNS version 0 DNSSEC query test | |||
returned DO=1 | returned DO=1 | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to NOT be present | expect: flag: aa to NOT be present | |||
+noednsneg disables EDNS version negotiation in DiG. | +noednsneg disables EDNS version negotiation in DiG. | |||
8.2.9. Testing With Multiple Defined EDNS Options | 8.2.9. Testing With Multiple Defined EDNS Options | |||
Ask for the SOA record of the zone the server is nominally configured | ||||
to serve. This query is made with no DNS flag bits set. EDNS | ||||
version 0 is used. A number of defined EDNS options are present | ||||
(NSID [RFC5001], DNS COOKIE [RFC7873], EDNS Client Subnet [RFC7871] | ||||
and EDNS Expire [RFC7314]). | ||||
We expect the SOA record for the zone to be returned in the answer | ||||
section with the rcode set to NOERROR and the AA and QR bits to be | ||||
set in the response, RA may also be set [RFC1034]. We expect a OPT | ||||
record to be returned. There should be no EDNS flags present in the | ||||
response. The EDNS version field should be zero. Any of the | ||||
requested EDNS options supported by the server and permitted server | ||||
configuration may be returned [RFC6891]. | ||||
Check that EDNS queries with multiple defined EDNS options work: | Check that EDNS queries with multiple defined EDNS options work: | |||
dig +edns=0 +noad +norec +cookie +nsid +expire +subnet=0.0.0.0/0 \ | dig +edns=0 +noad +norec +cookie +nsid +expire +subnet=0.0.0.0/0 \ | |||
soa $zone @$server | soa $zone @$server | |||
expect: status: NOERROR | expect: status: NOERROR | |||
expect: the SOA record to be present in the answer section | expect: the SOA record to be present in the answer section | |||
expect: a OPT record to be present in the additional section | expect: a OPT record to be present in the additional section | |||
expect: EDNS Version 0 in response | expect: EDNS Version 0 in response | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
skipping to change at page 20, line 27 ¶ | skipping to change at page 23, line 40 ¶ | |||
settings. | settings. | |||
When removing delegations for non-compliant servers there can be a | When removing delegations for non-compliant servers there can be a | |||
knock on effect on other zones that require these zones to be | knock on effect on other zones that require these zones to be | |||
operational for the nameservers addresses to be resolved. | operational for the nameservers addresses to be resolved. | |||
11. IANA Considerations | 11. IANA Considerations | |||
There are no actions for IANA. | There are no actions for IANA. | |||
12. Normative References | 12. References | |||
12.1. Normative References | ||||
[RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | [RFC1034] Mockapetris, P., "Domain names - concepts and facilities", | |||
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987, | |||
<http://www.rfc-editor.org/info/rfc1034>. | <http://www.rfc-editor.org/info/rfc1034>. | |||
[RFC1035] Mockapetris, P., "Domain names - implementation and | [RFC1035] Mockapetris, P., "Domain names - implementation and | |||
specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | specification", STD 13, RFC 1035, DOI 10.17487/RFC1035, | |||
November 1987, <http://www.rfc-editor.org/info/rfc1035>. | November 1987, <http://www.rfc-editor.org/info/rfc1035>. | |||
[RFC3225] Conrad, D., "Indicating Resolver Support of DNSSEC", | [RFC3225] Conrad, D., "Indicating Resolver Support of DNSSEC", | |||
skipping to change at page 21, line 19 ¶ | skipping to change at page 24, line 33 ¶ | |||
[RFC6895] Eastlake 3rd, D., "Domain Name System (DNS) IANA | [RFC6895] Eastlake 3rd, D., "Domain Name System (DNS) IANA | |||
Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895, | Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895, | |||
April 2013, <http://www.rfc-editor.org/info/rfc6895>. | April 2013, <http://www.rfc-editor.org/info/rfc6895>. | |||
[RFC7766] Dickinson, J., Dickinson, S., Bellis, R., Mankin, A., and | [RFC7766] Dickinson, J., Dickinson, S., Bellis, R., Mankin, A., and | |||
D. Wessels, "DNS Transport over TCP - Implementation | D. Wessels, "DNS Transport over TCP - Implementation | |||
Requirements", RFC 7766, DOI 10.17487/RFC7766, March 2016, | Requirements", RFC 7766, DOI 10.17487/RFC7766, March 2016, | |||
<http://www.rfc-editor.org/info/rfc7766>. | <http://www.rfc-editor.org/info/rfc7766>. | |||
12.2. Informative References | ||||
[RFC5001] Austein, R., "DNS Name Server Identifier (NSID) Option", | ||||
RFC 5001, DOI 10.17487/RFC5001, August 2007, | ||||
<http://www.rfc-editor.org/info/rfc5001>. | ||||
[RFC7314] Andrews, M., "Extension Mechanisms for DNS (EDNS) EXPIRE | ||||
Option", RFC 7314, DOI 10.17487/RFC7314, July 2014, | ||||
<http://www.rfc-editor.org/info/rfc7314>. | ||||
[RFC7871] Contavalli, C., van der Gaast, W., Lawrence, D., and W. | ||||
Kumari, "Client Subnet in DNS Queries", RFC 7871, | ||||
DOI 10.17487/RFC7871, May 2016, | ||||
<http://www.rfc-editor.org/info/rfc7871>. | ||||
[RFC7873] Eastlake 3rd, D. and M. Andrews, "Domain Name System (DNS) | ||||
Cookies", RFC 7873, DOI 10.17487/RFC7873, May 2016, | ||||
<http://www.rfc-editor.org/info/rfc7873>. | ||||
Author's Address | Author's Address | |||
M. Andrews | M. Andrews | |||
Internet Systems Consortium | Internet Systems Consortium | |||
950 Charter Street | 950 Charter Street | |||
Redwood City, CA 94063 | Redwood City, CA 94063 | |||
US | US | |||
Email: marka@isc.org | Email: marka@isc.org | |||
End of changes. 39 change blocks. | ||||
34 lines changed or deleted | 264 lines changed or added | |||
This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |