mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-11-30 10:57:34 +08:00
1684 lines
66 KiB
Plaintext
1684 lines
66 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Internet Engineering Task Force (IETF) C. Contavalli
|
||
Request for Comments: 7871 W. van der Gaast
|
||
Category: Informational Google
|
||
ISSN: 2070-1721 D. Lawrence
|
||
Akamai Technologies
|
||
W. Kumari
|
||
Google
|
||
May 2016
|
||
|
||
|
||
Client Subnet in DNS Queries
|
||
|
||
Abstract
|
||
|
||
This document describes an Extension Mechanisms for DNS (EDNS0)
|
||
option that is in active use to carry information about the network
|
||
that originated a DNS query and the network for which the subsequent
|
||
response can be cached. Since it has some known operational and
|
||
privacy shortcomings, a revision will be worked through the IETF for
|
||
improvement.
|
||
|
||
Status of This Memo
|
||
|
||
This document is not an Internet Standards Track specification; it is
|
||
published for informational purposes.
|
||
|
||
This document is a product of the Internet Engineering Task Force
|
||
(IETF). It represents the consensus of the IETF community. It has
|
||
received public review and has been approved for publication by the
|
||
Internet Engineering Steering Group (IESG). Not all documents
|
||
approved by the IESG are a candidate for any level of Internet
|
||
Standard; see Section 2 of RFC 5741.
|
||
|
||
Information about the current status of this document, any errata,
|
||
and how to provide feedback on it may be obtained at
|
||
http://www.rfc-editor.org/info/rfc7871.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 1]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (c) 2016 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.
|
||
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(http://trustee.ietf.org/license-info) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with respect
|
||
to this document. Code Components extracted from this document must
|
||
include Simplified BSD License text as described in Section 4.e of
|
||
the Trust Legal Provisions and are provided without warranty as
|
||
described in the Simplified BSD License.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 2]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Table of Contents
|
||
1. Introduction ....................................................4
|
||
2. Privacy Note ....................................................5
|
||
3. Requirements Notation ...........................................5
|
||
4. Terminology .....................................................6
|
||
5. Overview ........................................................7
|
||
6. Option Format ...................................................8
|
||
7. Protocol Description ............................................9
|
||
7.1. Originating the Option .....................................9
|
||
7.1.1. Recursive Resolvers .................................9
|
||
7.1.2. Stub Resolvers .....................................10
|
||
7.1.3. Forwarding Resolvers ...............................11
|
||
7.2. Generating a Response .....................................11
|
||
7.2.1. Authoritative Nameserver ...........................11
|
||
7.2.2. Intermediate Nameserver ............................13
|
||
7.3. Handling ECS Responses and Caching ........................14
|
||
7.3.1. Caching the Response ...............................15
|
||
7.3.2. Answering from Cache ...............................16
|
||
7.4. Delegations and Negative Answers ..........................17
|
||
7.5. Transitivity ..............................................18
|
||
8. IANA Considerations ............................................18
|
||
9. DNSSEC Considerations ..........................................19
|
||
10. NAT Considerations ............................................19
|
||
11. Security Considerations .......................................20
|
||
11.1. Privacy ..................................................20
|
||
11.2. Birthday Attacks .........................................21
|
||
11.3. Cache Pollution ..........................................22
|
||
12. Sending the Option ............................................23
|
||
12.1. Probing ..................................................23
|
||
12.2. Whitelist ................................................24
|
||
13. Example .......................................................24
|
||
14. References ....................................................26
|
||
14.1. Normative References .....................................26
|
||
14.2. Informative References ...................................27
|
||
Acknowledgements ..................................................28
|
||
Contributors ......................................................29
|
||
Authors' Addresses ................................................30
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 3]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
1. Introduction
|
||
|
||
Many Authoritative Nameservers today return different responses based
|
||
on the perceived topological location of the user. These servers use
|
||
the IP address of the incoming query to identify that location.
|
||
|
||
Since most queries come from Intermediate Recursive Resolvers, the
|
||
source address is that of the Recursive Resolver rather than of the
|
||
query originator.
|
||
|
||
Traditionally, and probably still in the majority of instances,
|
||
Recursive Resolvers are reasonably close in the topological sense to
|
||
the Stub Resolvers or Forwarding Resolvers that are the source of
|
||
queries. For these resolvers, using their own IP address is
|
||
sufficient for Authoritative Nameservers that tailor responses based
|
||
upon location of the querier.
|
||
|
||
Increasingly, though, a class of Recursive Resolvers has arisen that
|
||
handles query sources that are often not topologically close. The
|
||
motivation for having such Centralized Resolvers varies but is
|
||
usually because of some enhanced experience, such as greater cache
|
||
security or applying policies regarding where users may connect.
|
||
(Although political censorship usually comes to mind here, the same
|
||
actions may be used by a parent when setting controls on where a
|
||
minor may connect.) Similarly, many ISPs and other organizations use
|
||
a Centralized Resolver infrastructure that can be distant from the
|
||
clients the resolvers serve. These cases all lead to less than
|
||
desirable responses from topology-sensitive Authoritative
|
||
Nameservers.
|
||
|
||
This document defines an EDNS0 [RFC6891] option to convey network
|
||
information that is relevant to the DNS message. It will carry
|
||
sufficient network information about the originator for the
|
||
Authoritative Nameserver to tailor responses. It will also provide
|
||
for the Authoritative Nameserver to indicate the scope of network
|
||
addresses for which the tailored answer is intended. This EDNS0
|
||
option is intended for those Recursive Resolvers and Authoritative
|
||
Nameservers that would benefit from the extension and not for general
|
||
purpose deployment. This is completely optional and can safely be
|
||
ignored by servers that choose not to implement or enable it.
|
||
|
||
This document also includes guidelines on how best to cache those
|
||
results, and it provides recommendations on when this protocol
|
||
extension should be used.
|
||
|
||
At least a dozen different client and server implementations have
|
||
been written based on earlier draft versions of this specification.
|
||
The protocol is in active production use today. While the
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 4]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
implementations interoperate, there is varying behavior around edge
|
||
cases that were poorly specified. Known incompatibilities are
|
||
described in this document, and the authors believe that it is better
|
||
to describe the system as it is working today, even if not everyone
|
||
agrees with the details of the original specification
|
||
([VANDERGAAST]). The alternative is an undocumented and proprietary
|
||
system.
|
||
|
||
A revised proposal to improve upon the minor flaws in this protocol
|
||
will be forthcoming to the IETF.
|
||
|
||
2. Privacy Note
|
||
|
||
If we were just beginning to design this mechanism, and not
|
||
documenting existing protocol, it is unlikely that we would have done
|
||
things exactly this way.
|
||
|
||
The IETF is actively working on enhancing DNS privacy
|
||
[DPRIVE_Working_Group] and the reinjection of metadata [METADATA] has
|
||
been identified as a problematic design pattern.
|
||
|
||
As noted above however, this document primarily describes existing
|
||
behavior of a deployed method to further the understanding of the
|
||
Internet community.
|
||
|
||
We recommend that the feature be turned off by default in all
|
||
nameserver software, and that operators only enable it explicitly in
|
||
those circumstances where it provides a clear benefit for their
|
||
clients. We also encourage the deployment of means to allow users to
|
||
make use of the opt-out provided. Finally, we recommend that others
|
||
avoid techniques that may introduce additional metadata in future
|
||
work, as it may damage user trust.
|
||
|
||
Regrettably, support for the opt-out provisions of this specification
|
||
are currently limited. Only one stub resolver, getdns, is known to
|
||
be able to originate queries with anonymity requested, and as yet no
|
||
applications are known to be able to indicate that user preference to
|
||
the stub resolver.
|
||
|
||
3. Requirements Notation
|
||
|
||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
|
||
document are to be interpreted as described in [RFC2119].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 5]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
4. Terminology
|
||
|
||
ECS: EDNS Client Subnet.
|
||
|
||
Client: A Stub Resolver, Forwarding Resolver, or Recursive Resolver.
|
||
A client to a Recursive Resolver or a Forwarding Resolver.
|
||
|
||
Server: A Forwarding Resolver, Recursive Resolver, or Authoritative
|
||
Nameserver.
|
||
|
||
Stub Resolver: A simple DNS protocol implementation on the client
|
||
side as described in [RFC1034], Section 5.3.1. A client to a
|
||
Recursive Resolver or a Forwarding Resolver.
|
||
|
||
Authoritative Nameserver: A nameserver that has authority over one
|
||
or more DNS zones. These are normally not contacted by Stub
|
||
Resolver or end user clients directly but by Recursive Resolvers.
|
||
Described in [RFC1035], Section 6.
|
||
|
||
Recursive Resolver: A nameserver that is responsible for resolving
|
||
domain names for clients by following the domain's delegation
|
||
chain. Recursive Resolvers frequently use caches to be able to
|
||
respond to client queries quickly. Described in [RFC1035],
|
||
Section 7.
|
||
|
||
Forwarding Resolver: A nameserver that does not do iterative
|
||
resolution itself, but instead passes that responsibility to
|
||
another Recursive Resolver, called a "Forwarder" in [RFC2308],
|
||
Section 1.
|
||
|
||
Intermediate Nameserver: Any nameserver in between the Stub Resolver
|
||
and the Authoritative Nameserver, such as a Recursive Resolver or
|
||
a Forwarding Resolver.
|
||
|
||
Centralized Resolvers: Intermediate Nameservers that serve a
|
||
topologically diverse network address space.
|
||
|
||
Tailored Response: A response from a nameserver that is customized
|
||
for the node that sent the query, often based on performance
|
||
(i.e., lowest latency, least number of hops, topological distance,
|
||
etc.).
|
||
|
||
Topologically Close: Refers to two hosts being close in terms of the
|
||
number of hops or the time it takes for a packet to travel from
|
||
one host to the other. The concept of topological distance is
|
||
only loosely related to the concept of geographical distance: two
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 6]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
geographically close hosts can still be very distant from a
|
||
topological perspective, and two geographically distant hosts can
|
||
be quite close on the network.
|
||
|
||
For a more comprehensive treatment of DNS terms, please see
|
||
[RFC7719].
|
||
|
||
5. Overview
|
||
|
||
The general idea of this document is to provide an EDNS0 option to
|
||
allow Recursive Resolvers, if they are willing, to forward details
|
||
about the origin network from which a query is coming when talking to
|
||
other nameservers.
|
||
|
||
The format of the edns-client-subnet (ECS) EDNS0 option is described
|
||
in Section 6 and is meant to be added in queries sent by Intermediate
|
||
Nameservers in a way that is transparent to Stub Resolvers and end
|
||
users, as described in Section 7.1. ECS is only defined for the
|
||
Internet (IN) DNS class.
|
||
|
||
As described in Section 7.2, an Authoritative Nameserver could use
|
||
ECS as a hint to the end user's network location and provide a better
|
||
answer. Its response would also contain an ECS option, clearly
|
||
indicating that the server made use of this information, and that the
|
||
answer is tied to the client's network.
|
||
|
||
As described in Section 7.3, Intermediate Nameservers would use this
|
||
information to cache the response.
|
||
|
||
Some Intermediate Nameservers may also have to be able to forward ECS
|
||
queries they receive, as described in Section 7.5.
|
||
|
||
The mechanisms provided by ECS raise various security-related
|
||
concerns related to cache growth, the ability to spoof EDNS0 options,
|
||
and privacy. Section 11 explores various mitigation techniques.
|
||
|
||
The expectation, however, is that this option will primarily be used
|
||
between Recursive Resolvers and Authoritative Nameservers that are
|
||
sensitive to network location issues. Most Recursive Resolvers,
|
||
Authoritative Nameservers, and Stub Resolvers will never need to know
|
||
about this option and will continue working as they had been.
|
||
|
||
Failure to support this option or its improper handling will, at
|
||
worst, cause suboptimal identification of client network location,
|
||
which is a common occurrence in current Content Delivery Network
|
||
(CDN) setups.
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 7]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Section 7.1 also provides a mechanism for Stub Resolvers to signal
|
||
Recursive Resolvers that they do not want ECS treatment for specific
|
||
queries.
|
||
|
||
Additionally, operators of Intermediate Nameservers with ECS enabled
|
||
are allowed to choose how many bits of the address of received
|
||
queries to forward or to reduce the number of bits forwarded for
|
||
queries already including an ECS option.
|
||
|
||
6. Option Format
|
||
|
||
This protocol uses an EDNS0 [RFC6891] option to include client
|
||
address information in DNS messages. The option is structured as
|
||
follows:
|
||
|
||
+0 (MSB) +1 (LSB)
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
0: | OPTION-CODE |
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
2: | OPTION-LENGTH |
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
4: | FAMILY |
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
6: | SOURCE PREFIX-LENGTH | SCOPE PREFIX-LENGTH |
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
8: | ADDRESS... /
|
||
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|
||
|
||
o (Defined in [RFC6891]) OPTION-CODE, 2 octets, for ECS is 8 (0x00
|
||
0x08).
|
||
|
||
o (Defined in [RFC6891]) OPTION-LENGTH, 2 octets, contains the
|
||
length of the payload (everything after OPTION-LENGTH) in octets.
|
||
|
||
o FAMILY, 2 octets, indicates the family of the address contained in
|
||
the option, using address family codes as assigned by IANA in
|
||
Address Family Numbers [Address_Family_Numbers].
|
||
|
||
The format of the address part depends on the value of FAMILY. This
|
||
document only defines the format for FAMILY 1 (IPv4) and FAMILY 2
|
||
(IPv6), which are as follows:
|
||
|
||
o SOURCE PREFIX-LENGTH, an unsigned octet representing the leftmost
|
||
number of significant bits of ADDRESS to be used for the lookup.
|
||
In responses, it mirrors the same value as in the queries.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 8]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
o SCOPE PREFIX-LENGTH, an unsigned octet representing the leftmost
|
||
number of significant bits of ADDRESS that the response covers.
|
||
In queries, it MUST be set to 0.
|
||
|
||
o ADDRESS, variable number of octets, contains either an IPv4 or
|
||
IPv6 address, depending on FAMILY, which MUST be truncated to the
|
||
number of bits indicated by the SOURCE PREFIX-LENGTH field,
|
||
padding with 0 bits to pad to the end of the last octet needed.
|
||
|
||
o A server receiving an ECS option that uses either too few or too
|
||
many ADDRESS octets, or that has non-zero ADDRESS bits set beyond
|
||
SOURCE PREFIX-LENGTH, SHOULD return FORMERR to reject the packet,
|
||
as a signal to the software developer making the request to fix
|
||
their implementation.
|
||
|
||
All fields are in network byte order ("big-endian", per [RFC1700],
|
||
Data Notation).
|
||
|
||
7. Protocol Description
|
||
|
||
7.1. Originating the Option
|
||
|
||
The ECS option should generally be added by Recursive Resolvers when
|
||
querying Authoritative Nameservers, as described in Section 12. The
|
||
option can also be initialized by a Stub Resolver or Forwarding
|
||
Resolver.
|
||
|
||
7.1.1. Recursive Resolvers
|
||
|
||
The setup of the ECS option in a Recursive Resolver depends on the
|
||
client query that triggered the resolution process.
|
||
|
||
In the usual case, where no ECS option was present in the client
|
||
query, the Recursive Resolver initializes the option by setting
|
||
FAMILY of the client's address. It then uses the value of its
|
||
maximum cacheable prefix length to set SOURCE PREFIX-LENGTH. For
|
||
privacy reasons, and because the whole IP address is rarely required
|
||
to determine a tailored response, this length SHOULD be shorter than
|
||
the full address, as described in Section 11.
|
||
|
||
If the triggering query included an ECS option itself, it MUST be
|
||
examined for its SOURCE PREFIX-LENGTH. The Recursive Resolver's
|
||
outgoing query MUST then set SOURCE PREFIX-LENGTH to the shorter of
|
||
the incoming query's SOURCE PREFIX-LENGTH or the server's maximum
|
||
cacheable prefix length.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 9]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Finally, in both cases, SCOPE PREFIX-LENGTH is set to 0 and ADDRESS
|
||
is then added up to SOURCE PREFIX-LENGTH number of bits, with
|
||
trailing 0 bits added, if needed, to fill the final octet. The total
|
||
number of octets used MUST only be enough to cover SOURCE PREFIX-
|
||
LENGTH bits, rather than the full width that would normally be used
|
||
by addresses in FAMILY.
|
||
|
||
FAMILY and ADDRESS information MAY be used from the ECS option in the
|
||
incoming query. Passing the existing address data is supportive of
|
||
the Recursive Resolver being used as the target of a Forwarding
|
||
Resolver, but could possibly run into policy problems with regard to
|
||
usage agreements between the Recursive Resolver and Authoritative
|
||
Nameserver. See Section 12.2 for more discussion on this point. If
|
||
the Recursive Resolver will not forward FAMILY and ADDRESS data from
|
||
the incoming ECS option, it SHOULD return a REFUSED response.
|
||
|
||
Subsequent queries to refresh the data MUST, if unrestricted by an
|
||
incoming SOURCE PREFIX-LENGTH, specify the longest SOURCE PREFIX-
|
||
LENGTH that the Recursive Resolver is willing to cache, even if a
|
||
previous response indicated that a shorter prefix length was
|
||
sufficient.
|
||
|
||
7.1.2. Stub Resolvers
|
||
|
||
A Stub Resolver MAY generate DNS queries with an ECS option that sets
|
||
SOURCE PREFIX-LENGTH to limit how network information should be
|
||
revealed. An Intermediate Nameserver that receives such a query MUST
|
||
NOT make queries that include more bits of client address than in the
|
||
originating query.
|
||
|
||
A SOURCE PREFIX-LENGTH value of 0 means that the Recursive Resolver
|
||
MUST NOT add the client's address information to its queries. The
|
||
subsequent Recursive Resolver query to the Authoritative Nameserver
|
||
will then either not include an ECS option or MAY optionally include
|
||
its own address information, which is what the Authoritative
|
||
Nameserver will almost certainly use to generate any Tailored
|
||
Response in lieu of an option. This allows the answer to be handled
|
||
by the same caching mechanism as other queries, with an explicit
|
||
indicator of the applicable scope. Subsequent Stub Resolver queries
|
||
for /0 can then be answered from this cached response.
|
||
|
||
A Stub Resolver MUST set SCOPE PREFIX-LENGTH to 0. It MAY include
|
||
FAMILY and ADDRESS data, but should be prepared to handle a REFUSED
|
||
response if the Intermediate Nameserver that it queries has a policy
|
||
that denies forwarding of ADDRESS. If there is no ADDRESS set, i.e.,
|
||
SOURCE PREFIX-LENGTH is set to 0, then FAMILY SHOULD be set to the
|
||
transport over which the query is sent. This is for
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 10]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
interoperability; at least one major authoritative server will ignore
|
||
the option if FAMILY is not 1 or 2, even though it is irrelevant if
|
||
there are no ADDRESS bits.
|
||
|
||
7.1.3. Forwarding Resolvers
|
||
|
||
Forwarding Resolvers essentially appear to be Stub Resolvers to
|
||
whatever Recursive Resolver is ultimately handling the query, but
|
||
they look like a Recursive Resolver to their client. A Forwarding
|
||
Resolver using this option MUST prepare it as described in
|
||
Section 7.1.1, "Recursive Resolvers". In particular, a Forwarding
|
||
Resolver that implements this protocol MUST honor SOURCE PREFIX-
|
||
LENGTH restrictions indicated in the incoming query from its client.
|
||
See also Section 7.5.
|
||
|
||
Since the Recursive Resolver it contacts will treat the Forwarding
|
||
Resolver like a Stub Resolver, the Recursive Resolver's policies
|
||
regarding incoming ADDRESS information will apply in the same way.
|
||
If the Forwarding Resolver receives a REFUSED response when it sends
|
||
a query that includes a non-zero ADDRESS, it MUST retry with no
|
||
ADDRESS.
|
||
|
||
7.2. Generating a Response
|
||
|
||
7.2.1. Authoritative Nameserver
|
||
|
||
When a query containing an ECS option is received, an Authoritative
|
||
Nameserver supporting ECS MAY use the address information specified
|
||
in the option to generate a tailored response.
|
||
|
||
Authoritative Nameservers that have not implemented or enabled
|
||
support for the ECS option ought to safely ignore it within incoming
|
||
queries, per [RFC6891], Section 6.1.2. Such a server MUST NOT
|
||
include an ECS option within replies to indicate lack of support for
|
||
it. Implementers of Intermediate Nameservers should be aware,
|
||
however, that some nameservers incorrectly echo back unknown EDNS0
|
||
options. In this protocol, that should be mostly harmless, as the
|
||
SCOPE PREFIX-LENGTH should come back as 0, thus marking the response
|
||
as covering all networks.
|
||
|
||
A query with a wrongly formatted option (e.g., an unknown FAMILY)
|
||
MUST be rejected and a FORMERR response MUST be returned to the
|
||
sender, as described in [RFC6891], "Transport Considerations".
|
||
|
||
An Authoritative Nameserver that implements this protocol and
|
||
receives an ECS option MUST include an ECS option in its response to
|
||
indicate that it SHOULD be cached accordingly, regardless of whether
|
||
the client information was needed to formulate an answer. (Note that
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 11]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
the requirement in [RFC6891] to reserve space for the OPT record
|
||
could mean that the Answer section of the response will be truncated
|
||
and fall back to TCP indicated accordingly.) If an ECS option was
|
||
not included in a query, one MUST NOT be included in the response
|
||
even if the server is providing a Tailored Response -- presumably
|
||
based on the address from which it received the query.
|
||
|
||
FAMILY, SOURCE PREFIX-LENGTH, and ADDRESS in the response MUST match
|
||
those in the query. Echoing back these values helps to mitigate
|
||
certain attack vectors, as described in Section 11.
|
||
|
||
SCOPE PREFIX-LENGTH in the response indicates the network for which
|
||
the answer is intended.
|
||
|
||
A SCOPE PREFIX-LENGTH value longer than SOURCE PREFIX-LENGTH
|
||
indicates that the provided prefix length was not specific enough to
|
||
select the most appropriate Tailored Response. Future queries for
|
||
the name within the specified network SHOULD use the longer SCOPE
|
||
PREFIX-LENGTH. Factors affecting whether the Recursive Resolver
|
||
would use the longer length include the amount of privacy masking the
|
||
operator wants to provide their users, and the additional resource
|
||
implications for the cache.
|
||
|
||
Conversely, a shorter SCOPE PREFIX-LENGTH indicates that more bits
|
||
than necessary were provided, and the answer is suitable for a
|
||
broader range of addresses. This could be as short as 0, to indicate
|
||
that the answer is suitable for all addresses in FAMILY.
|
||
|
||
As the logical topology of any part of the network with regard to the
|
||
tailored response can vary, an Authoritative Nameserver may return
|
||
different values of SCOPE PREFIX-LENGTH for different networks.
|
||
|
||
Since some queries can result in multiple RRsets being added to the
|
||
response, there is an unfortunate ambiguity from the original
|
||
specification as to how SCOPE PREFIX-LENGTH would apply to each
|
||
individual RRset. For example, multiple types in response to an ANY
|
||
metaquery could all have different applicable SCOPE PREFIX-LENGTH
|
||
values, but this protocol only has the ability to signal one. The
|
||
response SHOULD therefore, include the longest relevant PREFIX-LENGTH
|
||
of any RRset in the answer, which could have the unfortunate side
|
||
effect of redundantly caching some data that could be cached more
|
||
broadly. For the specific case of a Canonical Name (CNAME) chain,
|
||
the Authoritative Nameserver SHOULD only place the initial CNAME
|
||
record in the Answer section, to have it cached unambiguously and
|
||
appropriately. Most modern Recursive Resolvers restart the query
|
||
with the CNAME, so the remainder of the chain is typically ignored
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 12]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
anyway. For message-focused resolvers, rather than RRset-focused
|
||
ones, this will mean caching the entire CNAME chain at the longest
|
||
PREFIX-LENGTH of any RRset in the chain.
|
||
|
||
The specific logic that an Authoritative Nameserver uses to choose a
|
||
tailored response is not in the scope of this document. Implementers
|
||
are encouraged, however, to carefully consider their selection of
|
||
SCOPE PREFIX-LENGTH for the response in the event that the best
|
||
tailored response cannot be determined, and what the implications
|
||
would be over the life of the TTL.
|
||
|
||
Authoritative Nameservers might have situations where one Tailored
|
||
Response is appropriate for a relatively broad address range, such as
|
||
an IPv4 /20, except for some exceptions, such as a few /24 ranges
|
||
within that /20. Because it can't be guaranteed that queries for all
|
||
longer prefix lengths would arrive before one that would be answered
|
||
by the shorter prefix length, an Authoritative Nameserver MUST NOT
|
||
overlap prefixes.
|
||
|
||
When the Authoritative Nameserver has a longer prefix length Tailored
|
||
Response within a shorter prefix length Tailored Response, then
|
||
implementations can either:
|
||
|
||
1. Deaggregate the shorter prefix response into multiple longer
|
||
prefix responses, or
|
||
|
||
2. Alert the operator that the order of queries will determine which
|
||
answers get cached, and either warn and continue or treat this as
|
||
an error and refuse to load the configuration.
|
||
|
||
This choice should be documented for the operator, for example, in
|
||
the user manual.
|
||
|
||
When deaggregating to correct the overlap, prefix lengths should be
|
||
optimized to use the minimum necessary to cover the address space, in
|
||
order to reduce the overhead that results from having multiple copies
|
||
of the same answer. As a trivial example, if the Tailored Response
|
||
for 1.2.0/20 is A but there is one exception of 1.2.3/24 for B, then
|
||
the Authoritative Nameserver would need to provide Tailored Responses
|
||
for 1.2.0/23, 1.2.2/24, 1.2.4/22, and 1.2.8/21 all pointing to A, and
|
||
1.2.3/24 to B.
|
||
|
||
7.2.2. Intermediate Nameserver
|
||
|
||
When an Intermediate Nameserver uses ECS, whether it passes an ECS
|
||
option in its own response to its client is predicated on whether the
|
||
client originally included the option. Because a client that did not
|
||
use an ECS option might not be able to understand it, the server MUST
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 13]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
NOT provide one in its response. If the client query did include the
|
||
option, the server MUST include one in its response, especially as it
|
||
could be talking to a Forwarding Resolver, which would need the
|
||
information for its own caching.
|
||
|
||
If an Intermediate Nameserver receives a response that has a longer
|
||
SCOPE PREFIX-LENGTH than SOURCE PREFIX-LENGTH that it provided in its
|
||
query, it SHOULD still provide the result as the answer to the
|
||
triggering client request even if the client is in a different
|
||
address range. The Intermediate Nameserver MAY instead opt to retry
|
||
with a longer SOURCE PREFIX-LENGTH to get a better reply before
|
||
responding to its client, as long as it does not exceed a SOURCE
|
||
PREFIX-LENGTH specified in the query that triggered resolution, but
|
||
this obviously has implications for the latency of the overall
|
||
lookup.
|
||
|
||
The logic for using the cache to determine whether the Intermediate
|
||
Nameserver already knows the response to provide to its client is
|
||
covered in the next section.
|
||
|
||
7.3. Handling ECS Responses and Caching
|
||
|
||
When an Intermediate Nameserver receives a response containing an ECS
|
||
option and without the TC bit set, it SHOULD cache the result based
|
||
on the data in the option. If the TC bit was set, the Intermediate
|
||
Resolver SHOULD retry the query over TCP to get the complete Answer
|
||
section for caching.
|
||
|
||
If FAMILY, SOURCE PREFIX-LENGTH, and SOURCE PREFIX-LENGTH bits of
|
||
ADDRESS in the response don't match the non-zero fields in the
|
||
corresponding query, the full response MUST be dropped, as described
|
||
in Section 11. In a response to a query that specified only SOURCE
|
||
PREFIX-LENGTH for privacy masking, the FAMILY and ADDRESS fields MUST
|
||
contain the appropriate non-zero information that the Authoritative
|
||
Nameserver used to generate the answer, so that it can be cached
|
||
accordingly.
|
||
|
||
If no ECS option is contained in the response, the Intermediate
|
||
Nameserver SHOULD treat this as being equivalent to having received a
|
||
SCOPE PREFIX-LENGTH of 0, which is an answer suitable for all client
|
||
addresses. See further discussion on the security implications of
|
||
this in Section 11.
|
||
|
||
If a REFUSED response is received from an Authoritative Nameserver,
|
||
an ECS-aware resolver MUST retry the query without ECS to distinguish
|
||
the response from one where the Authoritative Nameserver is not
|
||
responsible for the name, which is a common convention for the
|
||
REFUSED status. Similarly, a client of a Recursive Resolver SHOULD
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 14]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
retry after receiving a REFUSED response because it is not
|
||
sufficiently clear whether the REFUSED response was because of the
|
||
ECS option or some other reason.
|
||
|
||
7.3.1. Caching the Response
|
||
|
||
In the cache, all resource records in the Answer section MUST be tied
|
||
to the network specified in the response. The appropriate prefix
|
||
length depends on the relationship between SOURCE PREFIX-LENGTH,
|
||
SCOPE PREFIX-LENGTH, and the maximum cacheable prefix length
|
||
configured for the cache.
|
||
|
||
If SCOPE PREFIX-LENGTH is not longer than SOURCE PREFIX-LENGTH, store
|
||
SCOPE PREFIX-LENGTH bits of ADDRESS, and then mark the response as
|
||
valid for all addresses that fall within that range.
|
||
|
||
Similarly, if SOURCE PREFIX-LENGTH is the maximum configured for the
|
||
cache, store SOURCE PREFIX-LENGTH bits of ADDRESS, and then mark the
|
||
response as valid for all addresses that fall within that range.
|
||
|
||
If SOURCE PREFIX-LENGTH is shorter than the configured maximum and
|
||
SCOPE PREFIX-LENGTH is longer than SOURCE PREFIX-LENGTH, store SOURCE
|
||
PREFIX-LENGTH bits of ADDRESS, and then mark the response as valid
|
||
only to answer client queries that specify exactly the same SOURCE
|
||
PREFIX-LENGTH in their own ECS option.
|
||
|
||
The handling of DNSSEC-related records in the Answer section was
|
||
unspecified in the original draft version of this document and is
|
||
inconsistently handled in existing implementations. A Resource
|
||
Record Signature (RRSIG) must obviously be tied to the RRset that it
|
||
signs, but it is RECOMMENDED that all other DNSSEC records be scoped
|
||
at /0. See Section 9 for more information.
|
||
|
||
Note that the Additional and Authority sections from a DNS response
|
||
message are specifically excluded here. Any records from these
|
||
sections MUST NOT be tied to a network. See Section 7.4 for more
|
||
information.
|
||
|
||
Records that are cached as /0 because of a query's SOURCE PREFIX-
|
||
LENGTH of 0 MUST be distinguished from those that are cached as /0
|
||
because of a response's SCOPE PREFIX-LENGTH of 0. The former should
|
||
only be used for other /0 queries that the Intermediate Resolver
|
||
receives, but the latter is suitable as a response for all networks.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 15]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Although omitting network-specific caching will significantly
|
||
simplify an implementation, the resulting drop in cache hits is very
|
||
likely to defeat most latency benefits provided by ECS. Therefore,
|
||
implementing full caching support as described in this section is
|
||
strongly RECOMMENDED.
|
||
|
||
Enabling support for ECS in an Intermediate Nameserver will
|
||
significantly increase the size of the cache, reduce the number of
|
||
results that can be served from cache, and increase the load on the
|
||
server. Implementing the mitigation techniques described in
|
||
Section 11 is strongly recommended. For cache size issues,
|
||
implementers should consider data storage formats that allow the same
|
||
answer data to be shared among multiple prefixes.
|
||
|
||
7.3.2. Answering from Cache
|
||
|
||
Cache lookups are first done as usual for a DNS query, using the
|
||
query tuple of <name, type, class>. Then, the appropriate RRset MUST
|
||
be chosen based on the longest prefix matching. The client address
|
||
to use for comparison will depend on whether the Intermediate
|
||
Nameserver received an ECS option in its client query.
|
||
|
||
o If no ECS option was provided, the client's address is used.
|
||
|
||
o If there was an ECS option specifying SOURCE PREFIX-LENGTH and
|
||
ADDRESS covering the client's address, the client address is used
|
||
but SOURCE PREFIX-LENGTH is initially ignored. If no covering
|
||
entry is found and SOURCE PREFIX-LENGTH is shorter than the
|
||
configured maximum length allowed for the cache, repeat the cache
|
||
lookup for an entry that exactly matches SOURCE PREFIX-LENGTH.
|
||
These special entries, which do not cover longer prefix lengths,
|
||
occur as described in the previous section.
|
||
|
||
o If there was an ECS option with an ADDRESS, the ADDRESS from it
|
||
MAY be used if the local policy allows. The policy can vary
|
||
depending on the agreements the operator of the Intermediate
|
||
Nameserver has with Authoritative Nameserver operators; see
|
||
Section 12.2. If the policy does not allow it, a REFUSED response
|
||
SHOULD be sent. See Section 7.5 for more information.
|
||
|
||
If a matching network is found and the relevant data is unexpired,
|
||
the response is generated as per Section 7.2.
|
||
|
||
If no matching network is found, the Intermediate Nameserver MUST
|
||
perform resolution as usual. This is necessary to avoid Tailored
|
||
Responses in the cache from being returned to the wrong clients, and
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 16]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
to avoid a single query coming from a client on a different network
|
||
from polluting the cache with a Tailored Response for all the users
|
||
of that resolver.
|
||
|
||
7.4. Delegations and Negative Answers
|
||
|
||
The prohibition against tying ECS data to records from the Authority
|
||
and Additional sections left an unfortunate ambiguity in the original
|
||
specification, primarily with regard to negative answers. The
|
||
expectation of the original authors was that ECS would only really be
|
||
used for address requests and the positive result in the response's
|
||
Answer section, which was the use case that was driving the
|
||
definition of the protocol.
|
||
|
||
For negative answers, some independent implementations of both
|
||
resolvers and authorities did not see the section restriction as
|
||
necessarily meaning that a given name and type must only have either
|
||
positive ECS-tagged answers or a negative answer. They support being
|
||
able to tell one part of the network that the data does not exist,
|
||
while telling another part of the network that it does.
|
||
|
||
Several other implementations, however, do not support being able to
|
||
mix positive and negative answers; thus, interoperability is a
|
||
problem. It is RECOMMENDED that no specific behavior regarding
|
||
negative answers be relied upon, but that Authoritative Nameservers
|
||
should conservatively expect that Intermediate Nameservers will treat
|
||
all negative answers as /0; therefore, they SHOULD set SCOPE PREFIX-
|
||
LENGTH accordingly.
|
||
|
||
This issue is expected to be revisited in a future revision of the
|
||
protocol, possibly blessing the mixing of positive and negative
|
||
answers. There are implications for cache data structures that
|
||
developers should consider when writing new ECS code.
|
||
|
||
The delegations case is a bit easier to tease out. In operational
|
||
practice, if an authoritative server is using address information to
|
||
provide customized delegations, it is the resolver that will be using
|
||
the answer for its next iterative query. Addresses in the Additional
|
||
section SHOULD therefore ignore ECS data, and the Authoritative
|
||
Nameserver SHOULD return a zero SCOPE PREFIX-LENGTH on delegations.
|
||
A Recursive Resolver SHOULD treat a non-zero SCOPE PREFIX LENGTH in a
|
||
delegation as though it were zero.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 17]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
7.5. Transitivity
|
||
|
||
Generally, ECS options will only be present in DNS messages between a
|
||
Recursive Resolver and an Authoritative Nameserver, i.e., one hop.
|
||
However, in certain configurations, for example, multi-tier
|
||
nameserver setups, it may be necessary to implement transitive
|
||
behavior on Intermediate Nameservers.
|
||
|
||
Any Intermediate Nameserver that forwards ECS options received from
|
||
its clients MUST fully implement the caching behavior described in
|
||
Section 7.3.
|
||
|
||
An Intermediate Nameserver MAY forward ECS options with address
|
||
information. This information MAY match the source IP address of the
|
||
incoming query, and MAY have more or fewer address bits than the
|
||
nameserver would normally include in a locally originated ECS option.
|
||
If an Intermediate Nameserver receives a query with SOURCE PREFIX-
|
||
LENGTH set to 0, it MUST NOT include client address information in
|
||
queries made to resolve that client's request (see Section 7.1.2).
|
||
|
||
If, for any reason, the Intermediate Nameserver does not want to use
|
||
the information in an ECS option it receives (too little address
|
||
information, network address from a range not authorized to use the
|
||
server, private/unroutable address space, etc.), it SHOULD drop the
|
||
query and return a REFUSED response. Note again that a query MUST
|
||
NOT be refused solely because it provides 0 address bits.
|
||
|
||
Be aware that at least one major existing implementation does not
|
||
return REFUSED and instead just processes the query as though the
|
||
problematic information were not present. This can lead to anomalous
|
||
situations, such as a response from the Intermediate Nameserver that
|
||
indicates it is tailored for one network (the one passed in the
|
||
original query, since the ADDRESS must match) when actually it is for
|
||
another network (the one which contains the address that the
|
||
Intermediate Nameserver saw as making the query).
|
||
|
||
8. IANA Considerations
|
||
|
||
IANA has assigned option code 8 in the "DNS EDNS0 Option Codes (OPT)"
|
||
registry to edns-client-subnet.
|
||
|
||
IANA has updated the reference to refer to this RFC.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 18]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
9. DNSSEC Considerations
|
||
|
||
The presence or absence of an EDNS0 OPT resource record ([RFC6891])
|
||
containing an ECS option in a DNS query does not change the usage of
|
||
the resource records and mechanisms used to provide data origin
|
||
authentication and data integrity to the DNS, as described in
|
||
[RFC4033], [RFC4034], and [RFC4035]. OPT records are not signed.
|
||
|
||
Use of this option, however, does imply increased DNS traffic between
|
||
any given Recursive Resolver and Authoritative Nameserver, which
|
||
could be another barrier to further DNSSEC adoption in this area.
|
||
|
||
The initial version of this protocol, against which several
|
||
Authoritative and Recursive Nameserver implementations were written,
|
||
did not discuss the handling of DNSSEC RRs; thus, it is expected that
|
||
there are operational inconsistencies in handling them.
|
||
|
||
Given the intention of this document to describe how ECS is currently
|
||
deployed, specifying new requirements for DNSSEC handling is out of
|
||
scope. However, some recommendations can be made as to what is most
|
||
likely to result in successful interoperation for a DNSSEC-signed ECS
|
||
zone, mainly from the point of view of Authoritative Nameservers.
|
||
|
||
Most DNSSEC records SHOULD be scoped at /0, except for the RRSIG
|
||
records, which MUST be tied to the RRset that they sign in a Tailored
|
||
Response. While it is possible to conceive of a way to get other
|
||
DNSSEC records working in a network-specific way, it has little
|
||
apparent benefit or likelihood of working with deployed validating
|
||
resolvers.
|
||
|
||
One further implication here is that, despite the discussion about
|
||
negative answers in Section 7.4, scoping NextSECure (NSEC) or NSEC3
|
||
records at /0 per the previous paragraph necessarily implies that
|
||
DNSSEC-signed negative answers must also be network-invariant.
|
||
|
||
10. NAT Considerations
|
||
|
||
Special awareness of ECS in devices that perform Network Address
|
||
Translation (NAT) as described in [RFC2663] is not required; queries
|
||
can be passed through as is. The client's network address SHOULD NOT
|
||
be added, and existing ECS options, if present, SHOULD NOT be
|
||
modified by NAT devices.
|
||
|
||
In large-scale global networks behind a NAT device (but, for example
|
||
with Centralized Resolver infrastructure), an internal Intermediate
|
||
Nameserver might have detailed network layout information, and may
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 19]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
know which external subnets are used for egress traffic by each
|
||
internal network. In such cases, the Intermediate Nameserver MAY use
|
||
that information when originating ECS options.
|
||
|
||
In other cases, if a Recursive Resolver knows that it is situated
|
||
behind a NAT device, it SHOULD NOT originate ECS options with their
|
||
external IP address and instead rely on downstream Intermediate
|
||
Nameservers to do so. It MAY, however, choose to include the option
|
||
with their internal address for the purposes of signaling its own
|
||
limit for SOURCE PREFIX-LENGTH.
|
||
|
||
Full treatment of special network addresses is beyond the scope of
|
||
this document; handling them will likely differ according to the
|
||
operational environments of each service provider. As a general
|
||
guideline, if an Authoritative Nameserver on the publicly routed
|
||
Internet receives a query that specifies an ADDRESS in [RFC1918] or
|
||
[RFC4193] private address space, it SHOULD ignore ADDRESS and look up
|
||
its answer based on the address of the Recursive Resolver. In the
|
||
response, it SHOULD set SCOPE PREFIX-LENGTH to cover all of the
|
||
relevant private space. For example, a query for ADDRESS 10.1.2.0
|
||
with a SOURCE PREFIX-LENGTH of 24 would get a returned SCOPE PREFIX-
|
||
LENGTH of 8. The Intermediate Nameserver MAY elect to cache the
|
||
answer under one entry for special-purpose addresses [RFC6890]; see
|
||
Section 11.3 of this document.
|
||
|
||
11. Security Considerations
|
||
|
||
11.1. Privacy
|
||
|
||
With the ECS option, the network address of the client that initiated
|
||
the resolution becomes visible to all servers involved in the
|
||
resolution process. Additionally, it will be visible from any
|
||
network traversed by the DNS packets.
|
||
|
||
To protect users' privacy, Recursive Resolvers are strongly
|
||
encouraged to conceal part of the user's IP address by truncating
|
||
IPv4 addresses to 24 bits. 56 bits are recommended for IPv6, based on
|
||
[RFC6177].
|
||
|
||
ISPs should have more detailed knowledge of their own networks. That
|
||
is, they might know that all 24-bit prefixes in a /20 are in the same
|
||
area. In those cases, for optimal cache utilization and improved
|
||
privacy, the ISP's Recursive Resolver SHOULD truncate IP addresses in
|
||
this /20 to just 20 bits, instead of 24 as recommended above.
|
||
|
||
Users who wish their full IP address to be hidden need to configure
|
||
their client software, if possible, to include an ECS option
|
||
specifying the wildcard address (i.e., a SOURCE PREFIX-LENGTH of 0).
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 20]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
As described in previous sections, this option will be forwarded
|
||
across all the Recursive Resolvers supporting ECS, which MUST NOT
|
||
modify it to include the network address of the client.
|
||
|
||
Note that even without an ECS option, any server queried directly by
|
||
the user will be able to see the full client IP address. Recursive
|
||
Resolvers or Authoritative Nameservers MAY use the source IP address
|
||
of queries to return a cached entry or to generate a Tailored
|
||
Response that best matches the query.
|
||
|
||
11.2. Birthday Attacks
|
||
|
||
ECS adds information to the DNS query tuple (q-tuple). This allows
|
||
an attacker to send a caching Intermediate Nameserver multiple
|
||
queries with spoofed IP addresses either in the ECS option or as the
|
||
source IP. These queries will trigger multiple outgoing queries with
|
||
the same name, type, and class, just with different address
|
||
information in the ECS option.
|
||
|
||
With multiple queries for the same name in flight, the attacker has a
|
||
higher chance of success to send a matching response with SCOPE
|
||
PREFIX-LENGTH set to 0 to get it cached for all hosts.
|
||
|
||
To counter this, the ECS option in a response packet MUST contain the
|
||
full FAMILY, ADDRESS, and SOURCE PREFIX-LENGTH fields from the
|
||
corresponding query. Intermediate Nameservers processing a response
|
||
MUST verify that these match, and they SHOULD discard the entire
|
||
response if they do not.
|
||
|
||
The requirement to discard is categorized as "SHOULD" instead of
|
||
"MUST" because it stands in opposition to the instruction in
|
||
Section 7.3, which states that a response lacking an ECS option
|
||
should be treated as though it had one of SCOPE PREFIX-LENGTH of 0.
|
||
If that is always true, then an attacker does not need to worry about
|
||
matching the original ECS option data and just needs to flood back
|
||
responses that have no ECS option at all.
|
||
|
||
This type of attack could be detected in ongoing operations by
|
||
marking whether the responding nameserver had previously been sending
|
||
ECS options and/or by taking note of an incoming flood of bogus
|
||
responses and flagging the relevant query for re-resolution. This
|
||
type of detection is more complex than existing nameserver responses
|
||
to spoof floods, and it would also need to be sensitive to a
|
||
nameserver legitimately stopping ECS replies even though it had
|
||
previously given them.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 21]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
11.3. Cache Pollution
|
||
|
||
It is simple for an arbitrary resolver or client to provide false
|
||
information in the ECS option, or to send UDP packets with forged
|
||
source IP addresses.
|
||
|
||
This could be used to:
|
||
|
||
o pollute the cache of Intermediate Resolvers by filling it with
|
||
results that will rarely (if ever) be used.
|
||
|
||
o reverse-engineer the algorithms (or data) used by the
|
||
Authoritative Nameserver to calculate Tailored Responses.
|
||
|
||
o mount a denial-of-service attack against an Intermediate
|
||
Nameserver by forcing it to perform many more recursive queries
|
||
than it would normally do, due to how caching is handled for
|
||
queries containing the ECS option.
|
||
|
||
Even without malicious intent, Centralized Resolvers providing
|
||
answers to clients in multiple networks will need to cache different
|
||
responses for different networks, putting more memory pressure on the
|
||
cache.
|
||
|
||
To mitigate those problems:
|
||
|
||
o Recursive Resolvers implementing ECS should only enable it in
|
||
deployments where it is expected to bring clear advantages to the
|
||
end users, such as when expecting clients from a variety of
|
||
networks or from a wide geographical area. Due to the high cache
|
||
pressure introduced by ECS, the feature SHOULD be disabled in all
|
||
default configurations.
|
||
|
||
o Recursive Resolvers SHOULD limit the number of networks and
|
||
answers they keep in the cache for any given query.
|
||
|
||
o Recursive Resolvers SHOULD limit the total number of different
|
||
networks that they keep in cache.
|
||
|
||
o Recursive Resolvers MUST NOT send an ECS option with SOURCE
|
||
PREFIX-LENGTH providing more bits in ADDRESS than they are willing
|
||
to cache responses for.
|
||
|
||
o Recursive Resolvers should implement algorithms to improve the
|
||
cache hit rate, given the size constraints indicated above.
|
||
Recursive Resolvers MAY, for example, decide to discard more-
|
||
specific cache entries first.
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 22]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
o Authoritative Nameservers and Recursive Resolvers should discard
|
||
ECS options that are either obviously forged or otherwise known to
|
||
be wrong. They SHOULD at least treat unroutable addresses, such
|
||
as some of the address blocks defined in [RFC6890], as equivalent
|
||
to the Recursive Resolver's own identity. They SHOULD ignore and
|
||
never forward ECS options specifying other routable addresses that
|
||
are known not to be served by the query source.
|
||
|
||
o The ECS option is just a hint to Authoritative Nameservers for
|
||
customizing results. They can decide to ignore the content of the
|
||
ECS option based on blacklists or whitelists, rate-limiting
|
||
mechanisms, or any other logic implemented in the software.
|
||
|
||
12. Sending the Option
|
||
|
||
When implementing a Recursive Resolver, there are two strategies on
|
||
deciding when to include an ECS option in a query. At this stage,
|
||
it's not clear which strategy is best.
|
||
|
||
12.1. Probing
|
||
|
||
A Recursive Resolver can send the ECS option with every outgoing
|
||
query. However, it is RECOMMENDED that resolvers remember which
|
||
Authoritative Nameservers did not return the option with their
|
||
response and omit client address information from subsequent queries
|
||
to those nameservers.
|
||
|
||
Additionally, Recursive Resolvers SHOULD be configured never to send
|
||
the option when querying root, top-level, and effective top-level
|
||
(i.e., "public suffix" [Public_Suffix_List]) domain servers. These
|
||
domains are delegation-centric and are very unlikely to generate
|
||
different responses based on the address of the client.
|
||
|
||
When probing, it is important that several things are probed: support
|
||
for ECS, support for EDNS0, support for EDNS0 options, or possibly an
|
||
unreachable nameserver. Various implementations are known to drop
|
||
DNS packets with OPT RRs (with or without options), thus several
|
||
probes are required to discover what is supported.
|
||
|
||
Probing, if implemented, MUST be repeated periodically, e.g., daily.
|
||
If an Authoritative Nameserver indicates ECS support for one zone, it
|
||
is to be expected that the nameserver supports ECS for all of its
|
||
zones. Likewise, an Authoritative Nameserver that uses ECS
|
||
information for one of its zones MUST indicate support for the option
|
||
in all of its responses to ECS queries. If the option is supported
|
||
but not actually used for generating a response, its SCOPE PREFIX-
|
||
LENGTH MUST be set to 0.
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 23]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
12.2. Whitelist
|
||
|
||
As described previously, it is expected that only a few Recursive
|
||
Resolvers will need to use ECS, and that it will generally be enabled
|
||
only if it offers a clear benefit to the users.
|
||
|
||
To avoid the complexity of implementing a probing and detection
|
||
mechanism (and the possible query loss/delay that may come with it),
|
||
an implementation could use a whitelist of Authoritative Nameservers
|
||
to send the option to, likely specified by their domain name.
|
||
Implementations MAY also allow additional configuring of this based
|
||
on other criteria, such as zone or query type. As of the time of
|
||
this writing, at least one implementation makes use of a whitelist.
|
||
|
||
An advantage of using a whitelist is that partial client address
|
||
information is only disclosed to nameservers that are known to use
|
||
the information, improving privacy.
|
||
|
||
A drawback is scalability. The operator needs to track which
|
||
Authoritative Nameservers support ECS, making it harder for new
|
||
Authoritative Nameservers to start using the option.
|
||
|
||
Similarly, Authoritative Nameservers can also use whitelists to limit
|
||
the feature to only certain clients. For example, a CDN that does
|
||
not want all of their mapping trivially walked might require a legal
|
||
agreement with the Recursive Resolver operator, to clearly describe
|
||
the acceptable use of the feature.
|
||
|
||
The maintenance of access control mechanisms is out of scope for this
|
||
protocol definition.
|
||
|
||
13. Example
|
||
|
||
1. A Stub Resolver, SR, with the IP address
|
||
2001:0db8:fd13:4231:2112:8a2e:c37b:7334 tries to resolve
|
||
www.example.com by forwarding the query to the Recursive
|
||
Resolver, RNS, asking for recursion.
|
||
|
||
2. RNS, supporting ECS, looks up www.example.com in its cache. An
|
||
entry is found neither for www.example.com nor for example.com.
|
||
|
||
3. RNS builds a query to send to the root and .com servers. The
|
||
implementation of RNS provides facilities so that an
|
||
administrator can configure it not to forward ECS in certain
|
||
cases. In particular, RNS is configured not to include an ECS
|
||
option when talking to Top-Level-Domain or root nameservers, as
|
||
described in Section 7.1. Thus, no ECS option is added, and
|
||
resolution is performed as usual.
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 24]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
4. RNS now knows the next server to query: the Authoritative
|
||
Nameserver, ANS, responsible for example.com.
|
||
|
||
5. RNS prepares a new query for www.example.com, including an ECS
|
||
option with:
|
||
|
||
* OPTION-CODE set to 8.
|
||
|
||
* OPTION-LENGTH set to 0x00 0x0b for the following fixed 4
|
||
octets plus the 7 octets that will be used for ADDRESS.
|
||
|
||
* FAMILY set to 0x00 0x02, as IP is an IPv6 address.
|
||
|
||
* SOURCE PREFIX-LENGTH set to 0x38, as RNS is configured to
|
||
conceal the last 72 bits of every IPv6 address.
|
||
|
||
* SCOPE PREFIX-LENGTH set to 0x00, as specified by this
|
||
document for all queries.
|
||
|
||
* ADDRESS set to 0x20 0x01 0x0d 0xb8 0xfd 0x13 0x42, providing
|
||
only the first 56 bits of the IPv6 address.
|
||
|
||
6. The query is sent. ANS understands and uses ECS. It parses the
|
||
ECS option, and generates a Tailored Response.
|
||
|
||
7. Due its internal implementation, ANS finds a response that is
|
||
tailored for the whole /16 of the client that performed the
|
||
query.
|
||
|
||
8. ANS adds an ECS option in the response, containing:
|
||
|
||
* OPTION-CODE set to 8.
|
||
|
||
* OPTION-LENGTH set to 0x00 0x07.
|
||
|
||
* FAMILY set to 0x00 0x02.
|
||
|
||
* SOURCE PREFIX-LENGTH set to 0x38, copied from the query.
|
||
|
||
* SCOPE PREFIX-LENGTH set to 0x30, indicating a /48 network.
|
||
|
||
* ADDRESS set to 0x20 0x01 0x0d 0xb8 0xfd 0x13 0x42, copied
|
||
from the query.
|
||
|
||
9. RNS receives the response containing an ECS option. It verifies
|
||
that FAMILY, SOURCE PREFIX-LENGTH, and ADDRESS match the query.
|
||
If not, the message is discarded.
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 25]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
10. The response is interpreted as usual. Since the response
|
||
contains an ECS option, ADDRESS, SCOPE PREFIX-LENGTH, and FAMILY
|
||
in the response are used to cache the entry.
|
||
|
||
11. RNS sends a response to Stub Resolver, SR, without including an
|
||
ECS option.
|
||
|
||
12. RNS receives another query to resolve www.example.com. This
|
||
time, a response is cached. The response, however, is tied to a
|
||
particular network. If the client's address matches any network
|
||
in the cache, then the response is returned from the cache.
|
||
Otherwise, another query is performed. If multiple results
|
||
match, the one with the longest SCOPE PREFIX-LENGTH is chosen,
|
||
as per common best-network-match algorithms.
|
||
|
||
14. References
|
||
|
||
14.1. Normative References
|
||
|
||
[RFC1034] Mockapetris, P., "Domain Names - Concepts and Facilities",
|
||
STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
|
||
<http://www.rfc-editor.org/info/rfc1034>.
|
||
|
||
[RFC1035] Mockapetris, P., "Domain Names - Implementation and
|
||
Specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
|
||
November 1987, <http://www.rfc-editor.org/info/rfc1035>.
|
||
|
||
[RFC1700] Reynolds, J. and J. Postel, "Assigned Numbers", RFC 1700,
|
||
DOI 10.17487/RFC1700, October 1994,
|
||
<http://www.rfc-editor.org/info/rfc1700>.
|
||
|
||
[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G.,
|
||
and E. Lear, "Address Allocation for Private Internets",
|
||
BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996,
|
||
<http://www.rfc-editor.org/info/rfc1918>.
|
||
|
||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||
Requirement Levels", BCP 14, RFC 2119,
|
||
DOI 10.17487/RFC2119, March 1997,
|
||
<http://www.rfc-editor.org/info/rfc2119>.
|
||
|
||
[RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
|
||
Rose, "DNS Security Introduction and Requirements",
|
||
RFC 4033, DOI 10.17487/RFC4033, March 2005,
|
||
<http://www.rfc-editor.org/info/rfc4033>.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 26]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
[RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
|
||
Rose, "Resource Records for the DNS Security Extensions",
|
||
RFC 4034, DOI 10.17487/RFC4034, March 2005,
|
||
<http://www.rfc-editor.org/info/rfc4034>.
|
||
|
||
[RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S.
|
||
Rose, "Protocol Modifications for the DNS Security
|
||
Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
|
||
<http://www.rfc-editor.org/info/rfc4035>.
|
||
|
||
[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
|
||
Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,
|
||
<http://www.rfc-editor.org/info/rfc4193>.
|
||
|
||
[RFC6177] Narten, T., Huston, G., and L. Roberts, "IPv6 Address
|
||
Assignment to End Sites", BCP 157, RFC 6177,
|
||
DOI 10.17487/RFC6177, March 2011,
|
||
<http://www.rfc-editor.org/info/rfc6177>.
|
||
|
||
[RFC6890] Cotton, M., Vegoda, L., Bonica, R., Ed., and B. Haberman,
|
||
"Special-Purpose IP Address Registries", BCP 153,
|
||
RFC 6890, DOI 10.17487/RFC6890, April 2013,
|
||
<http://www.rfc-editor.org/info/rfc6890>.
|
||
|
||
[RFC6891] Damas, J., Graff, M., and P. Vixie, "Extension Mechanisms
|
||
for DNS (EDNS(0))", STD 75, RFC 6891,
|
||
DOI 10.17487/RFC6891, April 2013,
|
||
<http://www.rfc-editor.org/info/rfc6891>.
|
||
|
||
14.2. Informative References
|
||
|
||
[Address_Family_Numbers]
|
||
IANA, "Address Family Numbers",
|
||
<http://www.iana.org/assignments/address-family-numbers>.
|
||
|
||
[DPRIVE_Working_Group]
|
||
IETF, "PNS PRIVate Exchange (dprive) DPRIVE Working
|
||
Group", 2015,
|
||
<https://datatracker.ietf.org/wg/dprive/charter/>.
|
||
|
||
[METADATA]
|
||
Hardie, T., Ed., "Design considerations for Metadata
|
||
Insertion", Work in Progress, draft-hardie-privsec-
|
||
metadata-insertion-02, March 2016.
|
||
|
||
[Public_Suffix_List]
|
||
"Public Suffix List", <https://publicsuffix.org/>.
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 27]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
[RFC2308] Andrews, M., "Negative Caching of DNS Queries (DNS
|
||
NCACHE)", RFC 2308, DOI 10.17487/RFC2308, March 1998,
|
||
<http://www.rfc-editor.org/info/rfc2308>.
|
||
|
||
[RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address
|
||
Translator (NAT) Terminology and Considerations",
|
||
RFC 2663, DOI 10.17487/RFC2663, August 1999,
|
||
<http://www.rfc-editor.org/info/rfc2663>.
|
||
|
||
[RFC7719] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS
|
||
Terminology", RFC 7719, DOI 10.17487/RFC7719, December
|
||
2015, <http://www.rfc-editor.org/info/rfc7719>.
|
||
|
||
[VANDERGAAST]
|
||
Contavalli, C., Gaast, W., Leach, S., and E. Lewis,
|
||
"Client Subnet in DNS Requests", Work in Progress,
|
||
draft-vandergaast-edns-client-subnet-02, July 2013.
|
||
|
||
Acknowledgements
|
||
|
||
The authors wish to thank Darryl Rodden for his work as a co-author,
|
||
and the following people for reviewing this document and for
|
||
providing useful feedback: Paul S. R. Chisholm, B. Narendran,
|
||
Leonidas Kontothanassis, David Presotto, Philip Rowlands, Chris
|
||
Morrow, Kara Moscoe, Alex Nizhner, Warren Kumari, and Richard Rabbat
|
||
from Google; Terry Farmer, Mark Teodoro, Edward Lewis, and Eric
|
||
Burger from Neustar; David Ulevitch and Matthew Dempsky from OpenDNS;
|
||
Patrick W. Gilmore and Steve Hill from Akamai; Colm MacCarthaigh and
|
||
Richard Sheehan from Amazon; Tatuya Jinmei from Infoblox; Andrew
|
||
Sullivan from Dyn; John Dickinson from Sinodun; Mark Delany from
|
||
Apple; Yuri Schaeffer from NLnet Labs; Duane Wessels Verisign;
|
||
Antonio Querubin; Daniel Kahn Gillmor from the ACLU; Evan Hunt and
|
||
Mukund Sivaraman from the Internet Software Consortium; Russ Housley
|
||
from Vigilsec; Stephen Farrell from Trinity College Dublin; Alissa
|
||
Cooper from Cisco; Suzanne Woolf; and all of the other people that
|
||
replied to our emails on various mailing lists.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 28]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Contributors
|
||
|
||
The individuals below contributed significantly to this document.
|
||
|
||
Edward Lewis
|
||
ICANN
|
||
12025 Waterfront Drive, Suite 300
|
||
Los Angeles, CA 90094-2536
|
||
United States
|
||
|
||
Email: edward.lewis@icann.org
|
||
|
||
|
||
Sean Leach
|
||
Fastly
|
||
P.O. Box 78266
|
||
San Francisco, CA 94107
|
||
United States
|
||
|
||
|
||
Jason Moreau
|
||
Akamai Technologies
|
||
150 Broadway
|
||
Cambridge, MA 02142-1413
|
||
United States
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 29]
|
||
|
||
RFC 7871 Client Subnet in DNS Queries May 2016
|
||
|
||
|
||
Authors' Addresses
|
||
|
||
Carlo Contavalli
|
||
Google
|
||
1600 Amphitheater Parkway
|
||
Mountain View, CA 94043
|
||
United States
|
||
|
||
Email: ccontavalli@google.com
|
||
|
||
|
||
Wilmer van der Gaast
|
||
Google
|
||
Belgrave House, 76 Buckingham Palace Road
|
||
London SW1W 9TQ
|
||
United Kingdom
|
||
|
||
Email: wilmer@google.com
|
||
|
||
|
||
David C Lawrence
|
||
Akamai Technologies
|
||
150 Broadway
|
||
Cambridge, MA 02142-1054
|
||
United States
|
||
|
||
Email: tale@akamai.com
|
||
|
||
|
||
Warren Kumari
|
||
Google
|
||
1600 Amphitheatre Parkway
|
||
Mountain View, CA 94043
|
||
United States
|
||
|
||
Email: warren@kumari.net
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Contavalli, et al. Informational [Page 30]
|
||
|