<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.37 -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-cms-masque-connect-ip-02" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.6.0 -->
  <front>
    <title abbrev="CONNECT-IP">The CONNECT-IP HTTP Method</title>
    <seriesInfo name="Internet-Draft" value="draft-cms-masque-connect-ip-02"/>
    <author initials="A." surname="Chernyakhovsky" fullname="Alex Chernyakhovsky">
      <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>achernya@google.com</email>
      </address>
    </author>
    <author initials="D." surname="McCall" fullname="Dallas McCall">
      <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>dallasmccall@google.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="2021" month="August" day="27"/>
    <workgroup>MASQUE</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document describes the CONNECT-IP HTTP method. CONNECT-IP is similar to
CONNECT-UDP, but allows transmitting IP packets, without being limited to just
TCP like CONNECT or UDP like CONNECT-UDP.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
  Multiplexed Application Substrate over QUIC Encryption Working Group mailing list (masque@ietf.org),
  which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
  <eref target="https://github.com/DavidSchinazi/draft-cms-masque-connect-ip"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document describes the CONNECT-IP HTTP method. CONNECT-IP is similar to
CONNECT-UDP, but allows transmitting IP packets, without being limited to just
TCP like CONNECT or UDP like CONNECT-UDP.</t>
      <t>CONNECT-IP allows endpoints to set up an IP tunnel between one another. This
can be used to implement a consumer VPN, point-to-point and point-to-network
capabilities as described in <xref target="REQS" format="default"/>.</t>
      <section anchor="conventions" numbered="true" toc="default">
        <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" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
        <t>In this document, we use the term "proxy" to refer to the HTTP server that
responds to the CONNECT-IP request. If there are
HTTP intermediaries (as defined in Section 2.3 of <xref target="RFC7230" format="default"/>) between the
client and the proxy, those are referred to as "intermediaries" in this
document.</t>
      </section>
    </section>
    <section anchor="connect-ip-method" numbered="true" toc="default">
      <name>The CONNECT-IP Method</name>
      <t>The CONNECT-IP method establishes a stream to an endpoint server that then
permits the exchange of control data, such as IP address information and other
relevant information for successfully transmitting IP datagrams between hosts.</t>
      <t>The request-target of a CONNECT-IP request is a URI <xref target="URI" format="default"/> which uses
the "https" scheme and a client-specified path. When using HTTP/2
<xref target="H2" format="default"/> or later, CONNECT-IP requests use HTTP pseudo-headers with the
following requirements:</t>
      <ul spacing="normal">
        <li>The ":method" pseudo-header field is set to "CONNECT-IP".</li>
        <li>The ":scheme" pseudo-header field is set to "https".</li>
        <li>The ":path" pseudo-header field is set to the value provided by the
client. That value MUST NOT be empty.</li>
        <li>The ":authority" pseudo-header field contains the host and port of the proxy.
The target of a CONNECT-IP request is the server providing the CONNECT-IP
featureset, not an individual endpoint with which a connection is desired.</li>
      </ul>
      <t>A CONNECT-IP request that does not conform to these restrictions is
malformed (see <xref target="H2" format="default"/>, Section 8.1.2.6).</t>
      <t>Any 2xx (Successful) response indicates that the proxy is willing to open an IP
tunnel between it and the client. Any response other than a successful response
indicates that the tunnel has not yet been formed.</t>
      <t>A proxy MUST NOT send any Transfer-Encoding or Content-Length header fields in
a 2xx (Successful) response to CONNECT-IP. A client MUST treat a successful
response to CONNECT-IP containing any Content-Length or Transfer-Encoding
header fields as malformed.</t>
      <t>A payload within a CONNECT-IP request message has no defined semantics; a
CONNECT-IP request with a non-empty payload is malformed. Note that the
CONNECT-IP stream is used to convey control messages, but they are not
semantically part of the request or response themselves.</t>
      <t>Responses to the CONNECT-IP method are not cacheable.</t>
      <t>The lifetime of the tunnel is tied to the CONNECT-IP stream. Closing the stream
(via the FIN bit on a QUIC STREAM frame, or a QUIC RESET_STREAM frame) closes
the associated tunnel.</t>
    </section>
    <section anchor="transmitting-ip-packets-using-http-datagrams" numbered="true" toc="default">
      <name>Transmitting IP Packets using HTTP Datagrams</name>
      <t>IP packets are sent using HTTP Datagrams
<xref target="HTTP-DGRAM" format="default"/>. The HTTP Datagram Payload contains
a full IP packet, from the IP Version field until the last byte of the IP
Payload. In order to use HTTP Datagrams, the CONNECT-IP client will first
decide whether or not to use HTTP Datagram Contexts and then register its
context ID (or lack thereof) using the corresponding registration capsule, see
<xref target="HTTP-DGRAM" format="default"/>.</t>
      <t>Since HTTP Datagrams require prior negotiation (for example, in HTTP/3 it is
necessary to both send and receive the H3_DATAGRAM SETTINGS Parameter), clients
MUST NOT send any HTTP Datagrams until they have established support on a given
connection. If negotiation of HTTP Datagrams fails (for example if an HTTP/3
SETTINGS frame was received without the H3_DATAGRAM SETTINGS Parameter), the
client MUST consider its CONNECT-IP request as failed.</t>
    </section>
    <section anchor="forwarding-of-ip-packets" numbered="true" toc="default">
      <name>Forwarding of IP Packets</name>
      <t>Since CONNECT-IP allows the transmission of IP packets over HTTP, CONNECT-IP
endpoints will most often forward these packets to and from traditional IP
interfaces. As such, CONNECT-IP endpoints act as IP routers. When a CONNECT-IP
endpoint receives an HTTP Datagram containing an IP packet, it will parse the
packet's IP header, perform any local policy checks (e.g., source address
validation), check their routing table to pick an outbound interface, and then
use an implementation-specific mechanism (such as raw sockets) to send the IP
packet on that interface.</t>
      <t>Conversely, when a CONNECT-IP endpoint receives an IP packet whose destination
address does not match any local addresses, it consults its routing table to
pick a forwarding destination, and if the table points to a CONNECT-IP tunnel,
the endpoint performs the same forwarding checks before transmitting the packet
inside the tunnel.</t>
      <t>Note that CONNECT-IP endpoints will decrement the IP Hop Count (or TTL) upon
encapsulation but not decapsulation. In other words, the Hop Count is
decremented right before an IP packet is transmitted in an HTTP Datagram. This
prevents infinite loops in the presence of routing loops, and matches the
choices in IPsec <xref target="IPSEC" format="default"/>.</t>
      <t>Endpoints MAY implement additional filtering policies on the IP packets they
forward.</t>
    </section>
    <section anchor="capsules" numbered="true" toc="default">
      <name>Capsules</name>
      <section anchor="addressassign-capsule" numbered="true" toc="default">
        <name>ADDRESS_ASSIGN Capsule</name>
        <t>The ADDRESS_ASSIGN capsule allows an endpoint to inform its peer that it has
assigned an IP address to it. It allows assigning a prefix which can contain
multiple addresses. This capsule uses a Capsule Type of 0xfff100. Its value
uses the following format:</t>
        <figure anchor="addr-assign-format">
          <name>ADDRESS_ASSIGN Capsule Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
ADDRESS_ASSIGN Capsule {
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
        </figure>
        <dl>
          <dt>
IP Version:  </dt>
          <dd>
            <t>IP Version of this address assignment. MUST be either 4 or 6.</t>
          </dd>
          <dt>
IP Address:  </dt>
          <dd>
            <t>Assigned IP address. If the IP Version field has value 4, the IP Address
field SHALL have a length of 32 bits. If the IP Version field has value 6, the
IP Address field SHALL have a length of 128 bits.</t>
          </dd>
          <dt>
IP Prefix Length:  </dt>
          <dd>
            <t>Length of the IP Prefix assigned, in bits. MUST be lesser or equal to the
length of the IP Address field, in bits.</t>
          </dd>
        </dl>
      </section>
      <section anchor="addressrequest-capsule" numbered="true" toc="default">
        <name>ADDRESS_REQUEST Capsule</name>
        <t>The ADDRESS_REQUEST capsule allows an endpoint to request assignment of an IP
address from its peer. It allows the endpoint to optionally indicate a
preference for which address it would get assigned. This capsule uses a Capsule
Type of 0xfff101. Its value uses the following format:</t>
        <figure anchor="addr-req-format">
          <name>ADDRESS_REQUEST Capsule Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
ADDRESS_REQUEST Capsule {
  IP Version (8),
  IP Address (32..128),
  IP Prefix Length (8),
}
]]></artwork>
        </figure>
        <dl>
          <dt>
IP Version:  </dt>
          <dd>
            <t>IP Version of this address request. MUST be either 4 or 6.</t>
          </dd>
          <dt>
IP Address:  </dt>
          <dd>
            <t>Requested IP address. If the IP Version field has value 4, the IP Address
field SHALL have a length of 32 bits. If the IP Version field has value 6, the
IP Address field SHALL have a length of 128 bits.</t>
          </dd>
          <dt>
IP Prefix Length:  </dt>
          <dd>
            <t>Length of the IP Prefix requested, in bits. MUST be lesser or equal to the
length of the IP Address field, in bits.</t>
          </dd>
        </dl>
        <t>Upon receiving the ADDRESS_REQUEST capsule, an endpoint SHOULD assign an IP
address to its peer, and then respond with an ADDRESS_ASSIGN capsule to inform
the peer of the assignment.</t>
      </section>
      <section anchor="shutdown-capsule" numbered="true" toc="default">
        <name>SHUTDOWN Capsule</name>
        <t>The SHUTDOWN capsule allows an endpoint to communicate to its peer that it is
about to close the CONNECT-IP stream, with a string explaining the reason for
the shutdown. This capsule uses a Capsule Type of 0xfff105. Its value uses the
following format:</t>
        <figure anchor="shutdown-format">
          <name>SHUTDOWN Capsule Format</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
SHUTDOWN Capsule {
  Reason Phrase (..),
}
]]></artwork>
        </figure>
        <dl>
          <dt>
Reason Phrase:  </dt>
          <dd>
            <t>Additional diagnostic information for the shutdown. This SHOULD be
a UTF-8 encoded string <xref target="UTF8" format="default"/>, though the frame does not carry
information, such as language tags, that would aid comprehension by any entity
other than the one that created the text.</t>
          </dd>
        </dl>
        <t>Note that the SHUTDOWN capsule is informational, the tunnel is only closed when
its corresponding CONNECT-IP stream is closed. Endpoints MAY close the tunnel
with a reason phrase by sending the SHUTDOWN capsule with the FIN bit set on
the underlying QUIC STREAM frame that carried it.</t>
      </section>
    </section>
    <section anchor="extensibility-considerations" numbered="true" toc="default">
      <name>Extensibility Considerations</name>
      <t>CONNECT-IP can be extended via multiple mechanisms to increase functionality.
There are three main ways to extend CONNECT-IP: HTTP headers, Capsule Types,
and HTTP Datagram Registration Extension Data. For example, an authentication
extension could define an HTTP header that allows endpoints to send
authentication credentials to their peer during the creation of the tunnel.
Alternatively, one could specify an extension that defines a new Capsule Type
which allows exchanging DNS configuration between endpoints. Additionally, an
extension to CONNECT-IP can use multiple HTTP Datagram Contexts <xref target="HTTP-DGRAM" format="default"/>
simultaneously to compress some IP packets by associating the compression
context with an HTTP Datagram Context ID.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>There are significant risks in allowing arbitrary clients to establish a tunnel
to arbitrary servers, as that could allow bad actors to send traffic and have
it attributed to the proxy. Proxies that support CONNECT-IP SHOULD restrict its
use to authenticated users. The HTTP Authorization header <xref target="AUTH" format="default"/> MAY
be used to authenticate clients. More complex authentication schemes are out of
scope for this document but can be implemented using CONNECT-IP extensions.</t>
      <t>Since CONNECT-IP endpoints can proxy IP packets send by their peer, they SHOULD
follow the guidance in <xref target="BCP38" format="default"/> to help prevent denial of service
attacks.</t>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="iana-method" numbered="true" toc="default">
        <name>HTTP Method</name>
        <t>This document will request IANA to register "CONNECT-IP" in the
HTTP Method Registry (IETF review) maintained at
&lt;<eref target="https://www.iana.org/assignments/http-methods"/>&gt;.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
  +-------------+------+------------+---------------+
  | Method Name | Safe | Idempotent |   Reference   |
  +-------------+------+------------+---------------+
  | CONNECT-IP  |  no  |     no     | This document |
  +-------------+------+------------+---------------+
]]></artwork>
      </section>
      <section anchor="iana-capsule-types" numbered="true" toc="default">
        <name>Capsule Type Registrations</name>
        <t>This document will request IANA to add the following values to the "HTTP
Capsule Types" registry created by <xref target="HTTP-DGRAM" format="default"/>:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
+----------+---------------------+---------------------+---------------+
|   Value  |        Type         |      Description    |   Reference   |
+----------+---------------------+---------------------+---------------+
| 0xfff100 |   ADDRESS_ASSIGN    | Address Assignment  | This document |
| 0xfff101 |   ADDRESS_REQUEST   | Address Request     | This document |
| 0xfff105 |      SHUTDOWN       | Shutdown Reason     | This document |
+----------+---------------------+---------------------+---------------+
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="URI">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee">
              <organization/>
            </author>
            <author fullname="R. Fielding" initials="R." surname="Fielding">
              <organization/>
            </author>
            <author fullname="L. Masinter" initials="L." surname="Masinter">
              <organization/>
            </author>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="H2">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="HTTP-DGRAM">
          <front>
            <title>Using Datagrams with HTTP</title>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Lucas Pardue">
              <organization>Cloudflare</organization>
            </author>
            <date day="12" month="July" year="2021"/>
            <abstract>
              <t>   The QUIC DATAGRAM extension provides application protocols running
   over QUIC with a mechanism to send unreliable data while leveraging
   the security and congestion-control properties of QUIC.  However,
   QUIC DATAGRAM frames do not provide a means to demultiplex
   application contexts.  This document describes how to use QUIC
   DATAGRAM frames when the application protocol running over QUIC is
   HTTP/3.  It associates datagrams with client-initiated bidirectional
   streams and defines an optional additional demultiplexing layer.
   Additionally, this document defines how to convey datagrams over
   prior versions of HTTP.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-h3-datagram-03"/>
        </reference>
        <reference anchor="UTF8">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau">
              <organization/>
            </author>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems.  The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo.  UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values.  This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="BCP38">
          <front>
            <title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
            <author fullname="P. Ferguson" initials="P." surname="Ferguson">
              <organization/>
            </author>
            <author fullname="D. Senie" initials="D." surname="Senie">
              <organization/>
            </author>
            <date month="May" year="2000"/>
            <abstract>
              <t>This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="38"/>
          <seriesInfo name="RFC" value="2827"/>
          <seriesInfo name="DOI" value="10.17487/RFC2827"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="REQS">
          <front>
            <title>Requirements for a MASQUE Protocol to Proxy IP Traffic</title>
            <author fullname="Alex Chernyakhovsky">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Dallas McCall">
              <organization>Google LLC</organization>
            </author>
            <author fullname="David Schinazi">
              <organization>Google LLC</organization>
            </author>
            <date day="27" month="August" year="2021"/>
            <abstract>
              <t>   There is interest among MASQUE working group participants in
   designing a protocol that can proxy IP traffic over HTTP.  This
   document describes the set of requirements for such a protocol.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-masque-ip-proxy-reqs-03"/>
        </reference>
        <reference anchor="IPSEC">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author fullname="S. Kent" initials="S." surname="Kent">
              <organization/>
            </author>
            <author fullname="K. Seo" initials="K." surname="Seo">
              <organization/>
            </author>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer.  This document obsoletes RFC 2401 (November 1998).  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
        <reference anchor="AUTH">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Authentication</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application- level protocol for distributed, collaborative, hypermedia information systems.  This document defines the HTTP Authentication framework.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7235"/>
          <seriesInfo name="DOI" value="10.17487/RFC7235"/>
        </reference>
      </references>
    </references>
    <section anchor="examples" numbered="true" toc="default">
      <name>Examples</name>
      <section anchor="consumer-vpn" numbered="true" toc="default">
        <name>Consumer VPN</name>
        <t>In this scenario, the client will typically receive a single IP address that
the proxy has picked from a pool of addresses it maintains. The client will
route all traffic through the tunnel. The exchange could look as follows:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
    Client                                             Server

    ADDRESS_REQUEST          -------->
      IP Version = 4
      IP Address = 0.0.0.0
      IP Prefix Length = 0

                             <--------  ADDRESS_ASSIGN
                                          IP Version = 4
                                          IP Address = 192.0.2.42
                                          IP Prefix Length = 32
]]></artwork>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>The design of CONNECT-IP was inspired by discussions in the MASQUE working
group around <xref target="REQS" format="default"/>. The authors would like to thank participants in those
discussions for their feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
r6OK9nahrEe6MtM6JW8civ8Cg3tcwEczAAA=

-->

</rfc>
