<?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-rfc version 1.7.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-schinazi-masque-connect-ip-dns-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="CONNECT-IP DNS">DNS Configuration for Proxying IP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-schinazi-masque-connect-ip-dns-01"/>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View</city>
          <region>CA</region>
          <code>94043</code>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="06"/>
    <area>Web and Internet Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <keyword>dns</keyword>
    <abstract>
      <?line 46?>

<t>Proxying IP in HTTP allows building a VPN through HTTP load balancers. However,
at the time of writing, that mechanism doesn't offer a mechanism for
communicating DNS configuration information inline. In contrast, most existing
VPN protocols provide a mechanism to exchange DNS configuration information.
This document describes an extension that exchanges this information using HTTP
capsules.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://DavidSchinazi.github.io/draft-schinazi-masque-connect-ip-dns/draft-schinazi-masque-connect-ip-dns.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-schinazi-masque-connect-ip-dns/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Multiplexed Application Substrate over QUIC Encryption Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/DavidSchinazi/draft-schinazi-masque-connect-ip-dns"/>.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Proxying IP in HTTP (<xref target="CONNECT-IP"/>) allows building a VPN through
HTTP load balancers. However, at the time of writing, that mechanism doesn't
offer a mechanism for communicating DNS configuration information inline. In
contrast, most existing VPN protocols provide a mechanism to exchange DNS
configuration information (e.g., <xref target="IKEv2"/>). This document describes
an extension that exchanges this information using HTTP capsules
(<xref target="HTTP-DGRAM"/>). This document does not define any new ways to convey
DNS queries or responses, only a mechanism to exchange DNS configuration
information.</t>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<t>This document uses terminology from <xref target="QUIC"/>. Where this document
defines protocol types, the definition format uses the notation from <xref section="1.3" sectionFormat="of" target="QUIC"/>. This specification uses the variable-length integer encoding
from <xref section="16" sectionFormat="of" target="QUIC"/>. Variable-length integer values do not
need to be encoded in the minimum number of bytes necessary.</t>
      </section>
    </section>
    <section anchor="mechanism">
      <name>Mechanism</name>
      <t>Similar to how Proxying IP in HTTP exchanges IP address configuration
information (<xref section="4.7" sectionFormat="of" target="CONNECT-IP"/>), this mechanism leverages capsules
to request DNS configuration information and to assign it. Similarly, this
mechanism is bidirectional: either endpoint can request DNS configuration
information by sending a DNS_REQUEST capsule, and either endpoint can send DNS
configuration information in a DNS_ASSIGN capsule. These capsules follow the
format defined below.</t>
      <figure anchor="ns-format">
        <name>Nameserver Format</name>
        <artwork><![CDATA[
Nameserver {
  Type (i),
  Length (i),
  Value (...),
}
]]></artwork>
      </figure>
      <t>Each Nameserver structure contains the following fields:</t>
      <dl>
        <dt>Type:</dt>
        <dd>
          <t>An integer representing the protocol over which DNS queries and responses are
sent. See below for possible values. Encoded as a variable-length integer.</t>
        </dd>
        <dt>Length:</dt>
        <dd>
          <t>The length of the following Value field, encoded as a variable-length integer.</t>
        </dd>
        <dt>Value:</dt>
        <dd>
          <t>DNS name server configuration value, depends on the Type. This is commonly an
IP address, but for other protocols it can also represent a URI template or a
hostname.</t>
        </dd>
      </dl>
      <t>This document defines the following types:</t>
      <ul spacing="normal">
        <li>
          <t>DNS over port 53. Type = 0. DNS is sent unencrypted over UDP or TCP port 53,
as per <xref target="DNS"/>. The Value is an IP address (either IPv4 or IPv6)
encoded in network byte order. Length <bcp14>SHALL</bcp14> be either 32 or 128 bits.</t>
        </li>
        <li>
          <t>DNS over TLS. Type = 1. DNS is sent over TLS, as per <xref target="DoT"/>. The
Value is a hostname, optionally followed by a colon and a port. The encoding
is the same as an authority without userinfo as defined in <xref section="3.2" sectionFormat="of" target="URI"/>. It is encoded as ASCII, and not null-terminated. IPv4 and
IPv6 addresses can be encoded using this format, though IPv6 addresses need
to be enclosed in square brackets.</t>
        </li>
        <li>
          <t>DNS over QUIC. Type = 2. DNS is sent over QUIC, as per <xref target="DoQ"/>. The
Value is a hostname, encoded the same as for DNS over TLS.</t>
        </li>
        <li>
          <t>DNS over HTTPS. Type = 3. DNS is sent over HTTPS, as per <xref target="DoH"/>.
The Value is a URI Template. It is encoded as ASCII, and not null-terminated.</t>
        </li>
        <li>
          <t>TODO: properly define an IANA registry with GREASE for future types.</t>
        </li>
      </ul>
      <figure anchor="domain-format">
        <name>Internal Domain Format</name>
        <artwork><![CDATA[
Domain {
  Domain Length (i),
  Domain Name (..),
}
]]></artwork>
      </figure>
      <t>Each Domain contains the following fields:</t>
      <dl>
        <dt>Domain Length:</dt>
        <dd>
          <t>Length of the following Domain field, encoded as a variable-length integer.</t>
        </dd>
        <dt>Domain Name:</dt>
        <dd>
          <t>Fully Qualified Domain Name in DNS presentation format and using an
Internationalized Domain Names for Applications (IDNA) A-label
(<xref target="IDNA"/>).</t>
        </dd>
      </dl>
      <figure anchor="assigned-addr-format">
        <name>Assigned Address Format</name>
        <artwork><![CDATA[
DNS Configuration {
  Request ID (i),
  Nameserver Count (i),
  Nameserver (..) ...,
  Internal Domain Count (i),
  Internal Domain (..) ...,
  Search Domain Count (i),
  Search Domain (..) ...,
}
]]></artwork>
      </figure>
      <t>Each DNS Configuration contains the following fields:</t>
      <dl newline="true" spacing="normal">
        <dt>Request ID:</dt>
        <dd>
          <t>Request identifier, encoded as a variable-length integer. If this DNS
Configuration is part of a request, then this contains a unique request
identifier. If this DNS configuration is part of an assignment that is in
response to a DNS configuration request then this field <bcp14>SHALL</bcp14> contain the value
of the corresponding field in the request. If this DNS configuration is part of
an unsolicited assignment, this field <bcp14>SHALL</bcp14> be zero.</t>
        </dd>
        <dt>Nameserver Count:</dt>
        <dd>
          <t>The number of Nameserver structures following this field. Encoded as
a variable-length integer.</t>
        </dd>
        <dt>Nameserver:</dt>
        <dd>
          <t>A series of Nameserver structures representing DNS name servers.</t>
        </dd>
        <dt>Internal Domain Count:</dt>
        <dd>
          <t>The number of Domain structures following this field. Encoded as a
variable-length integer.</t>
        </dd>
        <dt>Internal Domain:</dt>
        <dd>
          <t>A series of Domain structures representing internal DNS names.</t>
        </dd>
        <dt>Search Domain Count:</dt>
        <dd>
          <t>The number of Domain structures following this field. Encoded as a
variable-length integer.</t>
        </dd>
        <dt>Search Domain:</dt>
        <dd>
          <t>A series of Domain structures representing search domains.</t>
        </dd>
      </dl>
      <section anchor="dns-req">
        <name>DNS_REQUEST Capsule</name>
        <t>The DNS_REQUEST capsule (see <xref target="iana"/> for the value of the capsule type) allows
an endpoint to request DNS configuration from its peer. The capsule allows the
endpoint to optionally indicate a preference for which DNS configuration it
would get assigned. The sender can indicate that it has no preference by not
sending any name servers or domain names in its request DNS Configuration.</t>
        <figure anchor="dns-req-format">
          <name>DNS_REQUEST Capsule Format</name>
          <artwork><![CDATA[
DNS_REQUEST Capsule {
  Type (i) = DNS_REQUEST,
  Length (i),
  DNS Configuration (..),
}
]]></artwork>
        </figure>
        <t>When sending a DNS_REQUEST capsule, the sender <bcp14>MUST</bcp14> generate and send a new
non-zero request ID that was not previously used on this IP Proxying stream.
Note that this request ID namespace is distinct from the one used by
ADDRESS_ASSIGN capsules (see <xref section="4.7.1" sectionFormat="of" target="CONNECT-IP"/>).</t>
        <t>An endpoint that receives a DNS_REQUEST capsule <bcp14>SHALL</bcp14> reply by sending a
DNS_ASSIGN capsule with the corresponding request ID. That DNS_ASSIGN capsule
<bcp14>MAY</bcp14> be empty, that indicates that its sender has no DNS configuration to share
with its peer.</t>
      </section>
      <section anchor="dns-assign">
        <name>DNS_ASSIGN Capsule</name>
        <t>The DNS_ASSIGN capsule (see <xref target="iana"/> for the value of the capsule type) allows
an endpoint to send DNS configuration to its peer.</t>
        <figure anchor="dns-assign-format">
          <name>DNS_ASSIGN Capsule Format</name>
          <artwork><![CDATA[
DNS_ASSIGN Capsule {
  Type (i) = DNS_ASSIGN,
  Length (i),
  DNS Configuration (..),
}
]]></artwork>
        </figure>
        <t>When sending a DNS_ASSIGN capsule in response to a received DNS_REQUEST
capsule, the Request ID field in the DNS_ASSIGN capsule <bcp14>SHALL</bcp14> be set to the
value in the received DNS_REQUEST capsule. Otherwise the request ID <bcp14>MUST</bcp14> be set
to zero.</t>
      </section>
    </section>
    <section anchor="handling">
      <name>Handling</name>
      <t>Note that internal domains include subdomains. In other words, if the DNS
configuration contains a domain, that indicates that the corresponding domain
and all of its subdomains can be resolved by the name servers exchanged in the
same DNS configuration. Sending an empty string as an internal domain indicates
the DNS root; i.e., that the corresponding name server can resolve all domain
names.</t>
      <t>As with other IP Proxying capsules, the receiver can decide whether to use or
ignore the configuration information. For example, in the consumer VPN
scenario, clients will trust the server and apply received DNS configuration,
whereas servers will ignore any DNS configuration sent by the client.</t>
      <t>If the IP proxy sends a DNS_ASSIGN capsule containing a DNS over HTTPS name
server, then the client can validate whether the IP proxy is authoritative for
the hostname in the URI template. If this validation succeeds, the client
<bcp14>SHOULD</bcp14> send its DNS queries to that name server directly as independent HTTPS
requests over the same HTTPS connection.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="full-tunnel-consumer-vpn">
        <name>Full-Tunnel Consumer VPN</name>
        <t>A full-tunnel consumer VPN hosted at masque.example could configure the client
to use DNS over HTTPS to the IP proxy itself by sending the following
configuration.</t>
        <figure anchor="ex-doh">
          <name>Full Tunnel Example</name>
          <artwork><![CDATA[
DNS Configuration = {
  Nameservers = [{
    Type = 3,  // DNS over HTTPS
    Value = "https://masque.example/dns-query{?dns}",
  }],
  Internal Domains = [""],
  Search Domains = [],
}
]]></artwork>
        </figure>
      </section>
      <section anchor="split-tunnel-enterprise-vpn">
        <name>Split-Tunnel Enterprise VPN</name>
        <t>An enterprise switching their preexisting IPsec split-tunnel VPN could use the
following configuration.</t>
        <figure anchor="ex-split">
          <name>Split Tunnel Example</name>
          <artwork><![CDATA[
DNS Configuration = {
  Nameservers = [{
    Type = 0,  // DNS over 53
    Value = 2001:db8::1,
  }, {
    Type = 0,  // DNS over 53
    Value = 192.0.2.33,
  }],
  Internal Domains = ["internal.corp.example"],
  Search Domains = [
    "internal.corp.example",
    "corp.example",
  ],
}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Acting on received DNS_ASSIGN capsules can have significant impact on endpoint
security. Endpoints <bcp14>MUST</bcp14> ignore DNS_ASSIGN capsules unless it has reason to
trust its peer and is expecting DNS configuration from it.</t>
      <t>The requirement for an endpoint to always send DNS_ASSIGN capsules in response
to DNS_REQUEST capsules could lead it to buffer unbounded amounts of memory if
the underlying stream is blocked by flow or congestion control. Implementations
<bcp14>MUST</bcp14> place an upper bound on that buffering and abort the stream if that limit
is reached.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document, if approved, will request IANA add the following values to the
"HTTP Capsule Types" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/masque"/>&gt;.</t>
      <table anchor="iana-capsules-table">
        <name>New Capsules</name>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Capsule Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0x1460B736</td>
            <td align="left">DNS_ASSIGN</td>
          </tr>
          <tr>
            <td align="left">0x1460B737</td>
            <td align="left">DNS_REQUEST</td>
          </tr>
        </tbody>
      </table>
      <t>Note that, if this document is approved, the values defined above will be
replaced by smaller ones before publication.</t>
      <t>All of these new entries use the following values for these fields:</t>
      <dl spacing="compact" newline="false">
        <dt>Status:</dt>
        <dd>
          <t>provisional (permanent if this document is approved)</t>
        </dd>
        <dt>Reference:</dt>
        <dd>
          <t>This document</t>
        </dd>
        <dt>Change Controller:</dt>
        <dd>
          <t>IETF</t>
        </dd>
        <dt>Contact:</dt>
        <dd>
          <t>masque@ietf.org</t>
        </dd>
        <dt>Notes:</dt>
        <dd>
          <t>None</t>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <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>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="DNS">
          <front>
            <title>Domain names - implementation and specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <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="DoT">
          <front>
            <title>Specification for DNS over Transport Layer Security (TLS)</title>
            <author fullname="Z. Hu" initials="Z." surname="Hu"/>
            <author fullname="L. Zhu" initials="L." surname="Zhu"/>
            <author fullname="J. Heidemann" initials="J." surname="Heidemann"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <author fullname="D. Wessels" initials="D." surname="Wessels"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <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="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="DoQ">
          <front>
            <title>DNS over Dedicated QUIC Connections</title>
            <author fullname="C. Huitema" initials="C." surname="Huitema"/>
            <author fullname="S. Dickinson" initials="S." surname="Dickinson"/>
            <author fullname="A. Mankin" initials="A." surname="Mankin"/>
            <date month="May" year="2022"/>
            <abstract>
              <t>This document describes the use of QUIC to provide transport confidentiality for DNS. The encryption provided by QUIC has similar properties to those 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 RFC 7858, and latency characteristics similar to classic DNS over UDP. This specification describes the use of DoQ as a general-purpose transport for DNS and includes the use of DoQ for stub to recursive, recursive to authoritative, and zone transfer scenarios.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9250"/>
          <seriesInfo name="DOI" value="10.17487/RFC9250"/>
        </reference>
        <reference anchor="DoH">
          <front>
            <title>DNS Queries over HTTPS (DoH)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <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>
        <reference anchor="IDNA">
          <front>
            <title>Internationalized Domain Names for Applications (IDNA): Definitions and Document Framework</title>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document is one of a collection that, together, describe the protocol and usage context for a revision of Internationalized Domain Names for Applications (IDNA), superseding the earlier version. It describes the document collection and provides definitions and other material that are common to the set. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5890"/>
          <seriesInfo name="DOI" value="10.17487/RFC5890"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IKEv2">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="IKEv2-DNS">
          <front>
            <title>Split DNS Configuration for the Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="P. Wouters" initials="P." surname="Wouters"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This document defines two Configuration Payload Attribute Types (INTERNAL_DNS_DOMAIN and INTERNAL_DNSSEC_TA) for the Internet Key Exchange Protocol version 2 (IKEv2). These payloads add support for private (internal-only) DNS domains. These domains are intended to be resolved using non-public DNS servers that are only reachable through the IPsec connection. DNS resolution for other domains remains unchanged. These Configuration Payloads only apply to split- tunnel configurations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8598"/>
          <seriesInfo name="DOI" value="10.17487/RFC8598"/>
        </reference>
      </references>
    </references>
    <?line 385?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The mechanism is this document was inspired by <xref target="IKEv2"/> and
<xref target="IKEv2-DNS"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Va6XIbN7b+j6dAqB9jT5Gt1bakiZPhSIqtutpiyk6lUq4p
sBsku9wLp9EtmpGVZ7nPMk825zsAeiEpL6kZV7nExnrW7xwcYDAYiDIuE30s
e6dXI3mSZ5N4WhWqjPNMTvJC3hT5x2WcTeX5jYwz+fr29qYn1Hhc6Duac3J9
dXV2cjugTpreE6Eq9TQvlsfSlJGI8jBTKa0dFWpSDkw4izP1ezxIlflXpQdh
nmU6LAfxfBBlZrCzK0w1TmNjaO9yOad552e3P4msSse6OBYRrX0saJLRmanM
sSyLSguiYl+oQiui5hc9liqL5HlW6iLTpbwtVGbmeVH2xGJ6LC+Ho5/fnok7
nVW0kpTTIq/mNO+ySsp4nuiPOpLD+TyJQ8v/qBqbkmShZX6nC/nz2/MTeZaF
xXKO7h6tYMns/ZIXHyCjV1gQ7amKE2q3jP491uUkyIspelQRzqhnVpZzc7y9
jYFoiu904Idto2F7XOQLo7ftEtuYOo3LWTWGptRdHI2cNLe/RriYnhAjpmzt
3VkmsKsHcf5VC37VoGBWpklPfNDLRV5EkPhA/quKQ/4BKvgH6VVNC5XyRxXZ
xjnMjn+VFS2ZmHoyrLBepKwKMl4jVZLIcqblQi1llC8y7rQ01ZsNsqndLzNC
VeUsL5gi+i9pTbKn00B6aXCjtV2WUreDdHQsX+X5NNHy4uKE28hQtCbp7j7f
2ZHDdD4jcWpFjfJGFR+ILh4VxiX5xmVeZaUiPt7FesHthZ6SRR3Lk6Edlke0
89HBzsG++6YJ8Kq3WVySkY5K6FLmE9pJF2SuPEpbq4u8Utig/j5FaxDmqcjy
IiXDviPbj7NJ8yEGg4FUbOphKcQGj4d8yRrluIqTCF1Kvru5IomTvU9ndkiS
q0iOVaKyUBcmkK/zhSav6QtVsmrKONWgeFHEJS3Rp0bqSXU4U1lsUlKbNtlf
ShoyIV9TrR4ildw+TauMHZO2B1SFHaiqGeLfSZzpgGAAg4grU/ZlmptS6o+x
wQIC1JOJlXmYJwa/SMe6s2mZ02h8TPXntwvE7Sw2RH5YpTorZaRNWMRjGGVG
S5QEVpjB3PoVDX3SnDbRlQFjkCSB6NxUZNWB1UwaR1GihdgCrhV5VIWYsFlP
T+7vv2sw+eWbn06ODg4PHh6efl6D4rMalN+mQbFRg/LPaVA8okH5zRoUj2/3
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
AA==

-->

</rfc>
