<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-quic-proxy-03" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="QUIC Proxy">QUIC-Aware Proxying Using HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-quic-proxy-03"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="E." surname="Rosenberg" fullname="Eric Rosenberg">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>eric_rosenberg@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, California 94043</city>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <?line 70?>

<t>This document extends UDP Proxying over HTTP to add optimizations for proxied
QUIC connections. Specifically, it allows a proxy to reuse UDP 4-tuples for multiple
proxied connections, and adds a mode of proxying in which QUIC short header packets
can be forwarded and transformed through a HTTP/3 proxy rather than being fully
re-encapsulated and re-encrypted.</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-quic-proxy/draft-ietf-masque-quic-proxy.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-quic-proxy/"/>.
      </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-quic-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 78?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>UDP Proxying over HTTP <xref target="CONNECT-UDP"/>
defines a way to send datagrams through an HTTP proxy, where UDP is used to communicate
between the proxy and a target server. This can be used to proxy QUIC
connections <xref target="QUIC"/>, since QUIC runs over UDP datagrams.</t>
      <t>This document uses the term "target" to refer to the server that a client is
accessing via a proxy. This target may be an origin server hosting content, or
another proxy for cases where proxies are chained together.</t>
      <t>This document extends the UDP proxying protocol to add signalling about QUIC
Connection IDs. QUIC Connection IDs are used to identify QUIC connections in
scenarios where there is not a strict one-to-one mapping between QUIC
connections and UDP 4-tuples (pairs of IP addresses and ports).</t>
      <t>Once a proxy is aware of QUIC Connection IDs, it can reuse UDP 4-tuples between
itself and a target for multiple proxied QUIC connections.</t>
      <t>For proxies that are themselves running on HTTP/3 <xref target="HTTP3"/>, and thus
are accessed by clients over QUIC, QUIC Connection IDs can be used to treat
packets differently on the link between clients and proxies. New QUIC Connection IDs
can be assigned to perform transformations to the packets that allow for efficient
forwarding of packets that don't require full re-encapsulation and re-encryption
of proxied QUIC packets within datagrams inside the QUIC connection between
clients and proxies.</t>
      <t>This document defines two modes for proxying QUIC connections, "tunnelled" and
"forwarded":</t>
      <ol spacing="normal" type="1"><li>
          <t>Tunnelled is the default mode for UDP proxying, defined in <xref target="CONNECT-UDP"/>.
In this mode, packets in QUIC connection between the client and target are
encapsulated inside the QUIC connection between the client and proxy.
These packets use multiple layers of encryption and congestion control.</t>
        </li>
        <li>
          <t>Forwarded is the mode of proxying added by this document. In this mode,
packets in the QUIC connection between the client and target are sent with dedicated
QUIC Connection IDs between the client and proxy, and use special-purpose
tranforms instead of full re-encapsulation and re-encryption.</t>
        </li>
      </ol>
      <t>QUIC long header packets between clients and targets MUST be proxied in tunnelled
mode. QUIC short header packets between clients and targets MAY be proxied in
forwarded mode, subject to negotiation between a client and a proxy.</t>
      <t>Forwarded mode is an optimization to reduce CPU and memory cost to clients and
proxies and avoid encapsulation overhead for packets on the wire that reduce
the effective MTU (Maximum Transmission Unit). This makes it suitable for
deployment situations that otherwise relied on cleartext TCP
proxies, which cannot support QUIC and have inferior security and privacy
properties.</t>
      <t>The properties provided by the forwarded mode are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>All packets sent between the client and the target traverse through the proxy
device.</t>
        </li>
        <li>
          <t>The target server cannot know the IP address of the client solely based on the
proxied packets the target receives.</t>
        </li>
        <li>
          <t>Observers of either or both of the links between client and proxy and between
proxy and target are not able to learn more about the client-to-target
communication than if no proxy was used.</t>
        </li>
      </ul>
      <t>Forwarded mode does not prevent correlation of packets on the link between
client and proxy and the link between proxy and target by an entity that
can observe both links. The precise risks depend on the negotiated transform
(<xref target="transforms"/>). See <xref target="security"/> for further discussion.</t>
      <t>Both clients and proxies can unilaterally choose to disable forwarded mode for
any client-to-target connection.</t>
      <t>The forwarded mode of proxying is only defined for HTTP/3 <xref target="HTTP3"/> and not
any earlier versions of HTTP.</t>
      <t>QUIC proxies only need to understand the Header Form bit, and the connection ID
fields from packets in client-to-target QUIC connections. Since these fields
are all in the QUIC invariants header <xref target="INVARIANTS"/>, QUIC proxies can
proxy all versions of QUIC.</t>
      <section anchor="conventions">
        <name>Conventions and Definitions</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.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the following terms:</t>
        <ul spacing="normal">
          <li>
            <t>Client: the client of all QUIC connections discussed in this document.</t>
          </li>
          <li>
            <t>Proxy: the endpoint that responds to the UDP proxying request.</t>
          </li>
          <li>
            <t>Target: the server that a client is accessing via a proxy.</t>
          </li>
          <li>
            <t>Client-to-proxy 4-tuple: the UDP 4-tuple (client IP address, client UDP port,
proxy IP address, proxy UDP port) used to communicate between the client and
the proxy.</t>
          </li>
          <li>
            <t>Proxy-to-target 4-tuple: the UDP 4-tuple (proxy IP address, proxy UDP port,
target IP address, target UDP port) used to communicate between the proxy and
the target.</t>
          </li>
          <li>
            <t>Client Connection ID (CID): a QUIC Connection ID that is chosen by the client, and
is used in the Destination Connection ID field of packets from the target to
the client.</t>
          </li>
          <li>
            <t>Target Connection ID (CID): a QUIC Connection ID that is chosen by the target, and
is used in the Destination Connection ID field of packets from the client to
the target.</t>
          </li>
          <li>
            <t>Virtual Connection ID (VCID): a fake QUIC Connection ID chosen by the proxy
that is used on the client-to-proxy 4-tuple in forwarded mode.</t>
          </li>
          <li>
            <t>Client VCID: a VCID used by the proxy to send forwarded packets from the target
to the client.</t>
          </li>
          <li>
            <t>Target VCID: a VCID used by the client to send forwarded packets to the target
via the proxy.</t>
          </li>
          <li>
            <t>Packet Transform: the procedure used to modify packets before they enter the
client-proxy link.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>QUIC-aware proxying involves a client, a proxy, and a target. Although
multiple proxies can be chained together in sequence (which is
a main motivation for enabling forwarded mode), each subsequent proxy
is just treated as a target by the preceding proxy.</t>
      <figure anchor="overview-diagram">
        <name>Diagram of roles in QUIC-aware proxying</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="224" width="496" viewBox="0 0 496 224" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <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 200,32 L 200,96" fill="none" stroke="black"/>
              <path d="M 296,32 L 296,96" fill="none" stroke="black"/>
              <path d="M 416,32 L 416,96" fill="none" stroke="black"/>
              <path d="M 488,32 L 488,96" fill="none" stroke="black"/>
              <path d="M 8,32 L 80,32" fill="none" stroke="black"/>
              <path d="M 200,32 L 296,32" fill="none" stroke="black"/>
              <path d="M 416,32 L 488,32" fill="none" stroke="black"/>
              <path d="M 80,64 L 200,64" fill="none" stroke="black"/>
              <path d="M 296,64 L 416,64" fill="none" stroke="black"/>
              <path d="M 8,96 L 80,96" fill="none" stroke="black"/>
              <path d="M 200,96 L 296,96" fill="none" stroke="black"/>
              <path d="M 416,96 L 488,96" fill="none" stroke="black"/>
              <path d="M 40,128 L 128,128" fill="none" stroke="black"/>
              <path d="M 368,128 L 456,128" fill="none" stroke="black"/>
              <path d="M 40,176 L 56,176" fill="none" stroke="black"/>
              <path d="M 200,176 L 216,176" fill="none" stroke="black"/>
              <path d="M 280,176 L 296,176" fill="none" stroke="black"/>
              <path d="M 440,176 L 456,176" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="464,176 452,170.4 452,181.6" fill="black" transform="rotate(0,456,176)"/>
              <polygon class="arrowhead" points="464,128 452,122.4 452,133.6" fill="black" transform="rotate(0,456,128)"/>
              <polygon class="arrowhead" points="288,176 276,170.4 276,181.6" fill="black" transform="rotate(180,280,176)"/>
              <polygon class="arrowhead" points="224,176 212,170.4 212,181.6" fill="black" transform="rotate(0,216,176)"/>
              <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
              <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
              <g class="text">
                <text x="44" y="68">Client</text>
                <text x="248" y="68">Proxy</text>
                <text x="452" y="68">Target</text>
                <text x="204" y="132">Client-to-target</text>
                <text x="316" y="132">connection</text>
                <text x="128" y="180">Client-to-proxy</text>
                <text x="368" y="180">Proxy-to-target</text>
                <text x="120" y="196">4-tuple</text>
                <text x="368" y="196">4-tuple</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
   +--------+              +-----------+              +--------+
   |        |              |           |              |        |
   | Client +--------------+   Proxy   +--------------+ Target |
   |        |              |           |              |        |
   +--------+              +-----------+              +--------+

       <----------- Client-to-target connection ----------->


       <-- Client-to-proxy -->       <-- Proxy-to-target -->
              4-tuple                        4-tuple
]]></artwork>
        </artset>
      </figure>
      <t>All QUIC-aware proxying relies on the proxy learning information about
QUIC connection IDs on the client-to-target QUIC connection (<xref target="cid-awareness"/>).</t>
      <t>Forwarded mode adds the concept of Virtual Connection IDs that are assigned
by the proxy to use to identify packets on the client-to-proxy 4-tuple (<xref target="vcids"/>).</t>
      <t>Negotation of modes and assignment of connection IDs is described in <xref target="negotiation"/>.</t>
      <section anchor="cid-awareness">
        <name>Connection ID Awareness</name>
        <t>For a proxy to be aware of proxied QUIC connection IDs, it needs to know and
correlate three values:</t>
        <ol spacing="normal" type="1"><li>
            <t>The HTTP stream used to proxy a client-to-target QUIC connection</t>
          </li>
          <li>
            <t>The client-chosen connection ID on the client-to-target QUIC connection,
or the "client CID"</t>
          </li>
          <li>
            <t>The target-chosen connection ID on the client-to-target QUIC connection,
or the "target CID"</t>
          </li>
        </ol>
        <t>For example, consider a proxy using HTTP/3 that has two clients (A and B) connected
simultaneously, each client coming from a different IP address and port.
Each client makes a request to proxy a UDP flow to "target.example.net" on
port 443. If the proxy knows that client A's connection to the target
has negotiated a client CID <tt>AAAA0000</tt> and a target CID <tt>0000AAAA</tt>, and client B's
connection to the target has negotiated a client CID <tt>BBBB0000</tt> and a target CID
<tt>0000BBBB</tt>, then the proxy would be able to use the same proxy-to-target 4-tuple
for both connections, because it can route packets from the target to the
correct client based on CID <tt>AAAA0000</tt> or <tt>BBBB0000</tt>.</t>
        <figure anchor="sharing-tuple-diagram">
          <name>Example of sharing a proxy-to-target 4-tuple</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="288" width="496" viewBox="0 0 496 288" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,64 L 8,112" fill="none" stroke="black"/>
                <path d="M 8,176 L 8,224" fill="none" stroke="black"/>
                <path d="M 80,64 L 80,112" fill="none" stroke="black"/>
                <path d="M 80,176 L 80,224" fill="none" stroke="black"/>
                <path d="M 200,64 L 200,224" fill="none" stroke="black"/>
                <path d="M 296,64 L 296,224" fill="none" stroke="black"/>
                <path d="M 416,112 L 416,176" fill="none" stroke="black"/>
                <path d="M 488,112 L 488,176" fill="none" stroke="black"/>
                <path d="M 40,32 L 120,32" fill="none" stroke="black"/>
                <path d="M 376,32 L 456,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 80,64" fill="none" stroke="black"/>
                <path d="M 200,64 L 296,64" fill="none" stroke="black"/>
                <path d="M 80,80 L 200,80" fill="none" stroke="black"/>
                <path d="M 8,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 416,112 L 488,112" fill="none" stroke="black"/>
                <path d="M 296,144 L 416,144" fill="none" stroke="black"/>
                <path d="M 8,176 L 80,176" fill="none" stroke="black"/>
                <path d="M 416,176 L 488,176" fill="none" stroke="black"/>
                <path d="M 80,208 L 200,208" fill="none" stroke="black"/>
                <path d="M 8,224 L 80,224" fill="none" stroke="black"/>
                <path d="M 200,224 L 296,224" fill="none" stroke="black"/>
                <path d="M 40,256 L 120,256" fill="none" stroke="black"/>
                <path d="M 376,256 L 456,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,256 452,250.4 452,261.6" fill="black" transform="rotate(0,456,256)"/>
                <polygon class="arrowhead" points="464,32 452,26.4 452,37.6" fill="black" transform="rotate(0,456,32)"/>
                <polygon class="arrowhead" points="48,256 36,250.4 36,261.6" fill="black" transform="rotate(180,40,256)"/>
                <polygon class="arrowhead" points="48,32 36,26.4 36,37.6" fill="black" transform="rotate(180,40,32)"/>
                <g class="text">
                  <text x="156" y="36">Client</text>
                  <text x="232" y="36">A-to-target</text>
                  <text x="324" y="36">connection</text>
                  <text x="68" y="52">AAAA0000</text>
                  <text x="428" y="52">0000AAAA</text>
                  <text x="44" y="84">Client</text>
                  <text x="40" y="100">A</text>
                  <text x="348" y="132">Shared</text>
                  <text x="248" y="148">Proxy</text>
                  <text x="452" y="148">Target</text>
                  <text x="352" y="164">4-tuple</text>
                  <text x="44" y="196">Client</text>
                  <text x="40" y="212">B</text>
                  <text x="68" y="244">BBBB0000</text>
                  <text x="428" y="244">0000BBBB</text>
                  <text x="156" y="260">Client</text>
                  <text x="232" y="260">B-to-target</text>
                  <text x="324" y="260">connection</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
       <---------- Client A-to-target connection ---------->
       AAAA0000                                     0000AAAA
   +--------+              +-----------+
   | Client +--------------+           +
   |   A    |              |           |
   +--------+              |           |              +--------+
                           |           |   Shared     |        |
                           |   Proxy   +--------------+ Target |
                           |           |   4-tuple    |        |
   +--------+              |           |              +--------+
   | Client |              |           |
   |   B    +--------------+           |
   +--------+              +-----------+
       BBBB0000                                     0000BBBB
       <---------- Client B-to-target connection ---------->
]]></artwork>
          </artset>
        </figure>
        <t>In order to share a proxy-to-target 4-tuple between multiple proxied connections,
the proxy MUST guarantee that the client CIDs do not conflict. See <xref target="conflicts"/>
for more discussion of handlng CID conflicts.</t>
      </section>
      <section anchor="vcids">
        <name>Virtual Connection IDs</name>
        <t>Virtual Connection IDs (VCIDs) are QUIC Connection IDs used on the link between a
client and proxy that do not belong to the QUIC connection between the client
and proxy, but instead are aliases for particular client-to-target connections.
VCIDs are only used in forwarded mode. They are established using HTTP capsules
<xref target="HTTP-CAPSULES"/> as described in <xref target="cid-capsules"/>.</t>
        <t>For example, consider a proxy using HTTP/3 that has a single client connected
to it. The client-to-proxy QUIC connection has <tt>CCCC0000</tt> as the client CID
and <tt>0000CCCC</tt> as the proxy CID. The client has connected to a single target
through the proxy, and the client-to-target QUIC connection has <tt>CCCC1111</tt>
as the client CID and <tt>1111CCCC</tt> as the target CID. In order to use
forwarded mode, the proxy assigns VCIDs to use on the client-to-proxy link
to represent the client-to-target connection. In this case, the VCIDs could
be <tt>CCCC2222</tt> for the client's VCID and <tt>2222CCCC</tt> for the proxy's VCID that
it uses to forward to the target.</t>
        <figure anchor="vcid-diagram">
          <name>Diagram of VCIDs in forwarded mode</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="504" viewBox="0 0 504 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 16,32 L 16,96" fill="none" stroke="black"/>
                <path d="M 88,32 L 88,96" fill="none" stroke="black"/>
                <path d="M 208,32 L 208,96" fill="none" stroke="black"/>
                <path d="M 304,32 L 304,96" fill="none" stroke="black"/>
                <path d="M 424,32 L 424,96" fill="none" stroke="black"/>
                <path d="M 496,32 L 496,96" fill="none" stroke="black"/>
                <path d="M 16,32 L 88,32" fill="none" stroke="black"/>
                <path d="M 208,32 L 304,32" fill="none" stroke="black"/>
                <path d="M 424,32 L 496,32" fill="none" stroke="black"/>
                <path d="M 88,64 L 208,64" fill="none" stroke="black"/>
                <path d="M 304,64 L 424,64" fill="none" stroke="black"/>
                <path d="M 16,96 L 88,96" fill="none" stroke="black"/>
                <path d="M 208,96 L 304,96" fill="none" stroke="black"/>
                <path d="M 424,96 L 496,96" fill="none" stroke="black"/>
                <path d="M 48,144 L 64,144" fill="none" stroke="black"/>
                <path d="M 208,144 L 224,144" fill="none" stroke="black"/>
                <path d="M 48,208 L 136,208" fill="none" stroke="black"/>
                <path d="M 376,208 L 464,208" fill="none" stroke="black"/>
                <path d="M 48,256 L 64,256" fill="none" stroke="black"/>
                <path d="M 208,256 L 224,256" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="472,208 460,202.4 460,213.6" fill="black" transform="rotate(0,464,208)"/>
                <polygon class="arrowhead" points="232,256 220,250.4 220,261.6" fill="black" transform="rotate(0,224,256)"/>
                <polygon class="arrowhead" points="232,144 220,138.4 220,149.6" fill="black" transform="rotate(0,224,144)"/>
                <polygon class="arrowhead" points="56,256 44,250.4 44,261.6" fill="black" transform="rotate(180,48,256)"/>
                <polygon class="arrowhead" points="56,208 44,202.4 44,213.6" fill="black" transform="rotate(180,48,208)"/>
                <polygon class="arrowhead" points="56,144 44,138.4 44,149.6" fill="black" transform="rotate(180,48,144)"/>
                <g class="text">
                  <text x="52" y="68">Client</text>
                  <text x="256" y="68">Proxy</text>
                  <text x="460" y="68">Target</text>
                  <text x="76" y="132">CCCC0000</text>
                  <text x="196" y="132">0000CCCC</text>
                  <text x="136" y="148">Client-to-proxy</text>
                  <text x="140" y="164">connection</text>
                  <text x="76" y="196">CCCC1111</text>
                  <text x="436" y="196">1111CCCC</text>
                  <text x="212" y="212">Client-to-target</text>
                  <text x="324" y="212">connection</text>
                  <text x="36" y="244">CCCC2222</text>
                  <text x="116" y="244">(CCCC1111)</text>
                  <text x="212" y="244">2222CCCC</text>
                  <text x="292" y="244">(1111CCCC)</text>
                  <text x="136" y="260">Client-to-proxy</text>
                  <text x="136" y="276">VCIDs</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
   +--------+              +-----------+              +--------+
   |        |              |           |              |        |
   | Client +--------------+   Proxy   +--------------+ Target |
   |        |              |           |              |        |
   +--------+              +-----------+              +--------+

       CCCC0000       0000CCCC
       <-- Client-to-proxy -->
              connection

       CCCC1111                                     1111CCCC
       <----------- Client-to-target connection ----------->

  CCCC2222 (CCCC1111)   2222CCCC (1111CCCC)
       <-- Client-to-proxy -->
                VCIDs
]]></artwork>
          </artset>
        </figure>
        <t>In order for a proxy to correctly route packets using VCIDs from
client-to-target and target-to-client, the proxy MUST guarantee that
the mappings between VCIDs, CIDs, and 4-tuples are unique. Specifically,
in order to route packets sent by the client, the proxy needs to be able
to observe the VCID and the client-to-proxy 4-tuple, and map them
to a specific target CID and proxy-to-target 4-tuple. In order to route
packets sent by a target, the proxy needs to be able to observe the client
CID and the proxy-to-target 4-tuple, and map them to a specific VCID
and client-to-proxy 4-tuple. Since proxies choose the VCID values, they
can ensure that the VCIDs are distinguishable.</t>
        <t>Servers receiving QUIC packets can employ load balancing
strategies such as those described in <xref target="QUIC-LB"/>
that encode routing information in the connection ID. When operating in
forwarded mode, clients send QUIC packets destined for the target directly
to the proxy. Since these packets are generated using the target CID,
load balancers may not have the necessary information to route packets to the correct proxy. The target VCID
is a VCID chosen by the proxy that the client uses when sending
forwarded mode packets. The proxy replaces the target VCID
with the target CID prior to forwarding the packet to the target.</t>
        <t>Similarly, QUIC requires that connection IDs aren't reused over multiple network
paths to avoid linkability. The client VCID is a connection ID
chosen by the proxy that the proxy uses when sending forwarded mode packets.
The proxy replaces the client CID with the client VCID prior to
forwarding the packet to the client. Clients take advantage of this
to avoid linkability when migrating a client to proxy network path. The Virtual
client CID allows the connection ID bytes to change on the wire
without requiring the connection IDs on the client to target connection change.
To reduce the likelihood of connection ID conflicts, the proxy SHOULD choose a
client VCID that is at least as long as the original client CID. Similarly,
clients multiplexing connections on the same UDP 4-tuple SHOULD
choose a client CID that's sufficiently long to reduce the likelihood
of a conflict with the proxy-chosen client VCID. The client VCID MUST either be
constructed such that it is unpredictable to the client or to guarantee no
conflicts among all proxies sharing an IP address
and port. See <xref target="security"/> for more discussion on client VCID
construction.</t>
        <t>Clients and Proxies not implementing forwarded mode do not need to consider
VCIDs since all client-to-target datagrams will be encapsulated
within the client-to-proxy connection.</t>
      </section>
      <section anchor="negotiation">
        <name>Negotiating Modes and Connection IDs</name>
        <t>In order to support QUIC-aware proxying, both clients and proxies need
to support capsules <xref target="HTTP-CAPSULES"/>, which is indicated by including
the "Capsule-Protocol" header field in requests and responses. If this header
field is not included, none of the functionality in this document can be used.</t>
        <artwork><![CDATA[
  capsule-protocol = ?1
]]></artwork>
        <t>To support forwarded mode, both clients and proxies need to include
the "Proxy-QUIC-Forwarding" header field, as defined in <xref target="forwarding-header"/>.
This indicates support for forwarded mode, and allows negotiation of
packet transforms to apply when forwarding (<xref target="transforms"/>), along
with any parameters for specific transforms. Clients or proxies that
don't support forwarded mode will not include this header field.</t>
        <artwork><![CDATA[
  proxy-quic-forwarding = ?1; accept-transform=scramble,identity; \
      scramble-key=:abc...789=:
]]></artwork>
        <t>After negotiating support with header fields, clients and proxies use
the capsules defined in <xref target="cid-capsules"/> to communicate information
about CIDs and VCIDs.</t>
        <t>For QUIC-aware proxying without forwarded mode, the steps are as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The client sends the <tt>REGISTER_CLIENT_CID</tt> capsule once it selects a
CID that it will use for receiving packets from a target.</t>
          </li>
          <li>
            <t>The proxy sends the <tt>ACK_CLIENT_CID</tt> capsule to acknowledge that CID,
with no associated client VCID; alternatively, the proxy can send the
<tt>CLOSE_CLIENT_CID</tt> if it detects a conflict with another CID.</t>
          </li>
          <li>
            <t>The client sends the <tt>REGISTER_TARGET_CID</tt> capsule as soon as it learns
the target CID on the client-to-target connection.</t>
          </li>
          <li>
            <t>The proxy sends the <tt>ACK_TARGET_CID</tt> capsule to acknowledge that CID,
with no associated target VCID; alternatively, the proxy can send the
<tt>CLOSE_TARGET_CID</tt> if it detects a conflict with another CID.</t>
          </li>
          <li>
            <t>Whenever a client or target stops uses a particular CID, the client
sends a <tt>CLOSE_CLIENT_CID</tt> or <tt>CLOSE_TARGET_CID</tt> capsule. The client
can also initiate new <tt>REGISTER_CLIENT_CID</tt> or <tt>REGISTER_TARGET_CID</tt>
exchanges at any time.</t>
          </li>
        </ol>
        <t>For QUIC-aware proxying with forwarded mode, the steps are as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>The client sends the <tt>REGISTER_CLIENT_CID</tt> capsule once it selects a
CID that it will use for receiving packets from a target.</t>
          </li>
          <li>
            <t>The proxy sends the <tt>ACK_CLIENT_CID</tt> capsule to acknowledge that CID,
with a client VCID; alternatively, the proxy can send the
<tt>CLOSE_CLIENT_CID</tt> if it detects a conflict with another CID.</t>
          </li>
          <li>
            <t>The client sends the <tt>ACK_CLIENT_VCID</tt> capsule to acknowledge the
client VCID, which allows forwarded packets for that VCID to be used.</t>
          </li>
          <li>
            <t>The client sends the <tt>REGISTER_TARGET_CID</tt> capsule as soon as it learns
the target CID on the client-to-target connection.</t>
          </li>
          <li>
            <t>The proxy sends the <tt>ACK_TARGET_CID</tt> capsule to acknowledge that CID,
with a target VCID; alternatively, the proxy can send the
<tt>CLOSE_TARGET_CID</tt> if it detects a conflict with another CID. Once
the client receives the target VCID, it can start sending forwarded
packets using the target VCID.</t>
          </li>
          <li>
            <t>Whenever a client or target stops uses a particular CID, the client
sends a <tt>CLOSE_CLIENT_CID</tt> or <tt>CLOSE_TARGET_CID</tt> capsule. The client
can also initiate new <tt>REGISTER_CLIENT_CID</tt> or <tt>REGISTER_TARGET_CID</tt>
exchanges at any time.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="forwarding-header">
      <name>Proxy-QUIC-Forwarding Header</name>
      <t>A client initiates UDP proxying via a CONNECT request as defined
in <xref target="CONNECT-UDP"/>. Within its request, it includes the "Proxy-QUIC-Forwarding"
header to indicate whether or not the request should support forwarding.
If this header is not included, the client MUST NOT send any connection ID
capsules.</t>
      <t>"Proxy-QUIC-Forwarding" is an Item Structured Header <xref target="RFC8941"/>. Its
value MUST be a Boolean.</t>
      <t>If the client wants to enable QUIC packet forwarding for this request, it sets
the value to "?1". If it doesn't want to enable forwarding, but instead only
provide information about QUIC Connection IDs for the purpose of allowing
the proxy to share a proxy-to-target 4-tuple, it sets the value to "?0".</t>
      <t>The client MUST add an "accept-transform" parameter whose value is an
<tt>sf-string</tt> containing the supported packet transforms (<xref target="transforms"/>)
in order of descending preference, separated by commas. If the proxy receives a
"Proxy-QUIC-Forwarding" header without the "accept-transform" parameters, it
MUST ignore the header and respond as if the client had not sent the
"Proxy-QUIC-Forwarding" header.</t>
      <t>If the proxy supports QUIC-aware proxying, it will include the
"Proxy-QUIC-Forwarding" header in successful HTTP responses. The value
indicates whether or not the proxy supports forwarding. If the client does
not receive this header in responses, the client SHALL assume that the proxy
does not support this extension.</t>
      <t>The proxy MUST include a "transform" parameter whose value is an <tt>sf-string</tt>
indicating the selected transform. If the proxy does not recognize or accept
any of the transforms offered by the client, it MUST omit this parameter and
set the header field value to "?0", or omit the header entirely.</t>
    </section>
    <section anchor="cid-capsules">
      <name>Connection ID Capsules</name>
      <t>Connection ID awareness relies on using capsules <xref target="HTTP-CAPSULES"/> to
signal addition and removal of Connection IDs. Clients send capsules
to let proxies know when Connection IDs on the client-to-target
QUIC connection are changing. Proxies send capsules to acknowledge or
reject these Connection IDs, and in forwarded mode to let clients know
about Virtual Connection IDs to use on the client-to-proxy link.</t>
      <t>Note that these capsules do not register contexts. QUIC packets are encoded
using HTTP Datagrams with the context ID set to zero as defined in
<xref target="CONNECT-UDP"/>.</t>
      <t>The REGISTER_CLIENT_CID (<xref target="capsule-reg-client"/>) and REGISTER_TARGET_CID
(<xref target="capsule-reg-target"/>) capsule types allow a client to inform
the proxy about a new client CID or a new target CID,
respectively. These capsule types MUST only be sent by a client.</t>
      <t>The ACK_CLIENT_CID (<xref target="capsule-ack-client"/>) and ACK_TARGET_CID
(<xref target="capsule-ack-target"/>) capsule types are sent by the proxy to the client
to indicate that a mapping was successfully created for a registered
connection ID as well as optionally provide the Virtual Connection IDs that can be
used in forwarded mode. These capsule types MUST only be sent by a proxy.</t>
      <t>The ACK_CLIENT_VCID (<xref target="capsule-ack-virtual"/>) capsule type MUST only be sent
by the client and only when forwarded mode is enabled. It is sent by the client
to the proxy in response to an ACK_CLIENT_CID capsule to indicate that the client
is ready to receive forwarded mode packets with the specified virtual connection ID.
The proxy MUST NOT send forwarded mode packets to the client prior to receiving this
acknowledgement. This capsule also contains a Stateless Reset Token the client
may respond with when receiving forwarded mode packets with the specified
virtual connection ID.</t>
      <t>The CLOSE_CLIENT_CID and CLOSE_TARGET_CID capsule types (<xref target="capsule-close"/>)
allow either a client or a proxy to remove a mapping for a connection ID.
These capsule types MAY be sent by either a client or the proxy. If a proxy sends a
CLOSE_CLIENT_CID without having sent an ACK_CLIENT_CID, or if a proxy
sends a CLOSE_TARGET_CID without having sent an ACK_TARGET_CID,
it is rejecting a Connection ID registration. Similarly, if a client sends
CLOSE_CLIENT_CID without having sent an ACK_CLIENT_VCID capsule, the client is
either rejecting the proxy-chosen client VCID or no longer
needs the connection ID registered.</t>
      <section anchor="capsule-reg-client">
        <name>REGISTER_CLIENT_CID</name>
        <t>The REGISTER_CLIENT_CID capsule has type <tt>0xffe500</tt> and is sent by the client.
It contains a single connection ID that is the client-provided connection
on the client-to-target QUIC connection.</t>
        <figure anchor="fig-capsule-register-client-cid">
          <name>Register CID Capsule Format</name>
          <artwork><![CDATA[
Register CID Capsule {
  Type (i) = 0xffe500
  Length (i),
  Connection ID (0..2040),
}
]]></artwork>
        </figure>
        <dl>
          <dt>Connection ID:</dt>
          <dd>
            <t>A connection ID being registered, which is between 0 and 255 bytes in
length. The length of the connection ID is implied by the length of the
capsule. Note that in QUICv1, the length of the Connection ID is limited
to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
          </dd>
        </dl>
      </section>
      <section anchor="capsule-reg-target">
        <name>REGISTER_TARGET_CID</name>
        <t>The REGISTER_TARGET_CID capsule has type <tt>0xffe501</tt> and is sent by the client.
It includes the target-provided connection ID on the client-to-target QUIC
connection, and the corresponding Stateless Reset Token.</t>
        <figure anchor="fig-capsule-register-target-cid">
          <name>Register Target CID Capsule Format</name>
          <artwork><![CDATA[
Register Target CID Capsule {
  Type (i) = 0xffe501
  Length (i),
  Connection ID Length (i)
  Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
        </figure>
        <dl>
          <dt>Connection ID Length</dt>
          <dd>
            <t>The length of the connection ID being registered, which is between 0 and
255. Note that in QUICv1, the length of the Connection ID is limited to 20
bytes, but QUIC invariants allow up to 255 bytes.</t>
          </dd>
          <dt>Connection ID</dt>
          <dd>
            <t>A connection ID being registered whose length is equal to Connection ID
Length. This is the real target CID.</t>
          </dd>
          <dt>Stateless Reset Token Length</dt>
          <dd>
            <t>The length of the target-provided Stateless Reset Token.</t>
          </dd>
          <dt>Stateless Reset Token</dt>
          <dd>
            <t>The target-provided Stateless Reset token allowing the proxy to correctly
recognize Stateless Reset packets to be tunnelled to the client.</t>
          </dd>
        </dl>
      </section>
      <section anchor="capsule-ack-client">
        <name>ACK_CLIENT_CID</name>
        <t>The ACK_CLIENT_CID capsule has type <tt>0xffe502</tt> and is sent by the proxy in
response to a REGISTER_CLIENT_CID capsule. It optionally assigns a Virtual
Connection ID when forwarded mode is supported.</t>
        <figure anchor="fig-capsule-ack-client-cid">
          <name>Acknowledge Client CID Capsule Format</name>
          <artwork><![CDATA[
Acknowledge Client CID Capsule {
  Type (i) = 0xffe502
  Length (i)
  Connection ID Length (i)
  Connection ID (0..2040),
  Virtual Connection ID Length (i)
  Virtual Connection ID (0..2040),
}
]]></artwork>
        </figure>
        <dl>
          <dt>Connection ID Length</dt>
          <dd>
            <t>The length of the connection ID being acknowledged, which
is between 0 and 255. Note that in QUICv1, the length of the Connection ID
is limited to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
          </dd>
          <dt>Connection ID</dt>
          <dd>
            <t>A connection ID being acknowledged whose length is equal to
Connection ID Length. This is the real Cilent Connection ID.</t>
          </dd>
          <dt>Virtual Connection ID Length</dt>
          <dd>
            <t>The length of the client VCID being provided. This MUST be a
valid connection ID length for the QUIC version used in the client-to-proxy QUIC
connection. When forwarded mode is not negotiated, the length MUST be zero.
The Virtual Connection ID Length and Connection ID Length SHOULD be equal
when possible to avoid the need to resize packets during replacement. The
client VCID Length SHOULD be at least as large as the
Connection ID to reduce the likelihood of connection ID conflicts.</t>
          </dd>
          <dt>Virtual Connection ID</dt>
          <dd>
            <t>The proxy-chosen connection ID that the proxy MUST use when sending in
forwarded mode. The proxy rewrites forwarded mode packets to contain the
correct client VCID prior to sending them to the client.</t>
          </dd>
        </dl>
      </section>
      <section anchor="capsule-ack-target">
        <name>ACK_TARGET_CID</name>
        <t>The ACK_TARGET_CID capsule has type <tt>0xffe504</tt> and is sent by the proxy in
response to a REGISTER_TARGET_CID capsule. It optionally assigns a Virtual
Connection ID and Stateless Reset Token if forwarded mode is enabled.</t>
        <figure anchor="fig-capsule-ack-target-cid">
          <name>Acknowledge Target CID Capsule Format</name>
          <artwork><![CDATA[
Acknowledge Target CID Capsule {
  Type (i) = 0xffe504
  Length (i)
  Connection ID Length (i)
  Connection ID (0..2040),
  Virtual Connection ID Length (i)
  Virtual Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
        </figure>
        <dl>
          <dt>Connection ID Length</dt>
          <dd>
            <t>The length of the connection ID being acknowledged, which
is between 0 and 255. Note that in QUICv1, the length of the Connection ID
is limited to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
          </dd>
          <dt>Connection ID</dt>
          <dd>
            <t>A connection ID being acknowledged whose length is equal to
Connection ID Length. This is the real target CID.</t>
          </dd>
          <dt>Virtual Connection ID Length</dt>
          <dd>
            <t>The length of the target VCID being provided. This MUST be a
valid connection ID length for the QUIC version used in the client-to-proxy QUIC
connection. When forwarded mode is not negotiated, the length MUST be zero.
The Virtual Connection ID Length and Connection ID Length SHOULD be equal
when possible to avoid the need to resize packets during replacement.</t>
          </dd>
          <dt>Virtual Connection ID</dt>
          <dd>
            <t>The proxy-chosen connection ID that the client MUST use when sending in
forwarded mode. The proxy rewrites forwarded mode packets to contain the
correct target CID prior to sending them.</t>
          </dd>
          <dt>Stateless Reset Token Length</dt>
          <dd>
            <t>The length of the Stateless Reset Token sent by the proxy in response to
forwarded mode packets in order to reset the client-to-target QUIC connection.
When forwarded mode is not negotiated, the length MUST be zero. Proxies choosing
not to support stateless resets MAY set the length to zero. Clients receiving a
zero-length stateless reset token MUST ignore it.</t>
          </dd>
          <dt>Stateless Reset Token</dt>
          <dd>
            <t>A Stateless Reset Token allowing reset of the client-to-target connection in
response to client-to-target forwarded mode packets.</t>
          </dd>
        </dl>
      </section>
      <section anchor="capsule-ack-virtual">
        <name>ACK_CLIENT_VCID</name>
        <t>The ACK_CLIENT_VCID capsule type has type <tt>0xffe503</tt> and is sent by the client in
response to an ACK_TARGET_CID capsule that contains a virtual connection ID.</t>
        <figure anchor="fig-capsule-ack-virtual-client-cid">
          <name>Acknowledge Client VCID Capsule Format</name>
          <artwork><![CDATA[
Acknowledge Client VCID Capsule {
  Type (i) = 0xffe503
  Length (i)
  Connection ID Length (i)
  Connection ID (0..2040),
  Virtual Connection ID Length (i)
  Virtual Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
        </figure>
        <dl>
          <dt>Connection ID Length</dt>
          <dd>
            <t>The length of the connection ID being acknowledged, which
is between 0 and 255. Note that in QUICv1, the length of the Connection ID
is limited to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
          </dd>
          <dt>Connection ID</dt>
          <dd>
            <t>A connection ID being acknowledged whose length is equal to
Connection ID Length. This is the real Cilent Connection ID.</t>
          </dd>
          <dt>Virtual Connection ID Length</dt>
          <dd>
            <t>The length of the client VCID being acknowledged.</t>
          </dd>
          <dt>Virtual Connection ID</dt>
          <dd>
            <t>The proxy-chosen virtual connection ID being acknowledged whose length is
equal to Virtual Connection ID Length.</t>
          </dd>
          <dt>Stateless Reset Token Length</dt>
          <dd>
            <t>The length of the Stateless Reset Token that may be sent by the client in
response to forwarded mode packets to reset the client-to-target connection.
Clients choosing not to support stateless resets MAY set the length to zero.
Proxies receiving a zero-length stateless reset token MUST ignore it.</t>
          </dd>
          <dt>Stateless Reset Token</dt>
          <dd>
            <t>A Stateless Reset Token allowing reset of the target-to-client forwarding rule
in response to target-to-client forwarded mode packets.</t>
          </dd>
        </dl>
      </section>
      <section anchor="capsule-close">
        <name>CLOSE_CLIENT_CID and CLOSE_TARGET_CID</name>
        <t>CLOSE_CLIENT_CID and CLOSE_TARGET_CID capsule types have types <tt>0xffe505</tt> and
<tt>0xffe506</tt>, respectively, and include a single connection ID to close. They
can be sent by either clients or proxies.</t>
        <figure anchor="fig-capsule-close-cid">
          <name>Close CID Capsule Format</name>
          <artwork><![CDATA[
Close CID Capsule {
  Type (i) = 0xffe505, 0xffe506
  Length (i),
  Connection ID (0..2040),
}
]]></artwork>
        </figure>
        <dl>
          <dt>Connection ID:</dt>
          <dd>
            <t>A connection ID being closed, which is between 0 and 255 bytes in
length. The length of the connection ID is implied by the length of the
capsule. Note that in QUICv1, the length of the Connection ID is limited
to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
          </dd>
        </dl>
      </section>
      <section anchor="conflicts">
        <name>Detecting Conflicts</name>
        <t>In order to be able to route packets correctly in both tunnelled and forwarded
mode, proxies check for conflicts before creating a new CID mapping. If a conflict
is detected, the proxy will reject the client's request using a CLOSE_CLIENT_CID
or CLOSE_TARGET_CID capsule.</t>
        <t>Two 4-tuples conflict if and only if all members of the 4-tuple (local IP
address, local UDP port, remote IP address, and remote UDP port) are identical.</t>
        <t>Two Connection IDs conflict if and only if one Connection ID is equal to or a
prefix of another. For example, a zero-length Connection ID conflicts with all
connection IDs. This definition of a conflict originates from the fact that
QUIC short headers do not carry the length of the Destination Connection ID
field, and therefore if two short headers with different Destination Connection
IDs are received on a shared 4-tuple, one being a prefix of the other prevents
the receiver from identifying which mapping this corresponds to.</t>
        <t>The proxy treats two mappings as being in conflict when a conflict is detected
for all elements on the left side of the mapping diagrams above.</t>
        <t>Since very short Connection IDs are more likely to lead to conflicts,
particularly zero-length Connection IDs, a proxy MAY choose to reject all
requests for very short Connection IDs as conflicts, in anticipation of future
conflicts.</t>
      </section>
      <section anchor="client-considerations">
        <name>Client Considerations</name>
        <t>The client sends a REGISTER_CLIENT_CID capsule whenever it advertises a new
client CID to the target, and a REGISTER_TARGET_CID capsule when
it has received a new target CID for the target. In order to change
the connection ID bytes on the wire, a client can solicit new virtual connection
IDs by re-registering the same connection IDs. The client may solicit a new
target VCID by sending a REGISTER_TARGET_CID capsule with a
previously registered target CID. Similarly, the client may solicit a
new client VCID by sending a REGISTER_CLIENT_CID with a
previously registered client CID. The client MUST acknowledge the new
client VCID with an ACK_CLIENT_VCID capsule or close the
registration. The proxy MUST NOT send in forwarded mode until ACK_CLIENT_VCID
has been received. Clients are responsible for changing Virtual Connection IDs
when the HTTP stream's network path changes to avoid linkability across network
paths. Note that initial REGISTER_CLIENT_CID capsules MAY be sent prior to
receiving an HTTP response from the proxy.</t>
        <section anchor="new-proxied-connection-setup">
          <name>New Proxied Connection Setup</name>
          <t>To initiate QUIC-aware proxying, the client sends a REGISTER_CLIENT_CID
capsule containing the initial client CID that the client has
advertised to the target.</t>
          <t>If the mapping is created successfully, the client will receive a
ACK_CLIENT_CID capsule that contains the same client CID that was
requested as well as a client VCID that the client MUST use
when sending forwarded mode packets, assuming forwarded mode is supported.</t>
          <t>If forwarded mode is supported, the client MUST respond with an
ACK_CLIENT_VCID to signal to the proxy that it may start sending forwarded mode
packets. If forwarded mode is not supported, an ACK_CLIENT_VCID capsule MUST
NOT be sent.</t>
          <t>Since clients are always aware whether or not they are using a QUIC proxy,
clients are expected to cooperate with proxies in selecting client CIDs.
A proxy detects a conflict when it is not able to create a unique mapping
using the client CID (<xref target="conflicts"/>). It can reject requests that
would cause a conflict and indicate this to the client by replying with a
CLOSE_CLIENT_CID capsule. In order to avoid conflicts, clients SHOULD select
client CIDs of at least 8 bytes in length with unpredictable values.
A client also SHOULD NOT select a client CID that matches the ID used
for the QUIC connection to the proxy, as this inherently creates a conflict.</t>
          <t>If the rejection indicated a conflict due to the client CID, the
client MUST select a new Connection ID before sending a new request, and
generate a new packet. For example, if a client is sending a QUIC Initial
packet and chooses a Connection ID that conflicts with an existing mapping
to the same target server, it will need to generate a new QUIC Initial.</t>
        </section>
        <section anchor="adding-new-client-connection-ids">
          <name>Adding New Client Connection IDs</name>
          <t>Since QUIC connection IDs are chosen by the receiver, an endpoint needs to
communicate its chosen connection IDs to its peer before the peer can start
using them. In QUICv1, this is performed using the NEW_CONNECTION_ID frame.</t>
          <t>Prior to informing the target of a new chosen client CID, the client
MUST send a REGISTER_CLIENT_CID capsule to the proxy containing the new client
CID.</t>
          <t>The client should only inform the target of the new client CID once an
ACK_CLIENT_CID capsule is received that contains the echoed connection ID.</t>
          <t>If forwarded mode is enabled, the client MUST reply to the ACK_CLIENT_CID with
an ACK_CLIENT_VCID capsule with the real and virtual connection IDs along with
an optional Stateless Reset Token.</t>
        </section>
      </section>
      <section anchor="proxy-considerations">
        <name>Proxy Considerations</name>
        <t>The proxy MUST reply to each REGISTER_CLIENT_CID capsule with either
an ACK_CLIENT_CID or CLOSE_CLIENT_CID capsule containing the
Connection ID that was in the registration capsule.</t>
        <t>Similarly, the proxy MUST reply to each REGISTER_TARGET_CID capsule with
either an ACK_TARGET_CID or CLOSE_TARGET_CID capsule containing the
Connection ID that was in the registration capsule.</t>
        <t>The proxy then determines the proxy-to-target 4-tuple to associate with the
client's request. This will generally involve performing a DNS lookup for
the target hostname in the CONNECT request, or finding an existing proxy-to-target
4-tuple to the authority. The proxy-to-target 4-tuple might already be open due to a
previous request from this client, or another. If the 4-tuple is not already
created, the proxy creates a new one. Proxies can choose to reuse proxy-to-target
4-tuples across multiple UDP proxying requests, or have a unique proxy-to-target 4-tuple
for every UDP proxying request.</t>
        <t>If a proxy reuses proxy-to-target 4-tuples, it SHOULD store which authorities
(which could be a domain name or IP address literal) are being accessed over a
particular proxy-to-target 4-tuple so it can avoid performing a new DNS query and
potentially choosing a different target server IP address which could map to a
different target server.</t>
        <t>Proxy-to-target 4-tuples MUST NOT be reused across QUIC and non-QUIC UDP proxy
requests, since it might not be possible to correctly demultiplex or direct
the traffic. Any packets received on a proxy-to-target 4-tuple used for proxying
QUIC that does not correspond to a known CID MUST be dropped.</t>
        <t>When the proxy recieves a REGISTER_CLIENT_CID capsule, it is receiving a
request to be able to route traffic matching the client CID back to
the client using. If the pair of this client CID and the selected
proxy-to-target 4-tuple does not create a conflict, the proxy creates the mapping
and responds with an ACK_CLIENT_CID capsule. If forwarded mode is enabled, the
capsule contains a proxy-chosen client VCID. If forwarded mode
is enabled, and after receiving an ACK_CLIENT_VCID capsule from the client, any
packets received by the proxy from the proxy-to-target 4-tuple that match the
client CID can to be sent to the client after the proxy has replaced
the CID with the client VCID. If forwarded mode is
not supported, the proxy MUST NOT send a client VCID by setting
the length to zero. The proxy MUST use tunnelled mode (HTTP Datagram frames) for
any long header packets. The proxy SHOULD forward directly to the client for any
matching short header packets if forwarding is supported by the client, but the
proxy MAY tunnel these packets in HTTP Datagram frames instead. If the mapping
would create a conflict, the proxy responds with a CLOSE_CLIENT_CID capsule.</t>
        <t>When the proxy recieves a REGISTER_TARGET_CID capsule, it is receiving a
request to allow the client to forward packets to the target. The proxy
generates a target VCID for the client to use when sending
packets in forwarded mode. If forwarded mode is not supported, the proxy MUST
NOT send a target VCID by setting the length to zero. If
forwarded mode is supported, the proxy MUST use a target VCID
that does not introduce a conflict with any other Connection ID on the
client-to-proxy 4-tuple. The proxy creates the mapping and responds with an
ACK_TARGET_CID capsule. Once the successful response is sent, the proxy will
forward any short header packets received on the client-to-proxy 4-tuple that use
the target VCID using the correct proxy-to-target 4-tuple after
first rewriting the target VCID to be the correct target CID.</t>
        <t>Proxies MUST choose unpredictable client and target VCIDs to
avoid forwarding loop attacks.</t>
        <t>The proxy MUST only forward non-tunnelled packets from the client that are QUIC
short header packets (based on the Header Form bit) and have mapped target VCIDs.
Packets sent by the client that are forwarded SHOULD be
considered as activity for restarting QUIC's Idle Timeout <xref target="QUIC"/>.</t>
        <section anchor="closing-proxy-state">
          <name>Closing Proxy State</name>
          <t>For any registration capsule for which the proxy has sent an acknowledgement, any
mappings last until either endpoint sends a close capsule or the either side of the
HTTP stream closes.</t>
          <t>A client that no longer wants a given Connection ID to be forwarded by the
proxy sends a CLOSE_CLIENT_CID or CLOSE_TARGET_CID capsule.</t>
          <t>If a client's connection to the proxy is terminated for any reason, all
mappings associated with all requests are removed.</t>
          <t>A proxy can close its proxy-to-target 4-tuple once all UDP proxying requests mapped to
that 4-tuple have been removed.</t>
        </section>
      </section>
    </section>
    <section anchor="using-forwarded-mode">
      <name>Using Forwarded Mode</name>
      <t>All packets sent in forwarded mode use a transform in which CIDs are switched
into VCIDs, and the contents of packets are either left the same, or modified
(<xref target="transforms"/>).</t>
      <t>Forwarded mode also raises special considerations for handling connection
maintenance (<xref target="maintenance"/>), connection migration (<xref target="migration"/>),
ECN markings (<xref target="ecn"/>), and stateless resets (<xref target="resets"/>).</t>
      <section anchor="sending-with-forwarded-mode">
        <name>Sending With Forwarded Mode</name>
        <t>Support for forwarded mode is determined by the "Proxy-QUIC-Forwarding" header,
see <xref target="forwarding-header"/>.</t>
        <t>Once the client has learned the target server's Connection ID, such as in the
response to a QUIC Initial packet, it can send a REGISTER_TARGET_CID capsule
containing the target CID to request the ability to forward packets.</t>
        <t>The client MUST wait for an ACK_TARGET_CID capsule that contains the echoed
connection ID and target VCID before using forwarded mode.</t>
        <t>Prior to receiving the proxy server response, the client MUST send short header
packets tunnelled in HTTP Datagram frames. The client MAY also choose to tunnel
some short header packets even after receiving the successful response.</t>
        <t>If the target CID registration is rejected, for example with a
CLOSE_TARGET_CID capsule, it MUST NOT forward packets to the requested target CID,
but only use tunnelled mode. The request might also be rejected
if the proxy does not support forwarded mode or has it disabled by policy.</t>
        <t>QUIC long header packets MUST NOT be forwarded. These packets can only be
tunnelled within HTTP Datagram frames to avoid exposing unnecessary connection
metadata.</t>
        <t>When forwarding, the client sends a QUIC packet with the target VCID
in the QUIC short header, using the same 4-tuple between client and
proxy that was used for the main QUIC connection between client and proxy.</t>
        <t>When forwarding, the proxy sends a QUIC packet with the client VCID
in the QUIC short header, using the same 4-tuple between client
and proxy that was used for the main QUIC connection between client and proxy.</t>
        <t>Prior to sending a forwarded mode packet, the sender MUST replace the Connection
ID with the Virtual Connection ID. If the Virtual Connection ID is larger than
the Connection ID, the sender MUST extend the length of the packet by the
difference between the two lengths, to include the entire Virtual Connection ID.
If the Virtual Connection ID is smaller than the Connection ID, the sender MUST
shrink the length of the packet by the difference between the two lengths.</t>
        <t>Clients and proxies supporting forwarded mode MUST be able to handle Virtual
Connection IDs of different lengths than the corresponding Connection IDs.</t>
      </section>
      <section anchor="receiving-with-forwarded-mode">
        <name>Receiving With Forwarded Mode</name>
        <t>If the client has indicated support for forwarded mode with the "Proxy-QUIC-Forwarding"
header, the proxy MAY use forwarded mode for any client CID for which
it has a valid mapping.</t>
        <t>Once a client has sent an ACK_CLIENT_VCID capsule to the proxy, it MUST be
prepared to receive forwarded short header packets on the 4-tuple between itself
and the proxy for the specified client VCID.</t>
        <t>The client uses the Destination Connection ID field of the received packet to
determine if the packet was originated by the proxy, or merely forwarded from
the target. The client replaces the client VCID with the real
client CID before processing the packet further.</t>
      </section>
      <section anchor="transforms">
        <name>Packet Transforms</name>
        <t>A packet transform is the procedure applied to encode packets as they are sent
on the link between the client and proxy, along with the inverse decode step applied
on receipt. Simple transforms can be modeled as a function as follows:</t>
        <t>Inputs:</t>
        <ol spacing="normal" type="1"><li>
            <t>A QUIC short header packet (after Connection ID remapping).</t>
          </li>
          <li>
            <t>The mode (encode or decode).</t>
          </li>
          <li>
            <t>The direction (client-to-proxy or proxy-to-client).</t>
          </li>
          <li>
            <t>Any configuration information negotiated at startup.</t>
          </li>
        </ol>
        <t>Output:</t>
        <ul spacing="normal">
          <li>
            <t>A UDP payload that conforms to the QUIC invariants <xref target="RFC8999"/> and does not
modify the Connection ID.</t>
          </li>
        </ul>
        <t>More complex transform behaviors could have internal state, but no such transforms
are presented here.</t>
        <t>Packet transforms are identified by an IANA-registered name, and negotiated in
the HTTP headers (see <xref target="forwarding-header"/>).  This document defines two initial
transforms: the <tt>identity</tt> transform and the <tt>scramble</tt> transform.</t>
        <section anchor="identity-transform">
          <name>The identify transform</name>
          <t>The <tt>identity</tt> transform does not modify the packet in any way.  When this transform
is in use, a global passive adversary can trivially correlate pairs of packets
that crossed the forwarder, providing a compact proof that a specific client
was communicating to a specific target.</t>
          <t>The <tt>identity</tt> transform is identified by the value "identity" <xref target="iana-transforms"/>.</t>
          <t>Use of this transform is NOT RECOMMENDED if the <tt>scramble</tt> transform is supported
by both the client and the proxy. Implementations MAY choose to not implement or
support the <tt>identity</tt> transform, depending on the use cases and privacy requirements of
the deployment.</t>
        </section>
        <section anchor="scramble-transform">
          <name>The scramble transform</name>
          <t>The <tt>scramble</tt> transform implements length-preserving unauthenticated
re-encryption of QUIC packets while preserving the QUIC invariants.  When
the <tt>scramble</tt> transform is in use, a global passive adversary cannot simply compare the packet
contents on both sides of the proxy
to link the client and target.  However, the <tt>scramble</tt> transform does not defend against
analysis of packet sizes and timing, nor does it protect privacy against an
active attacker.</t>
          <t>Deployments that implement the version of the <tt>scramble</tt> transform defined in this
document MUST use the value "scramble-dt". The finalized version is expected
to use the reserved value "scramble" <xref target="iana-transforms"/>.</t>
          <t>The <tt>scramble</tt> transform is initialized using a 32-byte random symmetric key.
When offering or selecting this transform, the client and server each
generate the key that they will use to encrypt scrambled packets and MUST add it to the
"Proxy-QUIC-Transform" header in an <tt>sf-binary</tt> parameter named "scramble-key".
If either side receives a <tt>scramble</tt> transform without the "scramble-key" parameter,
forwarded mode MUST be disabled.</t>
          <t>This transform relies on the AES-128 block cipher, which is represented by the
syntax <tt>AES-ECB(key, plaintext_block)</tt> as in <xref target="RFC9001"/>.  The corresponding
decryption operation is written here as <tt>AES-ECB-inv(key, ciphertext_block)</tt>.
It also uses AES in Counter Mode (<xref target="SP800-38A"/>, Section 6.5), which is
represented by the syntax <tt>AES-CTR(key, iv, input)</tt> for encryption and
decryption (which are identical).  In this syntax, <tt>iv</tt> is an array of 16 bytes
containing the initial counter block.  The counter is incremented by the
standard incrementing function (<xref target="SP800-38A"/>, Appendix B.1) on the full block
width.</t>
          <t>In brief, the transform applies AES in counter mode (AES-CTR) using an
initialization vector drawn from the packet, then encrypts the initialization
vector with AES-ECB. The detailed procedure is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let <tt>k1, k2 = scramble_key[:16], scramble_key[16:32]</tt>.</t>
            </li>
            <li>
              <t>Let <tt>L</tt> be the Connection ID length.</t>
            </li>
            <li>
              <t>Let <tt>cid = packet[1:L+1]</tt>, i.e., the Connection ID.</t>
            </li>
            <li>
              <t>Let <tt>iv = packet[L+1:L+17]</tt>, i.e., the 16 bytes following the Connection ID.</t>
            </li>
            <li>
              <t>Let <tt>ctr_input = packet[0] | packet[L+17:]</tt>.</t>
            </li>
            <li>
              <t>Let <tt>ctr_output = AES-CTR(k1, iv, ctr_input)</tt>.</t>
            </li>
            <li>
              <t>Let <tt>header = ctr_output[0] &amp; 0x7F</tt>.  This ensures that the Header Form bit
is zero, as required by the QUIC invariants (<xref target="RFC8999"/>, Section 5.2).</t>
            </li>
            <li>
              <t>Encrypt <tt>iv</tt> with the block cipher: <tt>encrypted_iv = AES-ECB(k2, iv)</tt>.</t>
            </li>
            <li>
              <t>Produce the output packet as:<br/>
                <tt>header | cid | encrypted_iv | ctr_output[1:]</tt>.</t>
            </li>
          </ol>
          <t>The inverse transform operates as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Decrypt the AES-CTR initialization vector:<br/>
                <tt>iv = AES-ECB-inv(k2, packet[L+1:L+17])</tt>.</t>
            </li>
            <li>
              <t>Compute the other variables exactly as in the forward transform.
(AES-CTR encryption and decryption are identical.)</t>
            </li>
            <li>
              <t>Produce the output: <tt>header | cid | iv | ctr_output[1:]</tt>.</t>
            </li>
          </ol>
          <t>The encryption keys used in this procedure do not depend on the packet contents,
so each party only needs to perform AES initialization once for each connection.</t>
          <t>NOTE: The security of this arrangement relies on every short-header QUIC packet
containing a distinct 16 bytes following the Connection ID.  This is true
for the original ciphersuites of QUICv1, but it is not guaranteed by the QUIC
Invariants. Future ciphersuites and QUIC versions could in principle produce
packets that are too short or repeat the values at this location. When using the
<tt>scramble</tt> transform, clients MUST NOT offer any configuration that could
cause the client or target to violate this requirement.</t>
        </section>
      </section>
      <section anchor="maintenance">
        <name>Connection Maintenance in Forwarded Mode</name>
        <t>When a client and proxy are using forwarded mode, it is possible that there can be
long periods of time in which no ack-eliciting packets
(see <xref section="2" sectionFormat="of" target="QUIC-RETRANSMISSION"/>) are exchanged
between the client and proxy. If these periods extend beyond the effective idle
timeout for the client-to-proxy QUIC connection (see <xref section="10.1" sectionFormat="of" target="QUIC"/>),
the QUIC connection might be closed by the proxy if the proxy does not use
forwarded packets as an explicit liveness signal. To avoid this, clients SHOULD
send keepalive packets to the proxy before the idle timeouts would be reached,
which can be done using a PING frame or another ack-eliciting frame as described
in <xref section="10.1.1" sectionFormat="of" target="QUIC"/>.</t>
      </section>
      <section anchor="migration">
        <name>Handling Connection Migration</name>
        <t>If a proxy supports QUIC connection migration, it needs to ensure that a migration
event does not end up sending too many tunnelled or forwarded packets on a new
path prior to path validation.</t>
        <t>Specifically, the proxy MUST limit the number of packets that it will proxy
to an unvalidated client address to the size of an initial congestion window.
Proxies additionally SHOULD pace the rate at which packets are sent over a new
path to avoid creating unintentional congestion on the new path.</t>
        <t>When operating in forwarded mode, the proxy reconfigures or removes forwarding
rules as the network path between the client and proxy changes. In the event of
passive migration, the proxy automatically reconfigures forwarding rules to use
the latest active and validated network path for the HTTP stream. In the event of
active migration, the proxy removes forwarding rules in order to not send
packets with the same connection ID bytes over multiple network paths. After
initiating active migration, clients are no longer able to send forwarded mode
packets since the proxy will have removed forwarding rules. Clients can proceed with
tunnelled mode or can request new forwarding rules via REGISTER_CLIENT_CID and
REGISTER_TARGET_CID capsules. Each of the acknowledging capsules will contain new
virtual connection IDs to prevent packets with the same connection ID bytes being
used over multiple network paths. Note that the client CID and target CID
can stay the same while the target VCID and client VCID change.</t>
      </section>
      <section anchor="ecn">
        <name>Handling ECN Marking</name>
        <t>Explicit Congestion Notification marking <xref target="ECN"/> uses two bits in the IP
header to signal congestion from a network to endpoints. When using forwarded mode,
the proxy replaces IP headers for packets exchanged between the client and target;
these headers can include ECN markings. Proxies SHOULD preserve ECN markings on
forwarded packets in both directions, to allow ECN to function end-to-end. If the proxy does not
preserve ECN markings, it MUST set ECN marks to zero on the IP headers it generates.</t>
        <t>Forwarded mode does not create an IP-in-IP tunnel, so the guidance in
<xref target="ECN-TUNNEL"/> about transferring ECN markings between inner and outer IP
headers does not apply.</t>
        <t>A proxy MAY additionally add ECN markings to signal congestion being experienced
on the proxy itself.</t>
      </section>
      <section anchor="resets">
        <name>Stateless Resets for Forwarded Mode QUIC Packets</name>
        <t>While the lifecycle of forwarding rules are bound to the lifecycle of the
client-to-proxy HTTP stream, a peer may not be aware that the stream has
terminated. If the above mappings are lost or removed without the peer's
knowledge, they may send forwarded mode packets even though the client
or proxy no longer has state for that connection. To allow the client or
proxy to reset the client-to-target connection in the absence of the mappings
above, a stateless reset token corresponding to the Virtual Connection ID
can be provided.</t>
        <t>Consider a proxy that initiates closure of a client-to-proxy QUIC connection.
If the client is temporarily unresponsive or unreachable, the proxy might have
considered the connection closed and removed all connection state (including
the stream mappings used for forwarding). If the client never learned about the closure, it
might send forwarded mode packets to the proxy, assuming the stream mappings
and client-to-proxy connection are still intact. The proxy will receive these
forwarded mode packets, but won't have any state corresponding to the
destination connection ID in the packet. If the proxy has provided a stateless
reset token for the target VCID, it can send a stateless reset
packet to quickly notify the client that the client-to-target connection is
broken.</t>
        <section anchor="stateless-resets-from-the-target">
          <name>Stateless Resets from the Target</name>
          <t>Reuse of proxy-to-target 4-tuples is only possible because QUIC connection IDs
allow distinguishing packets for multiple QUIC connections received with the
same 5-tuple. One exception to this is Stateless Reset packets, in which the
connection ID is not used, but rather populated with unpredictable bits followed
by a Stateless Reset token, to make it indistinguishable from a regular packet
with a short header. In order for the proxy to correctly recognize Stateless
Reset packets, the client SHOULD share the Stateless Reset token for each
registered target CID. When the proxy receives a Stateless Reset packet,
it can send the packet to the client as a tunnelled datagram. Although Stateless Reset packets
look like short header packets, they are not technically short header packets and do not contain
negotiated connection IDs, and thus are not eligible for forwarded mode.</t>
        </section>
      </section>
    </section>
    <section anchor="example-exchange">
      <name>Example Exchange</name>
      <t>Consider a client that is establishing a new QUIC connection through the proxy.
In this example, the client prefers the <tt>scramble</tt> transform, but also offers the <tt>identity</tt>
transform. It has selected a client CID of <tt>0x31323334</tt>. In order to inform a proxy
of the new QUIC client CID, the client also sends a
REGISTER_CLIENT_CID capsule.</t>
      <t>The client will also send the initial QUIC packet with the Long Header form in
an HTTP datagram.</t>
      <artwork><![CDATA[
Client                                             Server

STREAM(44): HEADERS             -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.com/443/
  :authority = proxy.example.org
  proxy-quic-forwarding = ?1; accept-transform=scramble,identity; \
      scramble-key=:abc...789=:
  capsule-protocol = ?1

STREAM(44): DATA                -------->
  Capsule Type = REGISTER_CLIENT_CID
  Connection ID = 0x31323334
  Stateless Reset Token = Token

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated QUIC initial

           <--------  STREAM(44): HEADERS
                        :status = 200
                        proxy-quic-forwarding = ?1; \
                            transform=scramble; \
                            scramble-key=:ABC...321=:
                        capsule-protocol = ?1

           <--------  STREAM(44): DATA
                        Capsule Type = ACK_CLIENT_CID
                        Connection ID = 0x31323334
                        Virtual CID = 0x62646668
]]></artwork>
      <t>The proxy has acknowledged the client CID and provided a client VCID.
Even if there were Short Header packets to send, the proxy
cannot send forwarded mode packets because the client hasn't acknowledged the
client VCID.</t>
      <artwork><![CDATA[
STREAM(44): DATA                -------->
  Capsule Type = ACK_CLIENT_VCID
  Connection ID = 0x31323334
  Virtual CID = 0x62646668
  Stateless Reset Token = Token
]]></artwork>
      <t>The client acknowledges the client VCID. The proxy still
doesn't have any Short Header Packets to send, but, if it did, it would be able
to send with forwarded mode.</t>
      <artwork><![CDATA[
/* Wait for target server to respond to UDP packet. */

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Context ID = 0
                        Payload = Encapsulated QUIC initial

/* All Client -> Target QUIC packets must still be encapsulated  */

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated QUIC packet

/* Forwarded mode packets possible in Target -> Client direction  */

           <--------  UDP Datagram
                        Payload = Forwarded QUIC SH packet

]]></artwork>
      <t>The client may receive forwarded mode packets from the proxy with a Virtual
client CID of 0x62646668 which it will replace with the real client CID
of 0x31323334. All forwarded mode packets sent by the proxy
will have been modified to contain the client VCID instead
of the client CID, and processed by the negotiated "scramble"
packet transform. However, in the unlikely event that a forwarded packet
arrives before the proxy's HTTP response, the client will not know which
transform the proxy selected. In this case, the client will have to ignore
the packet or buffer it until the HTTP response is received.</t>
      <t>Once the client learns which Connection ID has been selected by the target
server, it can send a new request to the proxy to establish a mapping for
forwarding. In this case, that ID is 0x61626364. The client sends the
following capsule:</t>
      <artwork><![CDATA[
STREAM(44): DATA                -------->
  Capsule Type = REGISTER_TARGET_CID
  Connection ID = 0x61626364

           <--------  STREAM(44): DATA
                        Capsule Type = ACK_TARGET_CID
                        Connection ID = 0x61626364
                        Virtual Connection ID = 0x123412341234
                        Stateless Reset Token = Token

/* Client -> Target QUIC short header packets may use forwarded mode */

UDP Datagram                     -------->
  Payload = Forwarded QUIC SH packet

]]></artwork>
      <t>Upon receiving an ACK_TARGET_CID capsule, the client starts sending Short Header
packets with a Destination Connection ID of 0x123412341234 directly to the proxy
(not tunnelled), and these are rewritten by the proxy to have the Destination
Connection ID 0x61626364 prior to being forwarded directly to the target. In the
reverse direction, Short Header packets from the target with a Destination
Connection ID of 0x31323334 are modified to replace the Destination Connection
ID with the client VCID of 0x62646668 and forwarded directly to
the client.</t>
    </section>
    <section anchor="packet-size-considerations">
      <name>Packet Size Considerations</name>
      <t>Since Initial QUIC packets must be at least 1200 bytes in length, the HTTP
Datagram frames that are used for a QUIC-aware proxy MUST be able to carry at least
1200 bytes.</t>
      <t>Additionally, clients that connect to a proxy for purpose of proxying QUIC
SHOULD start their connection with a larger packet size than 1200 bytes, to
account for the overhead of tunnelling an Initial QUIC packet within an
HTTP Datagram frame. If the client does not begin with a larger packet size than
1200 bytes, it will need to perform Path MTU (Maximum Transmission Unit)
discovery to discover a larger path size prior to sending any tunnelled Initial
QUIC packets.</t>
      <t>Once a proxied QUIC connections moves into forwarded mode, the client SHOULD
initiate Path MTU discovery to increase its end-to-end MTU.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Proxies that support this extension SHOULD provide protections to rate-limit
or restrict clients from opening an excessive number of proxied connections, so
as to limit abuse or use of proxies to launch Denial-of-Service attacks.</t>
      <t>Sending QUIC packets by forwarding through a proxy without tunnelling exposes
clients to additional information exposure and deanonymization attacks which
need to be carefully considered. Analysis should consider both passive and
active attackers which may be global or localized to the network paths used
on one side of the proxy. The following sections highlight deanonymization risks with
using forwarded mode.</t>
      <section anchor="passive-attacks">
        <name>Passive Attacks</name>
        <t>A passive attacker aims to deanonymize a client by correlating traffic across
both sides of the proxy. When using forwarded mode with the <tt>identity</tt> packet
transform (see <xref target="identity-transform"/>), such correlation is trivial by matching
a subset of QUIC packet bytes as packets enter the proxy on one side and exit
on the other. Packet transforms such as <tt>scramble</tt> mitigate this by
cryptographically preventing such byte comparisons
(see <xref target="scramble-transform"/>).</t>
        <t>Regardless of which packet transform is used, both tunnelled and forwarded mode
are still vulnerable to size and timing attacks, without the addition of techniques that go beyond the analysis
in this document, such as padding and adding chaff packets.  Such techniques could be supported
in future packet transforms, subject to additional security analysis.</t>
        <t>Unlike tunnelled mode where packets are fully encapsulated in the client-to-proxy
connection, clients using forwarded mode to access multiple target servers
over the same client-to-proxy connection expose the number of target servers
they are communicating with on each connection to passive attackers that can
observe the client-to-proxy traffic. This additional metadata revealed on each
packet simplifies size and timing attacks.</t>
      </section>
      <section anchor="active-attacks">
        <name>Active Attacks</name>
        <t>An active attacker is an adversary that can inject, modify, drop, and view
packets in the network. Some active attacks have different effects between
forwarded mode and tunnelled mode, but active attacks can be used to correlate
flows in either mode.</t>
        <t>Both tunnelled mode and forwarded mode (regardless of packet transform) are
vulnerable to packet injection in the target-to-client direction. An attacker
can inject a burst of packets with a known QUIC Connection ID and see which
Connection ID is used for the corresponding burst on the proxy-to-client network path.</t>
        <t>Packet injection with a known QUIC Connection ID can also happen in the
client-to-proxy direction, which only affects forwarded mode since
tunnelled mode sends packets within an authenticated and integrity protected
QUIC connection to the proxy (see <xref target="RFC9001"/>). None of the packet transforms
defined in this document provide integrity protection. Even if a packet
transform did provide integrity protection, attackers can inject replayed
packets. Protection against replayed packets is similarly provided by QUIC in
tunnelled mode, but not provided by any of the forwarded mode packet transforms
defined in this document.</t>
        <t>An active attacker can modify packets in the client-to-proxy direction, which
would cause a tunnelling proxy to silently drop packets, while a forwarding proxy
would forward the packets. In this way, forwarded mode is less vulnerable to
flow recognition based on corrupting a portion of packets in a burst.</t>
        <t>Chaining of proxies using forwarded mode introduces the risk of forwarding loop
attacks. Preventing client VCID conflicts across proxies
sharing an IP address and port mitigates one such forwarding loop attack.
Conflicts can be avoided by partitioning the client VCID space
across proxies, using sufficiently long and random values, or by other means.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-header">
        <name>HTTP Header</name>
        <t>This document registers the "Proxy-QUIC-Forwarding" header in the "Hypertext Transfer
Protocol (HTTP) Field Name Registry" &lt;<eref target="https://www.iana.org/assignments/http-fields"/>&gt;.</t>
        <figure anchor="iana-header-type-table">
          <name>Registered HTTP Header</name>
          <artwork><![CDATA[
    +-----------------------+----------+--------+---------------+
    | Header Field Name     | Protocol | Status |   Reference   |
    +-----------------------+----------+--------+---------------+
    | Proxy-QUIC-Forwarding |   http   |  exp   | This document |
    +-----------------------+----------+--------+---------------+
]]></artwork>
        </figure>
      </section>
      <section anchor="proxy-quic-forwarding-parameter-names">
        <name>Proxy QUIC Forwarding Parameter Names</name>
        <t>This document establishes a new registry, "Proxy QUIC Forwarding Parameter Names",
for parameter names to use with the "Proxy-QUIC-Forwarding" header field,
in &lt;<eref target="https://www.iana.org/assignments/masque/masque.xhtml"/>&gt;.
Registrations in this registry are assigned using the
Specification Required policy (Section 4.6 of [IANA-POLICY]).</t>
        <figure anchor="iana-parameter-names-table">
          <name>Initial Proxy QUIC Forwarding Parameter Names</name>
          <artwork><![CDATA[
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | Parameter Name        | Description                         | Reference     | Notes                          |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | accept-transform      | contains supported transforms       | This document | Section {{forwarding-header}}  |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | transform             | indicates selected transforms       | This document | Section {{forwarding-header}}  |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | scramble-key          | contains key for scramble transform | This document | Section {{scramble-transform}} |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
]]></artwork>
        </figure>
      </section>
      <section anchor="iana-transforms">
        <name>Packet Transform Names</name>
        <t>This document establishes a new registry for packet transform names
in &lt;<eref target="https://www.iana.org/assignments/masque/masque.xhtml"/>&gt;
and defines two initial transforms: "identity" and "scramble".
Prior to finalization, deployments that implement the version of
the <tt>scramble</tt> transform defined in this document should use the value
"scramble-dt". Once the design team proposal is adopted and a new draft is submitted,
the wire identifier will become "scramble-XX" where XX is the draft number.
Registrations in this registry are assigned using the
Specification Required policy (Section 4.6 of [IANA-POLICY]).</t>
        <table anchor="iana-packet-transforms-table">
          <name>Initial Packet Transform Names</name>
          <thead>
            <tr>
              <th align="left">Transform Name</th>
              <th align="left">Description</th>
              <th align="left">Specification</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">identity</td>
              <td align="left">no transformation</td>
              <td align="left">This Document</td>
              <td align="left">Section <xref target="identity-transform"/></td>
            </tr>
            <tr>
              <td align="left">scramble</td>
              <td align="left">Reserved (will be used for final version)</td>
              <td align="left">This Document</td>
              <td align="left">Section <xref target="scramble-transform"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-capsule-types">
        <name>Capsule Types</name>
        <t>This document registers six new values in the "HTTP Capsule Types"
registry established by <xref target="HTTP-CAPSULES"/>. Note that the codepoints below
will be replaced with lower values before publication.</t>
        <table anchor="iana-capsule-type-table">
          <name>Registered Capsule Types</name>
          <thead>
            <tr>
              <th align="left">Capule Type</th>
              <th align="left">Value</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">REGISTER_CLIENT_CID</td>
              <td align="left">0xffe500</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">REGISTER_TARGET_CID</td>
              <td align="left">0xffe501</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_CLIENT_CID</td>
              <td align="left">0xffe502</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_CLIENT_VCID</td>
              <td align="left">0xffe503</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">ACK_TARGET_CID</td>
              <td align="left">0xffe504</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_CLIENT_CID</td>
              <td align="left">0xffe505</td>
              <td align="left">This Document</td>
            </tr>
            <tr>
              <td align="left">CLOSE_TARGET_CID</td>
              <td align="left">0xffe506</td>
              <td align="left">This Document</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl spacing="compact" newline="false">
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent when this document is published)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>masque@ietf.org</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SP800-38A" target="https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-38a.pdf">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Methods and Techniques</title>
            <author initials="M." surname="Dworkin" fullname="Morris Dworkin">
              <organization/>
            </author>
            <date year="2001" month="December" day="01"/>
          </front>
        </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="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="HTTP3">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="INVARIANTS">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </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="HTTP-CAPSULES">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="RFC8941">
          <front>
            <title>Structured Field Values for HTTP</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8941"/>
          <seriesInfo name="DOI" value="10.17487/RFC8941"/>
        </reference>
        <reference anchor="QUIC-RETRANSMISSION">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="ECN">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="QUIC-LB">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author fullname="Martin Duke" initials="M." surname="Duke">
              <organization>Google</organization>
            </author>
            <author fullname="Nick Banks" initials="N." surname="Banks">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="5" month="February" year="2024"/>
            <abstract>
              <t>   QUIC address migration allows clients to change their IP address
   while maintaining connection state.  To reduce the ability of an
   observer to link two IP addresses, clients and servers use new
   connection IDs when they communicate via different client addresses.
   This poses a problem for traditional "layer-4" load balancers that
   route packets via the IP address and port 4-tuple.  This
   specification provides a standardized means of securely encoding
   routing information in the server's connection IDs so that a properly
   configured load balancer can route packets with migrated addresses
   correctly.  As it proposes a structured connection ID format, it also
   provides a means of connection IDs self-encoding their length to aid
   some hardware offloads.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-19"/>
        </reference>
        <reference anchor="RFC8999">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
        <reference anchor="ECN-TUNNEL">
          <front>
            <title>Tunnelling of Explicit Congestion Notification</title>
            <author fullname="B. Briscoe" initials="B." surname="Briscoe"/>
            <date month="November" year="2010"/>
            <abstract>
              <t>This document redefines how the explicit congestion notification (ECN) field of the IP header should be constructed on entry to and exit from any IP-in-IP tunnel. On encapsulation, it updates RFC 3168 to bring all IP-in-IP tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing. On decapsulation, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unused combinations of inner and outer headers. The new rules ensure the ECN field is correctly propagated across a tunnel whether it is used to signal one or two severity levels of congestion; whereas before, only one severity level was supported. Tunnel endpoints can be updated in any order without affecting pre-existing uses of the ECN field, thus ensuring backward compatibility. Nonetheless, operators wanting to support two severity levels (e.g., for pre-congestion notification -- PCN) can require compliance with this new specification. A thorough analysis of the reasoning for these changes and the implications is included. In the unlikely event that the new rules do not meet a specific need, RFC 4774 gives guidance on designing alternate ECN semantics, and this document extends that to include tunnelling issues. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6040"/>
          <seriesInfo name="DOI" value="10.17487/RFC6040"/>
        </reference>
      </references>
    </references>
    <?line 1464?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Lucas Pardue, Ryan Hamilton, and Mirja Kühlewind for their inputs
on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
DwwBAA==

-->

</rfc>
