<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>  <!-- Required for schema validation and schema-aware editing -->
<!-- <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> -->
<!-- This third-party XSLT can be enabled for direct transformations in XML processors, including most browsers -->


<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<!-- If further character entities are required then they should be added to the DOCTYPE above.
     Use of an external entity file is not recommended. -->

<rfc
  xmlns:xi="http://www.w3.org/2001/XInclude"
  category="bcp"
  docName="draft-collink-v6ops-ent64pd-00"
  ipr="trust200902"
  obsoletes=""
  updates=""
  submissionType="IETF"
  xml:lang="en"
  version="3">
  <front>
	  <title abbrev="MultAddrr">Using DHCP-PD to Allocate /64 per Host in Broadcast Networks</title>

	  <seriesInfo name="Internet-Draft" value="draft-collink-v6ops-ent64pd"/>
 <author initials="L." surname="Colitti" fullname="Lorenzo Colitti">
      <organization>Google, LLC</organization>
      <address>
        <postal>
          <street>Shibuya 3-21-3</street>
          <country>Japan</country>
        </postal>
        <email>lorenzo@google.com</email>
      </address>
    </author>
    <author fullname="Jen Linkova" initials="J" role="editor" surname="Linkova">
      <organization>Google</organization>
      <address>
        <postal>
          <!-- Reorder these if your country does things differently -->
          <street>1 Darling Island Rd</street>
          <city>Pyrmont</city>
          <region>NSW</region>
          <code>2009</code>
          <country>AU</country>
        </postal>        
        <email>furry13@gmail.com</email>  
        <email>furry@google.com</email>  
      </address>
    </author>
   
    <date year="2022"/>
    <area>OPS Area</area>
    <workgroup>v6ops Working Group</workgroup>
    <keyword>IPv6</keyword>
    <keyword>SLAAC</keyword>
    <keyword>/64</keyword>
    <keyword>DHCP-PD</keyword>
    <abstract>
	    <t>This document discusses IPv6 deployment scenario when individual hosts connected to broadcast networks (like WiFi hotspots or enterprise networks) are allocated /64 subnets via DHCP-PD.</t>
    </abstract>
 
  </front>

  <middle>
    
    <section>
      <name>Introduction</name>
      <t>Unlike IPv4, IPv6 allows (and often requires) hosts to have multiple addresses. At the very least, a host can be expected to have one link-local address, one stable global address and one privacy address.
      On an IPv6-only network the device would need to have a dedicated 464XLAT address, which brings the total number of addresses to 4. If thenetwork is multihomed and uses two different prefixes, or during graceful renumbering (when the old prefix is deprecated), of if an enterprise uses ULAs, the number of global addresses can easily double, brining the total number of addresses to 7. 
      Devices running containers/namespaces would need even more addresses per physical host.
      on one hand this could be considered as a significant advantange of IPv6.
      On one hand, however, multiple addresses are seen as a drawback for the following reasons:
      </t>
      <ul>
	      <li>
		      Increased number of addresses introduces scalability issues on the network infrastructure.
		      Network devices need maintain various types of tables/hashes (Neighbor Cache on first-hop routers, Neighbor Discovery Proxy caches on L2 devices etc). On VXLAN networks each address might be represented as a route so 8 addresses instead of 1 requires the devices to support 8 times more routes, etc.
	      </li>
	      <li>
		      An operator might need to know all addresses used by a given device in the past for forensics or troubleshooting purposes.
	      </li>
	      <li>
		      If an infrastrcuture device resources are exhausted, the device might drop some IPv6 addresses from the corresponding tables.
		      The host, however, might be still using the address to send traffic. This leads to traffic blackholing and degraded customer experience.
	      </li>
      </ul>

      <t>
	      RFC7934 discusses this aspect and explicitly states that IPv6 deployments SHOULD NOT limit number of IPv6 addresses a host can have.
	      However it seems inevitable that some limits might need to be imposed by the network in attempt to protect the network resources and prevent DoS attacks (see draft-linkova-v6ops-ipmaclimi).
      </t>
      <t>
	      Therefore it would be beneficial for IPv6 deployments to address the abovementioned issues while still allowing hosts to have multiple IPv6 addresses.
	      One of the very promising approaches is allocating an unique /64 prefix per host ([RFC8273]).
	      The same principle has been actively used in mobile IPv6 deployments.
	      However it's very uncommon in enterprise-style networks.
	      This document expands the approach defined in [RFC8273] to allocate an unique IPv6 /64 prefix per host using DHCP-PD.
      </t>
    </section>
      
      <section>
        <name>Requirements Language</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>
	    <name>Design Principles</name>
	    <t>
		    Instead of all hosts on a given segment using the same /64 assigned to that segment:
	    </t>
	    <ul>
		    <li>
			    A host acts as DHCP-PD client and requests /64 via DHCPv6-PD by sending IA_PD.
		    </li>
		    <li>
			    The first-hop router acts as a DHCPv6-PD relay and send the request to the DHCPv6-PD servers.
			    In smaller networks it's entirely possible for the first-hop router to act as a DHCPv6-PD server and assign /64 from a larger pool allocated for the given segment or the whole site.
		    </li>
		    <li>
			    The allocated /64 is installed into the first-hop router routing table as a route pointing to the client's link-local address.
			    For the router and all other ifrastructure devices that prefix is considered off-link, so no traffic to that prefix does not trigger any ND packets.
		    </li>
		    <li>
			    The host uses /64 to allocate addresses to its interfaces, containters etc.
		    </li>
	    </ul>
	    <t>
		    Using /64 allows the host to assign addresses to virtual instances using SLAAC.
	    </t>
    </section>   
    <section>
	    <name>Migration Strategies and Co-existence with SLAAC</name>
	    <t>
		    There are scenarios when it might be undesirable for a host to request an unique prefix.
		    As the main goal of this approach is to address scalability issues, the solution is aimed for large networks (enterprises, conference hotspots etc).
		    In small networks (e.g. home ones), where the number of devices is not too high, the number of available /64 becomes a limiting factor.
		    If every phone or laptop in a home network would request an unique /64, the home network might run out of /64s, if the prefix allocated to the CPE by its ISP is too small.
		    Therefore it's desirable for the network to indicate the support of the proposed mechanism.
		    As it's a -00 draft, we do not have details for such mechanism yet, just a few rough ideas:
	    </t>
	    <ul>
		    <li>
			    A new RA (or, better, PIO flag) to indicate "don't use this PIO for SLAAC, ask for /64 via PD".
			    Legacy devices would not recognize it and contibue to use that /64 for SLAAC.
		    </li>
		    <li>
			    Some flags/options in DHCPv6 used like Option 108 in DHCPv4 - the client sends it and only accepts /64 if the server returns that option back.
			    It would prevent /64 to be allocated for the clients in home networks, unless the CPE is explicitly configured to support this new mechanism.
		    </li>
		    <li>
			    Some other crazy ideas?
		    </li>
	
	    </ul>
    </section>   
    <section>
	    <name>Benefits</name>
	    <t>
		    The proposed solution provides the following benefits:
	    </t>
	    <ul>
		    <li>
			    The network needs to scale to the number of devices, not the number of IPv6 addresses.
			    The first-hop routers have a single /64 route per host pointing to the host's link-local address/
		    </li>
		    <li>
			    If all devices support this mode of operation, it is possible to remove global /64 prefix from the interface completely, reducing the attack surface for Neighbor Discovery attacks described in RFC6583.
		    </li>
		    <li>
			    DHCP-PD logs and first-hop routers roting tables provide complete information on IPv6 to MAC mapping, which can be used for forensics and troiubleshooting.
			    Such information is much less dynamic that ND cache and therefore it's much easier for an operator to collect and process it.
		    </li>
		    <li>
			    The cost of having multiple addresses is offloaded to the endpoint.
			    Devices are free to create and use as many addresses as they need.
		    </li>
		    <li>
			    Fate sharing: all global addresses used by a given device are routed as a single /64.
			    Either all of them work or not, which makes the failures are easier to diagnoze and mitigate.
		    </li>
	    </ul>
    </section>   
    <section>
	    <name>Applicability and Limitations</name>
	    <t>
		    What's unclear at this point (AI for Jen: sort this out):
	    </t>
	    <ul>
		    <li>
			    How to deal with multiple routers in active/active scernario? Need to test if they are capable of advertize DHCP-PD routes to its neighbors. What happens if the first-hop router fails and switchover occurs?
		    </li>
		    <li>
			    Interaction with SAVI?
		    </li>
		    <li>
			    [Do math for how many prefixes/addresses needed and if we are going to run out of addresses again ;)]
		    </li>

	    </ul>
    </section>   
    
    <section anchor="IANA">
    <!-- All drafts are required to have an IANA considerations section. See RFC 8126 for a guide.-->
      <name>IANA Considerations</name>
      <t>This memo includes no request to IANA.</t>
    </section>
    
    <section anchor="Security">
      <!-- All drafts are required to have a security considerations section. See RFC 3552 for a guide. -->
      <name>Security Considerations</name>
      <t> A malicious or just misbehaving host might exhaust the DHCP-PD pool by sending large number of requests with various DUIDs. However this is not a new issue as the same attach might be implemented in DHCPv4 or DHCPv6 for IA_NA requests.</t>
    </section>
    
    <!-- NOTE: The Acknowledgements and Contributors sections are at the end of this template -->
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.7934.xml"/>
        <xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.8273.xml"/>
        <!-- The recommended and simplest way to include a well known reference -->
        
      </references>
 
      <references>
        <name>Informative References</name>
      </references>
    </references>
    
    <section anchor="Acknowledgements" numbered="false">
      <!-- [REPLACE/DELETE] an Acknowledgements section is optional -->
      <name>Acknowledgements</name>
      <t>Thanks to Erik Kline and Timothy Winters for the discussions, the input and all contribution.</t>
    </section>
    
    <section anchor="Contributors" numbered="false">
      <!-- [REPLACE/DELETE] a Contributors section is optional -->
      <name>Contributors</name>
    </section>
    
 </back>
</rfc>
