rfc9462v2.txt | rfc9462.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) T. Pauly | Internet Engineering Task Force (IETF) T. Pauly | |||
Request for Comments: 9462 E. Kinnear | Request for Comments: 9462 E. Kinnear | |||
Category: Standards Track Apple Inc. | Category: Standards Track Apple Inc. | |||
ISSN: 2070-1721 C. A. Wood | ISSN: 2070-1721 C. A. Wood | |||
Cloudflare | Cloudflare | |||
P. McManus | P. McManus | |||
Fastly | Fastly | |||
T. Jensen | T. Jensen | |||
Microsoft | Microsoft | |||
September 2023 | November 2023 | |||
Discovery of Designated Resolvers | Discovery of Designated Resolvers | |||
Abstract | Abstract | |||
This document defines Discovery of Designated Resolvers (DDR), a set | This document defines Discovery of Designated Resolvers (DDR), a set | |||
of mechanisms for DNS clients to use DNS records to discover a | of mechanisms for DNS clients to use DNS records to discover a | |||
resolver's encrypted DNS configuration. An Encrypted DNS Resolver | resolver's encrypted DNS configuration. An Encrypted DNS Resolver | |||
discovered in this manner is referred to as a "Designated Resolver". | discovered in this manner is referred to as a "Designated Resolver". | |||
These mechanisms can be used to move from unencrypted DNS to | These mechanisms can be used to move from unencrypted DNS to | |||
skipping to change at line 164 ¶ | skipping to change at line 164 ¶ | |||
entity. | entity. | |||
When a client discovers Designated Resolvers, it learns information | When a client discovers Designated Resolvers, it learns information | |||
such as the supported protocols and ports. This information is | such as the supported protocols and ports. This information is | |||
provided in ServiceMode SVCB records for DNS servers, although | provided in ServiceMode SVCB records for DNS servers, although | |||
AliasMode SVCB records can be used to direct clients to the needed | AliasMode SVCB records can be used to direct clients to the needed | |||
ServiceMode SVCB record per [RFC9460]. The formatting of these | ServiceMode SVCB record per [RFC9460]. The formatting of these | |||
records, including the DNS-unique parameters such as "dohpath", are | records, including the DNS-unique parameters such as "dohpath", are | |||
defined by [RFC9461]. | defined by [RFC9461]. | |||
The following is an example of an SVCB record describing a DoH server | The following is an example of a SVCB record describing a DoH server | |||
discovered by querying for _dns.example.net: | discovered by querying for _dns.example.net: | |||
_dns.example.net. 7200 IN SVCB 1 example.net. ( | _dns.example.net. 7200 IN SVCB 1 example.net. ( | |||
alpn=h2 dohpath=/dns-query{?dns} ) | alpn=h2 dohpath=/dns-query{?dns} ) | |||
The following is an example of an SVCB record describing a DoT server | The following is an example of a SVCB record describing a DoT server | |||
discovered by querying for _dns.example.net: | discovered by querying for _dns.example.net: | |||
_dns.example.net. 7200 IN SVCB 1 dot.example.net ( | _dns.example.net. 7200 IN SVCB 1 dot.example.net ( | |||
alpn=dot port=8530 ) | alpn=dot port=8530 ) | |||
The following is an example of an SVCB record describing a DoQ server | The following is an example of a SVCB record describing a DoQ server | |||
discovered by querying for _dns.example.net: | discovered by querying for _dns.example.net: | |||
_dns.example.net. 7200 IN SVCB 1 doq.example.net ( | _dns.example.net. 7200 IN SVCB 1 doq.example.net ( | |||
alpn=doq port=8530 ) | alpn=doq port=8530 ) | |||
If multiple Designated Resolvers are available, using one or more | If multiple Designated Resolvers are available, using one or more | |||
encrypted DNS protocols, the resolver deployment can indicate a | encrypted DNS protocols, the resolver deployment can indicate a | |||
preference using the priority fields in each SVCB record [RFC9460]. | preference using the priority fields in each SVCB record [RFC9460]. | |||
If the client encounters a mandatory parameter in an SVCB record it | If the client encounters a mandatory parameter in a SVCB record it | |||
does not understand, it MUST NOT use that record to discover a | does not understand, it MUST NOT use that record to discover a | |||
Designated Resolver, in accordance with Section 8 of [RFC9460]. The | Designated Resolver, in accordance with Section 8 of [RFC9460]. The | |||
client can still use other records in the same response if the client | client can still use other records in the same response if the client | |||
can understand all of their mandatory parameters. This allows future | can understand all of their mandatory parameters. This allows future | |||
encrypted deployments to simultaneously support protocols even if a | encrypted deployments to simultaneously support protocols even if a | |||
given client is not aware of all those protocols. For example, if | given client is not aware of all those protocols. For example, if | |||
the Unencrypted DNS Resolver returns three SVCB records -- one for | the Unencrypted DNS Resolver returns three SVCB records -- one for | |||
DoH, one for DoT, and one for a yet-to-exist protocol -- a client | DoH, one for DoT, and one for a yet-to-exist protocol -- a client | |||
that only supports DoH and DoT should be able to use those records | that only supports DoH and DoT should be able to use those records | |||
while safely ignoring the third record. | while safely ignoring the third record. | |||
skipping to change at line 230 ¶ | skipping to change at line 230 ¶ | |||
record type (64) [RFC9460]. | record type (64) [RFC9460]. | |||
Responses to the SVCB query for the "resolver.arpa" SUDN describe | Responses to the SVCB query for the "resolver.arpa" SUDN describe | |||
Designated Resolvers. To ensure that different Designated Resolver | Designated Resolvers. To ensure that different Designated Resolver | |||
configurations can be correctly distinguished and associated with A | configurations can be correctly distinguished and associated with A | |||
and AAAA records for the resolver, ServiceMode SVCB responses to | and AAAA records for the resolver, ServiceMode SVCB responses to | |||
these queries MUST NOT use the "." or "resolver.arpa" value for the | these queries MUST NOT use the "." or "resolver.arpa" value for the | |||
TargetName. Similarly, clients MUST NOT perform A or AAAA queries | TargetName. Similarly, clients MUST NOT perform A or AAAA queries | |||
for "resolver.arpa". | for "resolver.arpa". | |||
The following is an example of an SVCB record describing a DoH server | The following is an example of a SVCB record describing a DoH server | |||
discovered by querying for _dns.resolver.arpa.: | discovered by querying for _dns.resolver.arpa.: | |||
_dns.resolver.arpa. 7200 IN SVCB 1 doh.example.net ( | _dns.resolver.arpa. 7200 IN SVCB 1 doh.example.net ( | |||
alpn=h2 dohpath=/dns-query{?dns} ) | alpn=h2 dohpath=/dns-query{?dns} ) | |||
The following is an example of an SVCB record describing a DoT server | The following is an example of a SVCB record describing a DoT server | |||
discovered by querying for _dns.resolver.arpa.: | discovered by querying for _dns.resolver.arpa.: | |||
_dns.resolver.arpa. 7200 IN SVCB 1 dot.example.net ( | _dns.resolver.arpa. 7200 IN SVCB 1 dot.example.net ( | |||
alpn=dot port=8530 ) | alpn=dot port=8530 ) | |||
The following is an example of an SVCB record describing a DoQ server | The following is an example of a SVCB record describing a DoQ server | |||
discovered by querying for _dns.resolver.arpa.: | discovered by querying for _dns.resolver.arpa.: | |||
_dns.resolver.arpa. 7200 IN SVCB 1 doq.example.net ( | _dns.resolver.arpa. 7200 IN SVCB 1 doq.example.net ( | |||
alpn=doq port=8530 ) | alpn=doq port=8530 ) | |||
If the recursive resolver that receives this query has one or more | If the recursive resolver that receives this query has one or more | |||
Designated Resolvers, it will return the corresponding SVCB records. | Designated Resolvers, it will return the corresponding SVCB records. | |||
When responding to these special queries for "resolver.arpa", the | When responding to these special queries for "resolver.arpa", the | |||
recursive resolver SHOULD include the A and AAAA records for the name | recursive resolver SHOULD include the A and AAAA records for the name | |||
of the Designated Resolver in the Additional Answers section. This | of the Designated Resolver in the Additional Answers section. This | |||
skipping to change at line 419 ¶ | skipping to change at line 419 ¶ | |||
Encrypted DNS Resolver itself or to any other resolver. Unlike the | Encrypted DNS Resolver itself or to any other resolver. Unlike the | |||
case of bootstrapping from an Unencrypted DNS Resolver (Section 4), | case of bootstrapping from an Unencrypted DNS Resolver (Section 4), | |||
these records SHOULD be available in the public DNS if the same | these records SHOULD be available in the public DNS if the same | |||
domain name's A or AAAA records are available in the public DNS to | domain name's A or AAAA records are available in the public DNS to | |||
allow using any resolver to discover another resolver's Designated | allow using any resolver to discover another resolver's Designated | |||
Resolvers. When the name can only be resolved in private namespaces, | Resolvers. When the name can only be resolved in private namespaces, | |||
these records SHOULD be available to the same audience as the A and | these records SHOULD be available to the same audience as the A and | |||
AAAA records. | AAAA records. | |||
For example, if the client already knows about a DoT server | For example, if the client already knows about a DoT server | |||
resolver.example.com, it can issue an SVCB query for | resolver.example.com, it can issue a SVCB query for | |||
_dns.resolver.example.com to discover if there are other encrypted | _dns.resolver.example.com to discover if there are other encrypted | |||
DNS protocols available. In the following example, the SVCB answers | DNS protocols available. In the following example, the SVCB answers | |||
indicate that resolver.example.com supports both DoH and DoT and that | indicate that resolver.example.com supports both DoH and DoT and that | |||
the DoH server indicates a higher priority than the DoT server. | the DoH server indicates a higher priority than the DoT server. | |||
_dns.resolver.example.com. 7200 IN SVCB 1 resolver.example.com. ( | _dns.resolver.example.com. 7200 IN SVCB 1 resolver.example.com. ( | |||
alpn=h2 dohpath=/dns-query{?dns} ) | alpn=h2 dohpath=/dns-query{?dns} ) | |||
_dns.resolver.example.com. 7200 IN SVCB 2 resolver.example.com. ( | _dns.resolver.example.com. 7200 IN SVCB 2 resolver.example.com. ( | |||
alpn=dot ) | alpn=dot ) | |||
skipping to change at line 460 ¶ | skipping to change at line 460 ¶ | |||
server for foo.resolver.example.com. | server for foo.resolver.example.com. | |||
6. Deployment Considerations | 6. Deployment Considerations | |||
Resolver deployments that support DDR are advised to consider the | Resolver deployments that support DDR are advised to consider the | |||
following points. | following points. | |||
6.1. Caching Forwarders | 6.1. Caching Forwarders | |||
A DNS forwarder SHOULD NOT forward queries for "resolver.arpa" (or | A DNS forwarder SHOULD NOT forward queries for "resolver.arpa" (or | |||
any subdomains) upstream. This prevents a client from receiving an | any subdomains) upstream. This prevents a client from receiving a | |||
SVCB record that will fail to authenticate because the forwarder's IP | SVCB record that will fail to authenticate because the forwarder's IP | |||
address is not in the SubjectAltName (SAN) field of the upstream | address is not in the SubjectAltName (SAN) field of the upstream | |||
resolver's Designated Resolver's TLS certificate. A DNS forwarder | resolver's Designated Resolver's TLS certificate. A DNS forwarder | |||
that already acts as a completely transparent forwarder MAY choose to | that already acts as a completely transparent forwarder MAY choose to | |||
forward these queries when the operator expects that this does not | forward these queries when the operator expects that this does not | |||
apply, because the operator either knows that the upstream resolver | apply, because the operator either knows that the upstream resolver | |||
does have the forwarder's IP address in its TLS certificate's SAN | does have the forwarder's IP address in its TLS certificate's SAN | |||
field or expects clients to validate the connection via some future | field or expects clients to validate the connection via some future | |||
mechanism. | mechanism. | |||
skipping to change at line 520 ¶ | skipping to change at line 520 ¶ | |||
directly through DHCP [RFC2132] [RFC8415] and through IPv6 RA options | directly through DHCP [RFC2132] [RFC8415] and through IPv6 RA options | |||
[RFC8106]. When such indications are present, clients can suppress | [RFC8106]. When such indications are present, clients can suppress | |||
queries for "resolver.arpa" to the unencrypted DNS server indicated | queries for "resolver.arpa" to the unencrypted DNS server indicated | |||
by the network over DHCP or RAs, and the DNR indications SHOULD take | by the network over DHCP or RAs, and the DNR indications SHOULD take | |||
precedence over those discovered using "resolver.arpa" for the same | precedence over those discovered using "resolver.arpa" for the same | |||
resolver if there is a conflict, since DNR is considered a more | resolver if there is a conflict, since DNR is considered a more | |||
reliable source. | reliable source. | |||
The Designated Resolver information in DNR might not contain a full | The Designated Resolver information in DNR might not contain a full | |||
set of SvcParams needed to connect to an Encrypted DNS Resolver. In | set of SvcParams needed to connect to an Encrypted DNS Resolver. In | |||
such a case, the client can use an SVCB query using a resolver name, | such a case, the client can use a SVCB query using a resolver name, | |||
as described in Section 5, to the Authentication Domain Name (ADN). | as described in Section 5, to the Authentication Domain Name (ADN). | |||
7. Security Considerations | 7. Security Considerations | |||
Since clients can receive DNS SVCB answers over unencrypted DNS, on- | Since clients can receive DNS SVCB answers over unencrypted DNS, on- | |||
path attackers can prevent successful discovery by dropping SVCB | path attackers can prevent successful discovery by dropping SVCB | |||
queries or answers and thus can prevent clients from switching to | queries or answers and thus can prevent clients from switching to | |||
using encrypted DNS. Clients should be aware that it might not be | using encrypted DNS. Clients should be aware that it might not be | |||
possible to distinguish between resolvers that do not have any | possible to distinguish between resolvers that do not have any | |||
Designated Resolver and such an active attack. To limit the impact | Designated Resolver and such an active attack. To limit the impact | |||
skipping to change at line 729 ¶ | skipping to change at line 729 ¶ | |||
[RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | |||
(DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | |||
<https://www.rfc-editor.org/info/rfc8484>. | <https://www.rfc-editor.org/info/rfc8484>. | |||
[RFC9250] Huitema, C., Dickinson, S., and A. Mankin, "DNS over | [RFC9250] Huitema, C., Dickinson, S., and A. Mankin, "DNS over | |||
Dedicated QUIC Connections", RFC 9250, | Dedicated QUIC Connections", RFC 9250, | |||
DOI 10.17487/RFC9250, May 2022, | DOI 10.17487/RFC9250, May 2022, | |||
<https://www.rfc-editor.org/info/rfc9250>. | <https://www.rfc-editor.org/info/rfc9250>. | |||
[RFC9460] Schwartz, B., Bishop, M., and E. Nygren, "Service Binding | [RFC9460] Schwartz, B., Bishop, M., and E. Nygren, "Service Binding | |||
and Parameter Specification via the DNS (DNS SVCB and | and Parameter Specification via the DNS (SVCB and HTTPS | |||
HTTPS Resource Records (RRs))", RFC 9460, | Resource Records)", RFC 9460, DOI 10.17487/RFC9460, | |||
DOI 10.17487/RFC9460, September 2023, | November 2023, <https://www.rfc-editor.org/info/rfc9460>. | |||
<https://www.rfc-editor.org/info/rfc9460>. | ||||
[RFC9461] Schwartz, B., "Service Binding Mapping for DNS Servers", | [RFC9461] Schwartz, B., "Service Binding Mapping for DNS Servers", | |||
RFC 9461, DOI 10.17487/RFC9461, September 2023, | RFC 9461, DOI 10.17487/RFC9461, November 2023, | |||
<https://www.rfc-editor.org/info/rfc9461>. | <https://www.rfc-editor.org/info/rfc9461>. | |||
[RFC9463] Boucadair, M., Ed., Reddy.K, T., Ed., Wing, D., Cook, N., | [RFC9463] Boucadair, M., Ed., Reddy.K, T., Ed., Wing, D., Cook, N., | |||
and T. Jensen, "DHCP and Router Advertisement Options for | and T. Jensen, "DHCP and Router Advertisement Options for | |||
the Discovery of Network-designated Resolvers (DNR)", | the Discovery of Network-designated Resolvers (DNR)", | |||
RFC 9463, DOI 10.17487/RFC9463, September 2023, | RFC 9463, DOI 10.17487/RFC9463, November 2023, | |||
<https://www.rfc-editor.org/info/rfc9463>. | <https://www.rfc-editor.org/info/rfc9463>. | |||
9.2. Informative References | 9.2. Informative References | |||
[DoH-HINTS] | [DoH-HINTS] | |||
Schinazi, D., Sullivan, N., and J. Kipp, "DoH Preference | Schinazi, D., Sullivan, N., and J. Kipp, "DoH Preference | |||
Hints for HTTP", Work in Progress, Internet-Draft, draft- | Hints for HTTP", Work in Progress, Internet-Draft, draft- | |||
schinazi-httpbis-doh-preference-hints-02, 13 July 2020, | schinazi-httpbis-doh-preference-hints-02, 13 July 2020, | |||
<https://datatracker.ietf.org/doc/html/draft-schinazi- | <https://datatracker.ietf.org/doc/html/draft-schinazi- | |||
httpbis-doh-preference-hints-02>. | httpbis-doh-preference-hints-02>. | |||
[ECH] Rescorla, E., Oku, K., Sullivan, N., and C. A. Wood, "TLS | [ECH] Rescorla, E., Oku, K., Sullivan, N., and C. A. Wood, "TLS | |||
Encrypted Client Hello", Work in Progress, Internet-Draft, | Encrypted Client Hello", Work in Progress, Internet-Draft, | |||
draft-ietf-tls-esni-16, 6 April 2023, | draft-ietf-tls-esni-17, 9 October 2023, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-tls- | <https://datatracker.ietf.org/doc/html/draft-ietf-tls- | |||
esni-16>. | esni-17>. | |||
[RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor | [RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor | |||
Extensions", RFC 2132, DOI 10.17487/RFC2132, March 1997, | Extensions", RFC 2132, DOI 10.17487/RFC2132, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2132>. | <https://www.rfc-editor.org/info/rfc2132>. | |||
[RFC6105] Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. | [RFC6105] Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. | |||
Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, | Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, | |||
DOI 10.17487/RFC6105, February 2011, | DOI 10.17487/RFC6105, February 2011, | |||
<https://www.rfc-editor.org/info/rfc6105>. | <https://www.rfc-editor.org/info/rfc6105>. | |||
End of changes. 16 change blocks. | ||||
19 lines changed or deleted | 18 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |