<?xml version="1.0" encoding="UTF-8"?>
<?rfc toc="yes"?>
<?rfc compact="yes"?>
<?rfc tocdepth="6"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc autobreaks="no"?>
<?rfc subcompact="no"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">

<rfc category="info" submissionType="IETF" consensus="yes" docName="draft-palet-v6ops-p2p-links-04">
  <front>
  <title abbrev="IPv6 Point-to-Point Links">IPv6 Point-to-Point Links</title>

    <author fullname="Jordi Palet Martinez" initials="J" surname="Palet Martinez">
      <organization>The IPv6 Company</organization>

      <address>
        <postal>
          <street>Molino de la Navata, 75</street>

          <city>La Navata - Galapagar</city>

          <region>Madrid</region>

          <code>28420</code>

          <country>Spain</country>
        </postal>

        <email>jordi.palet@theipv6company.com</email>

        <uri>http://www.theipv6company.com/</uri>
      </address>
    </author>


    <date year="2019"/>

		<workgroup>v6ops</workgroup>

		<abstract>
			<t>This document describes different alternatives for configuring IPv6 
			point-to-point links, considering the prefix size, numbering choices 
			and prefix pool to be used.</t>
		</abstract>
	</front>

	<middle>
		<section title="Introduction">
		<t>There are different alternatives for numbering IPv6 point-to-point links, 
		and from an operational perspective, there may have different advantages or 
		disadvantages that need to be taken in consideration under the scope of 
		each specific network architecture design.</t>

		<t><xref target="RFC6164"/> describes using /127 prefixes for inter-router 
		point-to-point links, using two different address pools, one for numbering 
		the point-to-point links and another one for delegating the prefixes at the 
		end of the point-to-point link. However, this doesn't exclude other choices.</t>

		<t>This document describes alternative approaches, for the prefix 
		size, the numbering of the link and the prefix pool.</t>
		
		<t>The proposed approaches are suitable for those point-to-point links 
		connecting ISP to customers, but not limited to those cases, and in fact, 
		all them are being used by a relevant number of networks worldwide, 
		in several different scenarios (service providers, enterprise networks, etc.).</t>

		</section>

		<section title="Requirements Language">
			<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 title="The Ping-Pong Problem in Point-to-Point Links">
		<t>Some point-to-point links may present the ping-pong problem, 
		(a forwarding loop). The fundamental root cause of this problem 
		is an IPv6 implementations not performing full Neighbor Discovery (NS/NA) 
		on addresses that the prefix says could exist on the link.</t>

		<t>IPv6 implementations are assuming that all addresses within 
		the prefix must exist at the other end of the point-to-point link, 
		and send the traffic straight onto the link. If the address doesn't exist, 
		and there is a covering route back in the other direction, the ping-pong 
		problem occurs.</t>

		<t>Full Neighbor Discovery is doing more than just resolving the 
		link-layer address of an IPv6 address. Neighbor Discovery is also 
		determining if the address exists. Even if a point-to-point link 
		doesn't have link-layer addresses to resolve, ND determining if an 
		address exists on the link is very beneficial because it will prevent 
		the ping-pong problem occurring entirely regardless of the IPv6 prefix 
		length being used on the link.</t>
		
		</section>

		<section title="Prefix Size Choices">
		<t><xref target="RFC7608"/> already discusses about the IPv6 prefix length 
		recommendations for forwarding, and the need for routing and forwarding 
		implementations to ensure that longest-prefix-match works on any prefix 
		length. So, in this document, we concentrate in the most commonly used 
		choices, not excluding other options.</t>
		
		<section title="Rationale for using /64">
		<t>The IPv6 Addressing Architecture (<xref target="RFC4291"/>) specifies 
		that all the Interface Identifiers for all the unicast addresses 
		(except for 000/3) are required to be 64 bits long and to be 
		constructed in Modified EUI-64 format.</t>

		<t>The same document also mandates the usage of the predefined 
		subnet-router anycast address, which has cleared to zero all the bits 
		that do not form the subnet prefix.</t>

		<t>Using /64 is the most common scenario and currently the best practice 
		by the number of service providers using this approach compared to others.</t>
		
		<t>Using a /64 has the advantage of being future proof and avoids renumbering, 
		in the event that new standards take advantage of the 64 bits for other 
		purposes, or the link becomes a point-to-multipoint, or there is a need to 
		use more addresses in the link (e.g., monitoring equipment, managed bridges).</t>

		<t>It has been raised also the issue of some hardware having limitations 
		in using prefixes longer then /64, for example using extra hardware resources.</t>

		<t>Section 5. of <xref target="RFC6164"/> describes possible issues when 
		using /64 for the point-to-point links, such as the ping-pong and the 
		neighbor cache exhaustion. However, it also states that they can 
		be mitigated by other means, including the latest ICMPv6 <xref target="RFC4443"/> 
		ND <xref target="RFC4861"/>. Indeed, considering the publication date of 
		that document, those issues should not be any longer a concern. The fact 
		is that many operators worldwide, today use /64 without any concerns, 
		as vendors have taken the necessary code updates.</t>

		<t>Consequently, we shall conclude that it is a valid approach 
		to use /64 prefixes for the point-to-point links.</t>
		</section>

		<section title="Rationale for using /127">
		<t><xref target="RFC6164"/> already do a complete review of reasons why /127 
		is a good approach vs other options. However, it needs to be considered 
		that it was published a number of years ago, and most of the hardware today 
		already incorporate mitigations.</t>

		<t>It should be noted that, when using a /127 prefix, configuration of each 
		of the addresses within the /127 prefix, at each respective end of the link, 
		must be actively validated by the network operator. A missing /127 address 
		from one end of the link, with a local route pointing out that end of the 
		link that covers the missing /127 address, such as a default route, 
		causes a "ping-pong" scenario to exist for the missing /127 address. 
		The link could still be successfully carrying transit traffic, 
		and IPv6 will not report any errors, because IPv6 doesn't require 
		or nor check to ensure all interfaces attached to a link has addresses 
		from all prefixes assigned to the link, excepting the Link-Local prefix 
		per <xref target="RFC4291"/>.</t>

		<t>It is a valid approach to use /127 for the point-to-point links, however 
		is not future proof considering the comments from the previous section, and 
		older equipment may not support it.</t>
		</section>


		<section title="Rationale for using /126 and Other Options">
		<t>/126 was considered by <xref target="RFC3627"/>, and despite this document 
		has been obsoleted, because was considering /127 as harmful, the 
		considerations in Section 4.3 are still valid.</t>

		<t>The same document describes options such as /112 and /120, and all those 
		are commonly used in worldwide IPv6 deployments <xref target="IPv6-Survey"/>, 
		though in a lesser degree than /64 or /127.</t>

		<t>Consequently, we shall conclude that /126, /120 and /112 are valid approaches 
		for the point-to-point links.</t>
		</section>

		<section title="A Possible Middle-Term Choice">
		<t>A possible "middle-term" approach, will be to allocate a /64 for each 
		point-to-point link, but use just one /127 out of it, making it future proof 
		and at the same time avoiding possible issues indicated in the previous sections.</t>

		</section>


		</section>


		<section title="Numbering Choices">
		<t>IPv6 provides different unicast addressing scopes which can be considered 
		when numbering a point-to-point link.</t>

		<t>It has been reported that certain hardware may consume resources when 
		using numbered links. This is a very specific situation that may need to 
		be consider on a case by case basis.</t>

		<section title="GUA (Global Unicast Addresses)">
		<t>Using GUA is the most common approach. It provides full functionality for 
		both end-points of the point-to-point link and consequently, 
		facilitates troubleshooting.</t>
		</section>

		<section title="ULA (Unique Local Addresses)">
		<t>Some networks use ULAs for numbering the point-to-point links. 
		This approach may cause numerous problems when carrying Internet traffic 
		and therefore, is strongly discouraged. 
		For example, if the CE needs to send an ICMPv6 message to a host outside that 
		network (to the Internet), the packet with ULA source address will not get thru 
		and PMTUD will break, which in turn will completely break that IPv6 connection 
		when the MTU is not the same for all the path.</t>

		<t>ULAs are IPv6 private addresses, not intended to be used as source or 
		destination addresses across the Internet. This issue also exists in IPv4 
		when using <xref target="RFC1918"/> addresses on links carrying IPv4 
		Internet traffic. <xref target="RFC6752"/> discusses this issue for IPv4, 
		with much of the discussion applying similarly to IPv6 and ULAs.</t>

		<t>However, this approach is valid if, following Section 2.2 of 
		<xref target="RFC4443"/>, and despite using ULA for the point-to-point 
		link, the router is configured with at least one GUA and the source of the 
		ICMPv6 messages are always a GUA, per the IPv6 Default Address 
		Selection algorithm <xref target="RFC6724"/>.</t>
		</section>

		<section title="Link-Local Addresses Only">
		<t>Some networks leave the point-to-point links with only Link-Local 
		addresses used at both ends of the link. This is sometimes improperly 
		referred as "unnumbered", because the Link-Local addresses are also "numbers". 
		Furthermore, <xref target="RFC4291"/> requires that all interfaces attached 
		to a link have at least a Link-Local "number" or address from the 
		Link-Local prefix.</t>

		<t><xref target="RFC7404"/> (Using Only Link-Local Addressing inside 
		an IPv6 Network) discusses pros and cons of this alternative, which 
		in general apply for the point-to-point links.</t>

		<t>While this choice might work if the point-to-point link is terminated in 
		a router, which typically will get configured with a suitable routable 
		GUA or ULA, it will not work for devices that can't be further configured, for 
		example if they do not support DHCPv6-PD. This is the case for hosts, when 
		the Operating System is not expected to be a DHCPv6-PD client and are 
		therefore left without any usable GUA to allow traffic forwarding.</t>

		<t>In the case of a router, the route for the assigned prefix is pointed 
		towards the link-local address on the router WAN port and the default route 
		on the router is pointed towards the link-local address on the upstream network 
		equipment port.</t>

		<t>This choice seems easier to implement, compared the previous ones, but 
		it also brings some drawbacks, such as difficulties with troubleshooting 
		and monitoring. For example, link local addresses do not appear in 
		traceroute, so it makes more difficult to locate  the exact point of failure.</t>

		<t>It is more useful in scenarios where it is known that only a router will 
		be attached to the point-to-point link, and where the configured address of the 
		router is known. Non-routers connecting to a network, which can't initiate 
		DHCPv6-PD might experience problems and will stay unnumbered upon connection, 
		if a /64 prefix is not used to number the link. This may be also the case for 
		routers, which will not be able to complete the DHCPv6-PD in unnumbered links.</t>

		<t>The considerations indicated in the previous section, regarding not using 
		ULA as source address of ICMPv6 messages, and instead ensuring there is at least 
		one GUA configured for that, also apply if link-locals are used for the 
		point-to-point link.</t>
		</section>

		</section>


		<section title="Prefix Pool Choices">
		<t>The logic choice seems to use a dedicated pool of IPv6 addresses, 
		as this is the way we are "used to" with IPv4. Actually, this is done 
		often by means of different IPv6 pools at every PoP in a service provider 
		network.</t>

		<t>A possible benefit of using a dedicated IPv6 pool, is that allows applying 
		security policies without harming the customers. This is only true if customers 
		always have a CE at their end of the WAN link.</t>

		<t>However, the fact that the default IPv6 link size is /64 and commonly 
		multiple /64's are assigned to a single customer, provides an interesting 
		alternative approach for combining "best practices" described in the precedent 
		sections.</t>

		<t>The following section depicts this alternative.</t>
		</section>


		<section title="/64 from Customer Prefix for point-to-point links">
		<t>Using a /64 from the customer prefix, in addition to the advantages 
		already indicated when using /64, simplifies the addressing plan.</t>
		
		<t>The use of /64 also facilitates an easier way for routing the shorter 
		aggregated prefix into the point-to-point link. Consequently it simplifies 
		the "view" of a more unified addressing plan, providing an easier path for 
		following up any issue when operating IPv6 networks and typically, will 
		have a great impact in saving expensive hardware resources 
		(lower usage of TCAM, typically by half).</t>

		<t>This mechanism would not work in broadcast layer two media that 
		rely on ND, because it will try ND for all the addresses within 
		the shorter prefix that is being routed thru the point-to-point link.</t>


		<section title="Numbering Interfaces">
		<t>Often, in point-to-point links, hardware tokens are not available, 
		or there is the need to keep certain bits (u, g) cleared, so the links 
		can be manually numbered sequentially with most of the bits cleared 
		to zero. This numbering makes as well easier to remember the interfaces, 
		which typically will become numbered as 0 (with 63 leading zero bits) 
		for the provider side and 1 (with 63 leading zero bits) 
		for the customer side.</t>

		<t>Using interface identifiers as 0 and 1 is not only a very simple 
		approach, but also a very common practice. Other different choices 
		can as well be used as required in each case.</t>

		<t>On the other hand, using the EUI-64, makes it more difficult to 
		remember and handle the interfaces, but provides an additional degree 
		of protection against port (actually address) scanning as described 
		at <xref target="RFC7707"/>.</t>

		</section>

		<section title="Routing Aggregation of the Point-to-Point Links">
		<t>Following this approach and assuming that a shorter prefix is typically 
		delegated to a customer, for example a /48, it is possible to simplify 
		the routing aggregation of the point-to-point links. Towards this, 
		the point-to-point link may be numbered using the first /64 of the /48 
		delegated to the customer.</t>

		<t>Let's see a practical example:</t>
			<t><list style="symbols">
				<t>A service provider uses the prefix 2001:db8::/32 and is using 
				2001:db8:aaaa::/48 for a given customer.</t>
				<t>Instead of allocating the point-to-point link from a different 
				addressing pool, it may use 2001:db8:aaaa::/64 (which is the first 
				/64 subnet from the 2001:db8:aaaa::/48) to number the link.</t>
				<t>This means that, in the case the non-EUI-64 approach is used, 
				the point-to-point link may be numbered as 2001:db8:aaaa::1/64 
				for the provider side and 2001:db8:aaaa::2/64 for the customer side.</t>
				<t>Note that using the first /64 and interface identifiers 
				1 and 2 is a very common practice. However other values may 
				be chosen according to each case specific needs.</t>
			</list></t>

		<t>In this way, as the same address pool is being used for both, 
		the prefix and the point-to-point link, one of the advantages of 
		this approach is to make very easy the recognition of the point-to-point 
		link that belongs to a given customer prefix, or in the other way around, 
		the recognition of the prefix that is linked by a given point-to-point link.</t>

		<t>For example, making a trace-route to debug any issue to a given address 
		in the provider network, will show a straight view, and it becomes 
		unnecessary one extra step to check a database that correlate an 
		address pool for the point-to-point links and the customer prefixes, 
		as all they are the same.</t>

		<t>Moreover, it is possible to use the shorter prefix as the provider 
		side numbering for the point-to-point link and keep the /64 for the 
		customer side. In our example, it will become:</t>

			<t><list style="symbols">
				<t>Point-to-point link at provider side: 2001:db8:aaaa::1/48</t>
				<t>Point-to-point link at customer side: 2001:db8:aaaa::2/64</t>
			</list></t>

		<t>This provides one additional advantage as in some platforms 
		the configuration may be easier saving one step for the route of the 
		delegated prefix (no need for two routes to be configured, 
		one for the delegated prefix, one for the point-to-point link). 
		It is possible because the longest-prefix-match rule.</t>

		<t>The behavior of this type of configuration has been successfully 
		deployed in different operator and enterprise networks, using commonly 
		available implementations with different routing protocols, 
		including RIP, BGP, IS-IS, OSPF, along static routing, 
		and no failures or interoperability issues have been reported.</t>

		</section>

		<section title="DHCPv6 Considerations">
		<t>As stated in <xref target="RFC3633"/>, "the requesting router 
		MUST NOT assign any delegated prefixes or subnets from the delegated 
		prefix(es) to the link through which is received the DHCP message 
		from the delegating router", however the approach described in 
		this document is still useful in other DHCPv6 scenarios or 
		non-DHCPv6 scenarios.</t>

		<t>Furthermore, <xref target="RFC3633"/> was updated by 
		Prefix Exclude Option for DHCPv6-based Prefix Delegation 
		(<xref target="RFC6603"/>), precisely to define a new DHCPv6 option, 
		which covers the case described by this document.</t>
		
		<t>Moreover, <xref target="RFC3769"/> has no explicit requirement 
		that avoids the approach described in this document.</t>
		
		</section>

		<section title="Router Considerations">
		<t>This approach is being used by operators in both, residential/SOHO 
		and enterprise networks, so the routers at the customer end for those 
		networks MUST support <xref target="RFC6603"/> if DHCPv6-PD is used.</t>

		<t>In the case of Customer Edge Routers there is a specific requirement 
		(<xref target="RFC7084"/>) WPD-8 (Prefix delegation Requirements), marked 
		as SHOULD for <xref target="RFC6603"/>. However, in a scenario where 
		the approach described in this document is followed, together with 
		DHCPv6-PD, the CE Router MUST support <xref target="RFC6603"/>.</t>
		
		</section>
		</section>


		<section title="Security Considerations">
			<t>This document does not have any new specific security considerations.</t>
		</section>

		<section title="IANA Considerations">
			<t>This document does not have any new specific IANA considerations.</t>
		</section>

		<section title="Acknowledgements">
			<t>The author would like to acknowledge the inputs of Mikael 
			Abrahamsson, Brian Carpenter, Eric Vyncke, Mark Smith and TBD.</t> 
			<t>Acknowledge is also due to my co-authors of RIPE-690 (Best Current 
			Operational Practice for Operators: IPv6 prefix assignment for end-users 
			- persistent vs non-persistent, and what size to choose, 
			https://www.ripe.net/publications/docs/ripe-690) and global 
			community, which provided valuable inputs which have been key for this 
			document.</t>
			<t>Acknowledgement to co-authors, Cesar Olvera and Miguel Angel Díaz, 
			of a previous related document (draft-palet-v6ops-point2point, 2006), 
			as well as inputs for that version from Alain Durand, Chip Popoviciu, 
			Daniel Roesen, Fred Baker, Gert Doering, Olaf Bonness, Ole Troan, 
			Pekka Savola and Vincent Jardin, are also granted.</t>
		</section>
	</middle>

  <back>

    <references title="Normative References">
    <?rfc include="reference.RFC.2119" ?>
	<?rfc include="reference.RFC.3633" ?>
	<?rfc include="reference.RFC.3769" ?>
	<?rfc include="reference.RFC.4291" ?>
	<?rfc include="reference.RFC.4443" ?>
	<?rfc include="reference.RFC.4861" ?>
	<?rfc include="reference.RFC.6603" ?>
	<?rfc include="reference.RFC.6724" ?>
	<?rfc include="reference.RFC.7084" ?>
    <?rfc include="reference.RFC.8174" ?>
    </references>

    <references title="Informative References">
    <?rfc include="reference.RFC.1918" ?>
	<?rfc include="reference.RFC.3627" ?>
	<?rfc include="reference.RFC.6164" ?>
	<?rfc include="reference.RFC.7404" ?>
	<?rfc include="reference.RFC.6752" ?>
	<?rfc include="reference.RFC.7608" ?>
	<?rfc include="reference.RFC.7707" ?>

<?rfc rfcedstyle="no" ?>

<reference anchor="IPv6-Survey" target="https://indico.uknof.org.uk/event/41/contribution/5/material/slides/0.pdf">
<front>
<title>IPv6 Deployment Survey (Residential/Household Services)</title>

<author initials="J" surname="Palet Martinez" fullname="Jordi Palet Martinez">
    <organization>The IPv6 Company</organization>
</author>

<date month="January" year="2018" />
</front>
</reference>
<?rfc rfcedstyle="yes"?>
    </references>

  </back>

</rfc>
