rfc9715v1.txt | rfc9715.txt | |||
---|---|---|---|---|
skipping to change at line 12 ¶ | skipping to change at line 12 ¶ | |||
Internet Engineering Task Force (IETF) K. Fujiwara | Internet Engineering Task Force (IETF) K. Fujiwara | |||
Request for Comments: 9715 JPRS | Request for Comments: 9715 JPRS | |||
Category: Informational P. Vixie | Category: Informational P. Vixie | |||
ISSN: 2070-1721 AWS Security | ISSN: 2070-1721 AWS Security | |||
January 2025 | January 2025 | |||
IP Fragmentation Avoidance in DNS over UDP | IP Fragmentation Avoidance in DNS over UDP | |||
Abstract | Abstract | |||
The widely deployed Extension Mechanisms for DNS (EDNS0) feature in | The widely deployed Extension Mechanisms for DNS (EDNS(0)) feature in | |||
the DNS enables a DNS receiver to indicate its received UDP message | the DNS enables a DNS receiver to indicate its received UDP message | |||
size capacity, which supports the sending of large UDP responses by a | size capacity, which supports the sending of large UDP responses by a | |||
DNS server. Large DNS/UDP messages are more likely to be fragmented, | DNS server. Large DNS/UDP messages are more likely to be fragmented, | |||
and IP fragmentation has exposed weaknesses in application protocols. | and IP fragmentation has exposed weaknesses in application protocols. | |||
It is possible to avoid IP fragmentation in DNS by limiting the | It is possible to avoid IP fragmentation in DNS by limiting the | |||
response size where possible and signaling the need to upgrade from | response size where possible and signaling the need to upgrade from | |||
UDP to TCP transport where necessary. This document describes | UDP to TCP transport where necessary. This document describes | |||
techniques to avoid IP fragmentation in DNS. | techniques to avoid IP fragmentation in DNS. | |||
Status of This Memo | Status of This Memo | |||
skipping to change at line 95 ¶ | skipping to change at line 95 ¶ | |||
1. Introduction | 1. Introduction | |||
This document was originally intended to be a Best Current Practice, | This document was originally intended to be a Best Current Practice, | |||
but due to operating system and socket option limitations, some of | but due to operating system and socket option limitations, some of | |||
the recommendations have not yet gained real-world experience; | the recommendations have not yet gained real-world experience; | |||
therefore, this document is Informational. It is expected that, as | therefore, this document is Informational. It is expected that, as | |||
operating systems and implementations evolve, we will gain more | operating systems and implementations evolve, we will gain more | |||
experience with the recommendations and will publish an updated | experience with the recommendations and will publish an updated | |||
document as a Best Current Practice in the future. | document as a Best Current Practice in the future. | |||
DNS has an EDNS0 mechanism [RFC6891]. The widely deployed EDNS0 | DNS has an EDNS(0) mechanism [RFC6891]. The widely deployed EDNS(0) | |||
feature in the DNS enables a DNS receiver to indicate its received | feature in the DNS enables a DNS receiver to indicate its received | |||
UDP message size capacity, which supports the sending of large UDP | UDP message size capacity, which supports the sending of large UDP | |||
responses by a DNS server. DNS over UDP invites IP fragmentation | responses by a DNS server. DNS over UDP invites IP fragmentation | |||
when a packet is larger than the Maximum Transmission Unit (MTU) of | when a packet is larger than the Maximum Transmission Unit (MTU) of | |||
some network in the packet's path. | some network in the packet's path. | |||
Fragmented DNS UDP responses have systemic weaknesses, which expose | Fragmented DNS UDP responses have systemic weaknesses, which expose | |||
the requestor to DNS cache poisoning from off-path attackers (see | the requestor to DNS cache poisoning from off-path attackers (see | |||
Section 7.3 for references and details). | Section 7.3 for references and details). | |||
[RFC8900] states that IP fragmentation introduces fragility to | [RFC8900] states that IP fragmentation introduces fragility to | |||
Internet communication. The transport of DNS messages over UDP | Internet communication. The transport of DNS messages over UDP | |||
should take account of the observations stated in that document. | should take account of the observations stated in that document. | |||
TCP avoids fragmentation by segmenting data into packets that are | TCP avoids fragmentation by segmenting data into packets that are | |||
smaller than or equal to the Maximum Segment Size (MSS). For each | smaller than or equal to the Maximum Segment Size (MSS). For each | |||
transmitted segment, the size of the IP and TCP headers is known, and | transmitted segment, the size of the IP and TCP headers is known, and | |||
the IP packet size can be chosen to keep it within the estimated MTU | the IP packet size can be chosen to keep it within the estimated MTU | |||
and the other end's MSS. This takes advantage of the elasticity of | and the MSS. This takes advantage of the elasticity of the TCP's | |||
TCP's packetizing process as to how much queued data will fit into | packetizing process, depending on how much queued data will fit into | |||
the next segment. In contrast, DNS over UDP has little datagram size | the next segment. In contrast, DNS over UDP has little datagram size | |||
elasticity and lacks insight into IP header and option size, so we | elasticity and lacks insight into IP header and option size, so we | |||
must make more conservative estimates about available UDP payload | must make more conservative estimates about available UDP payload | |||
space. | space. | |||
[RFC7766] states that all general-purpose DNS implementations MUST | [RFC7766] states that all general-purpose DNS implementations MUST | |||
support both UDP and TCP transport. | support both UDP and TCP transport. | |||
DNS transaction security [RFC8945] [RFC2931] does protect against the | DNS transaction security [RFC8945] [RFC2931] does protect against the | |||
security risks of fragmentation, and it protects delegation | security risks of fragmentation, and it protects delegation | |||
skipping to change at line 183 ¶ | skipping to change at line 183 ¶ | |||
3.1. Proposed Recommendations for UDP Responders | 3.1. Proposed Recommendations for UDP Responders | |||
R1. UDP responders should not use IPv6 fragmentation [RFC8200]. | R1. UDP responders should not use IPv6 fragmentation [RFC8200]. | |||
R2. UDP responders should configure their systems to prevent | R2. UDP responders should configure their systems to prevent | |||
fragmentation of UDP packets when sending replies, provided it | fragmentation of UDP packets when sending replies, provided it | |||
can be done safely. The mechanisms to achieve this vary | can be done safely. The mechanisms to achieve this vary | |||
across different operating systems. | across different operating systems. | |||
For BSD-like operating systems, the IP Don't Fragment flag | For BSD-like operating systems, the IP Don't Fragment (DF) | |||
(DF) bit [RFC0791] can be used to prevent fragmentation. In | flag bit [RFC0791] can be used to prevent fragmentation. In | |||
contrast, Linux systems do not expose a direct API for this | contrast, Linux systems do not expose a direct API for this | |||
purpose and require the use of Path MTU socket options | purpose and require the use of Path MTU socket options | |||
(IP_MTU_DISCOVER) to manage fragmentation settings. However, | (IP_MTU_DISCOVER) to manage fragmentation settings. However, | |||
it is important to note that enabling IPv4 Path MTU Discovery | it is important to note that enabling IPv4 Path MTU Discovery | |||
for UDP in current Linux versions is considered harmful and | for UDP in current Linux versions is considered harmful and | |||
dangerous. For more details, see Appendix C. | dangerous. For more details, see Appendix C. | |||
R3. UDP responders should compose response packets that fit in the | R3. UDP responders should compose response packets that fit in the | |||
minimum of the offered requestor's maximum UDP payload size | minimum of the offered requestor's maximum UDP payload size | |||
[RFC6891], the interface MTU, the network MTU value configured | [RFC6891], the interface MTU, the network MTU value configured | |||
skipping to change at line 214 ¶ | skipping to change at line 214 ¶ | |||
The cause and effect of the TC bit are unchanged [RFC1035]. | The cause and effect of the TC bit are unchanged [RFC1035]. | |||
3.2. Proposed Recommendations for UDP Requestors | 3.2. Proposed Recommendations for UDP Requestors | |||
R5. UDP requestors should limit the requestor's maximum UDP | R5. UDP requestors should limit the requestor's maximum UDP | |||
payload size to fit in the minimum of the interface MTU, the | payload size to fit in the minimum of the interface MTU, the | |||
network MTU value configured by the network operators, and the | network MTU value configured by the network operators, and the | |||
RECOMMENDED maximum DNS/UDP payload size 1400. A smaller | RECOMMENDED maximum DNS/UDP payload size 1400. A smaller | |||
limit may be allowed. For more details, see Appendix A. | limit may be allowed. For more details, see Appendix A. | |||
R6. UDP requestors should/may drop fragmented DNS/UDP responses | R6. UDP requestors should drop fragmented DNS/UDP responses | |||
without IP reassembly to avoid cache poisoning attacks (at the | without IP reassembly to avoid cache poisoning attacks (at the | |||
firewall function). | firewall function). | |||
R7. DNS responses may be dropped by IP fragmentation. It is | R7. DNS responses may be dropped by IP fragmentation. It is | |||
recommended that requestors eventually try alternative | recommended that requestors eventually try alternative | |||
transport protocols. | transport protocols. | |||
4. Proposed Recommendations for DNS Operators | 4. Proposed Recommendations for DNS Operators | |||
Large DNS responses are typically the result of zone configuration. | Large DNS responses are typically the result of zone configuration. | |||
skipping to change at line 251 ¶ | skipping to change at line 251 ¶ | |||
equivalent cryptographic strength using RSA. | equivalent cryptographic strength using RSA. | |||
It is difficult to determine a specific upper limit for R8, R9, and | It is difficult to determine a specific upper limit for R8, R9, and | |||
R11, but it is sufficient if all responses from the DNS servers are | R11, but it is sufficient if all responses from the DNS servers are | |||
below the size of R3 and R5. | below the size of R3 and R5. | |||
5. Protocol Compliance Considerations | 5. Protocol Compliance Considerations | |||
Some authoritative servers deviate from the DNS standard as follows: | Some authoritative servers deviate from the DNS standard as follows: | |||
* Some authoritative servers ignore the EDNS0 requestor's maximum | * Some authoritative servers ignore the EDNS(0) requestor's maximum | |||
UDP payload size and return large UDP responses [Fujiwara2018]. | UDP payload size and return large UDP responses [Fujiwara2018]. | |||
* Some authoritative servers do not support TCP transport. | * Some authoritative servers do not support TCP transport. | |||
Such non-compliant behavior cannot become implementation or | Such non-compliant behavior cannot become implementation or | |||
configuration constraints for the rest of the DNS. If failure is the | configuration constraints for the rest of the DNS. If failure is the | |||
result, then that failure must be localized to the non-compliant | result, then that failure must be localized to the non-compliant | |||
servers. | servers. | |||
6. IANA Considerations | 6. IANA Considerations | |||
This document has no IANA actions. | This document has no IANA actions. | |||
7. Security Considerations | 7. Security Considerations | |||
7.1. On-Path Fragmentation on IPv4 | 7.1. On-Path Fragmentation on IPv4 | |||
If the Don't Fragment (DF) bit is not set, on-path fragmentation may | If the Don't Fragment (DF) flag bit is not set, on-path fragmentation | |||
happen on IPv4, and it can lead to vulnerabilities as shown in | may happen on IPv4, and it can lead to vulnerabilities as shown in | |||
Section 7.3. To avoid this, recommendation R6 needs to be used to | Section 7.3. To avoid this, R6 needs to be used to discard the | |||
discard the fragmented responses and retry using TCP. | fragmented responses and retry using TCP. | |||
7.2. Small MTU Network | 7.2. Small MTU Network | |||
When avoiding fragmentation, a DNS/UDP requestor behind a small MTU | When avoiding fragmentation, a DNS/UDP requestor behind a small MTU | |||
network may experience UDP timeouts, which would reduce performance | network may experience UDP timeouts, which would reduce performance | |||
and may lead to TCP fallback. This would indicate prior reliance | and may lead to TCP fallback. This would indicate prior reliance | |||
upon IP fragmentation, which is considered to be harmful to both the | upon IP fragmentation, which is considered to be harmful to both the | |||
performance and stability of applications, endpoints, and gateways. | performance and stability of applications, endpoints, and gateways. | |||
Avoiding IP fragmentation will improve operating conditions overall, | Avoiding IP fragmentation will improve operating conditions overall, | |||
and the performance of DNS/TCP has increased and will continue to | and the performance of DNS/TCP has increased and will continue to | |||
skipping to change at line 300 ¶ | skipping to change at line 300 ¶ | |||
"Fragmentation Considered Poisonous" [Herzberg2013] notes effective | "Fragmentation Considered Poisonous" [Herzberg2013] notes effective | |||
off-path DNS cache poisoning attack vectors using IP fragmentation. | off-path DNS cache poisoning attack vectors using IP fragmentation. | |||
"IP fragmentation attack on DNS" [Hlavacek2013] and "Domain | "IP fragmentation attack on DNS" [Hlavacek2013] and "Domain | |||
Validation++ For MitM-Resilient PKI" [Brandt2018] note that off-path | Validation++ For MitM-Resilient PKI" [Brandt2018] note that off-path | |||
attackers can intervene in the Path MTU Discovery [RFC1191] to cause | attackers can intervene in the Path MTU Discovery [RFC1191] to cause | |||
authoritative servers to produce fragmented responses. [RFC7739] | authoritative servers to produce fragmented responses. [RFC7739] | |||
states the security implications of predictable fragment | states the security implications of predictable fragment | |||
identification values. | identification values. | |||
In Section 3.2 ("Message Size Guidelines") of "UDP Usage Guidelines" | Section 3.2 of [RFC8085] states that "an application SHOULD NOT send | |||
[RFC8085], we are told that an application SHOULD NOT send UDP | UDP datagrams that result in IP packets that exceed the Maximum | |||
datagrams that result in IP packets that exceed the MTU along the | Transmission Unit (MTU) along the path to the destination". | |||
path to the destination. | ||||
A DNS message receiver cannot trust fragmented UDP datagrams | A DNS message receiver cannot trust fragmented UDP datagrams | |||
primarily due to the small amount of entropy provided by UDP port | primarily due to the small amount of entropy provided by UDP port | |||
numbers and DNS message identifiers, each of which is only 16 bits in | numbers and DNS message identifiers, each of which is only 16 bits in | |||
size, and both are likely to be in the first fragment of a packet if | size, and both are likely to be in the first fragment of a packet if | |||
fragmentation occurs. By comparison, the TCP protocol stack controls | fragmentation occurs. By comparison, the TCP protocol stack controls | |||
packet size and avoids IP fragmentation under ICMP NEEDFRAG attacks. | packet size and avoids IP fragmentation under ICMP NEEDFRAG attacks. | |||
In TCP, fragmentation should be avoided for performance reasons, | In TCP, fragmentation should be avoided for performance reasons, | |||
whereas for UDP, fragmentation should be avoided for resiliency and | whereas for UDP, fragmentation should be avoided for resiliency and | |||
authenticity reasons. | authenticity reasons. | |||
skipping to change at line 337 ¶ | skipping to change at line 336 ¶ | |||
Because this document is published as Informational rather than a | Because this document is published as Informational rather than a | |||
Best Current Practice, this section presents steps that resolver | Best Current Practice, this section presents steps that resolver | |||
operators can take to avoid vulnerabilities related to IP | operators can take to avoid vulnerabilities related to IP | |||
fragmentation. | fragmentation. | |||
To avoid vulnerabilities related to IP fragmentation, implement R5 | To avoid vulnerabilities related to IP fragmentation, implement R5 | |||
and R6. | and R6. | |||
Specifically, configure the firewall functions protecting the full- | Specifically, configure the firewall functions protecting the full- | |||
service resolver to discard incoming DNS response packets with a non- | service resolver to discard incoming DNS response packets with a non- | |||
zero Fragment Offset (FO) or a More Fragments (MF) bit of 1 on IPv4, | zero Fragment Offset (FO) or a More Fragments (MF) flag bit of 1 on | |||
and discard packets with IPv6 Fragment Headers. (If the resolver's | IPv4, and discard packets with IPv6 Fragment Headers. (If the | |||
IP address is not dedicated to the DNS resolver and uses UDP | resolver's IP address is not dedicated to the DNS resolver and uses | |||
communication that relies on IP Fragmentation for purposes other than | UDP communication that relies on IP Fragmentation for purposes other | |||
DNS, discard only the first fragment that contains the UDP header | than DNS, discard only the first fragment that contains the UDP | |||
from port 53.) | header from port 53.) | |||
The most recent resolver software is believed to implement R7. | The most recent resolver software is believed to implement R7. | |||
Even if R7 is not implemented, it will only result in a name | Even if R7 is not implemented, it will only result in a name | |||
resolution error, preventing attacks from leading to malicious sites. | resolution error, preventing attacks from leading to malicious sites. | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
skipping to change at line 425 ¶ | skipping to change at line 424 ¶ | |||
<https://www.rfc-editor.org/info/rfc9499>. | <https://www.rfc-editor.org/info/rfc9499>. | |||
8.2. Informative References | 8.2. Informative References | |||
[Brandt2018] | [Brandt2018] | |||
Brandt, M., Dai, T., Klein, A., Shulman, H., and M. | Brandt, M., Dai, T., Klein, A., Shulman, H., and M. | |||
Waidner, "Domain Validation++ For MitM-Resilient PKI", | Waidner, "Domain Validation++ For MitM-Resilient PKI", | |||
Proceedings of the 2018 ACM SIGSAC Conference on Computer | Proceedings of the 2018 ACM SIGSAC Conference on Computer | |||
and Communications Security, pp. 2060-2076, | and Communications Security, pp. 2060-2076, | |||
DOI 10.1145/3243734.3243790, October 2018, | DOI 10.1145/3243734.3243790, October 2018, | |||
<https://doi.org/10.1145/3243734.3243790>. | <https://dl.acm.org/doi/10.1145/3243734.3243790>. | |||
[DNSFlagDay2020] | [DNSFlagDay2020] | |||
"DNS flag day 2020", <https://dnsflagday.net/2020/>. | "DNS flag day 2020", <https://dnsflagday.net/2020/>. | |||
[Fujiwara2018] | [Fujiwara2018] | |||
Fujiwara, K., "Measures against DNS cache poisoning | Fujiwara, K., "Measures against DNS cache poisoning | |||
attacks using IP fragmentation", OARC 30 Workshop, 2019. | attacks using IP fragmentation", OARC 30 Workshop, 2019, | |||
<https://indico.dns- | ||||
oarc.net/event/31/contributions/692/attachments/660/1115/ | ||||
fujiwara-5.pdf>. | ||||
[Herzberg2013] | [Herzberg2013] | |||
Herzberg, A. and H. Shulman, "Fragmentation Considered | Herzberg, A. and H. Shulman, "Fragmentation Considered | |||
Poisonous, or: One-domain-to-rule-them-all.org", IEEE | Poisonous, or: One-domain-to-rule-them-all.org", IEEE | |||
Conference on Communications and Network Security (CNS), | Conference on Communications and Network Security (CNS), | |||
DOI 10.1109/CNS.2013.6682711, 2013, | DOI 10.1109/CNS.2013.6682711, 2013, | |||
<https://doi.org/10.1109/CNS.2013.6682711>. | <https://ieeexplore.ieee.org/document/6682711>. | |||
[Hlavacek2013] | [Hlavacek2013] | |||
Hlavacek, T., "IP fragmentation attack on DNS", RIPE 67 | Hlavacek, T., "IP fragmentation attack on DNS", RIPE 67 | |||
Meeting, 2013, <https://ripe67.ripe.net/ | Meeting, 2013, <https://ripe67.ripe.net/ | |||
presentations/240-ipfragattack.pdf>. | presentations/240-ipfragattack.pdf>. | |||
[Huston2021] | [Huston2021] | |||
Huston, G. and J. Damas, "Measuring DNS Flag Day 2020", | Huston, G. and J. Damas, "Measuring DNS Flag Day 2020", | |||
OARC 34 Workshop, February 2021. | OARC 34 Workshop, February 2021, <https://indico.dns- | |||
oarc.net/event/37/contributions/806/ | ||||
attachments/782/1366/2021-02-04-dns-flag.pdf>. | ||||
[RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | |||
DOI 10.17487/RFC0791, September 1981, | DOI 10.17487/RFC0791, September 1981, | |||
<https://www.rfc-editor.org/info/rfc791>. | <https://www.rfc-editor.org/info/rfc791>. | |||
[RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | [RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS | |||
NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998, | |||
<https://www.rfc-editor.org/info/rfc2308>. | <https://www.rfc-editor.org/info/rfc2308>. | |||
[RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", | [RFC2671] Vixie, P., "Extension Mechanisms for DNS (EDNS0)", | |||
skipping to change at line 526 ¶ | skipping to change at line 530 ¶ | |||
MTU 1500 Ethernet is 1452 (1500 minus 40 (IPv6 header size) minus | MTU 1500 Ethernet is 1452 (1500 minus 40 (IPv6 header size) minus | |||
8 (UDP header size)). To allow for possible IP options and | 8 (UDP header size)). To allow for possible IP options and | |||
distant tunnel overhead, the recommendation of default maximum | distant tunnel overhead, the recommendation of default maximum | |||
DNS/UDP payload size is 1400. | DNS/UDP payload size is 1400. | |||
* [Huston2021] analyzes the result of [DNSFlagDay2020] and reports | * [Huston2021] analyzes the result of [DNSFlagDay2020] and reports | |||
that their measurements suggest that in the interior of the | that their measurements suggest that in the interior of the | |||
Internet between recursive resolvers and authoritative servers, | Internet between recursive resolvers and authoritative servers, | |||
the prevailing MTU is 1500 and there is no measurable signal of | the prevailing MTU is 1500 and there is no measurable signal of | |||
use of smaller MTUs in this part of the Internet. They propose | use of smaller MTUs in this part of the Internet. They propose | |||
that their measurements suggest setting the EDNS0 requestor's UDP | that their measurements suggest setting the EDNS(0) requestor's | |||
payload size to 1472 octets for IPv4 and 1452 octets for IPv6. | UDP payload size to 1472 octets for IPv4 and 1452 octets for IPv6. | |||
As a result of these discussions, this document recommends a value of | As a result of these discussions, this document recommends a value of | |||
1400, with smaller values also allowed. | 1400, with smaller values also allowed. | |||
Appendix B. Minimal Responses | Appendix B. Minimal Responses | |||
Some implementations have a "minimal responses" configuration | Some implementations have a "minimal responses" configuration | |||
setting/option that causes a DNS server to make response packets | setting/option that causes a DNS server to make response packets | |||
smaller, containing only mandatory and required data. | smaller, containing only mandatory and required data. | |||
skipping to change at line 555 ¶ | skipping to change at line 559 ¶ | |||
A, AAAA, and Service Binding (SVCB) records in the Additional section | A, AAAA, and Service Binding (SVCB) records in the Additional section | |||
defined in [RFC1035], [RFC2782], and [RFC9460]. | defined in [RFC1035], [RFC2782], and [RFC9460]. | |||
In addition, if the zone is DNSSEC signed and a query has the DNSSEC | In addition, if the zone is DNSSEC signed and a query has the DNSSEC | |||
OK bit, signatures are added in the answer section, or the | OK bit, signatures are added in the answer section, or the | |||
corresponding DS RRSet and signatures are added in the authority | corresponding DS RRSet and signatures are added in the authority | |||
section. Details are defined in [RFC4035] and [RFC5155]. | section. Details are defined in [RFC4035] and [RFC5155]. | |||
Appendix C. Known Implementations | Appendix C. Known Implementations | |||
This section records the status of known implementations of the best | This section records the status of known implementations of the | |||
practices defined by this specification at the time of publication | proposed recommendations described in Section 3. | |||
and any deviation from the specification. | ||||
Please note that the listing of any individual implementation here | Please note that the listing of any individual implementation here | |||
does not imply endorsement by the IETF. Furthermore, no effort has | does not imply endorsement by the IETF. Furthermore, no effort has | |||
been made to verify the information that was supplied by IETF | been made to verify the information that was supplied by IETF | |||
contributors and presented here. | contributors and presented here. | |||
C.1. BIND 9 | C.1. BIND 9 | |||
BIND 9 does not implement recommendations 1 and 2 in Section 3.1. | BIND 9 does not implement R1 and R2. | |||
BIND 9 on Linux sets IP_MTU_DISCOVER to IP_PMTUDISC_OMIT with a | BIND 9 on Linux sets IP_MTU_DISCOVER to IP_PMTUDISC_OMIT with a | |||
fallback to IP_PMTUDISC_DONT. | fallback to IP_PMTUDISC_DONT. | |||
BIND 9 on systems with IP_DONTFRAG (such as FreeBSD), IP_DONTFRAG is | When BIND 9 is on systems with IP_DONTFRAG (such as FreeBSD), | |||
disabled. | IP_DONTFRAG is disabled. | |||
Accepting Path MTU Discovery for UDP is considered harmful and | Accepting Path MTU Discovery for UDP is considered harmful and | |||
dangerous. BIND 9's settings avoid attacks to Path MTU Discovery. | dangerous. BIND 9's settings avoid attacks to Path MTU Discovery. | |||
For recommendation 3, BIND 9 will honor the requestor's size up to | For R3, BIND 9 will honor the requestor's size up to the configured | |||
the configured limit (max-udp-size). The UDP response packet is | limit (max-udp-size). The UDP response packet is bound to be between | |||
bound to be between 512 and 4096 bytes, with the default set to 1232. | 512 and 4096 bytes, with the default set to 1232. BIND 9 supports | |||
BIND 9 supports the requestor's size up to the configured limit (max- | the requestor's size up to the configured limit (max-udp-size). | |||
udp-size). | ||||
In the case of recommendation 4 and the send fails with EMSGSIZE, | In the case of R4 and the send fails with EMSGSIZE, BIND 9 sets the | |||
BIND 9 sets the TC bit and tries to send a minimal answer again. | TC bit and tries to send a minimal answer again. | |||
In the first recommendation of Section 3.2, BIND 9 uses the edns-buf- | For R5, BIND 9 uses the edns-buf-size option, with the default of | |||
size option, with the default of 1232. | 1232. | |||
BIND 9 does implement recommendation 2 (Section 3.2). | BIND 9 does implement R6. | |||
For recommendation 3, after two UDP timeouts, BIND 9 will fall back | For R7, after two UDP timeouts, BIND 9 will fall back to TCP. | |||
to TCP. | ||||
C.2. Knot DNS and Knot Resolver | C.2. Knot DNS and Knot Resolver | |||
Both Knot servers set IP_PMTUDISC_OMIT to avoid path MTU spoofing. | Both Knot servers set IP_PMTUDISC_OMIT to avoid path MTU spoofing. | |||
The UDP size limit is 1232 by default. | The UDP size limit is 1232 by default. | |||
Fragments are ignored if they arrive over an XDP interface. | Fragments are ignored if they arrive over a Linux XDP interface. | |||
TCP is attempted after repeated UDP timeouts. | TCP is attempted after repeated UDP timeouts. | |||
Minimal responses are returned and are currently not configurable. | Minimal responses are returned and are currently not configurable. | |||
Smaller signatures are used, with ecdsap256sha256 as the default. | Smaller signatures are used, with ecdsap256sha256 as the default. | |||
C.3. PowerDNS Authoritative Server, PowerDNS Recursor, and PowerDNS | C.3. PowerDNS Authoritative Server, PowerDNS Recursor, and PowerDNS | |||
dnsdist | dnsdist | |||
* IP_PMTUDISC_OMIT with a fallback to IP_PMTUDISC_DONT | * Use IP_PMTUDISC_OMIT with a fallback to IP_PMTUDISC_DONT. | |||
* default EDNS buffer size of 1232; no probing for smaller sizes | * The default EDNS buffer size of 1232; no probing for smaller | |||
sizes. | ||||
* no handling of EMSGSIZE | * There is no handling of EMSGSIZE. | |||
* Recursor: UDP timeouts do not cause a switch to TCP; "Spoofing | * Recursor: UDP timeouts do not cause a switch to TCP, but "spoofing | |||
nearmisses" do. | near misses" may. | |||
C.4. PowerDNS Authoritative Server | C.4. PowerDNS Authoritative Server | |||
* The default DNSSEC algorithm is 13. | * The default DNSSEC algorithm is 13. | |||
* Responses are minimal; this is not configurable. | * Responses are minimal; this is not configurable. | |||
C.5. Unbound | C.5. Unbound | |||
Unbound sets IP_MTU_DISCOVER to IP_PMTUDISC_OMIT with fallback to | Unbound sets IP_MTU_DISCOVER to IP_PMTUDISC_OMIT with fallback to | |||
IP_PMTUDISC_DONT. It also disables IP_DONTFRAG on systems that have | IP_PMTUDISC_DONT. It also disables IP_DONTFRAG on systems that have | |||
it, but not on Apple systems. On systems that support it, Unbound | it, but not on Apple systems. On systems that support it, Unbound | |||
sets IPV6_USE_MIN_MTU, with a fallback to IPV6_MTU at 1280, with a | sets IPV6_USE_MIN_MTU, with a fallback to IPV6_MTU at 1280, with a | |||
fallback to IPV6_USER_MTU. It also sets IPV6_MTU_DISCOVER to | fallback to IPV6_USER_MTU. It also sets IPV6_MTU_DISCOVER to | |||
IPV6_PMTUDISC_OMIT, with a fallback to IPV6_PMTUDISC_DONT. | IPV6_PMTUDISC_OMIT, with a fallback to IPV6_PMTUDISC_DONT. | |||
Unbound requests a UDP size of 1232 from peers, by default. The | Unbound requests a UDP size of 1232 from peers, by default. The | |||
requestor's size is limited to a max of 1232. | requestor's size is limited to a max of 1232. | |||
After some timeouts, Unbound retries with a smaller size, if that is | After some timeouts, Unbound retries with a smaller size, if | |||
smaller, at size 1232 for IPv6 and 1472 for IPv4. This does not do | applicable, or at size 1232 for IPv6 and 1472 for IPv4. This does | |||
anything since the flag day change to 1232. | not cause any negative effects due to the "flag day" [DNSFlagDay2020] | |||
change to 1232. | ||||
Unbound has minimal responses as an option, default on. | Unbound has the "minimal responses" configuration option; set default | |||
on. | ||||
Acknowledgments | Acknowledgments | |||
The authors would like to specifically thank Paul Wouters, Mukund | The authors would like to specifically thank Paul Wouters, Mukund | |||
Sivaraman, Tony Finch, Hugo Salgado, Peter van Dijk, Brian Dickson, | Sivaraman, Tony Finch, Hugo Salgado, Peter van Dijk, Brian Dickson, | |||
Puneet Sood, Jim Reid, Petr Spacek, Andrew McConachie, Joe Abley, | Puneet Sood, Jim Reid, Petr Spacek, Andrew McConachie, Joe Abley, | |||
Daisuke Higashi, Joe Touch, Wouter Wijngaards, Vladimir Cunat, Benno | Daisuke Higashi, Joe Touch, Wouter Wijngaards, Vladimir Cunat, Benno | |||
Overeinder, and Štěpán Němec for their extensive reviews and | Overeinder, and Štěpán Němec for their extensive reviews and | |||
comments. | comments. | |||
End of changes. 29 change blocks. | ||||
56 lines changed or deleted | 60 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |