draft-ietf-dnsop-no-response-issue-09.txt | draft-ietf-dnsop-no-response-issue-10.txt | |||
---|---|---|---|---|
Network Working Group M. Andrews | Network Working Group M. Andrews | |||
Internet-Draft ISC | Internet-Draft R. Bellis | |||
Intended status: Best Current Practice July 18, 2018 | Intended status: Best Current Practice ISC | |||
Expires: January 19, 2019 | Expires: January 21, 2019 July 20, 2018 | |||
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-09 | draft-ietf-dnsop-no-response-issue-10 | |||
Abstract | Abstract | |||
The DNS is a query / response protocol. Failing to respond to | The DNS is a query / response protocol. Failing to respond to | |||
queries, or responding incorrectly, causes both immediate operational | queries, or responding incorrectly, 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 https://datatracker.ietf.org/drafts/current/. | Drafts is at https://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 January 19, 2019. | This Internet-Draft will expire on January 21, 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 | (https://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 | |||
skipping to change at page 2, line 35 ¶ | skipping to change at page 2, line 35 ¶ | |||
3.2.2. EDNS Queries - Version Specific . . . . . . . . . . . 7 | 3.2.2. EDNS Queries - Version Specific . . . . . . . . . . . 7 | |||
3.2.3. EDNS Options . . . . . . . . . . . . . . . . . . . . 7 | 3.2.3. EDNS Options . . . . . . . . . . . . . . . . . . . . 7 | |||
3.2.4. EDNS Flags . . . . . . . . . . . . . . . . . . . . . 7 | 3.2.4. EDNS Flags . . . . . . . . . . . . . . . . . . . . . 7 | |||
3.2.5. Truncated EDNS Responses . . . . . . . . . . . . . . 8 | 3.2.5. Truncated EDNS Responses . . . . . . . . . . . . . . 8 | |||
3.2.6. DO Bit Handling . . . . . . . . . . . . . . . . . . . 8 | 3.2.6. DO Bit Handling . . . . . . . . . . . . . . . . . . . 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 . . . . . . . . . . . . . . . . . . . . . 10 | 6. Whole Answer Caches . . . . . . . . . . . . . . . . . . . . . 10 | |||
7. Response Code Selection . . . . . . . . . . . . . . . . . . . 10 | 7. Response Code Selection . . . . . . . . . . . . . . . . . . . 10 | |||
8. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 8. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
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 . . . . . . . . . . . . . . . . 12 | 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 . . . . . . . . . . . . . . . 14 | 8.1.4. Testing Unknown Opcodes . . . . . . . . . . . . . . . 13 | |||
8.1.5. Testing Recursive Queries . . . . . . . . . . . . . . 15 | 8.1.5. Testing Recursive Queries . . . . . . . . . . . . . . 14 | |||
8.1.6. Testing TCP . . . . . . . . . . . . . . . . . . . . . 15 | 8.1.6. Testing TCP . . . . . . . . . . . . . . . . . . . . . 14 | |||
8.2. Testing - Extended DNS . . . . . . . . . . . . . . . . . 16 | 8.2. Testing - Extended DNS . . . . . . . . . . . . . . . . . 15 | |||
8.2.1. Testing Minimal EDNS . . . . . . . . . . . . . . . . 16 | 8.2.1. Testing Minimal EDNS . . . . . . . . . . . . . . . . 15 | |||
8.2.2. Testing EDNS Version Negotiation . . . . . . . . . . 16 | 8.2.2. Testing EDNS Version Negotiation . . . . . . . . . . 16 | |||
8.2.3. Testing Unknown EDNS Options . . . . . . . . . . . . 17 | 8.2.3. Testing Unknown EDNS Options . . . . . . . . . . . . 16 | |||
8.2.4. Testing Unknown EDNS Flags . . . . . . . . . . . . . 18 | 8.2.4. Testing Unknown EDNS Flags . . . . . . . . . . . . . 17 | |||
8.2.5. Testing EDNS Version Negotiation With Unknown EDNS | 8.2.5. Testing EDNS Version Negotiation With Unknown EDNS | |||
Flags . . . . . . . . . . . . . . . . . . . . . . . . 18 | Flags . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
8.2.6. Testing EDNS Version Negotiation With Unknown EDNS | 8.2.6. Testing EDNS Version Negotiation With Unknown EDNS | |||
Options . . . . . . . . . . . . . . . . . . . . . . . 19 | Options . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
8.2.7. Testing Truncated Responses . . . . . . . . . . . . . 20 | 8.2.7. Testing Truncated Responses . . . . . . . . . . . . . 19 | |||
8.2.8. Testing DNSSEC Queries . . . . . . . . . . . . . . . 20 | 8.2.8. Testing DNSSEC Queries . . . . . . . . . . . . . . . 19 | |||
8.2.9. Testing EDNS Version Negotiation With DNSSEC . . . . 21 | 8.2.9. Testing EDNS Version Negotiation With DNSSEC . . . . 20 | |||
8.2.10. Testing With Multiple Defined EDNS Options . . . . . 22 | 8.2.10. Testing With Multiple Defined EDNS Options . . . . . 21 | |||
8.3. When EDNS Is Not Supported . . . . . . . . . . . . . . . 22 | 8.3. When EDNS Is Not Supported . . . . . . . . . . . . . . . 21 | |||
9. Remediation . . . . . . . . . . . . . . . . . . . . . . . . . 22 | 9. Remediation . . . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 24 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
12.1. Normative References . . . . . . . . . . . . . . . . . . 24 | 12.1. Normative References . . . . . . . . . . . . . . . . . . 23 | |||
12.2. Informative References . . . . . . . . . . . . . . . . . 25 | 12.2. Informative References . . . . . . . . . . . . . . . . . 24 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 25 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
1. Introduction | 1. Introduction | |||
The DNS [RFC1034], [RFC1035] is a query / response protocol. Failing | The DNS [RFC1034], [RFC1035] is a query / response protocol. Failing | |||
to respond to queries, or responding incorrectly, causes both | to respond to queries, or responding incorrectly, causes both | |||
immediate operational problems and long term problems with protocol | immediate operational problems and long term problems with protocol | |||
development. | development. | |||
Failure to respond to a query is indistinguishable from packet loss | Failure to respond to a query is indistinguishable from packet loss | |||
without doing an analysis of query-response patterns. Additionally | without doing an analysis of query-response patterns. Additionally | |||
skipping to change at page 5, line 37 ¶ | skipping to change at page 5, line 37 ¶ | |||
They are: EDNS queries with and without extensions; queries for | They are: EDNS queries with and without extensions; queries for | |||
unknown (unallocated) or unsupported types; and filtering of TCP | unknown (unallocated) or unsupported types; and filtering of TCP | |||
queries. | queries. | |||
3.1. Basic DNS Queries | 3.1. Basic DNS Queries | |||
3.1.1. Zone Existence | 3.1.1. Zone Existence | |||
Initially, to test existence of the zone, an SOA query should be | Initially, to test existence of the zone, an SOA query should be | |||
made. If the SOA record is not returned but some other response is | made. If the SOA record is not returned but some other response is | |||
returned, this is a indication of a bad delegation. If the tester | returned, this is an indication of a bad delegation. | |||
fails to get a response to a SOA query, the Operator should make an A | ||||
query for the zone, as some nameservers fail to respond to SOA | ||||
queries but will respond to A queries. | ||||
3.1.2. Unknown / Unsupported Type Queries | 3.1.2. Unknown / Unsupported Type Queries | |||
Identifying servers that fail to respond to unknown or unsupported | Identifying servers that fail to respond to unknown or unsupported | |||
types can be done by making an initial DNS query for an A record, | types can be done by making an initial DNS query for an A record, | |||
making a number of queries for an unallocated type, then making a | making a number of queries for an unallocated type, then making a | |||
query for an A record again. IANA maintains a registry of allocated | query for an A record again. IANA maintains a registry of allocated | |||
types. | types. | |||
If the server responds to the first and last queries but fails to | If the server responds to the first and last queries but fails to | |||
skipping to change at page 10, line 8 ¶ | skipping to change at page 10, line 8 ¶ | |||
Scrubbing services, unlike firewalls, are also turned on and off in | Scrubbing services, unlike firewalls, are also turned on and off in | |||
response to denial of service attacks. One needs to take care when | response to denial of service attacks. One needs to take care when | |||
choosing a scrubbing service. | choosing a scrubbing service. | |||
Ideally, Operators should run these tests against a scrubbing service | Ideally, Operators should run these tests against a scrubbing service | |||
to ensure that these tests are not seen as attack vectors. | to ensure that these tests are not seen as attack vectors. | |||
6. Whole Answer Caches | 6. Whole Answer Caches | |||
Whole answer caches take a previously constructed answer and return | Whole answer caches take a previously constructed answer and return | |||
it to a subsequent query for the same qname, qtype and qclass, just | it to a subsequent query for the same question. However, they can | |||
updating the query id field and possibly the qname to match the | return the wrong response if they do not take all of the relevant | |||
incoming query to avoid constructing each response individually. | attributes of the query into account. | |||
Whole answer caches can return the wrong response to a query if they | ||||
do not take all of the attributes of the query into account, rather | ||||
than just some of them e.g. qname, qtype and qclass. This has | ||||
implications when testing and with overall protocol compliance. | ||||
Two current examples are: | ||||
o Whole answer caches that ignore the EDNS version field which | ||||
results in incorrect answers to non EDNS version 0 queries being | ||||
returned if they were preceded by a EDNS version 0 query for the | ||||
same name and type. | ||||
o Whole answer caches that ignore the EDNS options in the query | In addition to the standard tuple of <qname,qtype,qclass> a non- | |||
resulting in options only working some of the time and/or options | exhaustive set of attributes that must be considered include: RD, AD, | |||
being returned when not requested. | CD, OPT record, DO, EDNS buffer size, EDNS version, EDNS options, and | |||
transport. | ||||
7. Response Code Selection | 7. Response Code Selection | |||
Choosing the correct response code when responding to DNS queries is | Choosing the correct response code when responding to DNS queries is | |||
important. Just because a DNS qtype is not implemented does not mean | important. Response codes should be chosen considering how clients | |||
that NOTIMP is the correct response code to return. Response codes | will handle them. | |||
should be chosen considering how clients will handle them. | ||||
For unimplemented opcodes NOTIMP is the expected response code. For | For unimplemented opcodes NOTIMP is the expected response code. For | |||
example, a new opcode could change the message format by extending | example, a new opcode could change the message format by extending | |||
the header or changing the structure of the records etc. This may | the header or changing the structure of the records etc. | |||
result in FORMERR being returned though NOTIMP would be more correct. | ||||
Unimplemented type codes, Name Error (NXDOMAIN) and NOERROR (no data) | For unimplemented type codes, and in the absence of other errors, the | |||
are the expected response codes. A server is not supposed to serve a | only valid response is NoError if the qname exists, and NameError | |||
zone which contains unsupported types ([RFC1034]) so the only thing | (NXDOMAIN) otherwise. For Meta-RRs NOTIMP may be returned | |||
left is return if the QNAME exists or not. NOTIMP and REFUSED are | instead.
 | |||
not useful responses as they force the clients to try the other | ||||
authoritative servers for a zone looking for a server which will | ||||
answer the query. | ||||
Meta queries may be the exception but these need to be thought about | If a zone cannot be loaded because it contains unimplemented type | |||
on a case by case basis. | codes that are not encoded as unknown record types according to | |||
[RFC3597] then the expected response is SERVFAIL. | ||||
If the server supports EDNS and receives a query with an unsupported | If the server supports EDNS and receives a query with an unsupported | |||
EDNS version, the correct response is BADVERS [RFC6891]. | EDNS version, the correct response is BADVERS [RFC6891]. | |||
If the server does not support EDNS at all, FORMERR and NOTIMP are | If the server does not support EDNS at all, FORMERR and NOTIMP are | |||
the expected error codes. That said a minimal EDNS server | the expected error codes. That said a minimal EDNS server | |||
implementation requires parsing the OPT records and responding with | implementation requires parsing the OPT records and responding with | |||
an empty OPT record. There is no need to interpret any EDNS options | an empty OPT record. There is no need to interpret any EDNS options | |||
present in the request as unsupported EDNS options are expected to be | present in the request as unsupported EDNS options are expected to be | |||
ignored [RFC6891]. | ignored [RFC6891]. | |||
8. Testing | 8. Testing | |||
Testing is divided into two sections. Basic DNS which all servers | Testing is divided into two sections. "Basic DNS", which all servers | |||
should meet and Extended DNS which should be met by all servers that | should meet, and "Extended DNS", which should be met by all servers | |||
support EDNS (a server is deemed to support EDNS if it gives a valid | that support EDNS (a server is deemed to support EDNS if it gives a | |||
EDNS response to any EDNS query). If a server does not support EDNS | valid EDNS response to any EDNS query). If a server does not support | |||
it should still respond to all the tests. | EDNS it should still respond to all the tests. | |||
It is advisable to run all of the tests below in parallel so as to | It is advisable to run all of the tests below in parallel so as to | |||
minimise the delays due to multiple timeouts when the servers do not | minimise the delays due to multiple timeouts when the servers do not | |||
respond. There are 16 queries directed to each nameserver assuming | respond. There are 16 queries directed to each nameserver (assuming | |||
no packet loss testing different aspects of Basic DNS and EDNS. | no packet loss) testing different aspects of Basic DNS and Extended | |||
DNS. | ||||
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 | 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 | to serve. This query is made with no DNS flag bits set and without | |||
EDNS. | EDNS. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | set in the response, RA may also be set [RFC1034]. We do not expect | |||
a OPT record to be returned [RFC6891]. | an 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: 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 | 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 | 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 | 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 | near future and it is not in a range reserved for private use | |||
allocation. | [RFC6895]. | |||
We don't expect any records to be returned in the answer section with | We expect no records to be returned in the answer section with the | |||
the rcode set to NOERROR and the AA and QR bits to be set in 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 | response. RA may also be set [RFC1034]. We do not expect an OPT | |||
record to be returned [RFC6891]. | 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: 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, | ||||
[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, | ||||
[RFC1035]. This means that a server that does load a zone can answer | ||||
questions for unknown types with NOERROR or NXDOMAIN as per | ||||
Section 4.3.2, [RFC1034]. [RFC6895] later reserved distinct ranges | ||||
for meta and data types which allows servers to be definitive about | ||||
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 | 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 | to serve. This query is made with only the CD DNS flag bit set and | |||
all other DNS bits clear and without EDNS. | all other DNS bits clear and without EDNS. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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. | set in the response. We do not expect an OPT record to be returned. | |||
If the server supports DNSSEC, CD should be set in the response | If the server supports DNSSEC, CD should be set in the response | |||
[RFC4035] otherwise CD should be clear [RFC1034]. | [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: 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]. | ||||
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 | 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 | to serve. This query is made with only the AD DNS flag bit set and | |||
all other DNS bits clear and without EDNS. | all other DNS bits clear and without EDNS. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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. | set in the response. We do not expect an OPT record to be returned. | |||
The purpose of this query is to detect blocking of queries with the | ||||
If the server supports DNSSEC, AD may be set in the response | AD bit present, not the specific value of AD 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: rd 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 | |||
skipping to change at page 14, line 4 ¶ | skipping to change at page 13, line 26 ¶ | |||
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 | 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 | to serve. This query is made with only the final reserved DNS flag | |||
bit set and all other DNS bits clear and without EDNS. | 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 | 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 | 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 | 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 | be set [RFC1034]. We do not expect an OPT record to be returned | |||
[RFC6891]. | [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 (see below) | |||
expect: flag: aa to be present | expect: flag: aa to be present | |||
expect: flag: rd 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 | |||
MBZ (Must Be Zero) presence indicates the flag bit has been | MBZ (Must Be Zero) is a dig-specific indication that the flag bit has | |||
incorrectly copied. See Section 4.1.1, [RFC1035] "Z Reserved for | been incorrectly copied. See Section 4.1.1, [RFC1035] "Z Reserved | |||
future use. Must be zero in all queries and responses." | for 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 | Construct a DNS message that consists of only a DNS header with | |||
opcode set to 15 (currently not allocated), no DNS header bits set | opcode set to 15 (currently not allocated), no DNS header bits set | |||
and empty question, answer, authority and additional sections. | 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: opcode: 15 | |||
expect: all sections to be empty | ||||
expect: flag: aa to NOT be present | expect: flag: aa to NOT be present | |||
expect: flag: rd 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 | ||||
than there must be a DNS header present (QR, OPCODE and RCODE are the | ||||
only header fields that need to be common across all opcodes, | ||||
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 Recursive Queries | 8.1.5. Testing Recursive Queries | |||
Ask for the SOA record of the zone the server is nominally configured | 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 | to serve. This query is made with only the RD DNS flag bit set and | |||
without EDNS. | without EDNS. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | be set in the response, RA may also be set [RFC1034]. We do not | |||
expect a OPT record to be returned [RFC6891]. | expect an 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: rd to be present | expect: flag: rd to be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
skipping to change at page 15, line 36 ¶ | skipping to change at page 14, line 48 ¶ | |||
8.1.6. Testing TCP | 8.1.6. Testing TCP | |||
Ask for the SOA record of the zone the server is nominally configured | 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 | to serve. This query is made with no DNS flag bits set and without | |||
EDNS. This query is to be sent using TCP. | EDNS. This query is to be sent using TCP. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | set in the response, RA may also be set [RFC1034]. We do not expect | |||
a OPT record to be returned [RFC6891]. | an 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: rd to NOT be present | |||
expect: flag: ad to NOT be present | expect: flag: ad to NOT be present | |||
skipping to change at page 16, line 21 ¶ | skipping to change at page 15, line 34 ¶ | |||
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 | 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 | 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. | 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 | 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 | 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 | set in the response, RA may also be set [RFC1034]. We expect an OPT | |||
record to be returned. There should be no EDNS flags present in the | 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 | response. The EDNS version field should be zero and there should be | |||
no EDNS options present [RFC6891]. | 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: an 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 in BIND 9.11.0. | 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 | 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 | 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. | 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 | 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 | 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 | to be set in the response, RA may also be set [RFC1034]. We expect | |||
OPT record to be returned. There should be no EDNS flags present in | an OPT record to be returned. There should be no EDNS flags present | |||
the response. The EDNS version field should be zero as EDNS versions | in the response. The EDNS version field should be zero as EDNS | |||
other than 0 are yet to be specified and there should be no EDNS | versions other than 0 are yet to be specified and there should be no | |||
options present [RFC6891]. | 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: an 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 | 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 | 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 | 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 | 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 | chosen is 100 and will need to be adjusted when IANA assigns this | |||
value formally. | value formally. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | set in the response, RA may also be set [RFC1034]. We expect an OPT | |||
record to be returned. There should be no EDNS flags present in the | record to be returned. There should be no EDNS flags present in the | |||
response. The EDNS version field should be zero as EDNS versions | 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 | 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 | options present as unknown EDNS options are supposed to be ignored by | |||
the server [RFC6891]. | 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: an 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 | 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 | 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 | version 0 is used without any EDNS options. A unassigned EDNS flag | |||
bit is set (0x40 in this case). | bit is set (0x40 in this case). | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | set in the response, RA may also be set [RFC1034]. We expect an OPT | |||
record to be returned. There should be no EDNS flags present in the | 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 | response as unknown EDNS flags are supposed to be ignored. The EDNS | |||
version field should be zero and there should be no EDNS options | version field should be zero and there should be no EDNS options | |||
present [RFC6891]. | 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: an 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 | 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 | 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 | version 1 is used without any EDNS options. A unassigned EDNS flag | |||
bit is set (0x40 in this case). | bit is set (0x40 in this case). | |||
We expect the SOA record for the zone to NOT be returned in the | 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 | 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 | to be set in the response, RA may also be set [RFC1034]. We expect | |||
OPT record to be returned. There should be no EDNS flags present in | an OPT record to be returned. There should be no EDNS flags present | |||
the response as unknown EDNS flags are supposed to be ignored. The | in the response as unknown EDNS flags are supposed to be ignored. | |||
EDNS version field should be zero as EDNS versions other than 0 are | The EDNS version field should be zero as EDNS versions other than 0 | |||
yet to be specified and there should be no EDNS options present | are yet to be specified and there should be no EDNS options present | |||
[RFC6891]. | [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: an 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 | 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 | 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 | version 1 is used. A unknown EDNS option is present (option code 100 | |||
has been chosen). | has been chosen). | |||
We expect the SOA record for the zone to NOT be returned in the | 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 | 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 | to be set in the response, RA may also be set [RFC1034]. We expect | |||
OPT record to be returned. There should be no EDNS flags present in | an OPT record to be returned. There should be no EDNS flags present | |||
the response. The EDNS version field should be zero as EDNS versions | in the response. The EDNS version field should be zero as EDNS | |||
other than 0 are yet to be specified and there should be no EDNS | versions other than 0 are yet to be specified and there should be no | |||
options present [RFC6891]. | 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: an 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 Truncated Responses | 8.2.7. Testing Truncated Responses | |||
Ask for the DNSKEY records of the zone the server is nominally | Ask for the DNSKEY records of the zone the server is nominally | |||
configured to serve. This query is made with no DNS flag bits set. | 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 | EDNS version 0 is used without any EDNS options. The only EDNS flag | |||
set is DO. The EDNS UDP buffer size is set to 512. The intention of | set is DO. The EDNS UDP buffer size is set to 512. The intention of | |||
this query is elicit a truncated response from the server. Most | this query is elicit a truncated response from the server. Most | |||
signed DNSKEY responses are bigger than 512 bytes. | signed DNSKEY responses are bigger than 512 bytes. | |||
We expect a response with the rcode set to NOERROR and the AA and QR | We expect a response with the rcode set to NOERROR and the AA and QR | |||
bits to be set, AD may be set in the response if the server supports | bits to be set, AD may be set in the response if the server supports | |||
DNSSEC otherwise it should be clear. TC and RA may also be set | DNSSEC otherwise it should be clear. TC and RA may also be set | |||
[RFC1034]. We expect a OPT record to be present in the response. | [RFC1034]. We expect an OPT record to be present in the response. | |||
There should be no EDNS flags other than DO present in the response. | There should be no EDNS flags other than DO present in the response. | |||
The EDNS version field should be zero and there should be no EDNS | The EDNS version field should be zero and there should be no EDNS | |||
options present [RFC6891]. | options present [RFC6891]. | |||
If TC is not set it is not possible to confirm that the server | If TC is not set it is not possible to confirm that the server | |||
correctly adds the OPT record to the truncated responses or not. | correctly adds the OPT record to the truncated responses or not. | |||
dig +norec +dnssec +bufsize=512 +ignore dnskey $zone @$server | dig +norec +dnssec +bufsize=512 +ignore dnskey $zone @$server | |||
expect: NOERROR | expect: NOERROR | |||
expect: OPT record with version set to 0 | expect: OPT record with version set to 0 | |||
skipping to change at page 20, line 40 ¶ | skipping to change at page 20, line 9 ¶ | |||
Ask for the SOA record of the zone the server is nominally configured | 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 | 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 | version 0 is used without any EDNS options. The only EDNS flag set | |||
is DO. | is DO. | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | 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 | supports DNSSEC otherwise it should be clear. RA may also be set | |||
[RFC1034]. We expect a OPT record to be returned. There should be | [RFC1034]. We expect an OPT record to be returned. There should be | |||
no EDNS flags other than DO present in the response which 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 | present if the server supports DNSSEC. The EDNS version field should | |||
be zero and there should be no EDNS options present [RFC6891]. | 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: an 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.9. Testing EDNS Version Negotiation With DNSSEC | 8.2.9. Testing EDNS Version Negotiation With DNSSEC | |||
Ask for the SOA record of the zone the server is nominally configured | 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 | 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 | version 1 is used without any EDNS options. The only EDNS flag set | |||
is DO. | is DO. | |||
We expect the SOA record for the zone to NOT be returned in the | 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 | 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 | and possibly the RA bit to be set [RFC1034]. We expect an OPT record | |||
to be returned. There should be no EDNS flags other than DO present | to be returned. There should be no EDNS flags other than DO present | |||
in the response which should be present if the server supports | in the response which should be present if the server supports | |||
DNSSEC. The EDNS version field should be zero and there should be no | DNSSEC. The EDNS version field should be zero and there should be no | |||
EDNS options present [RFC6891]. | 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: an 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.10. Testing With Multiple Defined EDNS Options | 8.2.10. Testing With Multiple Defined EDNS Options | |||
Ask for the SOA record of the zone the server is nominally configured | 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 | 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 | version 0 is used. A number of defined EDNS options are present | |||
(NSID [RFC5001], DNS COOKIE [RFC7873], EDNS Client Subnet [RFC7871] | (NSID [RFC5001], DNS COOKIE [RFC7873], EDNS Client Subnet [RFC7871] | |||
and EDNS Expire [RFC7314]). | and EDNS Expire [RFC7314]). | |||
We expect the SOA record for the zone to be returned in the answer | 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 | 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 | set in the response, RA may also be set [RFC1034]. We expect an OPT | |||
record to be returned. There should be no EDNS flags present in the | record to be returned. There should be no EDNS flags present in the | |||
response. The EDNS version field should be zero. Any of the | response. The EDNS version field should be zero. Any of the | |||
requested EDNS options supported by the server and permitted server | requested EDNS options supported by the server and permitted server | |||
configuration may be returned [RFC6891]. | 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: an 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 | |||
8.3. When EDNS Is Not Supported | 8.3. When EDNS Is Not Supported | |||
If EDNS is not supported by the nameserver, we expect a response to | If EDNS is not supported by the nameserver, we expect a response to | |||
all the above queries. That response may be a FORMERR or NOTIMP | all the above queries. That response may be a FORMERR or NOTIMP | |||
error response or the OPT record may just be ignored. | error response or the OPT record may just be ignored. | |||
skipping to change at page 25, line 25 ¶ | skipping to change at page 24, line 39 ¶ | |||
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, | |||
<https://www.rfc-editor.org/info/rfc7766>. | <https://www.rfc-editor.org/info/rfc7766>. | |||
12.2. Informative References | 12.2. Informative References | |||
[RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", | [RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", | |||
RFC 2671, DOI 10.17487/RFC2671, August 1999, | RFC 2671, DOI 10.17487/RFC2671, August 1999, | |||
<https://www.rfc-editor.org/info/rfc2671>. | <https://www.rfc-editor.org/info/rfc2671>. | |||
[RFC3597] Gustafsson, A., "Handling of Unknown DNS Resource Record | ||||
(RR) Types", RFC 3597, DOI 10.17487/RFC3597, September | ||||
2003, <https://www.rfc-editor.org/info/rfc3597>. | ||||
[RFC5001] Austein, R., "DNS Name Server Identifier (NSID) Option", | [RFC5001] Austein, R., "DNS Name Server Identifier (NSID) Option", | |||
RFC 5001, DOI 10.17487/RFC5001, August 2007, | RFC 5001, DOI 10.17487/RFC5001, August 2007, | |||
<https://www.rfc-editor.org/info/rfc5001>. | <https://www.rfc-editor.org/info/rfc5001>. | |||
[RFC7314] Andrews, M., "Extension Mechanisms for DNS (EDNS) EXPIRE | [RFC7314] Andrews, M., "Extension Mechanisms for DNS (EDNS) EXPIRE | |||
Option", RFC 7314, DOI 10.17487/RFC7314, July 2014, | Option", RFC 7314, DOI 10.17487/RFC7314, July 2014, | |||
<https://www.rfc-editor.org/info/rfc7314>. | <https://www.rfc-editor.org/info/rfc7314>. | |||
[RFC7871] Contavalli, C., van der Gaast, W., Lawrence, D., and W. | [RFC7871] Contavalli, C., van der Gaast, W., Lawrence, D., and W. | |||
Kumari, "Client Subnet in DNS Queries", RFC 7871, | Kumari, "Client Subnet in DNS Queries", RFC 7871, | |||
DOI 10.17487/RFC7871, May 2016, | DOI 10.17487/RFC7871, May 2016, | |||
<https://www.rfc-editor.org/info/rfc7871>. | <https://www.rfc-editor.org/info/rfc7871>. | |||
[RFC7873] Eastlake 3rd, D. and M. Andrews, "Domain Name System (DNS) | [RFC7873] Eastlake 3rd, D. and M. Andrews, "Domain Name System (DNS) | |||
Cookies", RFC 7873, DOI 10.17487/RFC7873, May 2016, | Cookies", RFC 7873, DOI 10.17487/RFC7873, May 2016, | |||
<https://www.rfc-editor.org/info/rfc7873>. | <https://www.rfc-editor.org/info/rfc7873>. | |||
Author's Address | Authors' Addresses | |||
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 | |||
Ray Bellis | ||||
Internet Systems Consortium | ||||
950 Charter Street | ||||
Redwood City, CA 94063 | ||||
US | ||||
Email: ray@isc.org | ||||
End of changes. 55 change blocks. | ||||
138 lines changed or deleted | 107 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/ |