<?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-02" category="info" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.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-02"/>
    <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="2022" month="January" day="26"/>
    <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) within the span of a few seconds, 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, as a probing recursive resolver that offers SNI might or might not have used the right server name to get the records it's looking for.</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>To keep resources under control, authoritative servers should proactively manage their encrypted connections.
Section 6.5 of <xref target="I-D.ietf-dprive-dnsoquic" format="default"/> ("Connection Handling") offers useful guidance for servers managing DoQ connections.
Section 3.4 of <xref target="RFC7858" format="default"/> offers useful guidance for servers managing DoT connections.</t>
        <t>An authoritative server facing unforseen resource exhaustion SHOULD cleanly close open connections from recursive resolvers based on the authoritative's preferred prioritization.</t>
        <t>In the case of unanticipated resource exhaustion, 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 connecting under this policy MUST accept any certificate presented by the server.
If the client cannot verify the server's identity, it MAY use that information for reporting, logging, or other analysis purposes.
But it MUST NOT reject the connection due to the authentication failure, as the result would be falling back to cleartext, which would leak the content of the session to a passive network monitor.</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>To keep resources under control, a recursive resolver should proactively manage outstanding encrypted connections.
Section 6.5 of <xref target="I-D.ietf-dprive-dnsoquic" format="default"/> ("Connection Handling") offers useful guidance for clients managing DoQ connections.
Section 3.4 of <xref target="RFC7858" format="default"/> offers useful guidance for clients managing DoT connections.</t>
          <t>Even with sensible connection managment, a recursive resolver doing unilateral probing may find resources unexpectedly scarce, and may need to close some outstanding connections.</t>
          <t>In such a situation, 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,
Robert Evans,
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-08.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="11" month="January" year="2022"/>
            <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.  This
   specification describes the use of DNS over QUIC as a general-purpose
   transport for DNS and includes the use of DNS over QUIC for stub to
   recursive, recursive to authoritative, and zone transfer scenarios.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-dprive-dnsoquic-08"/>
        </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-01-to-02" numbered="true" toc="default">
          <name>Substantive changes from -01 to -02</name>
          <ul spacing="normal">
            <li>Clarify that deployment to a pool does not need to be strictly simultaneous</li>
            <li>Explain why authoritatives need to serve the same records regardless of SNI</li>
            <li>Defer to external, protocol-specific references for resource management</li>
            <li>Clarify that probed connections must not fail due to authentication failure</li>
          </ul>
        </section>
        <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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

-->

</rfc>
