<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-ip-dns-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="CONNECT-IP DNS">DNS Configuration for Proxying IP in HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-dns-00"/>
    <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="October" day="16"/>
    <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://ietf-wg-masque.github.io/draft-ietf-masque-connect-ip-dns/draft-ietf-masque-connect-ip-dns.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-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/ietf-wg-masque/draft-ietf-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 anchor="sec-combined-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:
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
p+X9j/TzoYfI9fBxQ+mDN+31Pq6VN7jjYzuu6c+DKJ/5YAaVSKcSpyt3uriZ
J3HptXVq77QRGKy+ELTrJkNYgwdBLMAY1wO6fkRxdm10SAcYLObUC61a5VU2
0Ijm6PXvkvlwReYv9joC3x0Od46i8cHR0Q7LtC+/ZfbO4W4wDHaDvb0nFOJh
PyAgn3utPqYl3uKRKX3buda2qlmWs9cta3CTcmnzsOL6PbyQMN+KlZx0FLLS
uBrTyhNWs2gA2kwRTCE94otsAoc4pdS8xFyfzxEg2n1wjLZNxmYSDqc3rV1l
Capq7oAGiOf0T9gw4ZNADhKoSH+e6/CR5z7uGBrYlBWoRbDGVSlkpyt5p0r4
sYtPP9fIaqVtgJcN2ZNxRp1oBZTl+4SK3ylV2TivMq4ipChHcE0g1WleEAhN
GOfRXSStcxBfNSd5+MkmJhPcP/ITJ1yi14lRkScUBaDY1Jd9jWAJU4QIudhe
zVHwZwKkf0dk6bLpChE1xu0Y47jbemKHJXFKZ2s+g6lwxlX9LVu879oNnRA4
7V+52eOkjgJ5QT4U9W2ArlNKrKKiaKUm6p4ouMS1x08HfJIN3zS95t4AjoN4
zMFBfP/bx2ceRReLRQCC7PvWuo5nHLw+/4EY+VL7M/370tlEfhFfjgbNv84H
fdLc4eed/ZfDf77ae0lz2/YiO72vfK83lS/sqKBt4K1mUKKiVF+M64WnxcBX
66zaZcjti1MkDbV068NWcwFHer3TVuxjLXA2JZNgazIp5Yyog+Hedawn8MV5
NfZlfySQNmMu+bUAnoLRhpwuOMhe15k78RndFLbxhrQyXA3j13OGazzyGRlk
qjJm4Ss8PUdl3JVmXAGv/UxHHNvXZcfWDRJXCuVX3Kh+lwRG3LLyLtrK1FJ1
SQKARur6WpgziPVkXYCbqMQwauKd5FiFn+ADo/BTli8SHU3ZrlCw48KijloT
ADqdlyNdThecW5k5YRLr5P6eXwbS2RmXm/6h4MBdUh+8OMQNr/h/fvVUAkAv
AAA=

-->

</rfc>
