rfc9210.original | rfc9210.txt | |||
---|---|---|---|---|
Domain Name System Operations J.T. Kristoff | Internet Engineering Task Force (IETF) J. Kristoff | |||
Internet-Draft DataPlane.org | Request for Comments: 9210 DataPlane.org | |||
Updates: 1123, 1536 (if approved) D. Wessels | BCP: 235 D. Wessels | |||
Intended status: Best Current Practice Verisign | Updates: 1123, 1536 Verisign | |||
Expires: 10 July 2022 6 January 2022 | Category: Best Current Practice March 2022 | |||
ISSN: 2070-1721 | ||||
DNS Transport over TCP - Operational Requirements | DNS Transport over TCP - Operational Requirements | |||
draft-ietf-dnsop-dns-tcp-requirements-15 | ||||
Abstract | Abstract | |||
This document updates RFC 1123 and RFC 1536. This document requires | This document updates RFCs 1123 and 1536. This document requires the | |||
the operational practice of permitting DNS messages to be carried | operational practice of permitting DNS messages to be carried over | |||
over TCP on the Internet as a Best Current Practice. This | TCP on the Internet as a Best Current Practice. This operational | |||
operational requirement is aligned with the implementation | requirement is aligned with the implementation requirements in RFC | |||
requirements in RFC 7766. The use of TCP includes both DNS over | 7766. The use of TCP includes both DNS over unencrypted TCP as well | |||
unencrypted TCP, as well as over an encrypted TLS session. The | as over an encrypted TLS session. The document also considers the | |||
document also considers the consequences of this form of DNS | consequences of this form of DNS communication and the potential | |||
communication and the potential operational issues that can arise | operational issues that can arise when this Best Current Practice is | |||
when this Best Current Practice is not upheld. | not upheld. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This memo documents an Internet Best Current Practice. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
BCPs is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 10 July 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9210. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 | 1.1. Requirements Language | |||
2. History of DNS over TCP . . . . . . . . . . . . . . . . . . . 4 | 2. History of DNS over TCP | |||
2.1. Uneven Transport Usage and Preference . . . . . . . . . . 5 | 2.1. Uneven Transport Usage and Preference | |||
2.2. Waiting for Large Messages and Reliability . . . . . . . 5 | 2.2. Waiting for Large Messages and Reliability | |||
2.3. EDNS(0) . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.3. EDNS(0) | |||
2.4. Fragmentation and Truncation . . . . . . . . . . . . . . 6 | 2.4. Fragmentation and Truncation | |||
2.5. "Only Zone Transfers Use TCP" . . . . . . . . . . . . . . 8 | 2.5. "Only Zone Transfers Use TCP" | |||
2.6. Reuse, Pipelining, and Out-of-Order Processing . . . . . 8 | 2.6. Reuse, Pipelining, and Out-of-Order Processing | |||
3. DNS over TCP Requirements . . . . . . . . . . . . . . . . . . 9 | 3. DNS-over-TCP Requirements | |||
4. Network and System Considerations . . . . . . . . . . . . . . 10 | 4. Network and System Considerations | |||
4.1. Connection Establishment and Admission . . . . . . . . . 10 | 4.1. Connection Establishment and Admission | |||
4.2. Connection Management . . . . . . . . . . . . . . . . . . 12 | 4.2. Connection Management | |||
4.3. Connection Termination . . . . . . . . . . . . . . . . . 13 | 4.3. Connection Termination | |||
4.4. DNS-over-TLS . . . . . . . . . . . . . . . . . . . . . . 13 | 4.4. DNS over TLS | |||
4.5. Defaults and Recommended Limits . . . . . . . . . . . . . 14 | 4.5. Defaults and Recommended Limits | |||
5. DNS over TCP Filtering Risks . . . . . . . . . . . . . . . . 15 | 5. DNS-over-TCP Filtering Risks | |||
5.1. Truncation, Retries, and Timeouts . . . . . . . . . . . . 15 | 5.1. Truncation, Retries, and Timeouts | |||
5.2. DNS Root Zone KSK Rollover . . . . . . . . . . . . . . . 16 | 5.2. DNS Root Zone KSK Rollover | |||
6. Logging and Monitoring . . . . . . . . . . . . . . . . . . . 16 | 6. Logging and Monitoring | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17 | 7. IANA Considerations | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 8. Security Considerations | |||
9. Privacy Considerations . . . . . . . . . . . . . . . . . . . 18 | 9. Privacy Considerations | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | 10. References | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 10.1. Normative References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 18 | 10.2. Informative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 19 | Appendix A. Standards Related to DNS Transport over TCP | |||
Appendix A. Standards Related to DNS Transport over TCP . . . . 27 | ||||
A.1. IETF RFC 1035 - DOMAIN NAMES - IMPLEMENTATION AND | A.1. IETF RFC 1035 - DOMAIN NAMES - IMPLEMENTATION AND | |||
SPECIFICATION . . . . . . . . . . . . . . . . . . . . . 27 | SPECIFICATION | |||
A.2. IETF RFC 1536 - Common DNS Implementation Errors and | A.2. IETF RFC 1536 - Common DNS Implementation Errors and | |||
Suggested Fixes . . . . . . . . . . . . . . . . . . . . 27 | Suggested Fixes | |||
A.3. IETF RFC 1995 - Incremental Zone Transfer in DNS . . . . 27 | A.3. IETF RFC 1995 - Incremental Zone Transfer in DNS | |||
A.4. IETF RFC 1996 - A Mechanism for Prompt Notification of Zone | A.4. IETF RFC 1996 - A Mechanism for Prompt Notification of Zone | |||
Changes (DNS NOTIFY) . . . . . . . . . . . . . . . . . . 27 | Changes (DNS NOTIFY) | |||
A.5. IETF RFC 2181 - Clarifications to the DNS | A.5. IETF RFC 2181 - Clarifications to the DNS Specification | |||
Specification . . . . . . . . . . . . . . . . . . . . . 27 | ||||
A.6. IETF RFC 2694 - DNS extensions to Network Address | A.6. IETF RFC 2694 - DNS extensions to Network Address | |||
Translators (DNS_ALG) . . . . . . . . . . . . . . . . . 28 | Translators (DNS_ALG) | |||
A.7. IETF RFC 3225 - Indicating Resolver Support of DNSSEC . . 28 | A.7. IETF RFC 3225 - Indicating Resolver Support of DNSSEC | |||
A.8. IETF RFC 3226 - DNSSEC and IPv6 A6 aware server/resolver | A.8. IETF RFC 3226 - DNSSEC and IPv6 A6 aware server/resolver | |||
message size requirements . . . . . . . . . . . . . . . 28 | message size requirements | |||
A.9. IETF RFC 4472 - Operational Considerations and Issues with | A.9. IETF RFC 4472 - Operational Considerations and Issues with | |||
IPv6 DNS . . . . . . . . . . . . . . . . . . . . . . . . 28 | IPv6 DNS | |||
A.10. IETF RFC 5452 - Measures for Making DNS More Resilient | A.10. IETF RFC 5452 - Measures for Making DNS More Resilient | |||
against Forged Answers . . . . . . . . . . . . . . . . . 28 | against Forged Answers | |||
A.11. IETF RFC 5507 - Design Choices When Expanding the DNS . . 29 | A.11. IETF RFC 5507 - Design Choices When Expanding the DNS | |||
A.12. IETF RFC 5625 - DNS Proxy Implementation Guidelines . . . 29 | A.12. IETF RFC 5625 - DNS Proxy Implementation Guidelines | |||
A.13. IETF RFC 5936 - DNS Zone Transfer Protocol (AXFR) . . . . 29 | A.13. IETF RFC 5936 - DNS Zone Transfer Protocol (AXFR) | |||
A.14. IETF RFC 7534 - AS112 Nameserver Operations . . . . . . . 29 | A.14. IETF RFC 7534 - AS112 Nameserver Operations | |||
A.15. IETF RFC 6762 - Multicast DNS . . . . . . . . . . . . . . 29 | A.15. IETF RFC 6762 - Multicast DNS | |||
A.16. IETF RFC 6891 - Extension Mechanisms for DNS (EDNS(0)) . 29 | A.16. IETF RFC 6891 - Extension Mechanisms for DNS (EDNS(0)) | |||
A.17. IETF RFC 6950 - Architectural Considerations on Application | A.17. IAB RFC 6950 - Architectural Considerations on Application | |||
Features in the DNS . . . . . . . . . . . . . . . . . . 30 | Features in the DNS | |||
A.18. IETF RFC 7477 - Child-to-Parent Synchronization in DNS . 30 | A.18. IETF RFC 7477 - Child-to-Parent Synchronization in DNS | |||
A.19. IETF RFC 7720 - DNS Root Name Service Protocol and | A.19. IETF RFC 7720 - DNS Root Name Service Protocol and | |||
Deployment Requirements . . . . . . . . . . . . . . . . 30 | Deployment Requirements | |||
A.20. IETF RFC 7766 - DNS Transport over TCP - Implementation | A.20. IETF RFC 7766 - DNS Transport over TCP - Implementation | |||
Requirements . . . . . . . . . . . . . . . . . . . . . . 30 | Requirements | |||
A.21. IETF RFC 7828 - The edns-tcp-keepalive EDNS(0) Option . . 30 | A.21. IETF RFC 7828 - The edns-tcp-keepalive EDNS(0) Option | |||
A.22. IETF RFC 7858 - Specification for DNS over Transport Layer | A.22. IETF RFC 7858 - Specification for DNS over Transport Layer | |||
Security (TLS) . . . . . . . . . . . . . . . . . . . . . 31 | Security (TLS) | |||
A.23. IETF RFC 7873 - Domain Name System (DNS) Cookies . . . . 31 | A.23. IETF RFC 7873 - Domain Name System (DNS) Cookies | |||
A.24. IETF RFC 7901 - CHAIN Query Requests in DNS . . . . . . . 31 | A.24. IETF RFC 7901 - CHAIN Query Requests in DNS | |||
A.25. IETF RFC 8027 - DNSSEC Roadblock Avoidance . . . . . . . 31 | A.25. IETF RFC 8027 - DNSSEC Roadblock Avoidance | |||
A.26. IETF RFC 8094 - DNS over Datagram Transport Layer Security | A.26. IETF RFC 8094 - DNS over Datagram Transport Layer Security | |||
(DTLS) . . . . . . . . . . . . . . . . . . . . . . . . . 32 | (DTLS) | |||
A.27. IETF RFC 8162 - Using Secure DNS to Associate Certificates | A.27. IETF RFC 8162 - Using Secure DNS to Associate Certificates | |||
with Domain Names for S/MIME . . . . . . . . . . . . . . 32 | with Domain Names for S/MIME | |||
A.28. IETF RFC 8324 - DNS Privacy, Authorization, Special Uses, | A.28. IETF RFC 8324 - DNS Privacy, Authorization, Special Uses, | |||
Encoding, Characters, Matching, and Root Structure: Time for | Encoding, Characters, Matching, and Root Structure: Time for | |||
Another Look? . . . . . . . . . . . . . . . . . . . . . 32 | Another Look? | |||
A.29. IETF RFC 8467 - Padding Policies for Extension Mechanisms | A.29. IETF RFC 8467 - Padding Policies for Extension Mechanisms | |||
for DNS (EDNS(0)) . . . . . . . . . . . . . . . . . . . 32 | for DNS (EDNS(0)) | |||
A.30. IETF RFC 8482 - Providing Minimal-Sized Responses to DNS | A.30. IETF RFC 8482 - Providing Minimal-Sized Responses to DNS | |||
Queries That Have QTYPE=ANY . . . . . . . . . . . . . . 32 | Queries That Have QTYPE=ANY | |||
A.31. IETF RFC 8483 - Yeti DNS Testbed . . . . . . . . . . . . 33 | A.31. IETF RFC 8483 - Yeti DNS Testbed | |||
A.32. IETF RFC 8484 - DNS Queries over HTTPS (DoH) . . . . . . 33 | A.32. IETF RFC 8484 - DNS Queries over HTTPS (DoH) | |||
A.33. IETF RFC 8490 - DNS Stateful Operations . . . . . . . . . 33 | A.33. IETF RFC 8490 - DNS Stateful Operations | |||
A.34. IETF RFC 8501 - Reverse DNS in IPv6 for Internet Service | A.34. IETF RFC 8501 - Reverse DNS in IPv6 for Internet Service | |||
Providers . . . . . . . . . . . . . . . . . . . . . . . 33 | Providers | |||
A.35. IETF RFC 8806 - Running a Root Server Local to a | A.35. IETF RFC 8806 - Running a Root Server Local to a Resolver | |||
Resolver . . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
A.36. IETF RFC 8906 - A Common Operational Problem in DNS | A.36. IETF RFC 8906 - A Common Operational Problem in DNS | |||
Servers: Failure to Communicate . . . . . . . . . . . . 33 | Servers: Failure to Communicate | |||
A.37. IETF RFC 8932 - Recommendations for DNS Privacy Service | A.37. IETF RFC 8932 - Recommendations for DNS Privacy Service | |||
Operators . . . . . . . . . . . . . . . . . . . . . . . 34 | Operators | |||
A.38. IETF RFC 8945 - Secret Key Transaction Authentication for | A.38. IETF RFC 8945 - Secret Key Transaction Authentication for | |||
DNS (TSIG) . . . . . . . . . . . . . . . . . . . . . . . 34 | DNS (TSIG) | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 34 | Acknowledgments | |||
Authors' Addresses | ||||
1. Introduction | 1. Introduction | |||
DNS messages are delivered using UDP or TCP communications. While | DNS messages are delivered using UDP or TCP communications. While | |||
most DNS transactions are carried over UDP, some operators have been | most DNS transactions are carried over UDP, some operators have been | |||
led to believe that any DNS over TCP traffic is unwanted or | led to believe that any DNS-over-TCP traffic is unwanted or | |||
unnecessary for general DNS operation. When DNS over TCP has been | unnecessary for general DNS operation. When DNS over TCP has been | |||
restricted, a variety of communication failures and debugging | restricted, a variety of communication failures and debugging | |||
challenges often arise. As DNS and new naming system features have | challenges often arise. As DNS and new naming system features have | |||
evolved, TCP as a transport has become increasingly important for the | evolved, TCP as a transport has become increasingly important for the | |||
correct and safe operation of an Internet DNS. Reflecting modern | correct and safe operation of an Internet DNS. Reflecting modern | |||
usage, the DNS standards declare that support for TCP is a required | usage, the DNS standards declare that support for TCP is a required | |||
part of the DNS implementation specifications [RFC7766]. This | part of the DNS implementation specifications [RFC7766]. This | |||
document is the formal requirements equivalent for the operational | document is the equivalent of formal requirements for the operational | |||
community, encouraging system administrators, network engineers, and | community, encouraging system administrators, network engineers, and | |||
security staff to ensure DNS over TCP communications support is on | security staff to ensure DNS-over-TCP communications support is on | |||
par with DNS over UDP communications. It updates [RFC1123] | par with DNS-over-UDP communications. It updates [RFC1123], | |||
Section 6.1.3.2 to clarify that all DNS resolvers and recursive | Section 6.1.3.2 to clarify that all DNS resolvers and recursive | |||
servers MUST support and service both TCP and UDP queries, and also | servers MUST support and service both TCP and UDP queries and also | |||
updates [RFC1536] to remove the misconception that TCP is only useful | updates [RFC1536] to remove the misconception that TCP is only useful | |||
for zone transfers. | for zone transfers. | |||
1.1. Requirements Language | 1.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. History of DNS over TCP | 2. History of DNS over TCP | |||
The curious state of disagreement between operational best practices | The curious state of disagreement between operational best practices | |||
and guidance for DNS transport protocols derives from conflicting | and guidance for DNS transport protocols derives from conflicting | |||
messages operators have received from other operators, implementors, | messages operators have received from other operators, implementors, | |||
and even the IETF. Sometimes these mixed signals have been explicit; | and even the IETF. Sometimes these mixed signals have been explicit; | |||
on other occasions, conflicting messages have been implicit. This | on other occasions, conflicting messages have been implicit. This | |||
section presents an interpretation of the storied and conflicting | section presents an interpretation of the storied and conflicting | |||
history that led to this document. This section is included for | history that led to this document. This section is included for | |||
informational purposes only. | informational purposes only. | |||
2.1. Uneven Transport Usage and Preference | 2.1. Uneven Transport Usage and Preference | |||
In the original suite of DNS specifications, [RFC1034] and [RFC1035] | In the original suite of DNS specifications, [RFC1034] and [RFC1035] | |||
clearly specified that DNS messages could be carried in either UDP or | clearly specify that DNS messages could be carried in either UDP or | |||
TCP, but they also stated a preference for UDP as the best transport | TCP, but they also state that there is a preference for UDP as the | |||
for queries in the general case. As stated in [RFC1035]: | best transport for queries in the general case. As stated in | |||
[RFC1035]: | ||||
"While virtual circuits can be used for any DNS activity, | | While virtual circuits can be used for any DNS activity, datagrams | |||
datagrams are preferred for queries due to their lower overhead | | are preferred for queries due to their lower overhead and better | |||
and better performance." | | performance. | |||
Another early, important, and influential document, [RFC1123], marked | Another early, important, and influential document, [RFC1123], marks | |||
the preference for a transport protocol more explicitly: | the preference for a transport protocol more explicitly: | |||
"DNS resolvers and recursive servers MUST support UDP, and SHOULD | | DNS resolvers and recursive servers MUST support UDP, and SHOULD | |||
support TCP, for sending (non-zone-transfer) queries." | | support TCP, for sending (non-zone-transfer) queries. | |||
and further stipulated: | and it further stipulates that: | |||
"A name server MAY limit the resources it devotes to TCP queries, | | A name server MAY limit the resources it devotes to TCP queries, | |||
but it SHOULD NOT refuse to service a TCP query just because it | | but it SHOULD NOT refuse to service a TCP query just because it | |||
would have succeeded with UDP." | | would have succeeded with UDP. | |||
Culminating in [RFC1536], DNS over TCP came to be associated | Culminating in [RFC1536], DNS over TCP came to be associated | |||
primarily with the zone transfer mechanism, while most DNS queries | primarily with the zone transfer mechanism, while most DNS queries | |||
and responses were seen as the dominion of UDP. | and responses were seen as the dominion of UDP. | |||
2.2. Waiting for Large Messages and Reliability | 2.2. Waiting for Large Messages and Reliability | |||
In the original specifications, the maximum DNS over UDP message size | In the original specifications, the maximum DNS-over-UDP message size | |||
was enshrined at 512 bytes. However, even while [RFC1123] preferred | was enshrined at 512 bytes. However, even while [RFC1123] prefers | |||
UDP for non-zone transfer queries, it foresaw DNS over TCP becoming | UDP for non-zone transfer queries, it foresaw that DNS over TCP would | |||
more popular in the future to overcome this limitation: | become more popular in the future to overcome this limitation: | |||
"[...] it is also clear that some new DNS record types defined in | | [...] it is also clear that some new DNS record types defined in | |||
the future will contain information exceeding the 512 byte limit | | the future will contain information exceeding the 512 byte limit | |||
that applies to UDP, and hence will require TCP." | | that applies to UDP, and hence will require TCP. | |||
At least two new, widely anticipated developments were set to elevate | At least two new, widely anticipated developments were set to elevate | |||
the need for DNS over TCP transactions. The first was dynamic | the need for DNS-over-TCP transactions. The first was dynamic | |||
updates defined in [RFC2136] and the second was the set of extensions | updates defined in [RFC2136], and the second was the set of | |||
collectively known as DNSSEC, whose operational considerations are | extensions collectively known as "DNSSEC", whose operational | |||
originally given in [RFC2541]. The former suggested "requestors who | considerations were originally given in [RFC2541]. The former | |||
require an accurate response code must use TCP," while the latter | suggests that | |||
warned "... larger keys increase the size of KEY and SIG RRs. This | ||||
increases the chance of DNS UDP packet overflow and the possible | | ...requestors who require an accurate response code must use TCP. | |||
necessity for using higher overhead TCP in responses." | ||||
Yet, defying some expectations, DNS over TCP remained little-used in | while the latter warns that | |||
| ... larger keys increase the size of the KEY and SIG RRs. This | ||||
| increases the chance of DNS UDP packet overflow and the possible | ||||
| necessity for using higher overhead TCP in responses. | ||||
Yet, defying some expectations, DNS over TCP remained little used in | ||||
real traffic across the Internet in the late 1990s. Dynamic updates | real traffic across the Internet in the late 1990s. Dynamic updates | |||
saw little deployment between autonomous networks. Around the time | saw little deployment between autonomous networks. Around the time | |||
DNSSEC was first defined, another new feature helped solidify UDP | DNSSEC was first defined, another new feature helped solidify UDP | |||
transport dominance for message transactions. | transport dominance for message transactions. | |||
2.3. EDNS(0) | 2.3. EDNS(0) | |||
In 1999 the IETF published the Extension Mechanisms for DNS (EDNS(0)) | In 1999, the IETF published the Extension Mechanisms for DNS | |||
in [RFC2671] (superseded in 2013 by an update in [RFC6891]). That | (EDNS(0)) in [RFC2671] (which was obsoleted by [RFC6891] in 2013). | |||
document standardized a way for communicating DNS nodes to perform | That document standardized a way for communicating DNS nodes to | |||
rudimentary capabilities negotiation. One such capability written | perform rudimentary capabilities negotiation. One such capability | |||
into the base specification and present in every EDNS(0)-compatible | written into the base specification and present in every EDNS(0)- | |||
message is the value of the maximum UDP payload size the sender can | compatible message is the value of the maximum UDP payload size the | |||
support. This unsigned 16-bit field specifies, in bytes, the maximum | sender can support. This unsigned 16-bit field specifies, in bytes, | |||
(possibly fragmented) DNS message size a node is capable of receiving | the maximum (possibly fragmented) DNS message size a node is capable | |||
over UDP. In practice, typical values are a subset of the 512- to | of receiving over UDP. In practice, typical values are a subset of | |||
4096-byte range. EDNS(0) became widely deployed over the next | the 512- to 4096-byte range. EDNS(0) became widely deployed over the | |||
several years, and numerous surveys ([CASTRO2010], [NETALYZR]) have | next several years, and numerous surveys (see [CASTRO2010] and | |||
shown that many systems support larger UDP MTUs with EDNS(0). | [NETALYZR]) have shown that many systems support larger UDP MTUs with | |||
EDNS(0). | ||||
The natural effect of EDNS(0) deployment meant DNS messages larger | The natural effect of EDNS(0) deployment meant DNS messages larger | |||
than 512 bytes would be less reliant on TCP than they might otherwise | than 512 bytes would be less reliant on TCP than they might otherwise | |||
have been. While a non-negligible population of DNS systems lacked | have been. While a non-negligible population of DNS systems lacked | |||
EDNS(0) or fell back to TCP when necessary, DNS clients still | EDNS(0) or fell back to TCP when necessary, DNS clients still | |||
strongly prefer UDP to TCP. For example, as of 2014, DNS over TCP | strongly prefer UDP to TCP. For example, as of 2014, DNS-over-TCP | |||
transactions remained a very small fraction of overall DNS traffic | transactions remained a very small fraction of overall DNS traffic | |||
received by root name servers [VERISIGN]. | received by root name servers [VERISIGN]. | |||
2.4. Fragmentation and Truncation | 2.4. Fragmentation and Truncation | |||
Although EDNS(0) provides a way for endpoints to signal support for | Although EDNS(0) provides a way for endpoints to signal support for | |||
DNS messages exceeding 512 bytes, the realities of a diverse and | DNS messages exceeding 512 bytes, the realities of a diverse and | |||
inconsistently deployed Internet may result in some large messages | inconsistently deployed Internet may result in some large messages | |||
being unable to reach their destination. Any IP datagram whose size | being unable to reach their destination. Any IP datagram whose size | |||
exceeds the MTU of a link it transits will be fragmented and then | exceeds the MTU of a link it transits will be fragmented and then | |||
reassembled by the receiving host. Unfortunately, it is not uncommon | reassembled by the receiving host. Unfortunately, it is not uncommon | |||
for middleboxes and firewalls to block IP fragments. If one or more | for middleboxes and firewalls to block IP fragments. If one or more | |||
fragments do not arrive, the application does not receive the message | fragments do not arrive, the application does not receive the | |||
and the request times out. | message, and the request times out. | |||
For IPv4-connected hosts, the MTU is often the Ethernet payload size | For IPv4-connected hosts, the MTU is often an Ethernet payload size | |||
of 1500 bytes. This means that the largest unfragmented UDP DNS | of 1500 bytes. This means that the largest unfragmented UDP DNS | |||
message that can be sent over IPv4 is likely 1472 bytes, although | message that can be sent over IPv4 is likely 1472 bytes, although | |||
tunnel encapsulation may reduce that maximum message size in some | tunnel encapsulation may reduce that maximum message size in some | |||
cases. | cases. | |||
For IPv6, the situation is a little more complicated. First, IPv6 | For IPv6, the situation is a little more complicated. First, IPv6 | |||
headers are 40 bytes (versus 20 without options in IPv4). Second, | headers are 40 bytes (versus 20 without options in IPv4). Second, | |||
approximately one third of DNS recursive resolvers use the minimum | approximately one-third of DNS recursive resolvers use the minimum | |||
MTU of 1280 bytes [APNIC]. Third, fragmentation in IPv6 can only be | MTU of 1280 bytes [APNIC]. Third, fragmentation in IPv6 can only be | |||
done by the host originating the datagram. The need to fragment is | done by the host originating the datagram. The need to fragment is | |||
conveyed in an ICMPv6 "packet too big" message. The originating host | conveyed in an ICMPv6 "Packet Too Big" message. The originating host | |||
indicates a fragmented datagram with IPv6 extension headers. | indicates a fragmented datagram with IPv6 extension headers. | |||
Unfortunately, it is quite common for both ICMPv6 and IPv6 extension | Unfortunately, it is quite common for both ICMPv6 and IPv6 extension | |||
headers to be blocked by middleboxes. According to [HUSTON] some 35% | headers to be blocked by middleboxes. According to [HUSTON], some | |||
of IPv6-capable recursive resolvers were unable to receive a | 35% of IPv6-capable recursive resolvers were unable to receive a | |||
fragmented IPv6 packet. When the originating host receives a signal | fragmented IPv6 packet. When the originating host receives a signal | |||
that fragmentation is required, it is expected to populate its Path | that fragmentation is required, it is expected to populate its path | |||
MTU cache for that destination. The application, then, will retry | MTU cache for that destination. The application will then retry the | |||
the query after a timeout since the host does not generally retain | query after a timeout since the host does not generally retain copies | |||
copies of messages sent over UDP for potential retransmission. | of messages sent over UDP for potential retransmission. | |||
The practical consequence of all this is that DNS requestors must be | The practical consequence of all this is that DNS requestors must be | |||
prepared to retry queries with different EDNS(0) maximum message size | prepared to retry queries with different EDNS(0) maximum message size | |||
values. Administrators of [BIND] are likely to be familiar with | values. Administrators of [BIND] are likely to be familiar with | |||
seeing "success resolving ... after reducing the advertised EDNS(0) | seeing "success resolving ... after reducing the advertised EDNS(0) | |||
UDP packet size to 512 octets" messages in their system logs. | UDP packet size to 512 octets" messages in their system logs. | |||
Often, reducing the EDNS(0) UDP packet size leads to a successful | Often, reducing the EDNS(0) UDP packet size leads to a successful | |||
response. That is, the necessary data fits within the smaller | response. That is, the necessary data fits within the smaller | |||
message size. However, when the data does not fit, the server sets | message size. However, when the data does not fit, the server sets | |||
the truncated flag in its response, indicating the client should | the truncated flag in its response, indicating the client should | |||
retry over TCP to receive the whole response. This is undesirable | retry over TCP to receive the whole response. This is undesirable | |||
from the client's point of view because it adds more latency and | from the client's point of view because it adds more latency and is | |||
potentially undesirable from the server's point of view due to the | potentially undesirable from the server's point of view due to the | |||
increased resource requirements of TCP. | increased resource requirements of TCP. | |||
Note that a receiver is unable to differentiate between packets lost | Note that a receiver is unable to differentiate between packets lost | |||
due to congestion and packets (fragments) intentionally dropped by | due to congestion and packets (fragments) intentionally dropped by | |||
firewalls or middleboxes. Over network paths with non-trivial | firewalls or middleboxes. Over network paths with non-trivial | |||
amounts of packet loss, larger, fragmented DNS responses are more | amounts of packet loss, larger, fragmented DNS responses are more | |||
likely to never arrive and time out compared to smaller, unfragmented | likely to never arrive and time out compared to smaller, unfragmented | |||
responses. Clients might be misled into retrying queries with | responses. Clients might be misled into retrying queries with | |||
different EDNS(0) UDP packet size values for the wrong reason. | different EDNS(0) UDP packet size values for the wrong reason. | |||
The issues around fragmentation, truncation, and TCP are driving | The issues around fragmentation, truncation, and TCP are driving | |||
certain implementation and policy decisions in the DNS. Notably, | certain implementation and policy decisions in the DNS. Notably, | |||
Cloudflare implemented what it calls "DNSSEC black lies" [CLOUDFLARE] | Cloudflare implemented what it calls "DNSSEC black lies" [CLOUDFLARE] | |||
and uses ECDSA algorithms, such that their signed responses fit | and uses Elliptic Curve Digital Signature Algorithms (ECDSAs) such | |||
easily in 512 bytes. The Key Signing Key (KSK) Rollover design team | that their signed responses fit easily in 512 bytes. The Key Signing | |||
[DESIGNTEAM] spent a lot of time thinking and worrying about response | Key (KSK) Rollover Design Team [DESIGNTEAM] spent a lot of time | |||
sizes. There is growing sentiment in the DNSSEC community that RSA | thinking and worrying about response sizes. There is growing | |||
key sizes beyond 2048-bits are impractical and that critical | sentiment in the DNSSEC community that RSA key sizes beyond 2048 bits | |||
infrastructure zones should transition to elliptic curve algorithms | are impractical and that critical infrastructure zones should | |||
to keep response sizes manageable [ECDSA]. | transition to elliptic curve algorithms to keep response sizes | |||
manageable [ECDSA]. | ||||
More recently, renewed security concerns about fragmented DNS | More recently, renewed security concerns about fragmented DNS | |||
messages ([AVOID_FRAGS], [FRAG_POISON]) are leading implementors to | messages (see [AVOID_FRAGS] and [FRAG_POISON]) are leading | |||
consider smaller responses and lower default EDNS(0) UDP payload size | implementors to consider smaller responses and lower default EDNS(0) | |||
values for both queriers and responders [FLAGDAY2020]. | UDP payload size values for both queriers and responders | |||
[FLAGDAY2020]. | ||||
2.5. "Only Zone Transfers Use TCP" | 2.5. "Only Zone Transfers Use TCP" | |||
Today, the majority of the DNS community expects, or at least has a | Today, the majority of the DNS community expects, or at least has a | |||
desire, to see DNS over TCP transactions occur without interference | desire, to see DNS-over-TCP transactions occur without interference | |||
[FLAGDAY2020]. However, there has also been a long-held belief by | [FLAGDAY2020]. However, there has also been a long-held belief by | |||
some operators, particularly for security-related reasons, that DNS | some operators, particularly for security-related reasons, that DNS- | |||
over TCP services should be purposely limited or not provided at all | over-TCP services should be purposely limited or not provided at all | |||
[CHES94], [DJBDNS]. A popular meme is that DNS over TCP is only ever | [CHES94] [DJBDNS]. A popular meme is that DNS over TCP is only ever | |||
used for zone transfers and is generally unnecessary otherwise, with | used for zone transfers and is generally unnecessary otherwise, with | |||
filtering all DNS over TCP traffic even described as a best practice. | filtering all DNS-over-TCP traffic even described as a best practice. | |||
The position on restricting DNS over TCP had some justification given | The position on restricting DNS over TCP had some justification given | |||
that historical implementations of DNS nameservers provided very | that historical implementations of DNS name servers provided very | |||
little in the way of TCP connection management (for example see | little in the way of TCP connection management (for example, see | |||
Section 6.1.2 of [RFC7766] for more details). However, modern | Section 6.1.2 of [RFC7766] for more details). However, modern | |||
standards and implementations are nearing parity with the more | standards and implementations are nearing parity with the more | |||
sophisticated TCP management techniques employed by, for example, | sophisticated TCP management techniques employed by, for example, | |||
HTTP(S) servers and load balancers. | HTTP(S) servers and load balancers. | |||
2.6. Reuse, Pipelining, and Out-of-Order Processing | 2.6. Reuse, Pipelining, and Out-of-Order Processing | |||
The idea that a TCP connection can support multiple transactions goes | The idea that a TCP connection can support multiple transactions goes | |||
back as far as [RFC0883], which states: "Multiple messages may be | back as far as [RFC0883], which states: "Multiple messages may be | |||
sent over a virtual circuit." Although [RFC1035], which updates the | sent over a virtual circuit." Although [RFC1035], which updates the | |||
former, omits this particular detail, it has been generally accepted | former, omits this particular detail, it has been generally accepted | |||
that a TCP connection can be used for more than one query and | that a TCP connection can be used for more than one query and | |||
response. | response. | |||
[RFC5966] clarified that servers are not required to preserve the | [RFC5966] clarifies that servers are not required to preserve the | |||
order of queries and responses over any transport. [RFC7766], which | order of queries and responses over any transport. [RFC7766], which | |||
updates the former, further encourages query pipelining over TCP to | updates the former, further encourages query pipelining over TCP to | |||
achieve performance on par with UDP. A server that sends out-of- | achieve performance on par with UDP. A server that sends out-of- | |||
order responses to pipelined queries avoids head-of-line blocking | order responses to pipelined queries avoids head-of-line blocking | |||
when the response for a later query is ready before the response to | when the response for a later query is ready before the response to | |||
an earlier query. | an earlier query. | |||
However, TCP can potentially suffer from a different head-of-line | However, TCP can potentially suffer from a different head-of-line | |||
blocking problem due to packet loss. Since TCP itself enforces | blocking problem due to packet loss. Since TCP itself enforces | |||
ordering, a single lost segment delays delivery of data in any | ordering, a single lost segment delays delivery of data in any | |||
following segments until the lost segment is retransmitted and | following segments until the lost segment is retransmitted and | |||
successfully received. | successfully received. | |||
3. DNS over TCP Requirements | 3. DNS-over-TCP Requirements | |||
An average increase in DNS message size (e.g., due to DNSSEC), the | An average increase in DNS message size (e.g., due to DNSSEC), the | |||
continued development of new DNS features (Appendix A), and a denial | continued development of new DNS features (Appendix A), and a denial- | |||
of service mitigation technique (Section 8), all show that DNS over | of-service mitigation technique (Section 8) all show that DNS-over- | |||
TCP transactions are as important to the correct and safe operation | TCP transactions are as important to the correct and safe operation | |||
of the Internet DNS as ever, if not more so. Furthermore, there has | of the Internet DNS as ever, if not more so. Furthermore, there has | |||
been research that argues connection-oriented DNS transactions may | been research that argues connection-oriented DNS transactions may | |||
provide security and privacy advantages over UDP transport [TDNS]. | provide security and privacy advantages over UDP transport [TDNS]. | |||
In fact, the standard for DNS over TLS [RFC7858] is just this sort of | In fact, the standard for DNS over TLS [RFC7858] is just this sort of | |||
specification. Therefore, this document makes explicit that it is | specification. Therefore, this document makes explicit that it is | |||
undesirable for network operators to artificially inhibit DNS over | undesirable for network operators to artificially inhibit DNS-over- | |||
TCP transport. | TCP transport. | |||
Section 6.1.3.2 in [RFC1123] is updated: All DNS resolvers and | Section 6.1.3.2 of [RFC1123] is updated: All DNS resolvers and | |||
servers MUST support and service both UDP and TCP queries. | servers MUST support and service both UDP and TCP queries. | |||
* DNS servers (including forwarders) MUST support and service TCP | * DNS servers (including forwarders) MUST support and service TCP | |||
for receiving queries, so that clients can reliably receive | for receiving queries so that clients can reliably receive | |||
responses that are larger than what either side considers too | responses that are larger than what either side considers too | |||
large for UDP. | large for UDP. | |||
* DNS clients MUST support TCP for sending queries, so that they can | * DNS clients MUST support TCP for sending queries so that they can | |||
retry truncated UDP responses as necessary. | retry truncated UDP responses as necessary. | |||
Furthermore, the requirement in Section 6.1.3.2 of [RFC1123] around | Furthermore, the requirement in Section 6.1.3.2 of [RFC1123] around | |||
limiting the resources a server devotes to queries is hereby updated: | limiting the resources a server devotes to queries is hereby updated: | |||
OLD: | OLD: | |||
A name server MAY limit the resources it devotes to TCP queries, | | A name server MAY limit the resources it devotes to TCP queries, | |||
but it SHOULD NOT refuse to service a TCP query just because it | | but it SHOULD NOT refuse to service a TCP query just because it | |||
would have succeeded with UDP. | | would have succeeded with UDP. | |||
NEW: | NEW: | |||
A name server MAY limit the resources it devotes to queries, but | | A name server MAY limit the resources it devotes to queries, but | |||
it MUST NOT refuse to service a query just because it would have | | it MUST NOT refuse to service a query just because it would have | |||
succeeded with another transport protocol. | | succeeded with another transport protocol. | |||
Lastly, Section 1 of [RFC1536] is updated to eliminate the | Lastly, Section 1 of [RFC1536] is updated to eliminate the | |||
misconception that TCP is only useful for zone transfers: | misconception that TCP is only useful for zone transfers: | |||
OLD: | OLD: | |||
DNS implements the classic request-response scheme of client- | | DNS implements the classic request-response scheme of client- | |||
server interaction. UDP is, therefore, the chosen protocol for | | server interaction. UDP is, therefore, the chosen protocol for | |||
communication though TCP is used for zone transfers. | | communication though TCP is used for zone transfers. | |||
NEW: | NEW: | |||
DNS implements the classic request-response scheme of client- | | DNS implements the classic request-response scheme of client- | |||
server interaction. | | server interaction. | |||
Filtering of DNS over TCP is harmful in the general case. DNS | The filtering of DNS over TCP is harmful in the general case. DNS | |||
resolver and server operators MUST support and provide DNS service | resolver and server operators MUST support and provide DNS service | |||
over both UDP and TCP transports. Likewise, network operators MUST | over both UDP and TCP transports. Likewise, network operators MUST | |||
allow DNS service over both UDP and TCP transports. It is | allow DNS service over both UDP and TCP transports. It is | |||
acknowledged that DNS over TCP service can pose operational | acknowledged that DNS-over-TCP service can pose operational | |||
challenges that are not present when running DNS over UDP alone, and | challenges that are not present when running DNS over UDP alone, and | |||
vice-versa. However, the potential damage incurred by prohibiting | vice versa. However, the potential damage incurred by prohibiting | |||
DNS over TCP service is more detrimental to the continued utility and | DNS-over-TCP service is more detrimental to the continued utility and | |||
success of the DNS than when its usage is allowed. | success of the DNS than when its usage is allowed. | |||
4. Network and System Considerations | 4. Network and System Considerations | |||
This section describes measures that systems and applications can | This section describes measures that systems and applications can | |||
take to optimize performance over TCP and to protect themselves from | take to optimize performance over TCP and to protect themselves from | |||
TCP-based resource exhaustion and attacks. | TCP-based resource exhaustion and attacks. | |||
4.1. Connection Establishment and Admission | 4.1. Connection Establishment and Admission | |||
Resolvers and other DNS clients should be aware that some servers | Resolvers and other DNS clients should be aware that some servers | |||
might not be reachable over TCP. For this reason, clients MAY track | might not be reachable over TCP. For this reason, clients MAY track | |||
and limit the number of TCP connections and connection attempts to a | and limit the number of TCP connections and connection attempts to a | |||
single server. Reachability problems can be caused by network | single server. Reachability problems can be caused by network | |||
elements close to the server, close to the client, or anywhere along | elements close to the server, close to the client, or anywhere along | |||
the path between them. Mobile clients that cache connection failures | the path between them. Mobile clients that cache connection failures | |||
MAY do so on a per-network basis, or MAY clear such a cache upon | MAY do so on a per-network basis or MAY clear such a cache upon | |||
change of network. | change of network. | |||
Additionally, DNS clients MAY enforce a short timeout on | Additionally, DNS clients MAY enforce a short timeout on | |||
unestablished connections, rather than rely on the host operating | unestablished connections rather than rely on the host operating | |||
system's TCP connection timeout, which is often around 60-120 seconds | system's TCP connection timeout, which is often around 60-120 seconds | |||
(i.e., due to an initial retransmission timeout of 1 second, the | (i.e., due to an initial retransmission timeout of 1 second, the | |||
exponential back off rules of [RFC6298], and a limit of six retries | exponential back-off rules of [RFC6298], and a limit of six retries | |||
as is the default in Linux). | as is the default in Linux). | |||
The SYN flooding attack is a denial-of-service method affecting hosts | The SYN flooding attack is a denial-of-service method affecting hosts | |||
that run TCP server processes [RFC4987]. This attack can be very | that run TCP server processes [RFC4987]. This attack can be very | |||
effective if not mitigated. One of the most effective mitigation | effective if not mitigated. One of the most effective mitigation | |||
techniques is SYN cookies, described in Section 3.6 of [RFC4987], | techniques is SYN cookies, described in Section 3.6 of [RFC4987], | |||
which allows the server to avoid allocating any state until the | which allows the server to avoid allocating any state until the | |||
successful completion of the three-way handshake. | successful completion of the three-way handshake. | |||
Services not intended for use by the public Internet, such as most | Services not intended for use by the public Internet, such as most | |||
recursive name servers, SHOULD be protected with access controls. | recursive name servers, SHOULD be protected with access controls. | |||
Ideally these controls are placed in the network, well before any | Ideally, these controls are placed in the network, well before any | |||
unwanted TCP packets can reach the DNS server host or application. | unwanted TCP packets can reach the DNS server host or application. | |||
If this is not possible, the controls can be placed in the | If this is not possible, the controls can be placed in the | |||
application itself. In some situations (e.g. attacks) it may be | application itself. In some situations (e.g., attacks), it may be | |||
necessary to deploy access controls for DNS services that should | necessary to deploy access controls for DNS services that should | |||
otherwise be globally reachable. See also [RFC5358]. | otherwise be globally reachable. See also [RFC5358]. | |||
The FreeBSD and NetBSD operating systems have an "accept filter" | The FreeBSD and NetBSD operating systems have an "accept filter" | |||
feature ([accept_filter]) that postpones delivery of TCP connections | feature ([accept_filter]) that postpones delivery of TCP connections | |||
to applications until a complete, valid request has been received. | to applications until a complete, valid request has been received. | |||
The dns_accf(9) filter ensures that a valid DNS message is received. | The dns_accf(9) filter ensures that a valid DNS message is received. | |||
If not, the bogus connection never reaches the application. The | If not, the bogus connection never reaches the application. The | |||
Linux TCP_DEFER_ACCEPT feature, while more limited in scope, can | Linux TCP_DEFER_ACCEPT feature, while more limited in scope, can | |||
provide some of the same benefits as the BSD accept filter feature. | provide some of the same benefits as the BSD accept filter feature. | |||
These features are implemented as low-level socket options, and are | These features are implemented as low-level socket options and are | |||
not activated automatically. If applications wish to use these | not activated automatically. If applications wish to use these | |||
features, they need to make specific calls to set the right options, | features, they need to make specific calls to set the right options, | |||
and administrators may also need to configure the applications to | and administrators may also need to configure the applications to | |||
appropriately use the features. | appropriately use the features. | |||
Per [RFC7766], applications and administrators are advised to | Per [RFC7766], applications and administrators are advised to | |||
remember that TCP MAY be used before sending any UDP queries. | remember that TCP MAY be used before sending any UDP queries. | |||
Networks and applications MUST NOT be configured to refuse TCP | Networks and applications MUST NOT be configured to refuse TCP | |||
queries that were not preceded by a UDP query. | queries that were not preceded by a UDP query. | |||
TCP Fast Open [RFC7413] (TFO) allows TCP clients to shorten the | TCP Fast Open (TFO) [RFC7413] allows TCP clients to shorten the | |||
handshake for subsequent connections to the same server. TFO saves | handshake for subsequent connections to the same server. TFO saves | |||
one round-trip time in the connection setup. DNS servers SHOULD | one round-trip time in the connection setup. DNS servers SHOULD | |||
enable TFO when possible. Furthermore, DNS servers clustered behind | enable TFO when possible. Furthermore, DNS servers clustered behind | |||
a single service address (e.g., anycast or load-balancing), SHOULD | a single service address (e.g., anycast or load balancing) SHOULD | |||
either use the same TFO server key on all instances, or disable TFO | either use the same TFO server key on all instances or disable TFO | |||
for all members of the cluster. | for all members of the cluster. | |||
DNS clients MAY also enable TFO. At the time of this writing, on | DNS clients MAY also enable TFO. At the time of this writing, it is | |||
some operating systems it is not implemented, or is disabled by | not implemented or is disabled by default on some operating systems. | |||
default. [WIKIPEDIA_TFO] describes applications and operating | [WIKIPEDIA_TFO] describes applications and operating systems that | |||
systems that support TFO. | support TFO. | |||
4.2. Connection Management | 4.2. Connection Management | |||
Since host memory for TCP state is a finite resource, DNS clients and | Since host memory for TCP state is a finite resource, DNS clients and | |||
servers SHOULD actively manage their connections. Applications that | servers SHOULD actively manage their connections. Applications that | |||
do not actively manage their connections can encounter resource | do not actively manage their connections can encounter resource | |||
exhaustion leading to denial of service. For DNS, as in other | exhaustion leading to denial of service. For DNS, as in other | |||
protocols, there is a tradeoff between keeping connections open for | protocols, there is a trade-off between keeping connections open for | |||
potential future use and the need to free up resources for new | potential future use and the need to free up resources for new | |||
connections that will arrive. | connections that will arrive. | |||
Operators of DNS server software SHOULD be aware that operating | Operators of DNS server software SHOULD be aware that operating | |||
system and application vendors MAY impose a limit on the total number | system and application vendors MAY impose a limit on the total number | |||
of established connections. These limits may be designed to protect | of established connections. These limits may be designed to protect | |||
against DDoS attacks or performance degradation. Operators SHOULD | against DDoS attacks or performance degradation. Operators SHOULD | |||
understand how to increase these limits if necessary, and the | understand how to increase these limits if necessary and the | |||
consequences of doing so. Limits imposed by the application SHOULD | consequences of doing so. Limits imposed by the application SHOULD | |||
be lower than limits imposed by the operating system, so that the | be lower than limits imposed by the operating system so that the | |||
application can apply its own policy to connection management, such | application can apply its own policy to connection management, such | |||
as closing the oldest idle connections first. | as closing the oldest idle connections first. | |||
DNS server software MAY provide a configurable limit on the number of | DNS server software MAY provide a configurable limit on the number of | |||
established connections per source IP address or subnet. This can be | established connections per source IP address or subnet. This can be | |||
used to ensure that a single or small set of users cannot consume all | used to ensure that a single or small set of users cannot consume all | |||
TCP resources and deny service to other users. Note, however, that | TCP resources and deny service to other users. Note, however, that | |||
if this limit is enabled, it possibly limits client performance while | if this limit is enabled, it possibly limits client performance while | |||
leaving some TCP resources unutilized. Operators SHOULD be aware of | leaving some TCP resources unutilized. Operators SHOULD be aware of | |||
these tradeoffs and ensure this limit, if configured, is set | these trade-offs and ensure this limit, if configured, is set | |||
appropriately based on the number and diversity of their users, and | appropriately based on the number and diversity of their users and | |||
whether users connect from unique IP addresses or through a shared | whether users connect from unique IP addresses or through a shared | |||
Network Address Translator [RFC3022]. | Network Address Translator (NAT) [RFC3022]. | |||
DNS server software SHOULD provide a configurable timeout for idle | DNS server software SHOULD provide a configurable timeout for idle | |||
TCP connections. This can be used to free up resources for new | TCP connections. This can be used to free up resources for new | |||
connections and to ensure that idle connections are eventually | connections and to ensure that idle connections are eventually | |||
closed. At the same time, it possibly limits client performance | closed. At the same time, it possibly limits client performance | |||
while leaving some TCP resources unutilized. For very busy name | while leaving some TCP resources unutilized. For very busy name | |||
servers this might be set to a low value, such as a few seconds. For | servers, this might be set to a low value, such as a few seconds. | |||
less busy servers it might be set to a higher value, such as tens of | For less busy servers, it might be set to a higher value, such as | |||
seconds. DNS clients and servers SHOULD signal their timeout values | tens of seconds. DNS clients and servers SHOULD signal their timeout | |||
using the edns-tcp-keepalive option [RFC7828]. | values using the edns-tcp-keepalive option [RFC7828]. | |||
DNS server software MAY provide a configurable limit on the number of | DNS server software MAY provide a configurable limit on the number of | |||
transactions per TCP connection. This can help protect against | transactions per TCP connection. This can help protect against | |||
unfair connection use (e.g., not releasing connection slots to other | unfair connection use (e.g., not releasing connection slots to other | |||
clients) and network evasion attacks. | clients) and network evasion attacks. | |||
Similarly, DNS server software MAY provide a configurable limit on | Similarly, DNS server software MAY provide a configurable limit on | |||
the total duration of a TCP connection. This can help protect | the total duration of a TCP connection. This can help protect | |||
against unfair connection use, slow read attacks, and network evasion | against unfair connection use, slow read attacks, and network evasion | |||
attacks. | attacks. | |||
skipping to change at page 13, line 30 ¶ | skipping to change at line 585 ¶ | |||
The TCP peer that initiates a connection close retains the socket in | The TCP peer that initiates a connection close retains the socket in | |||
the TIME_WAIT state for some amount of time, possibly a few minutes. | the TIME_WAIT state for some amount of time, possibly a few minutes. | |||
It is generally preferable for clients to initiate the close of a TCP | It is generally preferable for clients to initiate the close of a TCP | |||
connection so that busy servers do not accumulate many sockets in the | connection so that busy servers do not accumulate many sockets in the | |||
TIME_WAIT state, which can cause performance problems or even denial | TIME_WAIT state, which can cause performance problems or even denial | |||
of service. The edns-tcp-keepalive EDNS(0) option [RFC7828] can be | of service. The edns-tcp-keepalive EDNS(0) option [RFC7828] can be | |||
used to encourage clients to close connections. | used to encourage clients to close connections. | |||
On systems where large numbers of sockets in TIME_WAIT are observed | On systems where large numbers of sockets in TIME_WAIT are observed | |||
(either as client or server), and are affecting an application's | (as either a client or a server) and are affecting an application's | |||
performance, it may be tempting to tune local TCP parameters. For | performance, it may be tempting to tune local TCP parameters. For | |||
example, the Linux kernel has a "sysctl" parameter named | example, the Linux kernel has a "sysctl" parameter named | |||
net.ipv4.tcp_tw_reuse which allows connections in the TIME_WAIT state | net.ipv4.tcp_tw_reuse, which allows connections in the TIME_WAIT | |||
to be reused in specific circumstances. Note, however, this affects | state to be reused in specific circumstances. Note, however, that | |||
only outgoing (client) connections and has no impact on servers. In | this affects only outgoing (client) connections and has no impact on | |||
most cases it is NOT RECOMMENDED to change parameters related to the | servers. In most cases, it is NOT RECOMMENDED to change parameters | |||
TIME_WAIT state. It should only be done by those with detailed | related to the TIME_WAIT state. It should only be done by those with | |||
knowledge of both TCP and the affected application. | detailed knowledge of both TCP and the affected application. | |||
4.4. DNS-over-TLS | 4.4. DNS over TLS | |||
DNS messages may be sent over TLS to provide privacy between stubs | DNS messages may be sent over TLS to provide privacy between stubs | |||
and recursive resolvers. [RFC7858] is a Standards Track document | and recursive resolvers. [RFC7858] is a Standards Track document | |||
describing how this works. Although DNS-over-TLS utilizes TCP port | describing how this works. Although DNS over TLS utilizes TCP port | |||
853 instead of port 53, this document applies equally well to DNS- | 853 instead of port 53, this document applies equally well to DNS | |||
over-TLS. Note, however, DNS-over-TLS is only defined between stubs | over TLS. Note, however, that DNS over TLS is only defined between | |||
and recursives at the time of this writing. | stubs and recursives at the time of this writing. | |||
The use of TLS places even stronger operational burdens on DNS | The use of TLS places even stronger operational burdens on DNS | |||
clients and servers. Cryptographic functions for authentication and | clients and servers. Cryptographic functions for authentication and | |||
encryption require additional processing. Unoptimized connection | encryption require additional processing. Unoptimized connection | |||
setup with TLS 1.3 [RFC8446] takes one additional round-trip compared | setup with TLS 1.3 [RFC8446] takes one additional round trip compared | |||
to TCP. Connection setup times can be reduced with TCP Fast Open, | to TCP. Connection setup times can be reduced with TCP Fast Open, | |||
and TLS False Start [RFC7918] for TLS 1.2. TLS 1.3 session | and TLS False Start [RFC7918] for TLS 1.2. TLS 1.3 session | |||
resumption does not reduce round-trip latency because no application | resumption does not reduce round-trip latency because no application | |||
profile for use of TLS 0-RTT data with DNS has been published at the | profile for use of TLS 0-RTT data with DNS has been published at the | |||
time of this writing. However, TLS session resumption can reduce the | time of this writing. However, TLS session resumption can reduce the | |||
number of cryptographic operations, and in TLS 1.2, session | number of cryptographic operations, and in TLS 1.2, session | |||
resumption does reduce the number of additional round trips from two | resumption does reduce the number of additional round trips from two | |||
to one. | to one. | |||
4.5. Defaults and Recommended Limits | 4.5. Defaults and Recommended Limits | |||
A survey of features and defaults was conducted for popular open | A survey of features and defaults was conducted for popular open- | |||
source DNS server implementations at the time of writing. This | source DNS server implementations at the time of writing. This | |||
section documents those defaults and makes recommendations for | section documents those defaults and makes recommendations for | |||
configurable limits that can be used in the absence of any other | configurable limits that can be used in the absence of any other | |||
information. Any recommended values in this document are only | information. Any recommended values in this document are only | |||
intended as a starting point for administrators that are unsure what | intended as a starting point for administrators that are unsure of | |||
sorts of limits might be reasonable. Operators SHOULD use | what sorts of limits might be reasonable. Operators SHOULD use | |||
application-specific monitoring, system logs, and system monitoring | application-specific monitoring, system logs, and system monitoring | |||
tools to gauge whether their service is operating within or exceeding | tools to gauge whether their service is operating within or exceeding | |||
these limits, and adjust accordingly. | these limits and adjust accordingly. | |||
Most open source DNS server implementations provide a configurable | Most open-source DNS server implementations provide a configurable | |||
limit on the total number of established connections. Default values | limit on the total number of established connections. Default values | |||
range from 20 to 150. In most cases, where the majority of queries | range from 20 to 150. In most cases, where the majority of queries | |||
take place over UDP, 150 is a reasonable limit. For services or | take place over UDP, 150 is a reasonable limit. For services or | |||
environments where most queries take place over TCP or TLS, 5000 is a | environments where most queries take place over TCP or TLS, 5000 is a | |||
more appropriate limit. | more appropriate limit. | |||
Only some open source implementations provide a way to limit the | Only some open-source implementations provide a way to limit the | |||
number of connections per source IP address or subnet, but the | number of connections per source IP address or subnet, but the | |||
default is to have no limit. For environments or situations where it | default is to have no limit. For environments or situations where it | |||
may be necessary to enable this limit, 25 connections per source IP | may be necessary to enable this limit, 25 connections per source IP | |||
address is a reasonable starting point. The limit should be | address is a reasonable starting point. The limit should be | |||
increased when aggregated by subnet, or for services where most | increased when aggregated by subnet or for services where most | |||
queries take place over TCP or TLS. | queries take place over TCP or TLS. | |||
Most open source implementations provide a configurable idle timeout | Most open-source implementations provide a configurable idle timeout | |||
on connections. Default values range from 2 to 30 seconds. In most | on connections. Default values range from 2 to 30 seconds. In most | |||
cases, 10 seconds is a reasonable default for this limit. Longer | cases, 10 seconds is a reasonable default for this limit. Longer | |||
timeouts improve connection reuse, but busy servers may need to use a | timeouts improve connection reuse, but busy servers may need to use a | |||
lower limit. | lower limit. | |||
Only some open source implementations provide a way to limit the | Only some open-source implementations provide a way to limit the | |||
number of transactions per connection, but the default is to have no | number of transactions per connection, but the default is to have no | |||
limit. This document does not offer advice on particular values for | limit. This document does not offer advice on particular values for | |||
such a limit. | such a limit. | |||
Only some open source implementations provide a way to limit the | Only some open-source implementations provide a way to limit the | |||
duration of connection, but the default is to have no limit. This | duration of connection, but the default is to have no limit. This | |||
document does not offer advice on particular values for such a limit. | document does not offer advice on particular values for such a limit. | |||
5. DNS over TCP Filtering Risks | 5. DNS-over-TCP Filtering Risks | |||
Networks that filter DNS over TCP risk losing access to significant | Networks that filter DNS over TCP risk losing access to significant | |||
or important pieces of the DNS namespace. For a variety of reasons a | or important pieces of the DNS namespace. For a variety of reasons, | |||
DNS answer may require a DNS over TCP query. This may include large | a DNS answer may require a DNS-over-TCP query. This may include | |||
message sizes, lack of EDNS(0) support, DDoS mitigation techniques | large message sizes, lack of EDNS(0) support, or DDoS mitigation | |||
(including [RRL]), or perhaps some future capability that is as yet | techniques (including Response Rate Limiting [RRL]); additionally, | |||
unforeseen will also demand TCP transport. | perhaps some future capability that is as yet unforeseen will also | |||
demand TCP transport. | ||||
For example, [RFC7901] describes a latency-avoiding technique that | For example, [RFC7901] describes a latency-avoiding technique that | |||
sends extra data in DNS responses. This makes responses larger and | sends extra data in DNS responses. This makes responses larger and | |||
potentially increases the effectiveness of DDoS reflection attacks. | potentially increases the effectiveness of DDoS reflection attacks. | |||
The specification mandates the use of TCP or DNS Cookies [RFC7873]. | The specification mandates the use of TCP or DNS cookies [RFC7873]. | |||
Even if any or all particular answers have consistently been returned | Even if any or all particular answers have consistently been returned | |||
successfully with UDP in the past, this continued behavior cannot be | successfully with UDP in the past, this continued behavior cannot be | |||
guaranteed when DNS messages are exchanged between autonomous | guaranteed when DNS messages are exchanged between autonomous | |||
systems. Therefore, filtering of DNS over TCP is considered harmful | systems. Therefore, filtering of DNS over TCP is considered harmful | |||
and contrary to the safe and successful operation of the Internet. | and contrary to the safe and successful operation of the Internet. | |||
This section enumerates some of the known risks at the time of this | This section enumerates some of the known risks at the time of this | |||
writing when networks filter DNS over TCP. | writing when networks filter DNS over TCP. | |||
5.1. Truncation, Retries, and Timeouts | 5.1. Truncation, Retries, and Timeouts | |||
Networks that filter DNS over TCP may inadvertently cause problems | Networks that filter DNS over TCP may inadvertently cause problems | |||
for third-party resolvers as experienced by [TOYAMA]. For example, a | for third-party resolvers as experienced by [TOYAMA]. For example, a | |||
resolver receives queries for a moderately popular domain. The | resolver receives queries for a moderately popular domain. The | |||
resolver forwards the queries to the domain's authoritative name | resolver forwards the queries to the domain's authoritative name | |||
servers, but those servers respond with the TC bit set. The resolver | servers, but those servers respond with the TC bit set. The resolver | |||
retries over TCP, but the authoritative server blocks DNS over TCP. | retries over TCP, but the authoritative server blocks DNS over TCP. | |||
The pending connections consume resources on the resolver until they | The pending connections consume resources on the resolver until they | |||
time out. If the number and frequency of these truncated-and-then- | time out. If the number and frequency of these truncated-and-then- | |||
blocked queries is sufficiently high, the resolver wastes valuable | blocked queries are sufficiently high, the resolver wastes valuable | |||
resources on queries that can never be answered. This condition is | resources on queries that can never be answered. This condition is | |||
generally not easily or completely mitigated by the affected DNS | generally not easily or completely mitigated by the affected DNS | |||
resolver operator. | resolver operator. | |||
5.2. DNS Root Zone KSK Rollover | 5.2. DNS Root Zone KSK Rollover | |||
The plans for deploying a new root zone DNSSEC KSK highlighted a | The plans for deploying a new root zone DNSSEC KSK highlighted a | |||
potential problem in retrieving the root zone key set [LEWIS]. | potential problem in retrieving the root zone key set [LEWIS]. | |||
During some phases of the KSK rollover process, root zone DNSKEY | During some phases of the KSK rollover process, root zone DNSKEY | |||
responses were larger than 1280 bytes, the IPv6 minimum MTU for links | responses were larger than 1280 bytes, the IPv6 minimum MTU for links | |||
carrying IPv6 traffic [RFC8200]. There was some concern | carrying IPv6 traffic [RFC8200]. There was some concern that any DNS | |||
[KSK_ROLLOVER_ARCHIVES] that any DNS server unable to receive large | server unable to receive large DNS messages over UDP, or any DNS | |||
DNS messages over UDP, or any DNS message over TCP, would experience | message over TCP, would experience disruption while performing DNSSEC | |||
disruption while performing DNSSEC validation. | validation [KSK_ROLLOVER_ARCHIVES]. | |||
However, during the year-long postponement of the KSK rollover there | However, during the year-long postponement of the KSK rollover, there | |||
were no reported problems that could be attributed to the 1414 octet | were no reported problems that could be attributed to the 1414 octet | |||
DNSKEY response when both the old and new keys were published in the | DNSKEY response when both the old and new keys were published in the | |||
zone. Additionally, there were no reported problems during the two- | zone. Additionally, there were no reported problems during the two- | |||
month period when the old key was published as revoked and the DNSKEY | month period when the old key was published as revoked and the DNSKEY | |||
response was 1425 octets in size [ROLL_YOUR_ROOT]. | response was 1425 octets in size [ROLL_YOUR_ROOT]. | |||
6. Logging and Monitoring | 6. Logging and Monitoring | |||
Developers of applications that log or monitor DNS SHOULD NOT ignore | Developers of applications that log or monitor DNS SHOULD NOT ignore | |||
TCP due to the perception that it is rarely used or is hard to | TCP due to the perception that it is rarely used or is hard to | |||
skipping to change at page 17, line 7 ¶ | skipping to change at line 747 ¶ | |||
Developers SHOULD also keep in mind connection reuse, query | Developers SHOULD also keep in mind connection reuse, query | |||
pipelining, and out-of-order responses when building and testing DNS | pipelining, and out-of-order responses when building and testing DNS | |||
monitoring applications. | monitoring applications. | |||
As an alternative to packet capture, some DNS server software | As an alternative to packet capture, some DNS server software | |||
supports dnstap [dnstap] as an integrated monitoring protocol | supports dnstap [dnstap] as an integrated monitoring protocol | |||
intended to facilitate wide-scale DNS monitoring. | intended to facilitate wide-scale DNS monitoring. | |||
7. IANA Considerations | 7. IANA Considerations | |||
This memo includes no request to IANA. | This document has no IANA actions. | |||
8. Security Considerations | 8. Security Considerations | |||
This document, providing operational requirements, is the companion | This document, providing operational requirements, is the companion | |||
to the implementation requirements of DNS over TCP, provided in | to the implementation requirements of DNS over TCP provided in | |||
[RFC7766]. The security considerations from [RFC7766] still apply. | [RFC7766]. The security considerations from [RFC7766] still apply. | |||
Ironically, returning truncated DNS over UDP answers in order to | Ironically, returning truncated DNS-over-UDP answers in order to | |||
induce a client query to switch to DNS over TCP has become a common | induce a client query to switch to DNS over TCP has become a common | |||
response to source address spoofed, DNS denial-of-service attacks | response to source-address-spoofed, DNS denial-of-service attacks | |||
[RRL]. Historically, operators have been wary of TCP-based attacks, | [RRL]. Historically, operators have been wary of TCP-based attacks, | |||
but in recent years, UDP-based flooding attacks have proven to be the | but in recent years, UDP-based flooding attacks have proven to be the | |||
most common protocol attack on the DNS. Nevertheless, a high rate of | most common protocol attack on the DNS. Nevertheless, a high rate of | |||
short-lived DNS transactions over TCP may pose challenges. In fact, | short-lived DNS transactions over TCP may pose challenges. In fact, | |||
[DAI21] details a class of IP fragmentation attacks on DNS | [DAI21] details a class of IP fragmentation attacks on DNS | |||
transactions if the IP Identifier field (16 bits in IPv4 and 32 bits | transactions if the IP Identifier field (16 bits in IPv4 and 32 bits | |||
in IPv6) can be predicted and a system is coerced to fragment rather | in IPv6) can be predicted and a system is coerced to fragment rather | |||
than retransmit messages. While many operators have provided DNS | than retransmit messages. While many operators have provided DNS- | |||
over TCP service for many years without duress, past experience is no | over-TCP service for many years without duress, past experience is no | |||
guarantee of future success. | guarantee of future success. | |||
DNS over TCP is similar to many other Internet TCP services. TCP | DNS over TCP is similar to many other Internet TCP services. TCP | |||
threats and many mitigation strategies have been well-documented in a | threats and many mitigation strategies have been well documented in a | |||
series of documents such as [RFC4953], [RFC4987], [RFC5927], and | series of documents such as [RFC4953], [RFC4987], [RFC5927], and | |||
[RFC5961]. | [RFC5961]. | |||
As mentioned in Section 6, applications that implement TCP stream | As mentioned in Section 6, applications that implement TCP stream | |||
reassembly need to limit the amount of memory allocated to connection | reassembly need to limit the amount of memory allocated to connection | |||
tracking. A failure to do so could lead to a total failure of the | tracking. A failure to do so could lead to a total failure of the | |||
logging or monitoring application. Imposition of resource limits | logging or monitoring application. Imposition of resource limits | |||
creates a tradeoff between allowing some stream reassembly to | creates a trade-off between allowing some stream reassembly to | |||
continue and allowing some evasion attacks to succeed. | continue and allowing some evasion attacks to succeed. | |||
This document recommends that DNS Servers enable TFO when possible. | This document recommends that DNS servers enable TFO when possible. | |||
[RFC7413] recommends that a pool of servers behind a load balancer | [RFC7413] recommends that a pool of servers behind a load balancer | |||
with shared server IP address also share the key used to generate | with a shared server IP address also share the key used to generate | |||
Fast Open cookies, to prevent inordinate fallback to the 3WHS. This | Fast Open cookies to prevent inordinate fallback to the three-way | |||
guidance remains accurate, but comes with a caveat: compromise of one | handshake (3WHS). This guidance remains accurate but comes with a | |||
server would reveal this group-shared key, and allow for attacks | caveat: compromise of one server would reveal this group-shared key | |||
involving the other servers in the pool by forging invalid Fast Open | and allow for attacks involving the other servers in the pool by | |||
cookies. | forging invalid Fast Open cookies. | |||
9. Privacy Considerations | 9. Privacy Considerations | |||
Since DNS over both UDP and TCP uses the same underlying message | Since DNS over both UDP and TCP uses the same underlying message | |||
format, the use of one transport instead of the other does not change | format, the use of one transport instead of the other does not change | |||
the privacy characteristics of the message content (i.e., the name | the privacy characteristics of the message content (i.e., the name | |||
being queried). A number of protocols have recently been developed | being queried). A number of protocols have recently been developed | |||
to provide DNS privacy, including DNS over TLS [RFC7858], DNS over | to provide DNS privacy, including DNS over TLS [RFC7858], DNS over | |||
DTLS [RFC8094], DNS over HTTPS [RFC8484], with even more on the way. | DTLS [RFC8094], DNS over HTTPS [RFC8484], with even more on the way. | |||
Because TCP is somewhat more complex than UDP, some characteristics | Because TCP is somewhat more complex than UDP, some characteristics | |||
of a TCP conversation may enable DNS client fingerprinting and | of a TCP conversation may enable DNS client fingerprinting and | |||
tracking that is not possible with UDP. For example, the choice of | tracking that is not possible with UDP. For example, the choice of | |||
initial sequence numbers, window size, and options might be able to | initial sequence numbers, window size, and options might be able to | |||
identify a particular TCP implementation, or even individual hosts | identify a particular TCP implementation or even individual hosts | |||
behind shared resources such as network address translators (NATs). | behind shared resources such as NATs. | |||
10. Acknowledgments | ||||
This document was initially motivated by feedback from students who | ||||
pointed out that they were hearing contradictory information about | ||||
filtering DNS over TCP messages. Thanks in particular to a teaching | ||||
colleague, JPL, who perhaps unknowingly encouraged the initial | ||||
research into the differences between what the community has | ||||
historically said and did. Thanks to all the NANOG 63 attendees who | ||||
provided feedback to an early talk on this subject. | ||||
The following individuals provided an array of feedback to help | ||||
improve this document: Joe Abley, Piet Barber, Sara Dickinson, Tony | ||||
Finch, Bob Harold, Paul Hoffman, Geoff Huston, Tatuya Jinmei, Puneet | ||||
Sood, and Richard Wilhelm. The authors are also indebted to the | ||||
contributions stemming from discussion in the tcpm working group | ||||
meeting at IETF 104. Any remaining errors or imperfections are the | ||||
sole responsibility of the document authors. | ||||
11. References | 10. References | |||
11.1. Normative References | 10.1. Normative References | |||
[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, <https://www.rfc-editor.org/info/rfc1035>. | November 1987, <https://www.rfc-editor.org/info/rfc1035>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at page 19, line 32 ¶ | skipping to change at line 846 ¶ | |||
<https://www.rfc-editor.org/info/rfc7828>. | <https://www.rfc-editor.org/info/rfc7828>. | |||
[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>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
11.2. Informative References | 10.2. Informative References | |||
[accept_filter] | [accept_filter] | |||
FreeBSD, "FreeBSD accept_filter(9)", 7 May 2018, | FreeBSD, "FreeBSD accept_filter(9)", May 2018, | |||
<https://www.freebsd.org/cgi/man.cgi?query=accept_filter>. | <https://www.freebsd.org/cgi/man.cgi?query=accept_filter>. | |||
[APNIC] Huston, G., "DNS XL", October 2020, | [APNIC] Huston, G., "DNS XL", October 2020, | |||
<https://labs.apnic.net/?p=1380>. | <https://labs.apnic.net/?p=1380>. | |||
[AVOID_FRAGS] | [AVOID_FRAGS] | |||
Fujiwara, K. and P. Vixie, "Fragmentation Avoidance in | Fujiwara, K. and P. Vixie, "Fragmentation Avoidance in | |||
DNS", Work in Progress, draft-ietf-dnsop-avoid- | DNS", Work in Progress, Internet-Draft, draft-ietf-dnsop- | |||
fragmentation-05, February 2021. | avoid-fragmentation-06, 23 December 2021, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-dnsop- | ||||
avoid-fragmentation-06>. | ||||
[BIND] Internet Systems Consortium, "BIND 9 - ISC", April 2021, | [BIND] Internet Systems Consortium, "BIND 9", | |||
<https://www.isc.org/bind/>. | <https://www.isc.org/bind/>. | |||
[CASTRO2010] | [CASTRO2010] | |||
Castro, S., Zhang, M., John, W., Wessels, D., and k.c. | Castro, S., Zhang, M., John, W., Wessels, D., and K. | |||
claffy, "Understanding and preparing for DNS evolution", | claffy, "Understanding and Preparing for DNS Evolution", | |||
2010. | DOI 10.1007/978-3-642-12365-8_1, April 2010, | |||
<https://doi.org/10.1007/978-3-642-12365-8_1>. | ||||
[CHES94] Cheswick, W.R. and S.M. Bellovin, "Firewalls and Internet | [CHES94] Cheswick, W. and S. Bellovin, "Firewalls and Internet | |||
Security: Repelling the Wily Hacker", 1994. | Security: Repelling the Wily Hacker", First Edition, 1994. | |||
[CLOUDFLARE] | [CLOUDFLARE] | |||
Grant, D., "Economical With The Truth: Making DNSSEC | Grant, D., "Economical With The Truth: Making DNSSEC | |||
Answers Cheap", 24 June 2016, | Answers Cheap", June 2016, | |||
<https://blog.cloudflare.com/black-lies/>. | <https://blog.cloudflare.com/black-lies/>. | |||
[DAI21] Tianxiang, T., Shulman, H., and M. Waidner, "DNS-over-TCP | [DAI21] Dai, T., Shulman, H., and M. Waidner, "DNS-over-TCP | |||
Considered Vulnerable", 2021. | Considered Vulnerable", DOI 10.1145/3472305.3472884, July | |||
2021, <https://doi.org/10.1145/3472305.3472884>. | ||||
[DESIGNTEAM] | [DESIGNTEAM] | |||
Design Team Report, "Root Zone KSK Rollover Plan", 18 | ICANN, "Root Zone KSK Rollover Plan", March 2016, | |||
December 2015, <https://www.iana.org/reports/2016/root- | <https://www.iana.org/reports/2016/root-ksk-rollover- | |||
ksk-rollover-design-20160307.pdf>. | design-20160307.pdf>. | |||
[DJBDNS] D.J. Bernstein, "When are TCP queries sent?", 2002, | [DJBDNS] Bernstein, D., "When are TCP queries sent?", November | |||
<https://cr.yp.to/djbdns/tcp.html#why>. | 2002, <https://cr.yp.to/djbdns/tcp.html#why>. | |||
[dnscap] DNS-OARC, "DNSCAP", 7 May 2018, | [dnscap] DNS-OARC, "DNSCAP", May 2018, | |||
<https://www.dns-oarc.net/tools/dnscap>. | <https://www.dns-oarc.net/tools/dnscap>. | |||
[dnstap] Edmonds, R. and P. Vixie, "dnstap", 7 May 2018, | [dnstap] "dnstap", <https://dnstap.info>. | |||
<https://dnstap.info>. | ||||
[ECDSA] Rijswijk-Deij, R., Sperotto, A., and A. Pras, "Making the | [ECDSA] van Rijswijk-Deij, R., Sperotto, A., and A. Pras, "Making | |||
Case for Elliptic Curves in DNSSEC", September 2015, | the Case for Elliptic Curves in DNSSEC", | |||
DOI 10.1145/2831347.2831350, October 2015, | ||||
<https://dl.acm.org/doi/10.1145/2831347.2831350>. | <https://dl.acm.org/doi/10.1145/2831347.2831350>. | |||
[FLAGDAY2020] | [FLAGDAY2020] | |||
Various DNS software and service providers, "DNS Flag Day | DNS Software and Service Providers, "DNS Flag Day 2020", | |||
2020", October 2020, <https://dnsflagday.net/2020/>. | October 2020, <https://dnsflagday.net/2020/>. | |||
[FRAG_POISON] | [FRAG_POISON] | |||
Herzberg, A. and H. Shulman, "Fragmentation Considered | Herzberg, A. and H. Shulman, "Fragmentation Considered | |||
Poisonous", May 2012, | Poisonous", May 2012, | |||
<https://u.cs.biu.ac.il/~herzbea/security/13-03-frag.pdf>. | <https://u.cs.biu.ac.il/~herzbea/security/13-03-frag.pdf>. | |||
[HUSTON] Huston, G., "Dealing with IPv6 fragmentation in the DNS", | [HUSTON] Huston, G., "Dealing with IPv6 fragmentation in the DNS", | |||
22 August 2017, <https://blog.apnic.net/2017/08/22/ | August 2017, <https://blog.apnic.net/2017/08/22/dealing- | |||
dealing-ipv6-fragmentation-dns/>. | ipv6-fragmentation-dns/>. | |||
[KSK_ROLLOVER_ARCHIVES] | [KSK_ROLLOVER_ARCHIVES] | |||
Internet Coporation for Assigned Names and Numbers, "KSK | ICANN, "KSK Rollover List Archives", January 2019, | |||
Rollover List Archives", January 2019, | ||||
<https://mm.icann.org/pipermail/ksk-rollover/2019-January/ | <https://mm.icann.org/pipermail/ksk-rollover/2019-January/ | |||
date.html>. | date.html>. | |||
[LEWIS] Lewis, E., "2017 DNSSEC KSK Rollover", RIPE 74 Budapest, | [LEWIS] Lewis, E., "2017 DNSSEC KSK Rollover", RIPE 74, May 2017, | |||
Hungary, 8 May 2017, <https://ripe74.ripe.net/ | <https://ripe74.ripe.net/presentations/25-RIPE74-lewis- | |||
presentations/25-RIPE74-lewis-submission.pdf>. | submission.pdf>. | |||
[libpcap] Tcpdump/Libpcap, "Tcpdump and Libpcap", 7 May 2018, | [libpcap] The Tcpdump Group, "Tcpdump and Libpcap", | |||
<https://www.tcpdump.org>. | <https://www.tcpdump.org>. | |||
[NETALYZR] Kreibich, C., Weaver, N., Nechaev, B., and V. Paxson, | [NETALYZR] Kreibich, C., Weaver, N., Nechaev, B., and V. Paxson, | |||
"Netalyzr: Illuminating The Edge Network", 2010. | "Netalyzr: Illuminating The Edge Network", | |||
DOI 10.1145/1879141.1879173, November 2010, | ||||
<https://doi.org/10.1145/1879141.1879173>. | ||||
[phrack] horizon, "Defeating Sniffers and Intrusion Detection | [phrack] horizon, "Defeating Sniffers and Intrusion Detection | |||
Systems", December 1998, | Systems", Phrack Magazine, December 1998, | |||
<http://phrack.org/issues/54/10.html>. | <http://phrack.org/issues/54/10.html>. | |||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
DOI 10.17487/RFC0768, August 1980, | DOI 10.17487/RFC0768, August 1980, | |||
<https://www.rfc-editor.org/info/rfc768>. | <https://www.rfc-editor.org/info/rfc768>. | |||
[RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | [RFC0793] Postel, J., "Transmission Control Protocol", STD 7, | |||
RFC 793, DOI 10.17487/RFC0793, September 1981, | RFC 793, DOI 10.17487/RFC0793, September 1981, | |||
<https://www.rfc-editor.org/info/rfc793>. | <https://www.rfc-editor.org/info/rfc793>. | |||
skipping to change at page 26, line 23 ¶ | skipping to change at line 1172 ¶ | |||
October 2020, <https://www.rfc-editor.org/info/rfc8932>. | October 2020, <https://www.rfc-editor.org/info/rfc8932>. | |||
[RFC8945] Dupont, F., Morris, S., Vixie, P., Eastlake 3rd, D., | [RFC8945] Dupont, F., Morris, S., Vixie, P., Eastlake 3rd, D., | |||
Gudmundsson, O., and B. Wellington, "Secret Key | Gudmundsson, O., and B. Wellington, "Secret Key | |||
Transaction Authentication for DNS (TSIG)", STD 93, | Transaction Authentication for DNS (TSIG)", STD 93, | |||
RFC 8945, DOI 10.17487/RFC8945, November 2020, | RFC 8945, DOI 10.17487/RFC8945, November 2020, | |||
<https://www.rfc-editor.org/info/rfc8945>. | <https://www.rfc-editor.org/info/rfc8945>. | |||
[ROLL_YOUR_ROOT] | [ROLL_YOUR_ROOT] | |||
Müller, M., Thomas, M., Wessels, D., Hardaker, W., Chung, | Müller, M., Thomas, M., Wessels, D., Hardaker, W., Chung, | |||
T., Toorop, W., and R.v. Rijswijk-Deij, "Roll, Roll, Roll | T., Toorop, W., and R. van Rijswijk-Deij, "Roll, Roll, | |||
Your Root: A Comprehensive Analysis of the First Ever | Roll Your Root: A Comprehensive Analysis of the First Ever | |||
DNSSEC Root KSK Rollover", October 2019, | DNSSEC Root KSK Rollover", DOI 10.1145/3355369.3355570, | |||
October 2019, | ||||
<https://dl.acm.org/doi/10.1145/3355369.3355570>. | <https://dl.acm.org/doi/10.1145/3355369.3355570>. | |||
[RRL] Vixie, P. and V. Schryver, "DNS Response Rate Limiting | [RRL] Vixie, P. and V. Schryver, "DNS Response Rate Limiting | |||
(DNS RRL)", ISC-TN 2012-1 Draft1, April 2012. | (DNS RRL)", ISC-TN-2012-1-Draft1, April 2012. | |||
[TDNS] Zhu, L., Heidemann, J., Wessels, D., Mankin, A., and N. | [TDNS] Zhu, L., Heidemann, J., Wessels, D., Mankin, A., and N. | |||
Somaiya, "Connection-oriented DNS to Improve Privacy and | Somaiya, "Connection-Oriented DNS to Improve Privacy and | |||
Security", 2015. | Security", DOI 10.1109/SP.2015.18, May 2015, | |||
<https://doi.org/10.1109/SP.2015.18>. | ||||
[TOYAMA] Toyama, K., Ishibashi, K., Ishino, M., Yoshimura, C., and | [TOYAMA] Toyama, K., Ishibashi, K., Toyono, T., Ishino, M., | |||
K. Fujiwara, "DNS Anomalies and Their Impacts on DNS Cache | Yoshimura, C., and K. Fujiwara, "DNS Anomalies and Their | |||
Servers", NANOG 32 Reston, VA USA, 2004. | Impacts on DNS Cache Servers", NANOG 32, October 2004. | |||
[VERISIGN] Thomas, M. and D. Wessels, "An Analysis of TCP Traffic in | [VERISIGN] Thomas, M. and D. Wessels, "An Analysis of TCP Traffic in | |||
Root Server DITL Data", DNS-OARC 2014 Fall Workshop Los | Root Server DITL Data", DNS-OARC 2014 Fall Workshop, | |||
Angeles, 2014. | October 2014. | |||
[WIKIPEDIA_TFO] | [WIKIPEDIA_TFO] | |||
Wikipedia, "TCP Fast Open", 4 May 2018, | Wikipedia, "TCP Fast Open", February 2022, | |||
<https://en.wikipedia.org/wiki/TCP_Fast_Open>. | <https://en.wikipedia.org/w/ | |||
index.php?title=TCP_Fast_Open&oldid=1071397204>. | ||||
Appendix A. Standards Related to DNS Transport over TCP | Appendix A. Standards Related to DNS Transport over TCP | |||
This section enumerates all known IETF RFC documents that are | This section enumerates all known RFCs with a status of Internet | |||
currently of status Internet Standard, Draft Standard, Proposed | Standard, Draft Standard, Proposed Standard, Informational, Best | |||
Standard, Informational, Best Current Practice, or Experimental and | Current Practice, or Experimental that either implicitly or | |||
either implicitly or explicitly make assumptions or statements about | explicitly make assumptions or statements about the use of TCP as a | |||
the use of TCP as a transport for the DNS germane to this document. | transport for the DNS germane to this document. | |||
A.1. IETF RFC 1035 - DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION | A.1. IETF RFC 1035 - DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION | |||
The Internet Standard [RFC1035] is the base DNS specification that | The Internet Standard [RFC1035] is the base DNS specification that | |||
explicitly defines support for DNS over TCP. | explicitly defines support for DNS over TCP. | |||
A.2. IETF RFC 1536 - Common DNS Implementation Errors and Suggested | A.2. IETF RFC 1536 - Common DNS Implementation Errors and Suggested | |||
Fixes | Fixes | |||
This Informational document [RFC1536] states UDP is the "chosen | The Informational document [RFC1536] states that UDP is "the chosen | |||
protocol for communication though TCP is used for zone transfers." | protocol for communication though TCP is used for zone transfers." | |||
That statement should now be considered in its historical context and | That statement should now be considered in its historical context and | |||
is no longer a proper reflection of modern expectations. | is no longer a proper reflection of modern expectations. | |||
A.3. IETF RFC 1995 - Incremental Zone Transfer in DNS | A.3. IETF RFC 1995 - Incremental Zone Transfer in DNS | |||
This Proposed Standard [RFC1995] documents the use of TCP as the | The Proposed Standard [RFC1995] documents the use of TCP as the | |||
fallback transport when IXFR responses do not fit into a single UDP | fallback transport when Incremental Zone Transfer (IXFR) responses do | |||
response. As with AXFR, IXFR messages are typically delivered over | not fit into a single UDP response. As with Authoritative Transfer | |||
TCP by default in practice. | (AXFR), IXFR messages are typically delivered over TCP by default in | |||
practice. | ||||
A.4. IETF RFC 1996 - A Mechanism for Prompt Notification of Zone | A.4. IETF RFC 1996 - A Mechanism for Prompt Notification of Zone | |||
Changes (DNS NOTIFY) | Changes (DNS NOTIFY) | |||
This Proposed Standard [RFC1996] suggests a primary server may decide | The Proposed Standard [RFC1996] suggests that a primary server may | |||
to issue NOTIFY messages over TCP. In practice, NOTIFY messages are | decide to issue NOTIFY messages over TCP. In practice, NOTIFY | |||
generally sent over UDP, but this specification leaves open the | messages are generally sent over UDP, but this specification leaves | |||
possibility that the choice of transport protocol is up to the | open the possibility that the choice of transport protocol is up to | |||
primary server, and therefore a secondary server ought to be able to | the primary server; therefore, a secondary server ought to be able to | |||
operate over both UDP and TCP. | operate over both UDP and TCP. | |||
A.5. IETF RFC 2181 - Clarifications to the DNS Specification | A.5. IETF RFC 2181 - Clarifications to the DNS Specification | |||
This Proposed Standard [RFC2181] includes clarifying text on how a | The Proposed Standard [RFC2181] includes clarifying text on how a | |||
client should react to the TC bit set on responses. It is advised | client should react to the TC bit set on responses. It is advised | |||
that the response should be discarded and the query resent using TCP. | that the response be discarded and the query resent using TCP. | |||
A.6. IETF RFC 2694 - DNS extensions to Network Address Translators | A.6. IETF RFC 2694 - DNS extensions to Network Address Translators | |||
(DNS_ALG) | (DNS_ALG) | |||
This Informational document [RFC2694] enumerates considerations for | The Informational document [RFC2694] enumerates considerations for | |||
network address translation (NAT) devices to properly handle DNS | NAT devices to properly handle DNS traffic. This document is | |||
traffic. This document is noteworthy in its suggestion that | noteworthy in its suggestion that "[t]ypically, TCP is used for AXFR | |||
"[t]ypically, TCP is used for AXFR requests," as further evidence | requests," as further evidence that helps explain why DNS over TCP | |||
that helps explain why DNS over TCP may have often been treated very | may have often been treated very differently than DNS over UDP in | |||
differently than DNS over UDP in operational networks. | operational networks. | |||
A.7. IETF RFC 3225 - Indicating Resolver Support of DNSSEC | A.7. IETF RFC 3225 - Indicating Resolver Support of DNSSEC | |||
This Proposed Standard [RFC3225] makes statements indicating DNS over | The Proposed Standard [RFC3225] makes statements indicating that DNS | |||
TCP is "detrimental" as a result of increased traffic, latency, and | over TCP is "detrimental" as a result of increased traffic, latency, | |||
server load. This document is a companion to the next document in | and server load. This document is a companion to the next document | |||
the RFC series expressing the requirement for EDNS(0) support for | in the RFC Series expressing the requirement for EDNS(0) support for | |||
DNSSEC. | DNSSEC. | |||
A.8. IETF RFC 3226 - DNSSEC and IPv6 A6 aware server/resolver message | A.8. IETF RFC 3226 - DNSSEC and IPv6 A6 aware server/resolver message | |||
size requirements | size requirements | |||
Although updated by later DNSSEC RFCs, the Proposed Standard | Although updated by later DNSSEC RFCs, the Proposed Standard | |||
[RFC3226] strongly argues in favor of UDP messages instead of TCP, | [RFC3226] strongly argues in favor of UDP messages instead of TCP, | |||
largely for performance reasons. The document declares EDNS(0) a | largely for performance reasons. The document declares EDNS(0) a | |||
requirement for DNSSEC servers and advocates that packet | requirement for DNSSEC servers and advocates that packet | |||
fragmentation may be preferable to TCP in certain situations. | fragmentation may be preferable to TCP in certain situations. | |||
A.9. IETF RFC 4472 - Operational Considerations and Issues with IPv6 | A.9. IETF RFC 4472 - Operational Considerations and Issues with IPv6 | |||
DNS | DNS | |||
This Informational document [RFC4472] notes that IPv6 data may | The Informational document [RFC4472] notes that IPv6 data may | |||
increase DNS responses beyond what would fit in a UDP message. | increase DNS responses beyond what would fit in a UDP message. What | |||
Particularly noteworthy, perhaps less common today than when this | is particularly noteworthy, but perhaps less common today than when | |||
document was written, it refers to implementations that truncate data | this document was written, is that it refers to implementations that | |||
without setting the TC bit to encourage the client to resend the | truncate data without setting the TC bit to encourage the client to | |||
query using TCP. | resend the query using TCP. | |||
A.10. IETF RFC 5452 - Measures for Making DNS More Resilient against | A.10. IETF RFC 5452 - Measures for Making DNS More Resilient against | |||
Forged Answers | Forged Answers | |||
This Informational document [RFC5452] arose as public DNS systems | The Proposed Standard [RFC5452] arose as public DNS systems began to | |||
began to experience widespread abuse from spoofed queries, resulting | experience widespread abuse from spoofed queries, resulting in | |||
in amplification and reflection attacks against unwitting victims. | amplification and reflection attacks against unwitting victims. One | |||
One of the leading justifications for supporting DNS over TCP to | of the leading justifications for supporting DNS over TCP to thwart | |||
thwart these attacks is briefly described in this document's 9.3 | these attacks is briefly described in Section 9.3 of [RFC5452] | |||
Spoof Detection and Countermeasure section. | ("Spoof Detection and Countermeasure"). | |||
A.11. IETF RFC 5507 - Design Choices When Expanding the DNS | A.11. IETF RFC 5507 - Design Choices When Expanding the DNS | |||
This Informational document [RFC5507] was largely an attempt to | The Informational document [RFC5507] was largely an attempt to | |||
dissuade new DNS data types from overloading the TXT resource record | dissuade new DNS data types from overloading the TXT resource record | |||
type. In so doing it summarizes the conventional wisdom of DNS | type. In so doing, it summarizes the conventional wisdom of DNS | |||
design and implementation practices. The authors suggest TCP | design and implementation practices. The authors suggest TCP | |||
overhead and stateful properties pose challenges compared to UDP, and | overhead and stateful properties pose challenges compared to UDP and | |||
imply that UDP is generally preferred for performance and robustness. | imply that UDP is generally preferred for performance and robustness. | |||
A.12. IETF RFC 5625 - DNS Proxy Implementation Guidelines | A.12. IETF RFC 5625 - DNS Proxy Implementation Guidelines | |||
This Best Current Practice document [RFC5625] provides DNS proxy | The Best Current Practice document [RFC5625] provides DNS proxy | |||
implementation guidance including the mandate that a proxy "MUST | implementation guidance including the mandate that a proxy "MUST | |||
[...] be prepared to receive and forward queries over TCP" even | [...] be prepared to receive and forward queries over TCP" even | |||
though it suggests historically TCP transport has not been strictly | though it suggests that, historically, TCP transport has not been | |||
mandatory in stub resolvers or recursive servers. | strictly mandatory in stub resolvers or recursive servers. | |||
A.13. IETF RFC 5936 - DNS Zone Transfer Protocol (AXFR) | A.13. IETF RFC 5936 - DNS Zone Transfer Protocol (AXFR) | |||
This Proposed Standard [RFC5936] provides a detailed specification | The Proposed Standard [RFC5936] provides a detailed specification for | |||
for the zone transfer protocol, as originally outlined in the early | the zone transfer protocol, as originally outlined in the early DNS | |||
DNS standards. AXFR operation is limited to TCP and not specified | standards. AXFR operation is limited to TCP and not specified for | |||
for UDP. This document discusses TCP usage at length. | UDP. This document discusses TCP usage at length. | |||
A.14. IETF RFC 7534 - AS112 Nameserver Operations | A.14. IETF RFC 7534 - AS112 Nameserver Operations | |||
[RFC7534] is an Informational document enumerating the requirements | The Informational document [RFC7534] enumerates the requirements for | |||
for operation of AS112 project DNS servers. New AS112 nodes are | operation of AS112 project DNS servers. New AS112 nodes are tested | |||
tested for their ability to provide service on both UDP and TCP | for their ability to provide service on both UDP and TCP transports, | |||
transports, with the implication that TCP service is an expected part | with the implication that TCP service is an expected part of normal | |||
of normal operations. | operations. | |||
A.15. IETF RFC 6762 - Multicast DNS | A.15. IETF RFC 6762 - Multicast DNS | |||
In this Proposed Standard [RFC6762], the TC bit is deemed to have | In the Proposed Standard [RFC6762], the TC bit is deemed to have | |||
essentially the same meaning as described in the original DNS | essentially the same meaning as described in the original DNS | |||
specifications. That is, if a response with the TC bit set is | specifications. That is, if a response with the TC bit set is | |||
received, "[...] the querier SHOULD reissue its query using TCP in | received, "[...] the querier SHOULD reissue its query using TCP in | |||
order to receive the larger response." | order to receive the larger response." | |||
A.16. IETF RFC 6891 - Extension Mechanisms for DNS (EDNS(0)) | A.16. IETF RFC 6891 - Extension Mechanisms for DNS (EDNS(0)) | |||
This Internet Standard [RFC6891] helped slow the use of and need for | The Internet Standard [RFC6891] helped slow the use of and need for | |||
DNS over TCP messages. This document highlights concerns over server | DNS-over-TCP messages. This document highlights concerns over server | |||
load and scalability in widespread use of DNS over TCP. | load and scalability in widespread use of DNS over TCP. | |||
A.17. IETF RFC 6950 - Architectural Considerations on Application | A.17. IAB RFC 6950 - Architectural Considerations on Application | |||
Features in the DNS | Features in the DNS | |||
An Informational document [RFC6950] that draws attention to large | The Informational document [RFC6950] draws attention to large data in | |||
data in the DNS. TCP is referenced in the context as a common | the DNS. TCP is referenced in the context as a common fallback | |||
fallback mechanism and counter to some spoofing attacks. | mechanism and counter to some spoofing attacks. | |||
A.18. IETF RFC 7477 - Child-to-Parent Synchronization in DNS | A.18. IETF RFC 7477 - Child-to-Parent Synchronization in DNS | |||
This Proposed Standard [RFC7477] specifies a RRType and protocol to | The Proposed Standard [RFC7477] specifies an RRType and a protocol to | |||
signal and synchronize NS, A, and AAAA resource record changes from a | signal and synchronize NS, A, and AAAA resource record changes from a | |||
child to parent zone. Since this protocol may require multiple | child-to-parent zone. Since this protocol may require multiple | |||
requests and responses, it recommends utilizing DNS over TCP to | requests and responses, it recommends utilizing DNS over TCP to | |||
ensure the conversation takes place between a consistent pair of end | ensure the conversation takes place between a consistent pair of end | |||
nodes. | nodes. | |||
A.19. IETF RFC 7720 - DNS Root Name Service Protocol and Deployment | A.19. IETF RFC 7720 - DNS Root Name Service Protocol and Deployment | |||
Requirements | Requirements | |||
This Best Current Practice [RFC7720] declares root name service "MUST | The Best Current Practice document [RFC7720] declares that root name | |||
support UDP [RFC0768] and TCP [RFC0793] transport of DNS queries and | service "MUST support UDP [RFC0768] and TCP [RFC0793] transport of | |||
responses." | DNS queries and responses." | |||
A.20. IETF RFC 7766 - DNS Transport over TCP - Implementation | A.20. IETF RFC 7766 - DNS Transport over TCP - Implementation | |||
Requirements | Requirements | |||
This Proposed Standard [RFC7766] instructs DNS implementers to | The Proposed Standard [RFC7766] instructs DNS implementors to provide | |||
provide support for carrying DNS over TCP messages in their software, | support for carrying DNS-over-TCP messages in their software and | |||
and might be considered the direct ancestor of this operational | might be considered the direct ancestor of this operational | |||
requirements document. The implementation requirements document | requirements document. The implementation requirements document | |||
codifies mandatory support for DNS over TCP in compliant DNS | codifies mandatory support for DNS-over-TCP in compliant DNS software | |||
software, but makes no recommendations to operators, which we seek to | but makes no recommendations to operators, which we seek to address | |||
address here. | here. | |||
A.21. IETF RFC 7828 - The edns-tcp-keepalive EDNS(0) Option | A.21. IETF RFC 7828 - The edns-tcp-keepalive EDNS(0) Option | |||
This Proposed Standard [RFC7828] defines an EDNS(0) option to | The Proposed Standard [RFC7828] defines an EDNS(0) option to | |||
negotiate an idle timeout value for long-lived DNS over TCP | negotiate an idle timeout value for long-lived DNS-over-TCP | |||
connections. Consequently, this document is only applicable and | connections. Consequently, this document is only applicable and | |||
relevant to DNS over TCP sessions and between implementations that | relevant to DNS-over-TCP sessions and between implementations that | |||
support this option. | support this option. | |||
A.22. IETF RFC 7858 - Specification for DNS over Transport Layer | A.22. IETF RFC 7858 - Specification for DNS over Transport Layer | |||
Security (TLS) | Security (TLS) | |||
This Proposed Standard [RFC7858] defines a method for putting DNS | The Proposed Standard [RFC7858] defines a method for putting DNS | |||
messages into a TCP-based encrypted channel using TLS. This | messages into a TCP-based encrypted channel using TLS. This | |||
specification is noteworthy for explicitly targeting the stub-to- | specification is noteworthy for explicitly targeting the stub-to- | |||
recursive traffic, but does not preclude its application from | recursive traffic but does not preclude its application from | |||
recursive-to-authoritative traffic. | recursive-to-authoritative traffic. | |||
A.23. IETF RFC 7873 - Domain Name System (DNS) Cookies | A.23. IETF RFC 7873 - Domain Name System (DNS) Cookies | |||
This Proposed Standard [RFC7873] describes an EDNS(0) option to | The Proposed Standard [RFC7873] describes an EDNS(0) option to | |||
provide additional protection against query and answer forgery. This | provide additional protection against query and answer forgery. This | |||
specification mentions DNS over TCP as an alternative mechanism when | specification mentions DNS over TCP as an alternative mechanism when | |||
DNS Cookies are not available. The specification does make mention | DNS cookies are not available. The specification does make mention | |||
of DNS over TCP processing in two specific situations. In one, when | of DNS-over-TCP processing in two specific situations. In one, when | |||
a server receives only a client cookie in a request, the server | a server receives only a client cookie in a request, the server | |||
should consider whether the request arrived over TCP and if so, it | should consider whether the request arrived over TCP, and if so, it | |||
should consider accepting TCP as sufficient to authenticate the | should consider accepting TCP as sufficient to authenticate the | |||
request and respond accordingly. In another, when a client receives | request and respond accordingly. In another, when a client receives | |||
a BADCOOKIE reply using a fresh server cookie, the client should | a BADCOOKIE reply using a fresh server cookie, the client should | |||
retry using TCP as the transport. | retry using TCP as the transport. | |||
A.24. IETF RFC 7901 - CHAIN Query Requests in DNS | A.24. IETF RFC 7901 - CHAIN Query Requests in DNS | |||
This Experimental specification [RFC7901] describes an EDNS(0) option | The Experimental specification [RFC7901] describes an EDNS(0) option | |||
that can be used by a security-aware validating resolver to request | that can be used by a security-aware validating resolver to request | |||
and obtain a complete DNSSEC validation path for any single query. | and obtain a complete DNSSEC validation path for any single query. | |||
This document requires the use of DNS over TCP or a source IP address | This document requires the use of DNS over TCP or a transport | |||
verified transport mechanism such as EDNS-COOKIE [RFC7873]. | mechanism verified by a source IP address such as EDNS-COOKIE | |||
[RFC7873]. | ||||
A.25. IETF RFC 8027 - DNSSEC Roadblock Avoidance | A.25. IETF RFC 8027 - DNSSEC Roadblock Avoidance | |||
This Best Current Practice [RFC8027] details observed problems with | The Best Current Practice document [RFC8027] details observed | |||
DNSSEC deployment and mitigation techniques. Network traffic | problems with DNSSEC deployment and mitigation techniques. Network | |||
blocking and restrictions, including DNS over TCP messages, are | traffic blocking and restrictions, including DNS-over-TCP messages, | |||
highlighted as one reason for DNSSEC deployment issues. While this | are highlighted as one reason for DNSSEC deployment issues. While | |||
document suggests these sorts of problems are due to "non-compliant | this document suggests these sorts of problems are due to "non- | |||
infrastructure", the scope of the document is limited to detection | compliant infrastructure", the scope of the document is limited to | |||
and mitigation techniques to avoid so-called DNSSEC roadblocks. | detection and mitigation techniques to avoid so-called DNSSEC | |||
roadblocks. | ||||
A.26. IETF RFC 8094 - DNS over Datagram Transport Layer Security (DTLS) | A.26. IETF RFC 8094 - DNS over Datagram Transport Layer Security (DTLS) | |||
This Experimental specification [RFC8094] details a protocol that | The Experimental specification [RFC8094] details a protocol that uses | |||
uses a datagram transport (UDP), but stipulates that "DNS clients and | a datagram transport (UDP) but stipulates that "DNS clients and | |||
servers that implement DNS over DTLS MUST also implement DNS over TLS | servers that implement DNS over DTLS MUST also implement DNS over TLS | |||
in order to provide privacy for clients that desire Strict Privacy | in order to provide privacy for clients that desire Strict Privacy | |||
[...]." This requirement implies DNS over TCP must be supported in | [...]." This requirement implies DNS over TCP must be supported in | |||
case the message size is larger than the path MTU. | case the message size is larger than the path MTU. | |||
A.27. IETF RFC 8162 - Using Secure DNS to Associate Certificates with | A.27. IETF RFC 8162 - Using Secure DNS to Associate Certificates with | |||
Domain Names for S/MIME | Domain Names for S/MIME | |||
This Experimental specification [RFC8162] describes a technique to | The Experimental specification [RFC8162] describes a technique to | |||
authenticate user X.509 certificates in an S/MIME system via the DNS. | authenticate user X.509 certificates in an S/MIME system via the DNS. | |||
The document points out that the new experimental resource record | The document points out that the new experimental resource record | |||
types are expected to carry large payloads, resulting in the | types are expected to carry large payloads, resulting in the | |||
suggestion that "applications SHOULD use TCP -- not UDP -- to perform | suggestion that "applications SHOULD use TCP -- not UDP -- to perform | |||
queries for the SMIMEA resource record." | queries for the SMIMEA resource record." | |||
A.28. IETF RFC 8324 - DNS Privacy, Authorization, Special Uses, | A.28. IETF RFC 8324 - DNS Privacy, Authorization, Special Uses, | |||
Encoding, Characters, Matching, and Root Structure: Time for | Encoding, Characters, Matching, and Root Structure: Time for | |||
Another Look? | Another Look? | |||
An Informational document [RFC8324] that briefly discusses the common | The Informational document [RFC8324] briefly discusses the common | |||
role and challenges of DNS over TCP throughout the history of DNS. | role and challenges of DNS over TCP throughout the history of DNS. | |||
A.29. IETF RFC 8467 - Padding Policies for Extension Mechanisms for DNS | A.29. IETF RFC 8467 - Padding Policies for Extension Mechanisms for DNS | |||
(EDNS(0)) | (EDNS(0)) | |||
An Experimental document [RFC8467] reminds implementers to consider | The Experimental document [RFC8467] reminds implementors to consider | |||
the underlying transport protocol (e.g. TCP) when calculating the | the underlying transport protocol (e.g., TCP) when calculating the | |||
padding length when artificially increasing the DNS message size with | padding length when artificially increasing the DNS message size with | |||
an EDNS(0) padding option. | an EDNS(0) padding option. | |||
A.30. IETF RFC 8482 - Providing Minimal-Sized Responses to DNS Queries | A.30. IETF RFC 8482 - Providing Minimal-Sized Responses to DNS Queries | |||
That Have QTYPE=ANY | That Have QTYPE=ANY | |||
[RFC8482] is a Proposed Standard that describes alternative ways that | The Proposed Standard [RFC8482] describes alternative ways that DNS | |||
DNS servers can respond to queries of type ANY, which are sometimes | servers can respond to queries of type ANY, which are sometimes used | |||
used to provide amplification in DDoS attacks. The specification | to provide amplification in DDoS attacks. The specification notes | |||
notes that responders may behave differently, depending on the | that responders may behave differently, depending on the transport. | |||
transport. For example, minimal-sized responses may be used over UDP | For example, minimal-sized responses may be used over UDP transport, | |||
transport, while full responses may be given over TCP. | while full responses may be given over TCP. | |||
A.31. IETF RFC 8483 - Yeti DNS Testbed | A.31. IETF RFC 8483 - Yeti DNS Testbed | |||
This Informational document [RFC8483] describes a testbed environment | The Informational document [RFC8483] describes a testbed environment | |||
that highlights some DNS over TCP behaviors, including issues | that highlights some DNS-over-TCP behaviors, including issues | |||
involving packet fragmentation and operational requirements for TCP | involving packet fragmentation and operational requirements for TCP | |||
stream assembly in order to conduct DNS measurement and analysis. | stream assembly in order to conduct DNS measurement and analysis. | |||
A.32. IETF RFC 8484 - DNS Queries over HTTPS (DoH) | A.32. IETF RFC 8484 - DNS Queries over HTTPS (DoH) | |||
This Proposed Standard [RFC8484] defines a protocol for sending DNS | The Proposed Standard [RFC8484] defines a protocol for sending DNS | |||
queries and responses over HTTPS. This specification assumes TLS and | queries and responses over HTTPS. This specification assumes TLS and | |||
TCP for the underlying security and transport layers, respectively. | TCP for the underlying security and transport layers, respectively. | |||
Self-described as a technique that more closely resembles a tunneling | Self-described as a technique that more closely resembles a tunneling | |||
mechanism, DoH nevertheless likely implies DNS over TCP in some | mechanism, DoH nevertheless likely implies DNS over TCP in some | |||
sense, if not directly. | sense, if not directly. | |||
A.33. IETF RFC 8490 - DNS Stateful Operations | A.33. IETF RFC 8490 - DNS Stateful Operations | |||
This Proposed Standard [RFC8490] updates the base protocol | The Proposed Standard [RFC8490] updates the base protocol | |||
specification with a new OPCODE to help manage stateful operations in | specification with a new OPCODE to help manage stateful operations in | |||
persistent sessions, such as those that might be used by DNS over | persistent sessions, such as those that might be used by DNS over | |||
TCP. | TCP. | |||
A.34. IETF RFC 8501 - Reverse DNS in IPv6 for Internet Service | A.34. IETF RFC 8501 - Reverse DNS in IPv6 for Internet Service | |||
Providers | Providers | |||
This Informational document [RFC8501] identifies potential | The Informational document [RFC8501] identifies potential operational | |||
operational challenges with Dynamic DNS including denial-of-service | challenges with dynamic DNS, including denial-of-service threats. | |||
threats. The document suggests TCP may provide some advantages, but | The document suggests TCP may provide some advantages but that | |||
that updating hosts would need to be explicitly configured to use TCP | updating hosts would need to be explicitly configured to use TCP | |||
instead of UDP. | instead of UDP. | |||
A.35. IETF RFC 8806 - Running a Root Server Local to a Resolver | A.35. IETF RFC 8806 - Running a Root Server Local to a Resolver | |||
This Informational document [RFC8806] describes how to obtain and | The Informational document [RFC8806] describes how to obtain and | |||
operate a local copy of the root zone with examples showing how to | operate a local copy of the root zone with examples showing how to | |||
pull from authoritative sources using a DNS over TCP zone transfer. | pull from authoritative sources using a DNS-over-TCP zone transfer. | |||
A.36. IETF RFC 8906 - A Common Operational Problem in DNS Servers: | A.36. IETF RFC 8906 - A Common Operational Problem in DNS Servers: | |||
Failure to Communicate | Failure to Communicate | |||
This Best Current Practice document [RFC8906] discusses a number of | The Best Current Practice document [RFC8906] discusses a number of | |||
DNS operational failure scenarios and how to avoid them. This | DNS operational failure scenarios and how to avoid them. This | |||
includes discussions involving DNS over TCP queries, EDNS over TCP, | includes discussions involving DNS-over-TCP queries, EDNS over TCP, | |||
and a testing methodology that includes a section on verifying DNS | and a testing methodology that includes a section on verifying DNS- | |||
over TCP functionality. | over-TCP functionality. | |||
A.37. IETF RFC 8932 - Recommendations for DNS Privacy Service Operators | A.37. IETF RFC 8932 - Recommendations for DNS Privacy Service Operators | |||
This Best Current Practice document [RFC8932] presents privacy | The Best Current Practice document [RFC8932] presents privacy | |||
considerations to DNS privacy service operators. These mechanisms | considerations to DNS privacy service operators. These mechanisms | |||
sometimes include the use of TCP and are therefore susceptible to | sometimes include the use of TCP and are therefore susceptible to | |||
information leakage such as TCP-based fingerprinting. This document | information leakage such as TCP-based fingerprinting. This document | |||
also references a draft version of this document. | also references an earlier draft version of this document. | |||
A.38. IETF RFC 8945 - Secret Key Transaction Authentication for DNS | A.38. IETF RFC 8945 - Secret Key Transaction Authentication for DNS | |||
(TSIG) | (TSIG) | |||
This Internet Standard [RFC8945] recommends a client use TCP if | The Internet Standard [RFC8945] recommends that a client use TCP if | |||
truncated TSIG messages are received. | truncated TSIG messages are received. | |||
Acknowledgments | ||||
This document was initially motivated by feedback from students who | ||||
pointed out that they were hearing contradictory information about | ||||
filtering DNS-over-TCP messages. Thanks in particular to a teaching | ||||
colleague, JPL, who perhaps unknowingly encouraged the initial | ||||
research into the differences between what the community has | ||||
historically said and did. Thanks to all the NANOG 63 attendees who | ||||
provided feedback for an early talk on this subject. | ||||
The following individuals provided an array of feedback to help | ||||
improve this document: Joe Abley, Piet Barber, Sara Dickinson, Tony | ||||
Finch, Bob Harold, Paul Hoffman, Geoff Huston, Tatuya Jinmei, Puneet | ||||
Sood, and Richard Wilhelm. The authors are also indebted to the | ||||
contributions stemming from discussion in the TCPM Working Group | ||||
meeting at IETF 104. Any remaining errors or imperfections are the | ||||
sole responsibility of the document authors. | ||||
Authors' Addresses | Authors' Addresses | |||
John Kristoff | John Kristoff | |||
DataPlane.org | DataPlane.org | |||
Chicago, IL 60605 | Chicago, IL 60605 | |||
United States of America | United States of America | |||
Phone: +1 312 493 0305 | Phone: +1 312 493 0305 | |||
Email: jtk@dataplane.org | Email: jtk@dataplane.org | |||
URI: https://dataplane.org/jtk/ | URI: https://dataplane.org/jtk/ | |||
Duane Wessels | Duane Wessels | |||
Verisign | Verisign | |||
12061 Bluemont Way | 12061 Bluemont Way | |||
Reston, VA 20190 | Reston, VA 20190 | |||
United States of America | United States of America | |||
Phone: +1 703 948 3200 | Phone: +1 703 948 3200 | |||
Email: dwessels@verisign.com | Email: dwessels@verisign.com | |||
URI: https://verisign.com | URI: https://verisign.com | |||
End of changes. 198 change blocks. | ||||
472 lines changed or deleted | 487 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |