<?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.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pauly-intarea-proxy-config-pvd-02" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.4 -->
  <front>
    <title abbrev="Proxy Configuration PvDs">Communicating Proxy Configurations in Provisioning Domains</title>
    <seriesInfo name="Internet-Draft" value="draft-pauly-intarea-proxy-config-pvd-02"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple, Inc.</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="D." surname="Damjanovic" fullname="Dragana Damjanovic">
      <organization>Microsoft</organization>
      <address>
        <email>ddamjanovic@microsoft.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="02"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 26?>

<t>This document defines a mechanism for accessing provisioning domain information
associated with a proxy, such as other proxy URIs that support different protocols
and a list of DNS zones that are accessible via a proxy.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/tfpauly/privacy-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 32?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>HTTP proxies that use the CONNECT method <xref section="9.3.6" sectionFormat="of" target="HTTP"/>
(often referred to as "forward" proxies) allow clients to open connections to
hosts via a proxy. These typically allow for TCP stream proxying, but can also support
UDP proxying <xref target="CONNECT-UDP"/> and IP packet proxying
<xref target="CONNECT-IP"/>. Such proxies are not just defined as
hostnames and ports, but can use URI templates <xref target="URITEMPLATE"/>.</t>
      <t>In order to make use of multiple related proxies, clients need a way to understand
which proxies are associated with one another.</t>
      <t>Client can also benefit from learning about additional information associated with
the proxy to optimize their proxy usage, such knowing that a proxy is configured
to only allow access to a limited set of next hops.</t>
      <t>These improvements to client behavior can be achieved through the use of
Provisioning Domains. Provisioning Domains (PvDs) are defined in <xref target="PVD"/>
as consistent sets of network configuration information, which can include proxy
configuration details <xref section="2" sectionFormat="of" target="PVD"/>. <xref target="PVDDATA"/> defines a JSON
<xref target="JSON"/> format for describing Provisioning Domain Additional Information,
which is an extensible dictionary of properties of the Provisioning Domain.</t>
      <t>This document defines several mechanisms to use PvDs to help clients understand how
to use proxies:</t>
      <ol spacing="normal" type="1"><li>
          <t>A way to fetch PvD Additional Information associated with a known proxy URI (<xref target="proxy-pvd"/>)</t>
        </li>
        <li>
          <t>A way to list one or more proxy URIs in a PvD, allowing clients to
learn about other proxy options given a known proxy (<xref target="proxy-enumeration"/>).</t>
        </li>
        <li>
          <t>A way to define a limited set of DNS zones that are accessible through the
proxy (<xref target="split-dns"/>).</t>
        </li>
      </ol>
      <t>Additionally, this document partly describes how these mechanisms might be used
to discover proxies associated with a network (<xref target="network-proxies"/>).</t>
      <section anchor="background">
        <name>Background</name>
        <t>Other non-standard mechanisms for proxy configuration and discovery have been
used historically, some of which are described in <xref target="RFC3040"/>.</t>
        <t>Proxy Auto Configuration (PAC) files <xref section="6.2" sectionFormat="of" target="RFC3040"/> are Javascript
scripts that take URLs as input and provide an output of a proxy configuration
to use.</t>
        <t>Web Proxy Auto-Discovery Protocol (WPAD) <xref section="6.4" sectionFormat="of" target="RFC3040"/> allows
networks to advertise proxies to use by advertising a PAC file. This solution
squats on DHCP option 252.</t>
        <t>These common (but non-standard) mechanisms only support defining proxies by
hostname and port, and do not support configuring a full URI template
<xref target="URITEMPLATE"/>.</t>
        <t>The mechanisms defined in this document are intended to offer a standard
alternative that works for URI-based proxies and avoids dependencies
on executing Javascript scripts, which can open up security vulnerabilities.</t>
      </section>
      <section anchor="requirements">
        <name>Requirements</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"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
        </t>
      </section>
    </section>
    <section anchor="proxy-pvd">
      <name>Fetching PvD Additional Information for proxies</name>
      <t>This document defines a way to fetch PvD Additional Information associated with
a proxy. This PvD describes the properties of the network accessible through the proxy.</t>
      <t>In order to fetch PvD Additional Information associated with a proxy, a client
issues an HTTP GET request for the well-known PvD URI (".well-known/pvd") <xref target="PVDDATA"/>
and the host authority of the proxy. This is applicable for both proxies that are identified
by a host and port only (such as SOCKS proxies and HTTP CONNECT proxies) and proxies
that are identified by a URI or URI template.</t>
      <t>For example, a client would issue the following request for the PvD associated
with "https://proxy.example.org/masque{?target_host,target_port}":</t>
      <artwork><![CDATA[
:method = GET
:scheme = https
:authority = proxy.example.org
:path = /.well-known/pvd
accept = application/pvd+json
]]></artwork>
      <t>For a HTTP CONNECT proxy on "proxy.example.org:8080", the client would send the following
request:</t>
      <artwork><![CDATA[
:method = GET
:scheme = https
:authority = proxy.example.org:8080
:path = /.well-known/pvd
accept = application/pvd+json
]]></artwork>
      <t>Note that all proxies that are colocated on the same host and port share the same PvD
Additional Information. Proxy deployments that need separate PvD configuration properties
SHOULD use different hosts.</t>
      <t>PvD Additional Information is required to contain the "identifier", "expires", and
"prefixes" keys. For proxy PvDs as defined in this document, the "identifier" MUST
match the hostname of the HTTP proxy. The "prefixes" array SHOULD be empty by default.</t>
    </section>
    <section anchor="proxy-enumeration">
      <name>Enumerating proxies within a PvD</name>
      <t>This document defines a new PvD Additional Information key, <tt>proxies</tt>, that
is an array of dictionaries, where each dictionary in the array defines
a single proxy that is available as part of the PvD (see <xref target="proxies-key-iana"/>).
Each proxy is defined by a proxy protocol, a proxy location (i.e., a hostname and port or a URI template
<xref target="URITEMPLATE"/>), along with potentially other keys.</t>
      <t>This document defines two mandatory keys for the sub-dictionaries in the
<tt>proxies</tt> array, <tt>protocol</tt> and <tt>proxy</tt>. These keys, defined below, are
the initial contents of the proxy information key registry
(<xref target="proxy-info-iana"/>). Other optional keys can be added to the dictionary
to further define or restrict the use of a proxy. Clients that do not
recognize or understand a key in a proxy sub-dictionary MUST ignore the entire
proxy definition, since the proxy might be only applicable for particular
uses.</t>
      <table>
        <thead>
          <tr>
            <th align="left">JSON Key</th>
            <th align="left">Description</th>
            <th align="left">Type</th>
            <th align="left">Example</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">protocol</td>
            <td align="left">The protocol used to communicate with the proxy</td>
            <td align="left">String</td>
            <td align="left">"connect-udp"</td>
          </tr>
          <tr>
            <td align="left">proxy</td>
            <td align="left">String containing the URI template or hostname and port of the proxy, depending on the format defined by the protocol</td>
            <td align="left">String</td>
            <td align="left">"https://proxy.example.org:4443/masque{?target_host,target_port}"</td>
          </tr>
        </tbody>
      </table>
      <t>The values for the <tt>protocol</tt> key are defined in the proxy protocol
registry (<xref target="proxy-protocol-iana"/>). For consistency, any new proxy types
that use HTTP Upgrade Tokens (and use the <tt>:protocol</tt> pseudo-header) SHOULD
define the <tt>protocol</tt> value to match the Upgrade Token / <tt>:protocol</tt> value.</t>
      <table>
        <thead>
          <tr>
            <th align="left">Proxy Protocol</th>
            <th align="left">Proxy Location Format</th>
            <th align="left">Reference</th>
            <th align="left">Notes</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">socks5</td>
            <td align="left">hostname:port</td>
            <td align="left">
              <xref target="SOCKSv5"/></td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="left">http-connect</td>
            <td align="left">hostname:port</td>
            <td align="left">
              <xref section="9.3.6" sectionFormat="of" target="HTTP"/></td>
            <td align="left">Standard CONNECT method, using unencrypted HTTP to the proxy</td>
          </tr>
          <tr>
            <td align="left">https-connect</td>
            <td align="left">hostname:port</td>
            <td align="left">
              <xref section="9.3.6" sectionFormat="of" target="HTTP"/></td>
            <td align="left">Standard CONNECT method, using TLS-protected HTTP to the proxy</td>
          </tr>
          <tr>
            <td align="left">connect-udp</td>
            <td align="left">URI template</td>
            <td align="left">
              <xref target="CONNECT-UDP"/></td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="left">connect-ip</td>
            <td align="left">URI template</td>
            <td align="left">
              <xref target="CONNECT-IP"/></td>
            <td align="left"> </td>
          </tr>
          <tr>
            <td align="left">connect-tcp</td>
            <td align="left">URI template</td>
            <td align="left">
              <xref target="CONNECT-TCP"/></td>
            <td align="left"> </td>
          </tr>
        </tbody>
      </table>
      <t>The value of <tt>proxy</tt> depends on the Proxy Location Format defined by proxy protocol.
The types defined here either use a hostname and port, or a full URI template.</t>
      <t>When a PvD that contains the <tt>proxies</tt> key is fetched from a known proxy
using the method described in <xref target="proxy-pvd"/> the proxies list describes
equivalent proxies (potentially supporting other protocols) that can be used
in addition to the known proxy.</t>
      <t>Such cases are useful for informing clients of related proxies as a discovery
method, with the assumption that the client already is aware of one proxy.
Many historical methods of configuring a proxy only allow configuring
a single FQDN hostname for the proxy. A client can attempt to fetch the
PvD information from the well-known URI to learn the list of complete
URIs that support non-default protocols, such as <xref target="CONNECT-UDP"/> and
<xref target="CONNECT-IP"/>.</t>
      <section anchor="example">
        <name>Example</name>
        <t>Given a known HTTP CONNECT proxy FQDN, "proxy.example.org", a client could
request PvD Additional Information with the following request:</t>
        <artwork><![CDATA[
:method = GET
:scheme = https
:authority = proxy.example.org
:path = /.well-known/pvd
accept = application/pvd+json
]]></artwork>
        <t>If the proxy has a PvD definition for this FQDN, it would return the following
response to indicate a PvD that has two related proxy URIs.</t>
        <artwork><![CDATA[
:status = 200
content-type = application/pvd+json
content-length = 222

{
  "identifier": "proxy.example.org.",
  "expires": "2023-06-23T06:00:00Z",
  "prefixes": [],
  "proxies": [
    {
      "protocol": "http-connect",
      "proxy": "proxy.example.org:80"
    },
    {
      "protocol": "connect-udp",
      "proxy": "https://proxy.example.org/masque{?target_host,target_port}"
    }
  ]
}
]]></artwork>
        <t>The client would learn the URI template of the proxy that supports UDP using <xref target="CONNECT-UDP"/>,
at "https://proxy.example.org/masque{?target_host,target_port}".</t>
      </section>
    </section>
    <section anchor="split-dns">
      <name>Split DNS information for proxies</name>
      <t>Split DNS configurations are cases where only a subset of domains is routed through
a VPN tunnel or a proxy. For example, IKEv2 defines split DNS configuration in
<xref target="IKEV2SPLIT"/>.</t>
      <t>PvD Additional Information can be used to indicate that a proxy PvD has a split DNS
configuration.</t>
      <t><xref section="4.3" sectionFormat="of" target="PVDDATA"/> defines the optional <tt>dnsZones</tt> key, which contains
searchable and accessible DNS zones as an array of strings.</t>
      <t>When present in a PvD Additional Information dictionary that is retrieved for a proxy
as described in <xref target="proxy-pvd"/>, domains in the <tt>dnsZones</tt> array indicate specific zones
that are accessible using the proxy. If a hostname is not included in the enumerated
zones, then a client SHOULD assume that the hostname will not be accessible through the
proxy.</t>
      <t>Entries listed in <tt>dnsZones</tt> MUST NOT expand the set of domains that a client is
willing to send to a particular proxy. The list can only narrow the list of domains
that the client is willing to send through the proxy. For example, if the client
has a local policy to only send requests for "example.com" to a proxy
"proxy.example.com", and the <tt>dnsZones</tt> array contains "internal.example.com" and
"other.company.com", the client would end up only proxying "internal.example.com"
through the proxy.</t>
      <section anchor="example-1">
        <name>Example</name>
        <t>Given a proxy URI template "https://proxy.example.org/masque{?target_host,target_port}",
which in this case is for UDP proxying, the client could request PvD additional information
with the following request:</t>
        <artwork><![CDATA[
:method = GET
:scheme = https
:authority = proxy.example.org
:path = /.well-known/pvd
accept = application/pvd+json
]]></artwork>
        <t>If the proxy has a PvD definition for this proxy, it could return the following
response to indicate a PvD that has one accessible zone, "internal.example.org".</t>
        <artwork><![CDATA[
:status = 200
content-type = application/pvd+json
content-length = 135

{
  "identifier": "proxy.example.org.",
  "expires": "2023-06-23T06:00:00Z",
  "prefixes": [],
  "dnsZones": ["internal.example.org"]
}
]]></artwork>
        <t>The client could then choose to use this proxy only for accessing names that fall
within the "internal.example.org" zone.</t>
      </section>
    </section>
    <section anchor="network-proxies">
      <name>Discovering proxies from network PvDs</name>
      <t><xref target="PVDDATA"/> defines how PvD Additional Information is discovered based
on network advertisements using Router Advertisements <xref target="RFC4861"/>. A network
defining its configuration via PvD information can include the <tt>proxies</tt>
key (<xref target="proxy-enumeration"/>) to inform clients of a list of proxies available
on the network.</t>
      <t>This association of proxies with the network's PvD can be used as a mechanism
to discover proxies, as an alternative to PAC files. However, client systems MUST
NOT automatically send traffic over proxies advertised in this way without
explicit configuration, policy, or user permission. For example, a client
can use this mechanism to choose between known proxies, such as if the client was
already proxying traffic and has multiple options to choose between.</t>
      <t>Further security and experience considerations are needed for these cases.</t>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <t>Configuration advertised via PvD Additional Information, such DNS zones or associated
proxies, can only be safely used when fetched over a secure TLS-protected connection,
and the client has validated that that the hostname of the proxy, the identifier of
the PvD, and the validated hostname identity on the certificate all match.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="proxies-key-iana">
        <name>New PvD Additional Information key</name>
        <t>This document registers a new key in the "Additional Information PvD Keys" registry.</t>
        <t>JSON Key: proxies</t>
        <t>Description: Array of proxy dictionaries associated with this PvD</t>
        <t>Type: Array of dictionaries</t>
        <t>Example: [ {
  "protocol": "connect-udp",
  "proxy": "https://proxy.example.org/masque{?target_host,target_port}"
} ]</t>
      </section>
      <section anchor="proxy-info-iana">
        <name>New PvD Proxy Information Registry</name>
        <t>IANA is requested to create a new registry "Proxy Information PvD Keys", within the "Provisioning Domains (PvDs)" registry page.
This new registry reserves JSON keys for use in sub-dictionaries under the <tt>proxies</tt> key.
The initial contents of this registry are given in <xref target="proxy-enumeration"/>.</t>
        <t>The status of a key as mandatory or optional is intentionally not denoted in the table to allow for
flexibility in future use cases. Any new assignments of keys will be considered as optional for the purpose of the mechanism described in this document.</t>
        <t>New assignments in the "Proxy Information PvD Keys" registry will be administered by IANA through Expert Review <xref target="RFC8126"/>. Experts are
requested to ensure that defined keys do not overlap in names or semantics.</t>
      </section>
      <section anchor="proxy-protocol-iana">
        <name>New PvD Proxy Protocol Registry</name>
        <t>IANA is requested to create a new registry "Proxy Protocol PvD Values", within the "Provisioning Domains (PvDs)" registry page.
This new registry reserves JSON values for the <tt>protocol</tt> key in <tt>proxies</tt> sub-dictionaries.
The initial contents of this registry are given in <xref target="proxy-enumeration"/>.</t>
        <t>New assignments in the "Proxy Protocol PvD Values" registry will be administered by IANA through Expert Review <xref target="RFC8126"/>.
Experts are requested to ensure that defined keys do not overlap in names or semantics, and have clear format definitions.
The reference and notes fields MAY be empty.</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <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="URITEMPLATE">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="PVDDATA">
          <front>
            <title>Discovering Provisioning Domain Names and Data</title>
            <author fullname="P. Pfister" initials="P." surname="Pfister"/>
            <author fullname="É. Vyncke" surname="É. Vyncke"/>
            <author fullname="T. Pauly" initials="T." surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="W. Shao" initials="W." surname="Shao"/>
            <date month="July" year="2020"/>
            <abstract>
              <t>Provisioning Domains (PvDs) are defined as consistent sets of network configuration information. PvDs allows hosts to manage connections to multiple networks and interfaces simultaneously, such as when a home router provides connectivity through both a broadband and cellular network provider.</t>
              <t>This document defines a mechanism for explicitly identifying PvDs through a Router Advertisement (RA) option. This RA option announces a PvD identifier, which hosts can compare to differentiate between PvDs. The option can directly carry some information about a PvD and can optionally point to PvD Additional Information that can be retrieved using HTTP over TLS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8801"/>
          <seriesInfo name="DOI" value="10.17487/RFC8801"/>
        </reference>
        <reference anchor="JSON">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </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="SOCKSv5">
          <front>
            <title>SOCKS Protocol Version 5</title>
            <author fullname="M. Leech" initials="M." surname="Leech"/>
            <author fullname="M. Ganis" initials="M." surname="Ganis"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="R. Kuris" initials="R." surname="Kuris"/>
            <author fullname="D. Koblas" initials="D." surname="Koblas"/>
            <author fullname="L. Jones" initials="L." surname="Jones"/>
            <date month="March" year="1996"/>
            <abstract>
              <t>This memo describes a protocol that is an evolution of the previous version of the protocol, version 4 [1]. This new protocol stems from active discussions and prototype implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1928"/>
          <seriesInfo name="DOI" value="10.17487/RFC1928"/>
        </reference>
        <reference anchor="CONNECT-TCP">
          <front>
            <title>Template-Driven HTTP CONNECT Proxying for TCP</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <date day="7" month="December" year="2023"/>
            <abstract>
              <t>   TCP proxying using HTTP CONNECT has long been part of the core HTTP
   specification.  However, this proxying functionality has several
   important deficiencies in modern HTTP environments.  This
   specification defines an alternative HTTP proxy service configuration
   for TCP connections.  This configuration is described by a URI
   Template, similar to the CONNECT-UDP and CONNECT-IP protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-02"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="PVD">
          <front>
            <title>Multiple Provisioning Domain Architecture</title>
            <author fullname="D. Anipko" initials="D." role="editor" surname="Anipko"/>
            <date month="June" year="2015"/>
            <abstract>
              <t>This document is a product of the work of the Multiple Interfaces Architecture Design team. It outlines a solution framework for some of the issues experienced by nodes that can be attached to multiple networks simultaneously. The framework defines the concept of a Provisioning Domain (PvD), which is a consistent set of network configuration information. PvD-aware nodes learn PvD-specific information from the networks they are attached to and/or other sources. PvDs are used to enable separation and configuration consistency in the presence of multiple concurrent connections.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7556"/>
          <seriesInfo name="DOI" value="10.17487/RFC7556"/>
        </reference>
        <reference anchor="RFC3040">
          <front>
            <title>Internet Web Replication and Caching Taxonomy</title>
            <author fullname="I. Cooper" initials="I." surname="Cooper"/>
            <author fullname="I. Melve" initials="I." surname="Melve"/>
            <author fullname="G. Tomlinson" initials="G." surname="Tomlinson"/>
            <date month="January" year="2001"/>
            <abstract>
              <t>This memo specifies standard terminology and the taxonomy of web replication and caching infrastructure as deployed today. It introduces standard concepts, and protocols used today within this application domain. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3040"/>
          <seriesInfo name="DOI" value="10.17487/RFC3040"/>
        </reference>
        <reference anchor="IKEV2SPLIT">
          <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>
        <reference anchor="RFC4861">
          <front>
            <title>Neighbor Discovery for IP version 6 (IPv6)</title>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <author fullname="E. Nordmark" initials="E." surname="Nordmark"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <author fullname="H. Soliman" initials="H." surname="Soliman"/>
            <date month="September" year="2007"/>
            <abstract>
              <t>This document specifies the Neighbor Discovery protocol for IP Version 6. IPv6 nodes on the same link use Neighbor Discovery to discover each other's presence, to determine each other's link-layer addresses, to find routers, and to maintain reachability information about the paths to active neighbors. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4861"/>
          <seriesInfo name="DOI" value="10.17487/RFC4861"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
jaSRBevxN4x0KLDs15DLWfwl9di4OZfdWeft+nDw42F90h9/4gIO+3ebeFtH
SdmNawCmrt1NxZGybbq2OZzn9xfnsmkhltzGT+cve1XCs+9OVwdd13Y3HbgF
HNe3WPv9weXFm7Mpd6Of0ljH/SWbKJj1jK83YEDvWyMPx/e76Dijg2eH4yeu
g26rul2CDVGHjPQj+PoX6ot+tDUO1wJx4EAYKEyysEUIyh674nbXUFX9Mojh
zMV4yAHTM6SAoS5zBweiHNQXQOCjajvhMO/EIrgKdRfiGHZytnoe3c9SGFhr
Kp3AuyT2FmJXW7iDOk4jzuYx6gKJ1B5zYw0hb/IFJ+AS3pprY0UXd1xhizGD
7vBC2PY6A3qjjWf396jB4dOiqT22sgRE9/WNJ+hw5Sv6G8bg1MsRlhlBZ/Od
S1fMpYGVLnuPC3Yc9rlXRqYGwdW25x3wgDtEbCKizMitY7Y6JX3jy+bRBsLa
AJWscqBexBQ7tMNNTtrNBWeb6w68UwI8Gbj7sB5tuG/62Ta0dqpNgMsD7ptB
e3tv2vqpnU8iHARU53bcKpIThW1lya38MNjuXcWuDtIuHNQNbASf/mtccxh8
cVVecqycFVAnJZph690ucbiig1O7R6/E/ws45Qo7WXfvX4ineLKts3LyGMMd
6kDY9euBrP0nT/83QJY3Inqy+0q7oIplKPvMZFGWln22JOQZb62nPxZrpxuZ
r3NkSMI1A2xfYtfZzGtGIX7gI+4lcOrjm7rc/rh5sDmBQ+F2O77S7M/93Rmf
SVLmT5MLNJkQ+sd+aMT2jGwIek+IpcaOvd/ssM3h82f7NCN35LcQYcIja8wG
PqGR1s0kLx7N6xUDaIb7rrErq9K0SZw3dzPCIXP2TQzhCiGOSF/+911UIiR6
LfgIt/w/bBM+hkmqNyO9a5xq6KFJPDxShmEbM5avy2sav/MjqtKsEUeXxvau
KHTC15TEJjvza2NVreYEG/qDW14yXWuMRg/oGhCdgP3AKrOmL42hi15ctcGd
sJ2ul5kx3D/c2aMWflyXj+gmxKnSbW1lBoZpmE5X/2BO+FS7F0lBoxG+QBFi
kb8gzxjilTDY66fztg6jjrprWYSBGXob14ZRcZmUq8KpjuE6dUIdtrOjcozf
bVrgdznuv4ZkQCej/l6wwv5sWSQLr+53zHdarnRIlvxJ19UPvAsgZ0Zt37nO
11YDaeglVMpYHZS9v94odXbT5cMwW+EkQAxeqTxLlU1JGCptIsJ+M4G7VMFt
07Svawp28KXbsQOr/Eaz9gXJhHg0dyEJgJNL5cz8s6Pzow3GM+o4/5ctUtdz
7TUkN9t8to2ga990de0odtN37EyHfqfXZhDabaDTt48mYQZERG2kiTzy+Yhr
XcVtw825msYN+YBWRNHo3fgtoG1rjQhmnNnfm9V/nYz+Frl8zHpbRY558953
ZXy7u+s/As+QJN00gOYMgUwX5s4whLgfmjqD7a0D24cyjqUXdw+RdwJCznCl
x1b0vXMoG6xXkAHLL3R3yaXhgK0GL3cut0vUtjy+u1XL93WnkZuxs8RRotgL
ZG5I0UEqDmHcDjNRD7qMOrg088SnuUlgTtRgWmXTJYAN58uUavj/j4iY5/pz
xsODrO3ztmltGdo5PXnkGmVQzeyqWPrrMIM4IZx1PtQGv0BSqPK2dVWa4C26
4NBLl3tjG7j9+cahkZjv0oeOv54ylS4hDDJr28xgxfPJyylFgQaauspwlp8i
PHhGoMX+xvFA9LRUF6atXXbsGyDMDDeTSu42VxWRa4FfSbEHMkOsdtOZfaMJ
Tb0ti+m3MX+J1YS96bjvuc/6bzSa+xu5VAMIprJpT1/Vbu7XnF08+XqKIyLF
kV9PcYYO9KwoPtMUa9yn59DkWFiH/i+9UHAHGNE4T4Edj/4chpbG4p/J+6L1
xTkAAA==

-->

</rfc>
