<?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.6.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-connect-ip-03" category="std" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.14.2 -->
  <front>
    <title abbrev="HTTP IP Proxy">IP Proxying Support for HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-connect-ip-03"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly" role="editor">
      <organization>Apple Inc.</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <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>
    <author initials="A." surname="Chernyakhovsky" fullname="Alex Chernyakhovsky">
      <organization>Google LLC</organization>
      <address>
        <email>achernya@google.com</email>
      </address>
    </author>
    <author initials="M." surname="Kuehlewind" fullname="Mirja Kuehlewind">
      <organization>Ericsson</organization>
      <address>
        <email>mirja.kuehlewind@ericsson.com</email>
      </address>
    </author>
    <author initials="M." surname="Westerlund" fullname="Magnus Westerlund">
      <organization>Ericsson</organization>
      <address>
        <email>magnus.westerlund@ericsson.com</email>
      </address>
    </author>
    <date year="2022" month="September" day="28"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>VPN</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in udp in IP in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <t>This document describes a method of proxying IP packets over HTTP. This protocol
is similar to CONNECT-UDP, but allows transmitting arbitrary IP packets, without
being limited to just TCP like CONNECT or UDP like CONNECT-UDP.</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/draft-ietf-masque-connect-ip.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-connect-ip/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE 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"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document describes a method of proxying IP packets over HTTP. When using
HTTP/2 or HTTP/3, IP proxying uses HTTP Extended CONNECT as described in
<xref target="EXT-CONNECT2"/> and <xref target="EXT-CONNECT3"/>. When using HTTP/1.x, IP
proxying uses HTTP Upgrade as defined in <xref section="7.8" sectionFormat="of" target="SEMANTICS"/>.
This protocol is similar to CONNECT-UDP <xref target="CONNECT-UDP"/>, but allows
transmitting arbitrary IP packets, without being limited to just TCP like
CONNECT <xref target="SEMANTICS"/> or UDP like CONNECT-UDP.</t>
      <t>The HTTP Upgrade Token defined for this mechanism is "connect-ip", which is also
referred to as CONNECT-IP in this document.</t>
      <t>The CONNECT-IP protocol allows endpoints to set up a tunnel for proxying IP
packets using an HTTP proxy. This can be used for various solutions that include
general-purpose packet tunnelling, such as for a point-to-point or
point-to-network VPN, or for limited forwarding of packets to specific hosts.</t>
      <t>Forwarded IP packets can be sent efficiently via the proxy using HTTP Datagram
support <xref target="HTTP-DGRAM"/>.</t>
    </section>
    <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>
      <t>In this document, we use the term "proxy" to refer to the HTTP server that
responds to the CONNECT-IP request. If there are HTTP intermediaries (as defined
in <xref section="3.7" sectionFormat="of" target="SEMANTICS"/>) between the client and the proxy, those are
referred to as "intermediaries" in this document.</t>
    </section>
    <section anchor="client-config">
      <name>Configuration of Clients</name>
      <t>Clients are configured to use IP Proxying over HTTP via an URI Template
<xref target="TEMPLATE"/>. The URI template <bcp14>MAY</bcp14> contain two variables: "target" and
"ipproto" (<xref target="scope"/>). The optionality of the variables needs to be considered
when defining the template so that either the variable is self-identifying or it
works to exclude it in the syntax.</t>
      <t>Examples are shown below:</t>
      <figure anchor="fig-template-examples">
        <name>URI Template Examples</name>
        <artwork><![CDATA[
https://example.org/.well-known/masque/ip/{target}/{ipproto}/
https://proxy.example.org:4443/masque/ip?t={target}&i={ipproto}
https://proxy.example.org:4443/masque/ip{?target,ipproto}
https://masque.example.org/?user=bob
]]></artwork>
      </figure>
      <t>The following requirements apply to the URI Template:</t>
      <ul spacing="normal">
        <li>The URI Template <bcp14>MUST</bcp14> be a level 3 template or lower.</li>
        <li>The URI Template <bcp14>MUST</bcp14> be in absolute form, and <bcp14>MUST</bcp14> include non- empty scheme,
authority and path components.</li>
        <li>The path component of the URI Template <bcp14>MUST</bcp14> start with a slash "/".</li>
        <li>All template variables <bcp14>MUST</bcp14> be within the path or query components of the URI.</li>
        <li>The URI template <bcp14>MAY</bcp14> contain the two variables "target" and "ipproto" and <bcp14>MAY</bcp14>
contain other variables. If the "target" or "ipproto" variables are included,
their values <bcp14>MUST NOT</bcp14> be empty. Clients can instead use "*" to indicate
wildcard or no-preference values, see <xref target="scope"/>.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> contain any non-ASCII unicode characters and <bcp14>MUST</bcp14>
only contain ASCII characters in the range 0x21-0x7E inclusive (note that
percent-encoding is allowed; see Section 2.1 of <xref target="URI"/>.</li>
        <li>The URI Template <bcp14>MUST NOT</bcp14> use Reserved Expansion ("+" operator), Fragment
Expansion ("#" operator), Label Expansion with Dot- Prefix, Path Segment
Expansion with Slash-Prefix, nor Path-Style Parameter Expansion with
Semicolon-Prefix.</li>
      </ul>
      <t>Clients <bcp14>SHOULD</bcp14> validate the requirements above; however, clients <bcp14>MAY</bcp14> use a
general-purpose URI Template implementation that lacks this specific validation.
If a client detects that any of the requirements above are not met by a URI
Template, the client <bcp14>MUST</bcp14> reject its configuration and abort the request without
sending it to the IP proxy.</t>
      <t>As with CONNECT-UDP, some client configurations for CONNECT-IP proxies will only
allow the user to configure the proxy host and proxy port. Clients with such limitations
<bcp14>MAY</bcp14> attempt to access IP proxying capabilities using the default template, which is
defined as: "https://$PROXY_HOST:$PROXY_PORT/.well-known/masque/ip/{target}/{ipproto}/",
where $PROXY_HOST and $PROXY_PORT are the configured host and port of the IP proxy,
respectively. IP proxy deployments <bcp14>SHOULD</bcp14> offer service at this location if they need
to interoperate with such clients.</t>
    </section>
    <section anchor="the-connect-ip-protocol">
      <name>The CONNECT-IP Protocol</name>
      <t>This document defines the "connect-ip" HTTP Upgrade Token. "connect-ip" uses the
Capsule Protocol as defined in <xref target="HTTP-DGRAM"/>.</t>
      <t>When sending its IP proxying request, the client <bcp14>SHALL</bcp14> perform URI template
expansion to determine the path and query of its request, see <xref target="client-config"/>.</t>
      <t>When using HTTP/2 or HTTP/3, the following requirements apply to requests:</t>
      <ul spacing="normal">
        <li>The ":method" pseudo-header field <bcp14>SHALL</bcp14> be set to "CONNECT".</li>
        <li>The ":protocol" pseudo-header field <bcp14>SHALL</bcp14> be set to "connect-ip".</li>
        <li>The ":authority" pseudo-header field <bcp14>SHALL</bcp14> contain the host and port of the
proxy, not an individual endpoint with which a connection is desired.</li>
        <li>The contents of the ":path" pseudo-header <bcp14>SHALL</bcp14> be determined by the URI
template expansion, see <xref target="client-config"/>. Variables in the URI template can
determine the scope of the request, such as requesting full-tunnel IP packet
forwarding, or a specific proxied flow, see <xref target="scope"/>.</li>
      </ul>
      <t>The client <bcp14>SHOULD</bcp14> also include the "Capsule-Protocol" header with a value of
"?1" to negotiate support for sending and receiving HTTP capsules
(<xref target="HTTP-DGRAM"/>).</t>
      <t>Any 2xx (Successful) response indicates that the proxy is willing to open an IP
forwarding tunnel between it and the client. Any response other than a
successful response indicates that the tunnel has not been formed.</t>
      <t>A proxy <bcp14>MUST NOT</bcp14> send any Transfer-Encoding or Content-Length header fields in a
2xx (Successful) response to the IP Proxying request. A client <bcp14>MUST</bcp14> treat a
successful response containing any Content-Length or Transfer-Encoding header
fields as malformed.</t>
      <t>The lifetime of the forwarding tunnel is tied to the CONNECT stream. Closing the
stream (in HTTP/3 via the FIN bit on a QUIC STREAM frame, or a QUIC RESET_STREAM
frame) closes the associated forwarding tunnel.</t>
      <t>Along with a successful response, the proxy can send capsules to assign
addresses and advertise routes to the client (<xref target="capsules"/>). The client can also
assign addresses and advertise routes to the proxy for network-to-network
routing.</t>
      <section anchor="scope">
        <name>Limiting Request Scope</name>
        <t>Unlike CONNECT-UDP requests, which require specifying a target host, CONNECT-IP
requests can allow endpoints to send arbitrary IP packets to any host. The
client can choose to restrict a given request to a specific prefix or IP
protocol by adding parameters to its request. When the server knows that a
request is scoped to a target prefix or protocol, it can leverage this
information to optimize its resource allocation; for example, the server can
assign the same public IP address to two CONNECT-IP requests that are scoped to
different prefixes and/or different protocols.</t>
        <t>The scope of the request is indicated by the client to the proxy via the
"target" and "ipproto" variables of the URI Template; see <xref target="client-config"/>.
Both the "target" and "ipproto" variables are optional; if they are not included
they are considered to carry the wildcard value "*".</t>
        <dl spacing="compact">
          <dt>target:</dt>
          <dd>
            <t>The variable "target" contains a hostname or IP prefix of a specific host to
which the client wants to proxy packets. If the "target" variable is not
specified or its value is "*", the client is requesting to communicate with any
allowable host. "target" supports using DNS names, IPv6 literals and IPv4
literals. Note that IPv6 scoped addressing zone identifiers are not supported.
If the target is an IP prefix (IP address optionally followed by a
percent-encoded slash followed by the prefix length in bits), the request will
only support a single IP version. If the target is a hostname, the server is
expected to perform DNS resolution to determine which route(s) to advertise to
the client. The server <bcp14>SHOULD</bcp14> send a ROUTE_ADVERTISEMENT capsule that includes
routes for all addresses that were resolved for the requested hostname, that are
accessible to the server, and belong to an address family for which the server
also sends an Assigned Address.</t>
          </dd>
          <dt>ipproto:</dt>
          <dd>
            <t>The variable "ipproto" contains an IP protocol number, as defined in the
"Assigned Internet Protocol Numbers" IANA registry. If present, it specifies
that a client only wants to proxy a specific IP protocol for this request. If
the value is "*", or the variable is not included, the client is requesting to
use any IP protocol.</t>
          </dd>
        </dl>
        <t>Using the terms IPv6address, IPv4address, and reg-name from <xref target="URI"/>, the
"target" and "ipproto" variables <bcp14>MUST</bcp14> adhere to the format in <xref target="target-format"/>,
using notation from <xref target="ABNF"/>. Additionally:</t>
        <ul spacing="normal">
          <li>if "target" contains an IPv6 literal, the colons (":") <bcp14>MUST</bcp14> be
percent-encoded. For example, if the target host is "2001:db8::42", it will be
encoded in the URI as "2001%3Adb8%3A%3A42".</li>
          <li>If present, the IP prefix length in "target" <bcp14>SHALL</bcp14> be preceded by a
percent-encoded slash ("/"): "%2F". The IP prefix length <bcp14>MUST</bcp14> represent an
integer between 0 and the length of the IP address in bits, inclusive.</li>
          <li>"ipproto" <bcp14>MUST</bcp14> represent an integer between 0 and 255 inclusive, or the
wildcard value "*".</li>
        </ul>
        <figure anchor="target-format">
          <name>URI Template Variable Format</name>
          <artwork type="ascii-art"><![CDATA[
target = IPv6prefix / IPv4prefix / reg-name / "*"
IPv6prefix = IPv6address ["%2F" 1*3DIGIT]
IPv4prefix = IPv4address ["%2F" 1*2DIGIT]
ipproto = 1*3DIGIT / "*"
]]></artwork>
        </figure>
      </section>
      <section anchor="capsules">
        <name>Capsules</name>
        <t>This document defines multiple new capsule types that allow endpoints to
exchange IP configuration information. Both endpoints <bcp14>MAY</bcp14> send any number of
these new capsules.</t>
        <section anchor="addressassign-capsule">
          <name>ADDRESS_ASSIGN Capsule</name>
          <t>The ADDRESS_ASSIGN capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to inform its peer of the list of IP addresses or
prefixes it has assigned to it. Every capsule contains the full list of IP
prefixes currently assigned to the receiver. Any of these addresses can be
used as the source address on IP packets originated by the receiver of this
capsule.</t>
          <figure anchor="addr-assign-format">
            <name>ADDRESS_ASSIGN Capsule Format</name>
            <artwork><![CDATA[
ADDRESS_ASSIGN Capsule {
  Type (i) = ADDRESS_ASSIGN,
  Length (i),
  Assigned Address (..) ...,
}
]]></artwork>
          </figure>
          <t>The ADDRESS_ASSIGN capsule contains a sequence of zero or more Assigned
Addresses.</t>
          <figure anchor="assigned-addr-format">
            <name>Assigned Address Format</name>
            <artwork><![CDATA[
Assigned Address {
  Request ID (i),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <dl spacing="compact">
            <dt>Request ID:</dt>
            <dd>
              <t>If this address assignment is in response to an Address Request (see
<xref target="addr_req"/>), then this field <bcp14>SHALL</bcp14> contain the value of the corresponding
field in the request. Otherwise, this field <bcp14>SHALL</bcp14> be zero.</t>
            </dd>
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address assignment. <bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>IP Address:</dt>
            <dd>
              <t>Assigned IP address. If the IP Version field has value 4, the IP Address
field <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP Version field has value 6, the
IP Address field <bcp14>SHALL</bcp14> have a length of 128 bits.</t>
            </dd>
            <dt>IP Prefix Length:</dt>
            <dd>
              <t>The number of bits in the IP Address that are used to define the prefix that
is being assigned. This <bcp14>MUST</bcp14> be less than or equal to the length of the IP
Address field, in bits. If the prefix length is equal to the length of the IP
Address, the receiver of this capsule is only allowed to send packets from a
single source address. If the prefix length is less than the length of the IP
address, the receiver of this capsule is allowed to send packets from any source
address that falls within the prefix.</t>
            </dd>
          </dl>
          <t>Note that an ADDRESS_ASSIGN capsule can also indicate that a previously assigned
address is no longer assigned. An ADDRESS_ASSIGN capsule can also be empty.</t>
          <t>In some deployments of CONNECT-IP, an endpoint needs to be assigned an address
by its peer before it knows what source address to set on its own packets. For
example, in the Remote Access case (<xref target="example-remote"/>) the client cannot send
IP packets until it knows what address to use. In these deployments, the
endpoint that is expecting an address assignment <bcp14>MUST</bcp14> send an ADDRESS_REQUEST
capsule. This isn't required if the endpoint does not need any address
assignment, for example when it is configured out-of-band with static addresses.</t>
          <t>While ADDRESS_ASSIGN capsules are commonly sent in response to ADDRESS_REQUEST
capsules, endpoints <bcp14>MAY</bcp14> send ADDRESS_ASSIGN capsules unprompted.</t>
        </section>
        <section anchor="addr_req">
          <name>ADDRESS_REQUEST Capsule</name>
          <t>The ADDRESS_REQUEST capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to request assignment of IP addresses from its peer.
The capsule allows the endpoint to optionally indicate a preference for which
address it would get assigned.</t>
          <figure anchor="addr-req-format">
            <name>ADDRESS_REQUEST Capsule Format</name>
            <artwork><![CDATA[
ADDRESS_REQUEST Capsule {
  Type (i) = ADDRESS_REQUEST,
  Length (i),
  Requested Address (..) ...,
}
]]></artwork>
          </figure>
          <t>The ADDRESS_REQUEST capsule contains a sequence of zero or more Requested
Addresses.</t>
          <figure anchor="requested-addr-format">
            <name>Requested Address Format</name>
            <artwork><![CDATA[
Requested Address {
  Request ID (i),
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
          </figure>
          <dl spacing="compact">
            <dt>Request ID:</dt>
            <dd>
              <t>This is the identifier of this specific address request, each request from a
given endpoint carries a different identifier. Request IDs <bcp14>MUST NOT</bcp14> be reused by
an endpoint, and <bcp14>MUST NOT</bcp14> be zero.</t>
            </dd>
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this address request. <bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>IP Address:</dt>
            <dd>
              <t>Requested IP address. If the IP Version field has value 4, the IP Address
field <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP Version field has value 6, the
IP Address field <bcp14>SHALL</bcp14> have a length of 128 bits.</t>
            </dd>
            <dt>IP Prefix Length:</dt>
            <dd>
              <t>Length of the IP Prefix requested, in bits. <bcp14>MUST</bcp14> be lesser or equal to the
length of the IP Address field, in bits.</t>
            </dd>
          </dl>
          <t>If the IP Address is all-zero (0.0.0.0 or ::), this indicates that the sender is
requesting an address of that address family but does not have a preference for
a specific address. In that scenario, the prefix length still indicates the
sender's preference for the prefix length it is requesting.</t>
          <t>Upon receiving the ADDRESS_REQUEST capsule, an endpoint <bcp14>SHOULD</bcp14> assign an IP
address to its peer, and then respond with an ADDRESS_ASSIGN capsule to inform
the peer of the assignment. Note that the receiver of the ADDRESS_REQUEST
capsule is not required to assign the requested address, and that it can also
assign some requested addresses but not others.</t>
        </section>
        <section anchor="routeadvertisement-capsule">
          <name>ROUTE_ADVERTISEMENT Capsule</name>
          <t>The ROUTE_ADVERTISEMENT capsule (see <xref target="iana-types"/> for the value of the capsule
type) allows an endpoint to communicate to its peer that it is willing to route
traffic to a set of IP address ranges. This indicates that the sender has an
existing route to each address range, and notifies its peer that if the receiver
of the ROUTE_ADVERTISEMENT capsule sends IP packets for one of these ranges in
HTTP Datagrams, the sender of the capsule will forward them along its
preexisting route. Any address which is in one of the address ranges can be used
as the destination address on IP packets originated by the receiver of this
capsule.</t>
          <figure anchor="route-adv-format">
            <name>ROUTE_ADVERTISEMENT Capsule Format</name>
            <artwork><![CDATA[
ROUTE_ADVERTISEMENT Capsule {
  Type (i) = ROUTE_ADVERTISEMENT,
  Length (i),
  IP Address Range (..) ...,
}
]]></artwork>
          </figure>
          <t>The ROUTE_ADVERTISEMENT capsule contains a sequence of IP Address Ranges.</t>
          <figure anchor="addr-range-format">
            <name>IP Address Range Format</name>
            <artwork><![CDATA[
IP Address Range {
  IP Version (8),
  Start IP Address (32..128),
  End IP Address (32..128),
  IP Protocol (8),
}
]]></artwork>
          </figure>
          <dl spacing="compact">
            <dt>IP Version:</dt>
            <dd>
              <t>IP Version of this range. <bcp14>MUST</bcp14> be either 4 or 6.</t>
            </dd>
            <dt>Start IP Address and End IP Address:</dt>
            <dd>
              <t>Inclusive start and end IP address of the advertised range. If the IP Version
field has value 4, these fields <bcp14>SHALL</bcp14> have a length of 32 bits. If the IP
Version field has value 6, these fields <bcp14>SHALL</bcp14> have a length of 128 bits. The
Start IP Address <bcp14>MUST</bcp14> be lesser or equal to the End IP Address.</t>
            </dd>
            <dt>IP Protocol:</dt>
            <dd>
              <t>The Internet Protocol Number for traffic that can be sent to this range. If
the value is 0, all protocols are allowed. ICMP traffic is always allowed,
regardless of the value of this field.</t>
            </dd>
          </dl>
          <t>Upon receiving the ROUTE_ADVERTISEMENT capsule, an endpoint <bcp14>MAY</bcp14> start routing IP
packets in these ranges to its peer.</t>
          <t>Each ROUTE_ADVERTISEMENT contains the full list of address ranges. If multiple
ROUTE_ADVERTISEMENT capsules are sent in one direction, each ROUTE_ADVERTISEMENT
capsule supersedes prior ones. In other words, if a given address range was
present in a prior capsule but the most recently received ROUTE_ADVERTISEMENT
capsule does not contain it, the receiver will consider that range withdrawn.</t>
          <t>If multiple ranges using the same IP protocol were to overlap, some routing
table implementations might reject them. To prevent overlap, the ranges are
ordered; this places the burden on the sender and makes verification by the
receiver much simpler. If an IP Address Range A precedes an IP address range B
in the same ROUTE_ADVERTISEMENT capsule, they <bcp14>MUST</bcp14> follow these requirements:</t>
          <ul spacing="normal">
            <li>IP Version of A <bcp14>MUST</bcp14> be lesser or equal than IP Version of B</li>
            <li>If the IP Version of A and B are equal, the IP Protocol of A <bcp14>MUST</bcp14> be lesser or
equal than IP Protocol of B.</li>
            <li>If the IP Version and IP Protocol of A and B are both equal, the End IP
Address of A <bcp14>MUST</bcp14> be strictly less than the Start IP Address of B.</li>
          </ul>
          <t>If an endpoint received a ROUTE_ADVERTISEMENT capsule that does not meet these
requirements, it <bcp14>MUST</bcp14> abort the stream.</t>
        </section>
      </section>
    </section>
    <section anchor="context-identifiers">
      <name>Context Identifiers</name>
      <t>This protocol allows future extensions to exchange HTTP Datagrams which carry
different semantics from IP packets. For example, an extension could define a
way to send compressed IP header fields. In order to allow for this
extensibility, all HTTP Datagrams associated with IP proxying request streams
start with a context ID, see <xref target="payload-format"/>.</t>
      <t>Context IDs are 62-bit integers (0 to 2<sup>62</sup>-1). Context IDs are encoded
as variable-length integers, see <xref section="16" sectionFormat="of" target="QUIC"/>. The context ID
value of 0 is reserved for IP packets, while non-zero values are dynamically
allocated: non-zero even-numbered context IDs are client-allocated, and
odd-numbered context IDs are server-allocated. The context ID namespace is tied
to a given HTTP request: it is possible for a context ID with the same numeric
value to be simultaneously assigned different semantics in distinct requests,
potentially with different semantics. Context IDs <bcp14>MUST NOT</bcp14> be re-allocated
within a given HTTP namespace but <bcp14>MAY</bcp14> be allocated in any order. Once allocated,
any context ID can be used by both client and server - only allocation carries
separate namespaces to avoid requiring synchronization.</t>
      <t>Registration is the action by which an endpoint informs its peer of the
semantics and format of a given context ID. This document does not define how
registration occurs. Depending on the method being used, it is possible for
datagrams to be received with Context IDs which have not yet been registered,
for instance due to reordering of the datagram and the registration packets
during transmission.</t>
    </section>
    <section anchor="payload-format">
      <name>HTTP Datagram Payload Format</name>
      <t>When associated with IP proxying request streams, the HTTP Datagram Payload
field of HTTP Datagrams (see <xref target="HTTP-DGRAM"/>) has the format defined in
<xref target="dgram-format"/>. Note that when HTTP Datagrams are encoded using QUIC DATAGRAM
frames, the Context ID field defined below directly follows the Quarter Stream
ID field which is at the start of the QUIC DATAGRAM frame payload:</t>
      <figure anchor="dgram-format">
        <name>IP Proxying HTTP Datagram Format</name>
        <artwork><![CDATA[
IP Proxying HTTP Datagram Payload {
  Context ID (i),
  Payload (..),
}
]]></artwork>
      </figure>
      <dl spacing="compact">
        <dt>Context ID:</dt>
        <dd>
          <t>A variable-length integer that contains the value of the Context ID. If an
HTTP/3 datagram which carries an unknown Context ID is received, the receiver
<bcp14>SHALL</bcp14> either drop that datagram silently or buffer it temporarily (on the order
of a round trip) while awaiting the registration of the corresponding Context ID.</t>
        </dd>
        <dt>Payload:</dt>
        <dd>
          <t>The payload of the datagram, whose semantics depend on value of the previous
field. Note that this field can be empty.</t>
        </dd>
      </dl>
      <t>IP packets are encoded using HTTP Datagrams with the Context ID set to zero.
When the Context ID is set to zero, the Payload field contains a full IP packet
(from the IP Version field until the last byte of the IP Payload).</t>
      <t>Clients <bcp14>MAY</bcp14> optimistically start sending proxied IP packets before receiving the
response to its IP proxying request, noting however that those may not be
processed by the proxy if it responds to the request with a failure, or if the
datagrams are received by the proxy before the request. Since receiving
addresses and routes is required in order to know that a packet can be sent
through the tunnel, such optimistic packets might be dropped by the proxy if it
chooses to provide different addressing or routing information than what the
client assumed.</t>
      <t>When a CONNECT-IP endpoint receives an HTTP Datagram containing an IP packet, it
will parse the packet's IP header, perform any local policy checks (e.g., source
address validation), check their routing table to pick an outbound interface,
and then send the IP packet on that interface.</t>
      <t>In the other direction, when a CONNECT-IP endpoint receives an IP packet, it
checks to see if the packet matches the routes mapped for a CONNECT-IP
forwarding tunnel, and performs the same forwarding checks as above before
transmitting the packet over HTTP Datagrams.</t>
      <t>Note that CONNECT-IP endpoints will decrement the IP Hop Count (or TTL) upon
encapsulation but not decapsulation. In other words, the Hop Count is
decremented right before an IP packet is transmitted in an HTTP Datagram. This
prevents infinite loops in the presence of routing loops, and matches the
choices in IPsec <xref target="IPSEC"/>.</t>
      <t>IPv6 requires that every link have an MTU of at least 1280 bytes
<xref target="IPv6"/>. Since CONNECT-IP conveys IP packets in HTTP Datagrams and
those can in turn be sent in QUIC DATAGRAM frames which cannot be fragmented
<xref target="DGRAM"/>, the MTU of a CONNECT-IP link can be limited by the MTU of
the QUIC connection that CONNECT-IP is operating over. This can lead to
situations where the IPv6 minimum link MTU is violated. CONNECT-IP endpoints
that support IPv6 <bcp14>MUST</bcp14> ensure that the CONNECT-IP tunnel link MTU is at least
1280 (i.e., that they can send HTTP Datagrams with payloads of at least 1280
bytes). This can be accomplished using various techniques:</t>
      <ul spacing="normal">
        <li>if both endpoints know for certain that HTTP intermediaries are not in use,
the endpoints can pad the QUIC INITIAL packets of the underlying QUIC
connection that CONNECT-IP is running over. (Assuming QUIC version 1 is in
use, the overhead is 1 byte type, 20 bytes maximal connection ID length, 4
bytes maximal packet number length, 1 byte DATAGRAM frame type, 8 bytes
maximal quarter stream ID, one byte for the zero context ID, and 16 bytes for
the AEAD authentication tag, for a total of 51 bytes of overhead which
corresponds to padding QUIC INITIAL packets to 1331 bytes or more.)</li>
        <li>CONNECT-IP endpoints can also send ICMPv6 echo requests with 1232 bytes of
data to ascertain the link MTU and tear down the tunnel if they do not receive
a response. Unless endpoints have an out of band means of guaranteeing that
the previous techniques is sufficient, they <bcp14>MUST</bcp14> use this method.</li>
      </ul>
      <t>If an endpoint is using QUIC DATAGRAM frames to convey IPv6 packets, and it
detects that the QUIC MTU is too low to allow sending 1280 bytes, it <bcp14>MUST</bcp14> abort
the CONNECT-IP stream.</t>
      <t>Endpoints <bcp14>MAY</bcp14> implement additional filtering policies on the IP packets they
forward.</t>
    </section>
    <section anchor="error-signalling">
      <name>Error Signalling</name>
      <t>Since CONNECT-IP endpoints often forward IP packets onwards to other network
interfaces, they need to handle errors in the forwarding process. For example,
forwarding can fail if the endpoint doesn't have a route for the destination
address, or if it is configured to reject a destination prefix by policy, or if
the MTU of the outgoing link is lower than the size of the packet to be
forwarded. In such scenarios, CONNECT-IP endpoints <bcp14>SHOULD</bcp14> use ICMP
<xref target="ICMP"/> <xref target="ICMPv6"/> to signal the forwarding error to its peer.</t>
      <t>Endpoints are free to select the most appropriate ICMP errors to send. Some
examples that are relevant for CONNECT-IP include:</t>
      <ul spacing="normal">
        <li>For invalid source addresses, send Destination Unreachable <xref section="3.1" sectionFormat="of" target="ICMPv6"/> with code 5, "Source address failed ingress/egress policy".</li>
        <li>For unroutable destination addresses, send Destination Unreachable <xref section="3.1" sectionFormat="of" target="ICMPv6"/> with a code 0, "No route to destination", or code 1,
"Communication with destination administratively prohibited".</li>
        <li>For packets that cannot fit within the MTU of the outgoing link, send Packet
Too Big <xref section="3.2" sectionFormat="of" target="ICMPv6"/>.</li>
      </ul>
      <t>In order to receive these errors, endpoints need to be prepared to receive ICMP packets.
If an endpoint sends ROUTE_ADVERTISEMENT capsules, its routes <bcp14>SHOULD</bcp14> include an allowance
for receiving ICMP messages. If an endpoint does not send ROUTE_ADVERTISEMENT capsules,
such as a client opening an IP flow through a proxy, it <bcp14>SHOULD</bcp14> process proxied ICMP packets
from its peer in order to receive these errors. Note that ICMP messages can originate from
a source address different from that of the CONNECT-IP peer.</t>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>CONNECT-IP enables many different use cases that can benefit from IP packet
proxying and tunnelling. These examples are provided to help illustrate some of
the ways in which CONNECT-IP can be used.</t>
      <section anchor="example-remote">
        <name>Remote Access VPN</name>
        <t>The following example shows a point-to-network VPN setup, where a client
receives a set of local addresses, and can send to any remote server through
the proxy. Such VPN setups can be either full-tunnel or split-tunnel.</t>
        <figure anchor="diagram-tunnel">
          <name>VPN Tunnel Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="528" viewBox="0 0 528 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,96" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,96" fill="none" stroke="black"/>
                <path d="M 432,32 L 432,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 432,32 L 464,32" fill="none" stroke="black"/>
                <path d="M 88,48 L 232,48" fill="none" stroke="black"/>
                <path d="M 320,64 L 464,64" fill="none" stroke="black"/>
                <path d="M 88,80 L 232,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 312,96" fill="none" stroke="black"/>
                <path d="M 432,96 L 464,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="472,96 460,90.4 460,101.6" fill="black" transform="rotate(0,464,96)"/>
                <polygon class="arrowhead" points="472,64 460,58.4 460,69.6" fill="black" transform="rotate(0,464,64)"/>
                <polygon class="arrowhead" points="472,32 460,26.4 460,37.6" fill="black" transform="rotate(0,464,32)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="484" y="36">IP</text>
                  <text x="504" y="36">D</text>
                  <text x="332" y="52">IP</text>
                  <text x="352" y="52">C</text>
                  <text x="44" y="68">Client</text>
                  <text x="100" y="68">IP</text>
                  <text x="140" y="68">Subnet</text>
                  <text x="176" y="68">C</text>
                  <text x="200" y="68">&lt;-&gt;</text>
                  <text x="224" y="68">?</text>
                  <text x="276" y="68">Server</text>
                  <text x="484" y="68">IP</text>
                  <text x="504" y="68">E</text>
                  <text x="484" y="100">IP</text>
                  <text x="512" y="100">...</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+              +---> IP D
|        |-------------------|        | IP C         |
| Client | IP Subnet C <-> ? | Server |--------------+---> IP E
|        |-------------------|        |              |
+--------+                   +--------+              +---> IP ...

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client does not specify any scope in its request. The server
assigns the client an IPv4 address (192.0.2.11) and a full-tunnel route of all
IPv4 addresses (0.0.0.0/0). The client can then send to any IPv4 host using a
source address in its assigned prefix.</t>
        <figure anchor="fig-full-tunnel">
          <name>VPN Full-Tunnel Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Server ]]

SETTINGS
H3_DATAGRAM = 1

                              SETTINGS
                              SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                              H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /vpn
:authority = server.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 4
                              IP Address = 192.0.2.11
                              IP Prefix Length = 32

                              STREAM(44): CAPSULE
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 0.0.0.0
                               End IP Address = 255.255.255.255
                               IP Protocol = 0) // Any

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IP Packet

                              DATAGRAM
                              Quarter Stream ID = 11
                              Context ID = 0
                              Payload = Encapsulated IP Packet
]]></artwork>
        </figure>
        <t>A setup for a split-tunnel VPN (the case where the client can only access a
specific set of private subnets) is quite similar. In this case, the advertised
route is restricted to 192.0.2.0/24, rather than 0.0.0.0/0.</t>
        <figure anchor="fig-split-tunnel">
          <name>VPN Split-Tunnel Capsule Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Server ]]

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 4
                              IP Address = 192.0.2.42
                              IP Prefix Length = 32

                              STREAM(44): CAPSULE
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 192.0.2.0
                               End IP Address = 192.0.2.255
                               IP Protocol = 0) // Any
]]></artwork>
        </figure>
      </section>
      <section anchor="ip-flow-forwarding">
        <name>IP Flow Forwarding</name>
        <t>The following example shows an IP flow forwarding setup, where a client requests
to establish a forwarding tunnel to target.example.com using SCTP (IP protocol
132), and receives a single local address and remote address it can use for
transmitting packets. A similar approach could be used for any other IP protocol
that isn't easily proxied with existing HTTP methods, such as ICMP, ESP, etc.</t>
        <figure anchor="diagram-flow">
          <name>Proxied Flow Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="440" viewBox="0 0 440 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,96" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 88,48 L 232,48" fill="none" stroke="black"/>
                <path d="M 320,64 L 392,64" fill="none" stroke="black"/>
                <path d="M 88,80 L 232,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 312,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="400,64 388,58.4 388,69.6" fill="black" transform="rotate(0,392,64)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="332" y="52">IP</text>
                  <text x="352" y="52">C</text>
                  <text x="44" y="68">Client</text>
                  <text x="124" y="68">IP</text>
                  <text x="144" y="68">C</text>
                  <text x="168" y="68">&lt;-&gt;</text>
                  <text x="192" y="68">D</text>
                  <text x="276" y="68">Server</text>
                  <text x="412" y="68">IP</text>
                  <text x="432" y="68">D</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+
|        |-------------------|        | IP C
| Client |    IP C <-> D     | Server |---------> IP D
|        |-------------------|        |
+--------+                   +--------+

]]></artwork>
          </artset>
        </figure>
        <t>In this case, the client specfies both a target hostname and an IP protocol
number in the scope of its request, indicating that it only needs to communicate
with a single host. The proxy server is able to perform DNS resolution on behalf
of the client and allocate a specific outbound socket for the client instead of
allocating an entire IP address to the client. In this regard, the request is
similar to a traditional CONNECT proxy request.</t>
        <t>The server assigns a single IPv6 address to the client (2001:db8::1234:1234) and
a route to a single IPv6 host (2001:db8::3456), scoped to SCTP. The client can
send and recieve SCTP IP packets to the remote host.</t>
        <figure anchor="fig-flow">
          <name>Proxied SCTP Flow Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Server ]]

SETTINGS
H3_DATAGRAM = 1
                              SETTINGS
                              SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                              H3_DATAGRAM = 1

STREAM(52): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /proxy?target=target.example.com&ipproto=132
:authority = server.example.com
capsule-protocol = ?1

                              STREAM(52): HEADERS
                              :status = 200
                              capsule-protocol = ?1

                              STREAM(52): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 6
                              IP Address = 2001:db8::1234:1234
                              IP Prefix Length = 128

                              STREAM(52): CAPSULE
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 6
                               Start IP Address = 2001:db8::3456
                               End IP Address = 2001:db8::3456
                               IP Protocol = 132)

DATAGRAM
Quarter Stream ID = 13
Context ID = 0
Payload = Encapsulated SCTP/IP Packet

                              DATAGRAM
                              Quarter Stream ID = 13
                              Context ID = 0
                              Payload = Encapsulated SCTP/IP Packet
]]></artwork>
        </figure>
      </section>
      <section anchor="proxied-connection-racing">
        <name>Proxied Connection Racing</name>
        <t>The following example shows a setup where a client is proxying UDP packets
through a CONNECT-IP proxy in order to control connection establishement racing
through a proxy, as defined in Happy Eyeballs <xref target="HEv2"/>. This example is
a variant of the proxied flow, but highlights how IP-level proxying can enable
new capabilities even for TCP and UDP.</t>
        <figure anchor="diagram-racing">
          <name>Proxied Connection Racing Setup</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="472" viewBox="0 0 472 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                <path d="M 80,32 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,32 L 240,96" fill="none" stroke="black"/>
                <path d="M 312,32 L 312,96" fill="none" stroke="black"/>
                <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
                <path d="M 240,32 L 312,32" fill="none" stroke="black"/>
                <path d="M 88,48 L 232,48" fill="none" stroke="black"/>
                <path d="M 320,48 L 424,48" fill="none" stroke="black"/>
                <path d="M 88,80 L 232,80" fill="none" stroke="black"/>
                <path d="M 320,80 L 424,80" fill="none" stroke="black"/>
                <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 312,96" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="432,80 420,74.4 420,85.6" fill="black" transform="rotate(0,424,80)"/>
                <polygon class="arrowhead" points="432,48 420,42.4 420,53.6" fill="black" transform="rotate(0,424,48)"/>
                <polygon class="arrowhead" points="328,80 316,74.4 316,85.6" fill="black" transform="rotate(180,320,80)"/>
                <polygon class="arrowhead" points="328,48 316,42.4 316,53.6" fill="black" transform="rotate(180,320,48)"/>
                <g class="text">
                  <text x="100" y="36">IP</text>
                  <text x="120" y="36">A</text>
                  <text x="204" y="36">IP</text>
                  <text x="224" y="36">B</text>
                  <text x="332" y="36">IP</text>
                  <text x="352" y="36">C</text>
                  <text x="444" y="52">IP</text>
                  <text x="464" y="52">E</text>
                  <text x="44" y="68">Client</text>
                  <text x="108" y="68">IP</text>
                  <text x="148" y="68">C&lt;-&gt;E,</text>
                  <text x="200" y="68">D&lt;-&gt;F</text>
                  <text x="276" y="68">Server</text>
                  <text x="444" y="84">IP</text>
                  <text x="464" y="84">F</text>
                  <text x="332" y="100">IP</text>
                  <text x="352" y="100">D</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
+--------+ IP A         IP B +--------+ IP C
|        |-------------------|        |<------------> IP E
| Client |  IP C<->E, D<->F  | Server |
|        |-------------------|        |<------------> IP F
+--------+                   +--------+ IP D

]]></artwork>
          </artset>
        </figure>
        <t>As with proxied flows, the client specfies both a target hostname and an IP
protocol number in the scope of its request. When the proxy server performs DNS
resolution on behalf of the client, it can send the various remote address
options to the client as separate routes. It can also ensure that the client has
both IPv4 and IPv6 addresses assigned.</t>
        <t>The server assigns the client both an IPv4 address (192.0.2.3) and an IPv6
address (2001:db8::1234:1234) to the client, as well as an IPv4 route
(198.51.100.2) and an IPv6 route (2001:db8::3456), which represent the resolved
addresses of the target hostname, scoped to UDP. The client can send and recieve
UDP IP packets to the either of the server addresses to enable Happy Eyeballs
through the proxy.</t>
        <figure anchor="fig-listen">
          <name>Proxied Connection Racing Example</name>
          <artwork><![CDATA[
[[ From Client ]]             [[ From Server ]]

SETTINGS
H3_DATAGRAM = 1

                              SETTINGS
                              SETTINGS_ENABLE_CONNECT_PROTOCOL = 1
                              H3_DATAGRAM = 1

STREAM(44): HEADERS
:method = CONNECT
:protocol = connect-ip
:scheme = https
:path = /proxy?ipproto=17
:authority = server.example.com
capsule-protocol = ?1

                              STREAM(44): HEADERS
                              :status = 200
                              capsule-protocol = ?1

                              STREAM(44): CAPSULE
                              Capsule Type = ADDRESS_ASSIGN
                              IP Version = 4
                              IP Address = 192.0.2.3
                              IP Prefix Length = 32
                              IP Version = 6
                              IP Address = 2001:db8::1234:1234
                              IP Prefix Length = 128

                              STREAM(44): CAPSULE
                              Capsule Type = ROUTE_ADVERTISEMENT
                              (IP Version = 4
                               Start IP Address = 198.51.100.2
                               End IP Address = 198.51.100.2
                               IP Protocol = 17),
                              (IP Version = 6
                               Start IP Address = 2001:db8::3456
                               End IP Address = 2001:db8::3456
                               IP Protocol = 17)
...

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IPv6 Packet

DATAGRAM
Quarter Stream ID = 11
Context ID = 0
Payload = Encapsulated IPv4 Packet

]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="extensibility-considerations">
      <name>Extensibility Considerations</name>
      <t>Extensions to CONNECT-IP can define behavior changes to this mechanism. Such
extensions <bcp14>SHOULD</bcp14> define new capsule types to exchange configuration information
if needed. It is <bcp14>RECOMMENDED</bcp14> for extensions that modify addressing to specify
that their extension capsules be sent before the ADDRESS_ASSIGN capsule and that
they do not take effect until the ADDRESS_ASSIGN capsule is parsed. This allows
modifications to address assignement to operate atomically. Similarly,
extensions that modify routing <bcp14>SHOULD</bcp14> behave similarly with regards to the
ROUTE_ADVERTISEMENT capsule.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>There are significant risks in allowing arbitrary clients to establish a tunnel
to arbitrary servers, as that could allow bad actors to send traffic and have it
attributed to the proxy. Proxies that support CONNECT-IP <bcp14>SHOULD</bcp14> restrict its use
to authenticated users. The HTTP Authorization header <xref target="SEMANTICS"/> <bcp14>MAY</bcp14> be
used to authenticate clients. More complex authentication schemes are out of
scope for this document but can be implemented using CONNECT-IP extensions.</t>
      <t>Falsifying IP source addresses in sent traffic has been common for denial of
service attacks. Implementations of this mechanism need to ensure that they do
not facilitate such attacks. In particular, there are scenarios where an
endpoint knows that its peer is only allowed to send IP packets from a given
prefix. For example, that can happen through out of band configuration
information, or when allowed prefixes are shared via ADDRESS_ASSIGN capsules. In
such scenarios, endpoints <bcp14>MUST</bcp14> follow the recommendations from
<xref target="BCP38"/> to prevent source address spoofing.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="connect-ip-http-upgrade-token">
        <name>CONNECT-IP HTTP Upgrade Token</name>
        <t>This document will request IANA to register "connect-ip" in the HTTP Upgrade
Token Registry maintained at
&lt;<eref target="https://www.iana.org/assignments/http-upgrade-tokens"/>&gt;.</t>
        <dl spacing="compact">
          <dt>Value:</dt>
          <dd>
            <t>connect-ip</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>The CONNECT-IP Protocol</t>
          </dd>
          <dt>Expected Version Tokens:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>References:</dt>
          <dd>
            <t>This document</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-uri">
        <name>Updates to masque Well-Known URI</name>
        <t>This document will request IANA to update the entry for the "masque"
URI suffix in the "Well-Known URIs" registry maintained at
&lt;<eref target="https://www.iana.org/assignments/well-known-uris"/>&gt;.</t>
        <t>IANA is requested to update the "Reference" field to include this
document in addition to previous values from that field.</t>
        <dl spacing="compact">
          <dt>IANA is requested to add the following sentence to the "Related Information"</dt>
          <dd>
            <t/>
          </dd>
          <dt>field:</dt>
          <dd>
            <t>Includes all resources identified with the path prefix "/.well-known/masque/ip/".</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-types">
        <name>Capsule Type Registrations</name>
        <t>This document will request IANA to add the following values to the "HTTP
Capsule Types" registry created by <xref target="HTTP-DGRAM"/>:</t>
        <table anchor="iana-capsules-table">
          <name>New Capsules</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x1ECA6A00</td>
              <td align="left">ADDRESS_ASSIGN</td>
              <td align="left">Address Assignment</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">0x1ECA6A01</td>
              <td align="left">ADDRESS_REQUEST</td>
              <td align="left">Address Request</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">0x1ECA6A02</td>
              <td align="left">ROUTE_ADVERTISEMENT</td>
              <td align="left">Route Advertisement</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="EXT-CONNECT2">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus">
              <organization/>
            </author>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="EXT-CONNECT3">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="SEMANTICS">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <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="HTTP-DGRAM">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="L. Pardue" initials="L." surname="Pardue">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="TEMPLATE">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Hadley" initials="M." surname="Hadley">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <author fullname="D. Orchard" initials="D." surname="Orchard">
              <organization/>
            </author>
            <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="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <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="ABNF">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker">
              <organization/>
            </author>
            <author fullname="P. Overell" initials="P." surname="Overell">
              <organization/>
            </author>
            <date month="November" year="1997"/>
            <abstract>
              <t>In the early days of the Arpanet, each specification contained its own definition of ABNF.  This included the email specifications, RFC733 and then RFC822 which have come to be the common citations for defining ABNF.  The current document separates out that definition, to permit selective reference.  Predictably, it also provides some modifications and enhancements.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2234"/>
          <seriesInfo name="DOI" value="10.17487/RFC2234"/>
        </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">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <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="IPv6">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
        <reference anchor="DGRAM">
          <front>
            <title>An Unreliable Datagram Extension to QUIC</title>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <author fullname="E. Kinnear" initials="E." surname="Kinnear">
              <organization/>
            </author>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <date month="March" year="2022"/>
            <abstract>
              <t>This document defines an extension to the QUIC transport protocol to add support for sending and receiving unreliable datagrams over a QUIC connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9221"/>
          <seriesInfo name="DOI" value="10.17487/RFC9221"/>
        </reference>
        <reference anchor="ICMP">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel">
              <organization/>
            </author>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </reference>
        <reference anchor="ICMPv6">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta">
              <organization/>
            </author>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta">
              <organization/>
            </author>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol).  ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="BCP38">
          <front>
            <title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
            <author fullname="P. Ferguson" initials="P." surname="Ferguson">
              <organization/>
            </author>
            <author fullname="D. Senie" initials="D." surname="Senie">
              <organization/>
            </author>
            <date month="May" year="2000"/>
            <abstract>
              <t>This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point.  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="38"/>
          <seriesInfo name="RFC" value="2827"/>
          <seriesInfo name="DOI" value="10.17487/RFC2827"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <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="IPSEC">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author fullname="S. Kent" initials="S." surname="Kent">
              <organization/>
            </author>
            <author fullname="K. Seo" initials="K." surname="Seo">
              <organization/>
            </author>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer.  This document obsoletes RFC 2401 (November 1998).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
        <reference anchor="HEv2">
          <front>
            <title>Happy Eyeballs Version 2: Better Connectivity Using Concurrency</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi">
              <organization/>
            </author>
            <author fullname="T. Pauly" initials="T." surname="Pauly">
              <organization/>
            </author>
            <date month="December" year="2017"/>
            <abstract>
              <t>Many communication protocols operating over the modern Internet use hostnames.  These often resolve to multiple IP addresses, each of which may have different performance and connectivity characteristics.  Since specific addresses or address families (IPv4 or IPv6) may be blocked, broken, or sub-optimal on a network, clients that attempt multiple connections in parallel have a chance of establishing a connection more quickly.  This document specifies requirements for algorithms that reduce this user-visible delay and provides an example algorithm, referred to as "Happy Eyeballs".  This document obsoletes the original algorithm description in RFC 6555.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8305"/>
          <seriesInfo name="DOI" value="10.17487/RFC8305"/>
        </reference>
        <reference anchor="PROXY-REQS">
          <front>
            <title>Requirements for a MASQUE Protocol to Proxy IP Traffic</title>
            <author fullname="Alex Chernyakhovsky" initials="A." surname="Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dallas McCall" initials="D." surname="McCall">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Schinazi" initials="D." surname="Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="27" month="August" year="2021"/>
            <abstract>
              <t>   There is interest among MASQUE working group participants in
   designing a protocol that can proxy IP traffic over HTTP.  This
   document describes the set of requirements for such a protocol.

   Discussion of this work is encouraged to happen on the MASQUE IETF
   mailing list masque@ietf.org or on the GitHub repository which
   contains the draft: https://github.com/ietf-wg-masque/draft-ietf-
   masque-ip-proxy-reqs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-ip-proxy-reqs-03"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The design of this method was inspired by discussions in the MASQUE working
group around <xref target="PROXY-REQS"/>. The authors would
like to thank participants in those discussions for their feedback.</t>
      <t>Most of the text on client configuration is based on the corresponding text in
<xref target="CONNECT-UDP"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19e3cbx5Hv//0pJtDdDekAIAnSkgxbsSESsnlWohgBcuLj
9fEZYBrARIMZZGZAimbkz3I/y/1kt179GgAk5djZm3vC3VjkPPpRXV31q+qq
mk6no+q0znQ/ap1fRpdl8f4mzefRaL1aFWUdzYoy+mY8vmypeDIp9RU8hn9G
5tmWSoppHi/h/aSMZ3Un1fWss4yrv611Z1rkuZ7CtVXn8FhV68kyraq0yOub
FTx/Phy/UOmq7Ed1ua7q3uHhZ4c9NY1rPS/Km35U1Ymq6jhPfoyzIocXbnSl
Vmk/+r4upu2oguGVelbBbzdL/OUHFZc67kfjMs4rHLy6nvejV4PRn94OVb5e
TnTZVwk031cwsErn1brqqyudr+FKFM3LYr2C6fELLbjCw2z9uSjfIUm+xgfw
+jJOM7jOk/wKJ9wtyjneicvpAu4s6npV9Q8O8EG8lF7prnnsAC8cTMriutIH
3MQBvjpP68V6Ai8TAa/nQsODu6iK72Uwoar2Og3f73K73bS4s6U7b3YX9TJr
qXf65rooE6RVJ/rbOp3SL9gt/QKUjedlvKQ/vr28oH9XyCP0W72G5rLKvhyl
ebROVvgP8BL817ZYr0vgxyqKsyyqFzq6jm+ipLjO6SYPzvbcyecqXteLoqRh
wf8iaKsCJuhGl/E6u6ErzJ/jYrm88a6WBXK9TtK6KOkCrE6cpz/FNbBoPxqs
VpmOzvNpl25qXvV6he9/FePN7rRYhr2edaMRLHce/5R6HZ/FV2kS3oCu+tHX
RTGHLl6+PKVrFbCzhpU8enx4GA2WqwWsnI7hIoy5fAdUoKemaQ1741WxzusY
qPZtqq95NnpOwz4d8GNFAj1/dnJ4cix/wwu4q97maa1hNDXyTVTMoCddptPY
n2RSyViJa7+a49XNyQ660elCl/lN/G5RXFXvfFoPMv1+292QxA0CSO/xlN/7
ak63Nzt+1Y3+a60Xmb5O88Tr9FVa/jVu3gp7HMJUq6rI/f6W+Fr3nX3tKy0P
be35z7DbdJmtw57jeb6umvce0DW9172274V9q06nE8UTYIx4Wis1XqQV7ITp
eqnzOkp0NS3TCW6UaKlhCyS4misjwGFTreLpO13DIl9pFuLdiJqAZ0CCFpmC
36t0iTIqqovo9PXFxfB03Hl7dtmOJusaNyBIKZDOIE+XaV1js3E5SeFCeeN1
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
yvuiOyVc/V+B3cao1Z4AAA==

-->

</rfc>
