<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version  -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dkgjsal-dprive-unilateral-probing-01" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title abbrev="Unilateral Encrypted Authoritative DNS">Unilateral Opportunistic Deployment of Encrypted Recursive-to-Authoritative DNS</title>
    <seriesInfo name="Internet-Draft" value="draft-dkgjsal-dprive-unilateral-probing-01"/>
    <author initials="D.K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization abbrev="ACLU">American Civil Liberties Union</organization>
      <address>
        <postal>
          <street>125 Broad St.</street>
          <city>New York, NY</city>
          <code>10004</code>
          <country>USA</country>
        </postal>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>
    <author initials="J." surname="Salazar" fullname="Joey Salazar">
      <organization abbrev="A19">ARTICLE 19</organization>
      <address>
        <postal>
          <street>108-114 Golden Lane</street>
          <city>London</city>
          <code>EC1Y 0TL</code>
          <country>UK</country>
        </postal>
        <email>joeygsal@gmail.com</email>
      </address>
    </author>
    <date year="2021" month="December" day="09"/>
    <area>int</area>
    <workgroup>dprive</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This draft sets out steps that DNS servers (recursive resolvers and authoritative servers) can take unilaterally (without any coordination with other peers) to defend DNS query privacy against a passive network monitor.
The steps in this draft can be defeated by an active attacker, but should be simpler and less risky to deploy than more powerful defenses.
The draft also introduces (but does not try to specify) the semantics of signalling that would permit defense against an active attacker.</t>
      <t>The goal of this draft is to simplify and speed deployment of opportunistic encrypted transport in the recursive-to-authoritative hop of the DNS ecosystem.
With wider easy deployment of the underlying transport on an opportunistic basis, we hope to facilitate the future specification of stronger cryptographic protections against more powerful attacks.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <section anchor="requirements-language" numbered="true" toc="default">
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 (<xref target="RFC2119" format="default"/> and <xref target="RFC8174" format="default"/>) when, and only when, they appear in all capitals, as shown here.</t>
      </section>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <ul spacing="normal">
          <li>"unilateral" means capable of opportunistic probing deployment without external coordination with any of the other parties</li>
          <li>Do53 refers to traditional cleartext DNS over port 53 (<xref target="RFC1035" format="default"/>)</li>
          <li>DoQ refers to DNS-over-QUIC (<xref target="I-D.ietf-dprive-dnsoquic" format="default"/>)</li>
          <li>DoT refers to DNS-over-TLS (<xref target="RFC7858" format="default"/>)</li>
          <li>DoH refers to DNS-over-HTTPS (<xref target="RFC8484" format="default"/>)</li>
          <li>Encrypted transports refers to DoQ, DoT, and DoH collectively</li>
        </ul>
      </section>
    </section>
    <section anchor="priorities" numbered="true" toc="default">
      <name>Priorities</name>
      <t>This document aims to provide guidance to implementers who want to simply enable protection against passive network observers.</t>
      <t>In particular, it focuses on mechanisms that can be adopted unilaterally by recursive resolvers and authoritative servers, without any explicit coordination with the other parties.
This guidance provides opportunistic security (see <xref target="RFC7435" format="default"/>) -- encrypting things that would otherwise be in the clear, without interfering with or weakening stronger forms of security.</t>
      <section anchor="minimizing-negative-impacts" numbered="true" toc="default">
        <name>Minimizing Negative Impacts</name>
        <t>It also aims to minimize potentially negative impacts caused by the probing of encrypted transports -- for the systems that adopt these guidelines, for the parties that they communicate with in the "second hump" of the DNS camel, and for uninvolved third parties.
The negative impacts that we specifically try to minimize are:</t>
        <ul spacing="normal">
          <li>excessive bandwidth use</li>
          <li>excessive computational resources (CPU and memory in particular)</li>
          <li>amplification attacks (where DNS resolution infrastructure is wielded as part of a DoS attack)</li>
        </ul>
      </section>
      <section anchor="protocol-choices" numbered="true" toc="default">
        <name>Protocol Choices</name>
        <t>While this document focuses specifically on strategies used by DNS servers, it does not go into detail on the specific protocols used, as those protocols --- in particular, DoT and DoQ --- are described in other documents.</t>
        <t>This document does not pursue the use of DoH in this context, because a DoH client needs to know the path part of a DoH endpoint URL, and there are currently no mechanisms for a DNS resolver to predict the path on its own, in an opportunistic or unilateral fashion, without incurring in excessive use of resources.
For instance, a recursive resolver in theory could guess the full path to a queried IP address by trying all the URL paths that the client has in records and see if one of those works, but even though it can be expected that this would work 99% of the time with fewer than 100 probes, this technique would likely incur in excessive resource consumption potentially leading to vulnerabilities and amplification attacks.
The authors of this draft particularly welcome ideas and contributions from the community that lead to a suitable mechanism for unilaterally probing for DoH-capable authoritative servers, for later consideration in this or other drafts.</t>
      </section>
    </section>
    <section anchor="authoritative-guidance" numbered="true" toc="default">
      <name>Guidance for Authoritative Servers</name>
      <t>An authoritative server SHOULD implement and deploy  DNS-over-TLS (DoT) on TCP port 853.</t>
      <t>An authoritative server MAY implement and deploy DNS-over-QUIC (DoQ) on UDP port 853.</t>
      <section anchor="authoritative-pools" numbered="true" toc="default">
        <name>Pooled Authoritative Servers Behind a Single IP Address</name>
        <t>Some authoritative DNS servers are structured as a pool of authoritatives standing behind a load-balancer that runs on a single IP address, forwarding queries to members of the pool.</t>
        <t>In such a deployment, individual members of the pool typically get updated independently from each other.</t>
        <t>A recursive resolver following the guidance in <xref target="recursive-guidance" format="default"/> that interacts with such a pool likely does not know that it is a pool.
If some members of the pool are updated to follow this guidance while others are not, the recursive client might see the pool as a single authoritative server that sometimes offers and sometimes refuses encrypted transport.</t>
        <t>To avoid incurring additional minor timeouts for such a recursive resolver, the pool operator SHOULD either:</t>
        <ul spacing="normal">
          <li>ensure that all members of the pool enable the same encrypted transport(s) simultaneously, or</li>
          <li>ensure that the load balancer maps client requests to pool members based on client IP addresses.</li>
        </ul>
        <t>Similar concerns apply to authoritative servers responding from an anycast IP address.
As long as the pool of servers is in a heterogenous state, any flapping route that switches a given client IP address to a different responder risks incurring an additional timeout.
Frequent changes of routing for anycast listening IP addresses are also likely to cause problems for TLS, TCP, or QUIC connection state as well, so stable routes are important to ensure that the service remains available and responsive.</t>
      </section>
      <section anchor="authentication" numbered="true" toc="default">
        <name>Authentication</name>
        <t>For unilateral deployment, an authoritative server does not need to offer any particular form of authentication.</t>
        <t>The simplest deployment would simply provide a self-issued, regularly-updated X.509 certificate.
This mechanism is supported by many TLS and QUIC clients, and will be acceptable for any opportunistic connection.</t>
        <t>Possible alternate forms of server authentication include:</t>
        <ul spacing="normal">
          <li>an X.509 Certificate issued by a widely-known certification authority associated with the common NS names used for this authoritative server</li>
          <li>DANE authentication (potentially including the TLS handshake)</li>
        </ul>
      </section>
      <section anchor="authoritative-sni" numbered="true" toc="default">
        <name>Server Name Indication</name>
        <t>An authoritative DNS server that wants to handle unilateral queries MAY rely on Server Name Indication (SNI) to select alternate server credentials.
However, such a server MUST NOT serve resource records that differ based on SNI (or on the lack of SNI) provided by the client.</t>
      </section>
      <section anchor="authoritative-resource-exhaustion" numbered="true" toc="default">
        <name>Resource Exhaustion</name>
        <t>A well-behaved recursive resolver may keep an encrypted connection open to an authoritative server, to amortize the costs of connection setup for both parties.</t>
        <t>However, some authoritative servers may have insufficient resources available to keep many connections open concurrently.</t>
        <t>An authoritative server facing resource exhaustion SHOULD cleanly close open connections from recursive resolvers based on the authoritative's preferred prioritization.</t>
        <t>A reasonable prioritization scheme would be to close connections in this order, until resources are back in control:</t>
        <ul spacing="normal">
          <li>connections with no outstanding queries, ordered by idle time (longest idle time gets closed first)</li>
          <li>connections with outstanding queries, ordered by age of outstanding query (oldest outstanding query gets closed first)</li>
        </ul>
        <t>When resources are especially tight, the authoritative server may also decline to accept new connections over encrypted transport.</t>
      </section>
    </section>
    <section anchor="recursive-guidance" numbered="true" toc="default">
      <name>Guidance for recursive resolvers</name>
      <t>This section outlines a probing policy suitable for unilateral adoption by any recursive resolver.
Following this policy should not result in failed resolutions or significant delay.</t>
      <section anchor="overall-recursive-resolver-settings" numbered="true" toc="default">
        <name>Overall recursive resolver Settings</name>
        <t>A recursive resolver implementing this draft must set system-wide values for some default parameters.
These parameters may be set independently for each supported encrypted transport, though a simple implementation may keep the parameters constant across encrypted transports.</t>
        <table align="center">
          <name>recursive resolver system parameters per encrypted transport</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Suggested Default</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>persistence</tt></td>
              <td align="left">How long should the recursive resolver remember successful encrypted transport connections?</td>
              <td align="left">3 days (259200 seconds)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>damping</tt></td>
              <td align="left">How long should the recursive resolver remember unsuccessful encrypted transport connections?</td>
              <td align="left">1 day (86400 seconds)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>timeout</tt></td>
              <td align="left">How long should the recursive resolver wait for an initiated encrypted connection to complete?</td>
              <td align="left">4 seconds</td>
            </tr>
          </tbody>
        </table>
        <t>This document uses the notation <tt>E-foo</tt> to refer to the <tt>foo</tt> parameter for the encrypted transport <tt>E</tt>.</t>
        <t>For example <tt>DoT-persistence</tt> would indicate the length of time that the recursive resolver will remember that an authoritative server had a successful connection over <tt>DoT</tt>.</t>
        <t>This document also assumes that the resolver maintains a list of outstanding cleartext queries destined for the authoritative resolver's IP address <tt>X</tt>.
This list is referred to as <tt>Do53-queries[X]</tt>.
This document does not attempt to describe the specific operation of sending and receiving cleartext DNS queries (Do53) for a recursive resolver.
Instead it describes a "bolt-on" mechanism that extends the recursive resolver's operation on a few simple hooks into the recursive resolver's existing handling of Do53.</t>
        <t>Implementers or deployers of DNS recursive resolvers that follow the strategies in this document are encouraged to report their preferred values of these parameters.</t>
      </section>
      <section anchor="recursive-resolver-requirements" numbered="true" toc="default">
        <name>Recursive Resolver Requirements</name>
        <t>To follow this guidance, a recursive resolver MUST implement at least one of either DoT or DoQ in its capacity as a client of authoritative nameservers.</t>
        <t>A recursive resolver SHOULD implement the client side of DNS-over-TLS (DoT).
A recursive resolver MAY implement the client side of DNS-over-QUIC (DoQ).</t>
        <t>DoT queries from the recursive resolver MUST target TCP port 853, with an ALPN of <tt>dot</tt>.
DoQ queries from the recursive resolver MUST target UDP port 853, with an ALPN of <tt>doq</tt>.</t>
        <t>While this document focuses on the recursive-to-authoritative hop, a recursive resolver implementing these strategies SHOULD also accept queries from its clients over some encrypted transport (current common transports are DoH or DoT).</t>
      </section>
      <section anchor="authoritative-server-encrypted-transport-connection-state" numbered="true" toc="default">
        <name>Authoritative Server Encrypted Transport Connection State</name>
        <t>The recursive resolver SHOULD keep a record of the state for each authoritative server it contacts, indexed by the IP address of the authoritative server and the encrypted transports supported by the recursive resolver.</t>
        <t>Each record should contain the following fields for each supported encrypted transport, each of which would initially be <tt>null</tt>:</t>
        <table align="center">
          <name>recursive resolver state per authoritative IP, per encrypted transport</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Description</th>
              <th align="left">Retain Across Reset</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>session</tt></td>
              <td align="left">The associated state of any existing, established session (the structure of this value is dependent on the encrypted transport implementation).  If <tt>session</tt> is not <tt>null</tt>, it may be in one of two states: <tt>pending</tt> or <tt>established</tt></td>
              <td align="left">N</td>
            </tr>
            <tr>
              <td align="left">
                <tt>initiated</tt></td>
              <td align="left">Timestamp of most recent connection attempt</td>
              <td align="left">Y</td>
            </tr>
            <tr>
              <td align="left">
                <tt>completed</tt></td>
              <td align="left">Timestamp of most recent completed handshake</td>
              <td align="left">Y</td>
            </tr>
            <tr>
              <td align="left">
                <tt>status</tt></td>
              <td align="left">Enumerated value of <tt>success</tt> or <tt>fail</tt> or <tt>timeout</tt>, associated with the <tt>completed</tt> handshake</td>
              <td align="left">Y</td>
            </tr>
            <tr>
              <td align="left">
                <tt>resumptions</tt></td>
              <td align="left">A stack of resumption tickets (and associated parameters) that could be used to resume a prior successful connection</td>
              <td align="left">Y</td>
            </tr>
            <tr>
              <td align="left">
                <tt>queries</tt></td>
              <td align="left">A queue of queries intended for this authoritative server, each of which has additional status <tt>early</tt>, <tt>unsent</tt>, or <tt>sent</tt></td>
              <td align="left">N</td>
            </tr>
            <tr>
              <td align="left">
                <tt>last-activity</tt></td>
              <td align="left">A timestamp of the most recent activity on the connection</td>
              <td align="left">N</td>
            </tr>
          </tbody>
        </table>
        <t>Note that the <tt>session</tt> fields in aggregate constitute a pool of open connections to different servers.</t>
        <t>With the exception of the <tt>session</tt>, <tt>queries</tt>, and <tt>last-activity</tt> fields, this cache information should be kept across restart of the server unless explicitly cleared by administrative action.</t>
        <t>This document uses the notation <tt>E-foo[X]</tt> to indicate the value of field <tt>foo</tt> for encrypted transport <tt>E</tt> to IP address <tt>X</tt>.</t>
        <t>For example, <tt>DoT-initiated[192.0.2.4]</tt> represents the timestamp when the most recent DoT connection packet was sent to IP address 192.0.2.4.</t>
        <section anchor="resolver-binding" numbered="true" toc="default">
          <name>Separate State for Each of the Recursive Resolver's Own IP Addresses</name>
          <t>Note that the recursive resolver should record this per-authoritative-IP state for each IP address it uses as it sends its queries.
For example, if a recursive resolver can send a packet to authoritative servers from IP addresses <tt>192.0.2.100</tt> and <tt>192.0.2.200</tt>, it should keep two distinct sets of per-authoritative-IP state, one for each source address it uses.
Keeping these state tables distinct for each source address makes it possible for a pooled authoritative server behind a load balancer to do a partial rollout while minimizing accidental timeouts (see <xref target="authoritative-pools" format="default"/>).</t>
        </section>
      </section>
      <section anchor="maintaining-authoritative-state-by-ip-address" numbered="true" toc="default">
        <name>Maintaining Authoritative State by IP Address</name>
        <t>In designing a probing strategy, the recursive resolver could record its knowledge about any given authoritative server with different strategies, including at least:</t>
        <ul spacing="normal">
          <li>the authoritative server's IP address,</li>
          <li>the authoritative server's name (the NS record used), or</li>
          <li>the zone that contains the record being looked up.</li>
        </ul>
        <t>This draft encourages the first strategy, to minimize timeouts or accidental delays.</t>
        <t>A timeout (accidental delay) is most likely to happen when the recursive client believes that the authoritative server offers encrypted transport, but the actual server reached declines encrypted transport (or worse, filters the incoming traffic and does not even respond with an ICMP port closed message).</t>
        <t>By associating state with the IP address, the recursive client is most able to avoid reaching a heterogenous deployment.</t>
        <t>For example, consider an authoritative server named <tt>ns0.example.com</tt> that is served by two installations (with two <tt>A</tt> records), one at <tt>192.0.2.7</tt> that follows this guidance, and one at <tt>192.0.2.8</tt> that is a legacy (cleartext port 53-only) deployment.
A recursive client who associates state with the <tt>NS</tt> name and reaches <tt>.7</tt> first will "learn" that <tt>ns0.example.com</tt> supports encrypted transport.
A subsequent query over encrypted transport dispatched to <tt>.8</tt> would fail, potentially delaying the response.</t>
        <t>By associating the state with the authoritative IP address, the client can minimize the number of accidental delays introduced (see also <xref target="resolver-binding" format="default"/> and <xref target="authoritative-pools" format="default"/>).</t>
      </section>
      <section anchor="probing-policy" numbered="true" toc="default">
        <name>Probing Policy</name>
        <t>When a recursive resolver discovers the need for an authoritative lookup to an authoritative DNS server using IP address <tt>X</tt>, it retrieves the records associated with <tt>X</tt> from its cache.</t>
        <t>The following sections presume that the time of the discovery of the need for lookup is time <tt>T0</tt>.</t>
        <t>If any of the records discussed here are absent, they are treated as <tt>null</tt>.</t>
        <t>The recursive resolver must know to decide whether to initially send a query over Do53, or over any of the supported encrypted transports (DoT or DoQ).</t>
        <t>Note that a resolver might initiate this query via any or all of the known transports.
When multiple queries are sent, the initial packets for each connection can be sent concurrently, similar to "Happy Eyeballs" (<xref target="RFC8305" format="default"/>).
However, unlike Happy Eyeballs, when one transport succeeds, the other connections do not need to be terminated, but can instead be continued to establish whether the IP address <tt>X</tt> is capable of corresponding on the relevant transport.</t>
        <section anchor="sending-a-query-over-do53" numbered="true" toc="default">
          <name>Sending a query over Do53</name>
          <t>For any of the supported encrypted transports <tt>E</tt>, if either of the following holds true, the resolver SHOULD NOT send a query to <tt>X</tt> over Do53:</t>
          <ul spacing="normal">
            <li>
              <tt>E-session[X]</tt> is in the <tt>established</tt> state, or</li>
            <li>
              <tt>E-status[X]</tt> is <tt>success</tt>, and <tt>(T - E-completed[X]) &lt; persistence</tt></li>
          </ul>
          <t>Otherwise, if there is no outstanding session for any encrypted transport, and the last successful encrypted transport connection was long ago, the resolver sends a query to <tt>X</tt> over Do53.
When it does so, it inserts a handle for the query in <tt>Do53-queries[X]</tt>.</t>
        </section>
        <section anchor="receiving-a-response-over-do53" numbered="true" toc="default">
          <name>Receiving a response over Do53</name>
          <t>When a successful response <tt>R</tt> is received in cleartext from authoritative server <tt>X</tt> for a query <tt>Q</tt> that was sent over Do53, the recursive resolver should:</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>Q</tt> is in <tt>Do53-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>Return <tt>R</tt> to the requesting client</li>
              </ul>
            </li>
            <li>Remove <tt>Q</tt> from <tt>Do53-queries[X]</tt></li>
            <li>
              <t>For each supported encrypted transport <tt>E</tt>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>If <tt>Q</tt> is in <tt>E-queries[X]</tt>:
                  </t>
                  <ul spacing="normal">
                    <li>Remove <tt>Q</tt> from <tt>E-queries[X]</tt></li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
          <t>But if <tt>R</tt> is unsuccessful (e.g. <tt>SERVFAIL</tt>):</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>Q</tt> is in <tt>Do53-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>Remove <tt>Q</tt> from <tt>Do53-queries[X]</tt></li>
              </ul>
            </li>
            <li>
              <t>if <tt>Q</tt> is not in any of <tt>*-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>Return <tt>SERVFAIL</tt> to the client</li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="initiating-a-connection-over-encrypted-transport" numbered="true" toc="default">
          <name>Initiating a connection over encrypted transport</name>
          <t>If any <tt>E-session[X]</tt> is in the <tt>established</tt>, the recursive resolver SHOULD NOT initiate a new connection to <tt>X</tt> over any other transport, but should instead send a query through the existing session (see <xref target="sending" format="default"/>).
FIXME: What if there's a preferred transport, but the <tt>established</tt> session does not correspond to that preferred transport?</t>
          <t>Otherwise, the timer should examine and possibly refresh its state for encrypted transport <tt>E</tt> to authoritative IP address <tt>X</tt>:</t>
          <ul spacing="normal">
            <li>if <tt>E-session[X]</tt> is in state <tt>pending</tt>, and</li>
            <li>
              <t><tt>T - E-initiated[X] &gt; E-timeout</tt>, then
              </t>
              <ul spacing="normal">
                <li>set <tt>E-session[X]</tt> to <tt>null</tt> and</li>
                <li>set <tt>E-status[X]</tt> to <tt>timeout</tt></li>
              </ul>
            </li>
          </ul>
          <t>When resources are available to attempt a new encrypted transport, the resolver should only initiate a new connection to <tt>X</tt> over <tt>E</tt> as long as one of the following holds true:</t>
          <ul spacing="normal">
            <li>
              <tt>E-status[X]</tt> is <tt>success</tt>, or</li>
            <li>
              <tt>E-status[X]</tt> is <tt>fail</tt> or <tt>timeout</tt> and <tt>(T - E-completed[X]) &gt; damping</tt>, or</li>
            <li>
              <tt>E-status[X]</tt> is <tt>null</tt> and <tt>E-initiated[X]</tt> is <tt>null</tt></li>
          </ul>
          <t>When initiating a session to <tt>X</tt> over encrypted transport <tt>E</tt>, if <tt>E-resumptions[X]</tt> is not empty, one ticket should be popped off the stack and used to try to resume a previous session.
Otherwise, the initial Client Hello handshake should not try to resume any session.</t>
          <t>When initiating a connection, the resolver should take the following steps:</t>
          <ul spacing="normal">
            <li>set <tt>E-initiated[X]</tt> to <tt>T0</tt></li>
            <li>store a handle for the new session (which should have <tt>pending</tt> state)  in <tt>E-session[X]</tt></li>
            <li>insert a handle for the query that prompted this connection in <tt>E-queries[X]</tt>, with status <tt>unsent</tt> or <tt>early</tt>, as appropriate (see below).</li>
          </ul>
          <section anchor="early-data" numbered="true" toc="default">
            <name>Early Data</name>
            <t>Modern encrypted transports like TLS 1.3 offer the chance to store "early data" from the client into the initial Client Hello in some contexts.
A resolver that initiates a connection over a encrypted transport according to this guidance in a context where early data is possible SHOULD send the DNS query that prompted the connection in the early data, according to the sending guidance in <xref target="sending" format="default"/>.</t>
            <t>If it does so, the status of <tt>Q</tt> in <tt>E-queries[X]</tt> should be set to <tt>early</tt> instead of <tt>unsent</tt>.</t>
          </section>
          <section anchor="resumption-tickets" numbered="true" toc="default">
            <name>Resumption Tickets</name>
            <t>When initiating a new connection (whether by resuming an old session or not), the recursive resolver SHOULD request a session resumption ticket from the authoritative server.
If the authoritative server supplies a resumption ticket, the recursive resolver pushes it into the stack at <tt>E-resumptions[X]</tt>.</t>
          </section>
          <section anchor="recursive-sni" numbered="true" toc="default">
            <name>Server Name Indication</name>
            <t>For modern encrypted transports like TLS 1.3, most client implementations expect to send a Server Name Indication (SNI) in the Client Hello.</t>
            <t>There are two complications with selecting or sending SNI in this unilateral probing:</t>
            <ul spacing="normal">
              <li>Some authoritative servers are known by more than one name; selecting a single name to use for a given connection may be difficult or impossible.</li>
              <li>In most configurations, the contents of the SNI field is exposed on the wire to a passive adversary.
This potentially reveals additional information about which query is being made, based on the NS of the query itself.</li>
            </ul>
            <t>To avoid additional leakage and complexity, a recursive resolver following this guidance SHOULD NOT send SNI to the authoritative when attempting encrypted transport.</t>
            <t>If the recursive resolver needs to send SNI to the authoritative for some reason not found in this document, it is RECOMMENDED that it implements Encrypted Client Hello (<xref target="I-D.ietf-tls-esni" format="default"/> to reduce leakage.</t>
          </section>
          <section anchor="authoritative-server-authentication" numbered="true" toc="default">
            <name>Authoritative Server Authentication</name>
            <t>A recursive resolver following this guidance MAY attempt to verify the server's identity by X.509 certificate or DANE.
When doing so, the identity would presumably be based on the NS name used for a given query.</t>
            <t>However, since this probing policy is unilateral and opportunistic, the client SHOULD NOT consider it a failure if an encrypted transport handshake that does not authenticate to any particular expected name.</t>
            <t>To avoid the complexity of authoritative servers with multiple simultaneous names, or multiple names over time, this draft does not attempt to describe what name a recursive resolver should use when validating an authoritative server, or what the recursive resolver should do with an authentication success.</t>
          </section>
        </section>
        <section anchor="establishing-an-encrypted-transport-connection" numbered="true" toc="default">
          <name>Establishing an encrypted transport connection</name>
          <t>When an encrypted transport connection actually completes (e.g., the TLS handshake completes) at time <tt>T1</tt>, the resolver sets <tt>E-completed[X]</tt> to <tt>T1</tt> and does the following:</t>
          <t>If the handshake completed successfully:</t>
          <ul spacing="normal">
            <li>update <tt>E-session[X]</tt> so that it is in state <tt>established</tt></li>
            <li>set <tt>E-status[X]</tt> to <tt>success</tt></li>
            <li>
              <t>for each query <tt>Q</tt> in <tt>E-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>if early data was accepted and <tt>Q</tt> is <tt>early</tt>,
                  </t>
                  <ul spacing="normal">
                    <li>set the status of <tt>Q</tt> to <tt>sent</tt></li>
                  </ul>
                </li>
                <li>
                  <t>otherwise:
                  </t>
                  <ul spacing="normal">
                    <li>send <tt>Q</tt> through the session (see <xref target="sending" format="default"/>), and set the status of <tt>Q</tt> to <tt>sent</tt></li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>set <tt>E-last-activity[X]</tt> to <tt>T1</tt></li>
          </ul>
        </section>
        <section anchor="failing-to-establish-an-encrypted-transport-connection" numbered="true" toc="default">
          <name>Failing to establish an encrypted transport connection</name>
          <t>If, at time <tt>T2</tt> an encrypted transport handshake completes with a failure (e.g. a TLS alert),</t>
          <ul spacing="normal">
            <li>set <tt>E-session[X]</tt> to <tt>null</tt></li>
            <li>set <tt>E-status[X]</tt> to <tt>fail</tt></li>
            <li>set <tt>E-completed[X]</tt> to <tt>T2</tt></li>
            <li>
              <t>for each query <tt>Q</tt> in <tt>E-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>if <tt>Q</tt> is not present in any other <tt>*-queries[X]</tt> or in <tt>Do53-queries[X]</tt>, add <tt>Q</tt> to <tt>Do53-queries[X]</tt> and send query <tt>Q</tt> to <tt>X</tt> over Do53.</li>
              </ul>
            </li>
          </ul>
          <t>Note that this failure will trigger the recursive resolver to fall back to cleartext queries to the authoritative server at IP address <tt>X</tt>.
It will retry encrypted transport to <tt>X</tt> once the <tt>damping</tt> timer has elapsed.</t>
        </section>
        <section anchor="encrypted-transport-failure" numbered="true" toc="default">
          <name>Encrypted transport failure</name>
          <t>Once established, an encrypted transport might fail for a number of reasons (e.g., decryption failure, or improper protocol sequence).</t>
          <t>If this happens:</t>
          <ul spacing="normal">
            <li>set <tt>E-session[X]</tt> to <tt>null</tt></li>
            <li>set <tt>E-status[X]</tt> to <tt>fail</tt></li>
            <li>
              <t>for each query <tt>Q</tt> in <tt>E-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>if <tt>Q</tt> is not present in any other <tt>*-queries[X]</tt> or in <tt>Do53-queries[X]</tt>, add <tt>Q</tt> to <tt>Do53-queries[X]</tt> and send query <tt>Q</tt> to <tt>X</tt> over Do53.
FIXME: should a resumption ticket be used here for this previously successful connection?</li>
              </ul>
            </li>
          </ul>
          <t>Note that this failure will trigger the recursive resolver to fall back to cleartext queries to the authoritative server at IP address <tt>X</tt>.
It will retry encrypted transport to <tt>X</tt> once the <tt>damping</tt> timer has elapsed.</t>
          <t>FIXME: are there specific forms of failure that we might handle differently?
For example, What if a TCP timeout closes an idle DoT connection?
What if a QUIC stream ends up timing out but other streams on the same QUIC connection are going through?
Do the described scenarios cover the case when an encrypted transport's port is made unavailable/closed?</t>
        </section>
        <section anchor="handling-clean-shutdown-of-encrypted-transport-connection" numbered="true" toc="default">
          <name>Handling clean shutdown of encrypted transport connection</name>
          <t>At time <tt>T3</tt>, the recursive resolver may find that authoritative server <tt>X</tt> cleanly closes an existing outstanding connection (most likely due to resource exhaustion, see <xref target="authoritative-resource-exhaustion" format="default"/>).</t>
          <t>When this happens:</t>
          <ul spacing="normal">
            <li>set <tt>E-session[X]</tt> to <tt>null</tt></li>
            <li>
              <t>for each query <tt>Q</tt> in <tt>E-queries[X]</tt>:
              </t>
              <ul spacing="normal">
                <li>if <tt>Q</tt> is not present in any other <tt>*-queries[X]</tt> or in <tt>Do53-queries[X]</tt>, add <tt>Q</tt> to <tt>Do53-queries[X]</tt> and send query <tt>Q</tt> to <tt>X</tt> over Do53.</li>
              </ul>
            </li>
          </ul>
          <t>Note that this premature shutdown will trigger the recursive resolver to fall back to cleartext queries to the authoritative server at IP address <tt>X</tt>.
Any subsequent query to <tt>X</tt> will retry the encrypted connection promptly.</t>
        </section>
        <section anchor="sending" numbered="true" toc="default">
          <name>Sending a query over encrypted transport</name>
          <t>When sending a query to an authoritative server over encrypted transport at time <tt>T4</tt>, the recursive resolver should take a few reasonable steps to ensure privacy and efficiency.</t>
          <t>When sending query <tt>Q</tt>, the recursive resolver should ensure that its state in <tt>E-queries[X]</tt> is set to <tt>sent</tt>.</t>
          <t>The recursive resolver also sets <tt>E-last-activity[X]</tt> to <tt>T4</tt>.</t>
          <t>In addition, the recursive resolver should consider the following guidance:</t>
          <section anchor="avoid-edns-client-subnet" numbered="true" toc="default">
            <name>Avoid EDNS client subnet</name>
            <t>To protect the privacy of the client, the recursive resolver SHOULD NOT send EDNS(0) Client Subnet information to the authoritative server (<xref target="RFC7871" format="default"/>) unless explicitly authorized to do so by the client.</t>
          </section>
          <section anchor="pad-to-standard-policy" numbered="true" toc="default">
            <name>Pad to standard policy</name>
            <t>To increase the anonymity set for each query, the recursive resolver SHOULD use EDNS(0) padding according to policies described in <xref target="RFC8467" format="default"/>.</t>
          </section>
          <section anchor="send-queries-in-separate-channels" numbered="true" toc="default">
            <name>Send queries in separate channels</name>
            <t>When multiple queries are multiplexed on a single encrypted transport to a single authoritative server, the recursive resolver MUST offer distinct query ID fields for every outstanding query on a connection, and MUST be capable of receiving responses out of order.</t>
            <t>To the extent that the encrypted transport can avoid head-of-line blocking (e.g. QUIC can use a separate stream per query) the recursive resolver SHOULD avoid head-of-line blocking.</t>
          </section>
        </section>
        <section anchor="receiving-a-response-over-encrypted-transport" numbered="true" toc="default">
          <name>Receiving a response over encrypted transport</name>
          <t>When a response <tt>R</tt> for query <tt>Q</tt> arrives at the recursive resolver over encrypted transport <tt>E</tt> from authoritative server with IP address <tt>X</tt> at time <tt>T5</tt>, if <tt>Q</tt> is in <tt>E-queries[X]</tt>, the recursive resolver takes the following steps:</t>
          <ul spacing="normal">
            <li>Remove <tt>R</tt> from <tt>E-queries[X]</tt></li>
            <li>Set <tt>E-last-activity[X]</tt> to <tt>T5</tt></li>
            <li>
              <t>If <tt>R</tt> is successful:
              </t>
              <ul spacing="normal">
                <li>send <tt>R</tt> to the requesting client</li>
                <li>
                  <t>For each supported encrypted transport <tt>N</tt> other than <tt>E</tt>:
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>If <tt>Q</tt> is in <tt>N-queries[X]</tt>:
                      </t>
                      <ul spacing="normal">
                        <li>Remove <tt>Q</tt> from <tt>N-queries[X]</tt></li>
                      </ul>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>If <tt>Q</tt> is in <tt>Do53-queries[X]</tt>:
                  </t>
                  <ul spacing="normal">
                    <li>Remove <tt>Q</tt> from <tt>Do53-queries[X]</tt></li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>Otherwise (<tt>R</tt> is unsuccessful, e.g., <tt>SERVFAIL</tt>):
              </t>
              <ul spacing="normal">
                <li>
                  <t>If <tt>Q</tt> is not in <tt>Do53-queries[X]</tt> or any other <tt>*-queries[X]</tt>:
                  </t>
                  <ul spacing="normal">
                    <li>Return <tt>SERVFAIL</tt> to the requesting client
FIXME: What response should be sent to the clients in the case that extended DNS errors are used in an authoritative's response?</li>
                  </ul>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="recursive-resource-exhaustion" numbered="true" toc="default">
          <name>Resource Exhaustion</name>
          <t>Over time, a recursive resolver following this policy may find that it is limited in resources, and may prefer to close some outstanding connections.</t>
          <t>This could be done by checking available/consumed resources on a fixed schedule, by having a policy of only keeping a fixed number of connections open, by checking resources when activity occurs, or by some other cadence.</t>
          <t>When existing connections should be closed, the recursive resolver should use a reasonable prioritization scheme to close outstanding connections.</t>
          <t>One reasonable prioritization scheme would be:</t>
          <ul spacing="normal">
            <li>close outstanding <tt>established</tt> sessions based on <tt>E-last-activity[X]</tt> (oldest timestamp gets closed first)</li>
          </ul>
          <t>Note that when resources are limited, a recursive resolver following this guidance may also choose not to initiate new connections for encrypted transport.</t>
        </section>
        <section anchor="maintaining-connections" numbered="true" toc="default">
          <name>Maintaining connections</name>
          <t>Some recursive resolvers looking to amortize connection costs, and to minimize latency MAY choose to synthesize queries to a particular resolver to keep a encrypted transport session active.</t>
          <t>A recursive resolver that adopts this approach should try to align the synthesized queries with other optimizations.
For example, a recursive resolver that "pre-fetches" a particular resource record to keep its cache "hot" can send that query over an established encrypted transport session.</t>
        </section>
      </section>
    </section>
    <section anchor="signalling-for-stronger-defense" numbered="true" toc="default">
      <name>Signalling for Stronger Defense</name>
      <t>This draft <em>does not</em> contemplate the specification of any form of coordinated signalling between authoritative servers and recursive resolvers, as such measures would not be unilateral.</t>
      <t>However, the draft highlights the needs of a signaling mechanism for stronger defense.</t>
      <t>We highlight the following questions for other specifications to solve:</t>
      <ul spacing="normal">
        <li>
          <t>What does the signal need to contain?
          </t>
          <ul spacing="normal">
            <li>type of transport? (DoQ? DoT? DoH?)</li>
            <li>error reporting if secure, authenticated connection fails (how to report? similar to TLSRPT?)</li>
            <li>whether to hard-fail if encrypted communication isn't available</li>
            <li>cryptographic authentication of authoritative server (e.g. pubkeys) vs. names vs. domain?</li>
          </ul>
        </li>
        <li>
          <t>How should the signal be presented?
          </t>
          <ul spacing="normal">
            <li>SVCB RR or "surprising" DS RR</li>
          </ul>
        </li>
        <li>
          <t>How should the signal be scoped?
          </t>
          <ul spacing="normal">
            <li>per-nameserver (by NS), per-nameserver (by IP address, via <tt>in-addr.arpa</tt>), or per-domain?</li>
          </ul>
        </li>
      </ul>
      <section anchor="combining-signals-with-opportunistic-probing" numbered="true" toc="default">
        <name>Combining Signals with Opportunistic Probing</name>
        <t>FIXME: How do the signals get combined with the above opportunistic probing policy?
Can we specify that without needing to specify the signalling mechanism itself?</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>IANA does not need to do anything for implementers to adopt the guidance found in this draft.</t>
    </section>
    <section anchor="privacy-considerations" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <section anchor="sni-considerations" numbered="true" toc="default">
        <name>Server Name Indication</name>
        <t>A recursive resolver querying an authoritative server over DoT or DoQ that sends Server Name Indication (SNI) in the clear in the cryptographic handshake leaks information about the intended query to a passive network observer.</t>
        <t>In particular, if two different zones refer to the same nameserver IP addresses via differently-named NS records, a passive network observer can distinguish queries to one zone from the queries to the other.</t>
        <t>Omitting SNI entirely, or using ECH to hide the intended SNI, avoids this additional leakage.
However, a series of queries that leak this information is still an improvement over the all-cleartext status quo at the time of this document.</t>
      </section>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>The guidance in this draft provides defense against passive network monitors for most queries.
It does not defend against active attackers.
It can also leak some queries and their responses due to "happy eyeballs" optimizations when the resolver's cache is cold.</t>
      <t>Implementation of the guidance in this draft should increase deployment of opportunistic encrypted DNS transport between recursive resolvers and authoritative servers at little operational risk.</t>
      <t>However, implementers should not rely on the guidance in this draft for robust defense against active attackers, but should treat it as a stepping stone en route to stronger defense.</t>
      <t>In particular, a recursive resolver following this guidance can easily be forced by an active attacker to fall back to cleartext DNS queries.
Or, an active attacker could position itself as a machine-in-the-middle, which the recursive resolver would not defend against or detect due to lack of server authentication.
Defending against these attacks without risking additional unexpected protocol failures would require signalling and coordination that are out of scope for this draft.</t>
      <t>This guidance is only one part of operating a privacy-preserving DNS ecosystem.
A privacy-preserving recursive resolver should adopt other practices as well, such as QNAME minimization, local root zone, etc, to reduce the overall leakage of query information that could infringe on the client's privacy.</t>
    </section>
    <section anchor="acknowledgements" numbered="true" toc="default">
      <name>Acknowledgements</name>
      <t>Many people contributed to the development of this draft beyond the authors, including
Brian Dickson,
Christian Huitema,
Eric Nygren,
Jim Reid,
Kris Shrishak,
Paul Hoffman,
Ralf Weber,
and the DPRIVE working group.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1035">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P.V. Mockapetris" initials="P.V." surname="Mockapetris">
              <organization/>
            </author>
            <date month="November" year="1987"/>
            <abstract>
              <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System.  It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="I-D.ietf-dprive-dnsoquic" target="https://www.ietf.org/archive/id/draft-ietf-dprive-dnsoquic-07.txt">
          <front>
            <title>DNS over Dedicated QUIC Connections</title>
            <author fullname="Christian Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <author fullname="Sara Dickinson">
              <organization>Sinodun IT</organization>
            </author>
            <author fullname="Allison Mankin">
              <organization>Salesforce</organization>
            </author>
            <date day="1" month="December" year="2021"/>
            <abstract>
              <t>   This document describes the use of QUIC to provide transport privacy
   for DNS.  The encryption provided by QUIC has similar properties to
   that provided by TLS, while QUIC transport eliminates the head-of-
   line blocking issues inherent with TCP and provides more efficient
   packet loss recovery than UDP.  DNS over QUIC (DoQ) has privacy
   properties similar to DNS over TLS (DoT) specified in RFC7858, and
   latency characteristics similar to classic DNS over UDP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dprive-dnsoquic-07"/>
        </reference>
        <reference anchor="I-D.ietf-tls-esni" target="https://www.ietf.org/archive/id/draft-ietf-tls-esni-13.txt">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla">
              <organization>RTFM, Inc.</organization>
            </author>
            <author fullname="Kazuho Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Christopher A. Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="12" month="August" year="2021"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-13"/>
        </reference>
        <reference anchor="RFC7435" target="https://www.rfc-editor.org/info/rfc7435">
          <front>
            <title>Opportunistic Security: Some Protection Most of the Time</title>
            <author fullname="V. Dukhovni" initials="V." surname="Dukhovni">
              <organization/>
            </author>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document defines the concept "Opportunistic Security" in the context of communications protocols.  Protocol designs based on Opportunistic Security use encryption even when authentication is not available, and use authentication when possible, thereby removing barriers to the widespread use of encryption on the Internet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7435"/>
          <seriesInfo name="DOI" value="10.17487/RFC7435"/>
        </reference>
        <reference anchor="RFC7858" target="https://www.rfc-editor.org/info/rfc7858">
          <front>
            <title>Specification for DNS over Transport Layer Security (TLS)</title>
            <author fullname="Z. Hu" initials="Z." surname="Hu">
              <organization/>
            </author>
            <author fullname="L. Zhu" initials="L." surname="Zhu">
              <organization/>
            </author>
            <author fullname="J. Heidemann" initials="J." surname="Heidemann">
              <organization/>
            </author>
            <author fullname="A. Mankin" initials="A." surname="Mankin">
              <organization/>
            </author>
            <author fullname="D. Wessels" initials="D." surname="Wessels">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="May" year="2016"/>
            <abstract>
              <t>This document describes the use of Transport Layer Security (TLS) to provide privacy for DNS.  Encryption provided by TLS eliminates opportunities for eavesdropping and on-path tampering with DNS queries in the network, such as discussed in RFC 7626.  In addition, this document specifies two usage profiles for DNS over TLS and provides advice on performance considerations to minimize overhead from using TCP and TLS with DNS.</t>
              <t>This document focuses on securing stub-to-recursive traffic, as per the charter of the DPRIVE Working Group.  It does not prevent future applications of the protocol to recursive-to-authoritative traffic.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7858"/>
          <seriesInfo name="DOI" value="10.17487/RFC7858"/>
        </reference>
        <reference anchor="RFC7871" target="https://www.rfc-editor.org/info/rfc7871">
          <front>
            <title>Client Subnet in DNS Queries</title>
            <author fullname="C. Contavalli" initials="C." surname="Contavalli">
              <organization/>
            </author>
            <author fullname="W. van der Gaast" initials="W." surname="van der Gaast">
              <organization/>
            </author>
            <author fullname="D. Lawrence" initials="D." surname="Lawrence">
              <organization/>
            </author>
            <author fullname="W. Kumari" initials="W." surname="Kumari">
              <organization/>
            </author>
            <date month="May" year="2016"/>
            <abstract>
              <t>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.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7871"/>
          <seriesInfo name="DOI" value="10.17487/RFC7871"/>
        </reference>
        <reference anchor="RFC8305" target="https://www.rfc-editor.org/info/rfc8305">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs".  This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="RFC8467" target="https://www.rfc-editor.org/info/rfc8467">
          <front>
            <title>Padding Policies for Extension Mechanisms for DNS (EDNS(0))</title>
            <author fullname="A. Mayrhofer" initials="A." surname="Mayrhofer">
              <organization/>
            </author>
            <date month="October" year="2018"/>
            <abstract>
              <t>RFC 7830 specifies the "Padding" option for Extension Mechanisms for DNS (EDNS(0)) but does not specify the actual padding length for specific applications.  This memo lists the possible options ("padding policies"), discusses the implications of each option, and provides a recommended (experimental) option.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8467"/>
          <seriesInfo name="DOI" value="10.17487/RFC8467"/>
        </reference>
        <reference anchor="RFC8484" target="https://www.rfc-editor.org/info/rfc8484">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="October" year="2018"/>
            <abstract>
              <t>This document defines a protocol for sending DNS queries and getting DNS responses over HTTPS.  Each DNS query-response pair is mapped into an HTTP exchange.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8484"/>
          <seriesInfo name="DOI" value="10.17487/RFC8484"/>
        </reference>
      </references>
    </references>
    <section anchor="document-considerations" numbered="true" toc="default">
      <name>Document Considerations</name>
      <t>[ RFC Editor: please remove this section before publication ]</t>
      <t>This document is currently edited as markdown.
Minor editorial changes can be suggested via merge requests at https://gitlab.com/dkg/dprive-unilateral-probing or by e-mail to the editor.
Please direct all significant commentary to the public IETF DPRIVE mailing list: dprive@ietf.org</t>
      <t>The authors' latest draft can be read online in <eref target="https://dkg.gitlab.io/dprive-unilateral-probing/">html</eref> or <eref target="https://dkg.gitlab.io/dprive-unilateral-probing/unilateral-probing.pdf">pdf</eref> or <eref target="https://dkg.gitlab.io/dprive-unilateral-probing/unilateral-probing.txt">text</eref> formats.</t>
      <section anchor="document-history" numbered="true" toc="default">
        <name>Document History</name>
        <section anchor="substantive-changes-from-00-to-01" numbered="true" toc="default">
          <name>Substantive changes from -00 to -01</name>
          <ul spacing="normal">
            <li>Fallback to cleartext when encrypted transport fails.</li>
            <li>Reduce default <tt>timeout</tt> to 4s</li>
            <li>Clarify SNI guidance: OK for selecting server credentials, not OK for changing answers</li>
            <li>Document ALPN and port numbers</li>
            <li>Justify sorting recursive resolver state by authoritative IP address</li>
          </ul>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
CHjw39XV5bqRgwAA

-->

</rfc>
