<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="info" docName="draft-ietf-v6ops-design-choices-11"
     ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN" 
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the 
         full title is longer than 39 characters -->

    <title abbrev="IPv6 Design Choices">Some Design Choices for IPv6
    Networks</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <!-- Another author who claims to be an editor -->

    <author fullname="Philip Matthews" initials="P." surname="Matthews">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street>600 March Road</street>

          <!-- Reorder these if your country does things differently -->

          <city>Ottawa</city>

          <region>Ontario</region>

          <code>K2K 2E6</code>

          <country>Canada</country>
        </postal>

        <phone>+1 613-784-3139</phone>

        <email>philip_matthews@magma.ca</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <author fullname="Victor Kuarsingh" initials="V." surname="Kuarsingh">
      <organization>Cisco</organization>

      <address>
        <postal>
          <street>88 Queens Quay</street>

          <city>Toronto</city>

          <region>ON</region>

          <code>M5J0B8</code>

          <country>Canada</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>victor@jvknet.com</email>

        <uri/>
      </address>
    </author>

    <date day="" month="" year="2016"/>

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill 
         in the current day for you. If only the current year is specified, xml2rfc will fill 
	 in the current day and month for you. If the year is not the current one, it is 
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the 
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to 
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>Operations and Management</area>

    <workgroup>V6OPS Working Group</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.  
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword/>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>This document presents advice on certain routing-related design
      choices that arise when designing IPv6 networks (both dual-stack and
      IPv6-only). The intended audience is someone designing an IPv6 network
      who is knowledgeable about best current practices around IPv4 network
      design, and wishes to learn the corresponding practices for IPv6.</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document discusses routing-related design choices that arise
      when designing a Pv6-only or dual-stack network. The focus is on choices
      that do not come up when designing an IPv4-only network. The document
      presents each choice and the alternatives, and then discusses the pros
      and cons of the alternatives in detail. Where consensus currently exists
      around the best practice, this is documented; otherwise the document
      simply summarizes the current state of the discussion. Thus this
      document serves to both document the reasoning behind best current
      practices for IPv6, and to allow a designer to make an informed choice
      where no such consensus exists.</t>

      <t>The design choices presented apply to both Service Provider and
      Enterprise network environments. Where choices have selection criteria
      which differ between the Service Provider and the Enterprise
      environment, this is noted. The designer is encouraged to ensure that
      they familiarize themselves with any of the discussed technologies to
      ensure the best selection is made for their environment.</t>

      <t>This document does not present advice on strategies for adding IPv6
      to a network, nor does it discuss transition in these areas, see <xref
      target="RFC6180"/> for general advice,<xref target="RFC6782"/> for
      wireline service providers, <xref target="RFC6342"/>for mobile network
      providers, <xref target="RFC5963"/> for exchange point operators, <xref
      target="RFC6883"/> for content providers, and both <xref
      target="RFC4852"/> and <xref target="RFC7381"/> for enterprises. Nor
      does this document discuss the particulars of creating an IPv6
      addressing plan; for advice in this area, see <xref target="RFC5375"/>
      or <xref target="v6-addressing-plan"/>.</t>

      <t>Finally, this document focuses on unicast routing design only and
      does not cover multicast or the issues involved in running MPLS over
      IPv6 transport.</t>
    </section>

    <section title="Design Choices">
      <t>Each subsection below presents a design choice and discusses the pros
      and cons of the various options. If there is consensus in the industry
      for a particular option, then the consensus position is noted.</t>

      <section title="Addresses">
        <t>This section discusses the choice of addresses for router loopbacks
        and links between routers. It does not cover the choice of addresses
        for end hosts.</t>

        <t>In IPv6, all interfaces are assigned a Link-Local Address (LLA)
        [ref]. The Link-Local address can only be used for communicating with
        devices that are on-link, so often additional addresses are assigned
        which are able to communicate off-link. These additional addresses can
        be one of three types:<list style="symbols">
            <t>Provider-Independent Global Unicast Address (PI GUA): IPv6
            address allocated by a regional address registry <xref
            target="RFC4291"/></t>

            <t>Provider-Aggregatable Global Unicast Address (PA GUA): IPv6
            Address allocated by your upstream service provider</t>

            <t>Unique Local Address (ULA): IPv6 address locally assigned <xref
            target="RFC4193"/></t>
          </list>This document uses the term "multi-hop address" to
        collectively refer to these three types of addresses.</t>

        <t>PI GUAs are, for many situations, the most flexible of these
        choices. Their main disadvantages are that a regional address registry
        will only allocate them to organizations that meet certain
        qualifications, and one must pay an annual fee. These disadvantages
        mean that some smaller organization may not qualify or be willing to
        pay for these addresses.</t>

        <t>PA GUAs have the advantage that they are usually provided at no
        extra charge when you contract with an upstream provider. However,
        they have the disadvantage that, when switching upstream providers,
        one must give back the old addresses and get new addresses from the
        new provider ("renumbering"). Though IPv6 has mechanisms to make
        renumbering easier than IPv4, these techniques are not generally
        applicable to routers and renumbering is still fairly hard [RFC 5887].
        PA GUAs also have the disadvantage that it is not easy to have
        multiple upstream providers ("multi-homing") if they are used (see
        section 1 of <xref target="RFC5533"/> ).</t>

        <t>ULAs have the advantage that they are extremely easy to obtain and
        cost nothing. However, they have the disadvantage that they cannot be
        routed on the Internet, so must be used only within a limited scope.
        In many situations, this is not a problem, but in certain situations
        this can be problematic. Though there is currently no document that
        describes these situations, many of them are similar to those
        described in RFC 6752. See also <xref
        target="I-D.ietf-v6ops-ula-usage-recommendations"/>.</t>

        <t>Not discussed in this document is the possibility of using the
        technology described in RFC 6296 to work around some of the
        limitations of PA GUAs and ULAs.</t>

        <section title="Where to Use Addresses">
          <t>As mentioned above, all interfaces in IPv6 always have a
          link-local address. This section addresses the question of when and
          where to assign multi-hop addresses in addition to the LLA. We
          consider four options:<list style="letters">
              <t>Use only link-local addresses on all router interfaces.</t>

              <t>Assign multi-hop addresses to all link interfaces on each
              router, and use only a link-local address on the loopback
              interfaces.</t>

              <t>Assign multi-hop addresses to the loopback interface on each
              router, and use only a link-local address on all link
              interfaces.</t>

              <t>Assign multi-hop addresses to both link and loopback
              interfaces on each router.</t>
            </list></t>

          <t>Option (a) means that the router cannot be reached (ping,
          management, etc.) from farther than one-hop away. The authors are
          not aware of anyone using this option.</t>

          <t>Option (b) means that the loopback interfaces are effectively
          useless, since link-local addresses cannot be used for the purposes
          that loopback interfaces are usually used for. So option (b)
          degenerates into option (d).</t>

          <t>Thus the real choice comes down to option (c) vs. option (d).</t>

          <t>Option (c) has two advantages over option (d). The first
          advantage is ease of configuration. In a network with a large number
          of links, the operator can just assign one multi-hop address to each
          router and then enable the IGP, without going through the tedious
          process of assigning and tracking the addresses on each link. The
          second advantage is security. Since packets with link-local
          addresses cannot be should not be routed, it is very difficult to
          attack the associated nodes from an off-link device. This implies
          less effort around maintaining security ACLs.</t>

          <t>Countering these advantages are various disadvantages to option
          (c) compared with option (d):<list style="symbols">
              <t>It is not possible to ping a link-local-only interface from a
              device that is not directly attached to the link. Thus, to
              troubleshoot, one must typically log into a device that is
              directly attached to the device in question, and execute the
              ping from there.</t>

              <t>A traceroute passing over the link-local-only interface will
              return the loopback address of the router, rather than the
              address of the interface itself.</t>

              <t>In cases of parallel point to point links it is difficult to
              determine which of the parallel links was taken when attempting
              to troubleshoot unless one sends packets directly between the
              two attached link-locals on the specific interfaces. Since many
              network problems behave differently for traffic to/from a router
              than for traffic through the router(s) in question, this can
              pose a significant hurdle to some troubleshooting scenarios.</t>

              <t>On some routers, by default the link-layer address of the
              interface is derived from the MAC address assigned to interface.
              When this is done, swapping out the interface hardware (e.g.
              interface card) will cause the link-layer address to change. In
              some cases (peering config, ACLs, etc) this may require
              additional changes. However, many devices allow the link-layer
              address of an interface to be explicitly configured, which
              avoids this issue. This problem should fade away over time as
              more and more routers select interface identifiers according to
              the rules in <xref target="RFC7217"/>.</t>

              <t>The practice of naming router interfaces using DNS names is
              difficult and not recommended when using link-locals only. More
              generally, it is not recommended to put link-local addresses
              into DNS; see <xref target="RFC4472"/>.</t>

              <t>It is often not possible to identify the interface or link
              (in a database, email, etc) by giving just its address without
              also specifying the link in some manner.</t>
            </list></t>

          <t>It should be noted that it is quite possible for the same
          link-local address to be assigned to multiple interfaces. This can
          happen because the MAC address is duplicated (due to manufacturing
          process defaults or the use of virtualization), because a device
          deliberately re-uses automatically-assigned link-local addresses on
          different links, or because an operator manually assigns the same
          easy-to-type link-local address to multiple interfaces. All these
          are allowed in IPv6 as long as the addresses are used on different
          links.</t>

          <t>For more discussion on the pros and cons, see <xref
          target="RFC7404"/>. See also <xref target="RFC5375"/> for IPv6
          unicast address assignment considerations.</t>

          <t>Today, most operators use option (d).</t>
        </section>

        <section title="Which Addresses to Use">
          <t>Having considered above whether or not to use a "multi-hop
          address", we now consider which of the addresses to use.</t>

          <t>When selecting between these three "multi-hop address" types, one
          needs to consider exactly how they will be used. An important
          consideration is how Internet traffic is carried across the core of
          the network. There are two main options: (1) the classic approach
          where Internet traffic is carried as unlabeled traffic hop-by-hop
          across the network, and (2) the more recent approach where Internet
          traffic is carried inside an MPLS LSP (typically as part of a L3
          VPN).</t>

          <t>Under the classic approach:<list style="symbols">
              <t>PI GUAs are a very reasonable choice, if they are
              available.</t>

              <t>PA GUAs suffer from the "must renumber" and "difficult to
              multi-home" problems mentioned above.</t>

              <t>ULAs suffer from the "may be problematic" issues described
              above.</t>
            </list></t>

          <t>Under the MPLS approach:<list style="symbols">
              <t>PA GUAs are a reasonable choice, if they are available.</t>

              <t>PA GUAs suffer from the "must renumber" problem, but the
              "difficult to multi-home" problem does not apply.</t>

              <t>ULAs are a reasonable choice, since (unlike in the classic
              approach) these addresses are not visible to the Internet, so
              the problematic cases do not occur.</t>
            </list></t>
        </section>
      </section>

      <section title="Interfaces">
        <section title="Mix IPv4 and IPv6 on the Same Layer-3 Interface?">
          <t>If a network is going to carry both IPv4 and IPv6 traffic, as
          many networks do today, then a question arises: Should an operator
          mix IPv4 and IPv6 traffic or keep them separated? More specifically,
          should the design:<list style="letters">
              <t>Mix IPv4 and IPv6 traffic on the same layer-3 interface,
              OR</t>

              <t>Separate IPv4 and IPv6 by using separate interfaces (e.g.,
              two physical links or two VLANs on the same link)?</t>
            </list></t>

          <t>Option (a) implies a single layer-3 interface at each end of the
          connection with both IPv4 and IPv6 addresses; while option (b)
          implies two layer-3 interfaces at each end, one for IPv4 addresses
          and one with IPv6 addresses.</t>

          <t>The advantages of option (a) include:<list style="symbols">
              <t>Requires only half as many layer 3 interfaces as option (b),
              thus providing better scaling;</t>

              <t>May require fewer physical ports, thus saving money and
              simplifying operations;</t>

              <t>Can make the QoS implementation much easier (for example,
              rate-limiting the combined IPv4 and IPv6 traffic to or from a
              customer);</t>

              <t>Works well in practice, as any increase in IPv6 traffic is
              usually counter-balanced by a corresponding decrease in IPv4
              traffic to or from the same host (ignoring the common pattern of
              an overall increase in Internet usage);</t>

              <t>And is generally conceptually simpler.</t>
            </list>For these reasons, there is a relatively strong consensus
          in the operator community that option (a) is the preferred way to
          go. Most networks today use option (a) wherever possible.</t>

          <t>However, there can be times when option (b) is the pragmatic
          choice. Most commonly, option (b) is used to work around limitations
          in network equipment. One big example is the generally poor level of
          support today for individual statistics on IPv4 traffic vs IPv6
          traffic when option (a) is used. Other, device-specific, limitations
          exist as well. It is expected that these limitations will go away as
          support for IPv6 matures, making option (b) less and less attractive
          until the day that IPv4 is finally turned off.</t>
        </section>
      </section>

      <section title="Static Routes">
        <section title="Link-Local Next-Hop in a Static Route?">
          <t>For the most part, the use of static routes in IPv6 parallels
          their use in IPv4. There is, however, one exception, which revolves
          around the choice of next-hop address in the static route.
          Specifically, should an operator:<list style="letters">
              <t>Use the far-end&rsquo;s link-local address as the next-hop
              address, OR</t>

              <t>Use the far-end&rsquo;s GUA/ULA address as the next-hop
              address?</t>
            </list></t>

          <t>Recall that the IPv6 specs for OSPF <xref target="RFC5340"/> and
          ISIS <xref target="RFC5308"/> dictate that they always use
          link-locals for next-hop addresses. For static routes, <xref
          target="RFC4861"/> section 8 says:<list style="empty">
              <t>A router MUST be able to determine the link-local address for
              each of its neighboring routers in order to ensure that the
              target address in a Redirect message identifies the neighbor
              router by its link-local address. For static routing, this
              requirement implies that the next-hop router's address should be
              specified using the link-local address of the router.</t>
            </list></t>

          <t>This implies that using a GUA or ULA as the next hop will prevent
          a router from sending Redirect messages for packets that "hit" this
          static route. All this argues for using a link-local as the next-hop
          address in a static route.</t>

          <t>However, there are two cases where using a link-local address as
          the next-hop clearly does not work. One is when the static route is
          an indirect (or multi-hop) static route. The second is when the
          static route is redistributed into another routing protocol. In
          these cases, the above text from RFC 4861 notwithstanding, either a
          GUA or ULA must be used.</t>

          <t>Furthermore, many network operators are concerned about the
          dependency of the default link-local address on an underlying MAC
          address, as described in the previous section.</t>

          <t>Today most operators use GUAs as next-hop addresses.</t>
        </section>
      </section>

      <section title="IGPs">
        <section title="IGP Choice">
          <t>One of the main decisions for a network operator looking to
          deploy IPv6 is the choice of IGP (Interior Gateway Protocol) within
          the network. The main options are OSPF, IS-IS and EIGRP. RIPng is
          another option, but very few networks run RIP in the core these
          days, so it is covered in a separate section below.</t>

          <t>OSPF <xref target="RFC2328"/> <xref target="RFC5340"/> and IS-IS
          <xref target="RFC5120"/><xref target="RFC5120"/> are both
          standardized link-state protocols. Both protocols are widely
          supported by vendors, and both are widely deployed. By contrast,
          EIGRP <xref target="RFC7868"/> is a Cisco proprietary
          distance-vector protocol. EIGRP is rarely deployed in
          service-provider networks, but is quite common in enterprise
          networks, which is why it is discussed here.</t>

          <t>It is out of scope for this document to describe all the
          differences between the three protocols; the interested reader can
          find books and websites that go into the differences in quite a bit
          of detail. Rather, this document simply highlights a few differences
          that can be important to consider when designing IPv6 or dual-stack
          networks.</t>

          <t>Versions: There are two versions of OSPF: OSPFv2 and OSPFv3. The
          two versions share many concepts, are configured in a similar manner
          and seem very similar to most casual users, but have very different
          packet formats and other "under the hood" differences. The most
          important difference is that OSPFv2 will only route IPv4, while
          OSPFv3 will route both IPv4 and IPv6. OSPFv2 was by far the most
          widely deployed version of OSPF when this document was published. By
          contrast, both IS-IS and EIGRP have just a single version, which can
          route both IPv4 and IPv6.</t>

          <t>Transport. IS-IS runs over layer 2 (e.g. Ethernet). This means
          that the functioning of IS-IS has no dependencies on the IP layer:
          if there is a problem at the IP layer (e.g. bad addresses), two
          routers can still exchange IS-IS packets. By contrast, OSPF and
          EIGRP both run over the IP layer. This means that the IP layer must
          be configured and working OSPF or EIGRP packets to be exchanged
          between routers. For EIGRP, the dependency on the IP layer is
          simple: EIGRP for IPv4 runs over IPv4, while EIGRP for IPv6 runs
          over IPv6. For OSPF, the story is more complex: OSPFv2 runs over
          IPv4, but OSPFv3 can run over either IPv4 or IPv6. Thus it is
          possible to route both IPv4 and IPv6 with OSPFv3 running over IPv6
          or with OSPFv3 running over IPv4. This means that there are number
          of choices for how to run OSPF in a dual-stack network:<list
              style="symbols">
              <t>Use OSPFv2 for routing IPv4 , and OSPFv3 running over IPv6
              for routing IPv6, OR</t>

              <t>Use OSPFv3 running over IPv6 for routing both IPv4 and IPv6,
              OR</t>

              <t>Use OSPFv3 running over IPv4 for routing both IPv4 and
              IPv6.</t>
            </list></t>

          <t>Summarization and MPLS: For most casual users, the three
          protocols are fairly similar in what they can do, with two glaring
          exceptions: summarization and MPLS. For summarization, both OSPF and
          IS-IS have the concept of summarization between areas, but the two
          area concepts are quite different, and an area design that works for
          one protocol will usually not work for the other. EIGRP has no area
          concept, but has the ability to summarize at any router. Thus a
          large network will typically have a very different OSPF, IS-IS and
          EIGRP designs, which is important to keep in mind if you are
          planning on using one protocol to route IPv4 and a different
          protocol for IPv6. The other difference is that OSPF and IS-IS both
          support RSVP-TE, a widely-used MPLS signaling protocol, while EIGRP
          does not: this is due to OSPF and IS-IS both being link-state
          protocols while EIGRP is a distance-vector protocol.</t>

          <t>The table below sets out possible combinations of protocols to
          route both IPv4 and IPv6, and makes some observations on each
          combination. Here "EIGRP-v4" means "EIGRP for IPv4" and similarly
          for "EIGRP-v6". For OSPFv3, it is possible to run it over either
          IPv4 or IPv6; this is not indicated in the table.</t>

          <texttable style="all">
            <ttcol align="center">IGP for IPv4</ttcol>

            <ttcol align="center">IGP for IPv6</ttcol>

            <ttcol align="center">Protocol separation</ttcol>

            <ttcol align="center">Similar configuration possible</ttcol>

            <ttcol align="center">Multiple Known Deployments</ttcol>

            <!-- Blank Row separator-->

            <c/>

            <c/>

            <c/>

            <c/>

            <c/>

            <!-- Row separator-->

            <c>OSPFv2</c>

            <c>OSPFv3</c>

            <c>YES</c>

            <c>YES</c>

            <c>YES (8)</c>

            <!-- Row separator-->

            <c>OSPFv2</c>

            <c>IS-IS</c>

            <c>YES</c>

            <c>-</c>

            <c>YES (3)</c>

            <!-- Row separator-->

            <c>OSPFv2</c>

            <c>EIGRP-v6</c>

            <c>YES</c>

            <c>-</c>

            <c>-</c>

            <!-- Row separator-->

            <c>OSPFv3</c>

            <c>OSPFv3</c>

            <c>NO</c>

            <c>YES</c>

            <c>-</c>

            <!-- Row separator-->

            <c>OSPFv3</c>

            <c>IS-IS</c>

            <c>YES</c>

            <c>-</c>

            <c>-</c>

            <!-- Row separator-->

            <c>OSPFv3</c>

            <c>EIGRP-v6</c>

            <c>YES</c>

            <c>-</c>

            <c>-</c>

            <!-- Row separator-->

            <c>IS-IS</c>

            <c>OSPFv3</c>

            <c>YES</c>

            <c>-</c>

            <c>YES (2)</c>

            <!-- Row separator-->

            <c>IS-IS</c>

            <c>IS-IS</c>

            <c>-</c>

            <c>YES</c>

            <c>YES (12)</c>

            <!-- Row separator-->

            <c>IS-IS</c>

            <c>EIGRP-v6</c>

            <c>YES</c>

            <c>-</c>

            <c>-</c>

            <!-- Row separator-->

            <c>EIGRP-v4</c>

            <c>OSPFv3</c>

            <c>YES</c>

            <c>-</c>

            <c>? (1)</c>

            <!-- Row separator-->

            <c>EIGRP-v4</c>

            <c>IS-IS</c>

            <c>YES</c>

            <c>-</c>

            <c>-</c>

            <!-- Row separator-->

            <c>EIGRP-v4</c>

            <c>EIGRP-v6</c>

            <c>-</c>

            <c>YES</c>

            <c>? (2)</c>
          </texttable>

          <t/>

          <t>In the column "Multiple Known Deployments", a YES indicates that
          a significant number of production networks run this combination,
          with the number of such networks indicated in parentheses following,
          while a "?" indicates that the authors are only aware of one or two
          small networks that run this combination. Data for this column was
          gathered from an informal poll of operators on a number of mailing
          lists. This poll was not intended to be a thorough scientific study
          of IGP choices, but to provide a snapshot of known operator choices
          at the time of writing (Mid-2015) for successful production dual
          stack network deployments. There were twenty six (26) network
          implementations represented by 17 respondents. Some respondents
          provided information on more then one network or network deployment.
          Due to privacy considerations, the networks' represented and
          respondents are not listed in this document.</t>

          <t>A number of combinations are marked as offering &ldquo;Protocol
          separation&rdquo;. These options use a different IGP protocol for
          IPv4 vs IPv6. With these options, a problem with routing IPv6 is
          unlikely to affect IPv4 or visa-versa. Some operator may consider
          this as a benefit when first introducing dual stack capabilities or
          for ongoing technical reasons.</t>

          <t>Three combinations are marked &ldquo;Similar configuration
          possible&rdquo;. This means it is possible (but not required) to use
          very similar IGP configuration for IPv4 and IPv6: for example, the
          same area boundaries, area numbering, link costing, etc. If you are
          happy with your IPv4 IGP design, then this will likely be a
          consideration. By contrast, the options that use, for example, IS-IS
          for one IP version and OSPF for the other version will require
          considerably different configuration, and will also require the
          operations staff to become familiar with the difference between the
          two protocols.</t>

          <t>It should be noted that a number of ISPs have run OSPF as their
          IPv4 IGP for quite a few years, but have selected IS-IS as their
          IPv6 IGP. However, there are very few (none?) that have made the
          reverse choice. This is, in part, because routers generally support
          more nodes in an IS-IS area than in the corresponding OSPF area, and
          because IS-IS is seen as more secure because it runs at layer 2.</t>
        </section>

        <section title="IS-IS Topology Mode">
          <t>When IS-IS is used to route both IPv4 and IPv6, then there is an
          additional choice of whether to run IS-IS in single-topology or
          multi-topology mode.</t>

          <t>With single-topology mode (also known as Native mode) <xref
          target="RFC5308"/>:<list style="symbols">
              <t>IS-IS keeps a single link-state database for both IPv4 and
              IPv6.</t>

              <t>There is a single set of link costs which apply to both IPv4
              and IPv6.</t>

              <t>All links in the network must support both IPv4 and IPv6, as
              the calculation of routes does not take this into account. If
              some links do not support IPv6 (or IPv4), then packets may get
              routed across links where support is lacking and get dropped.
              This can cause problems if some network devices do not support
              IPv6 (or IPv4).</t>

              <t>It is also important to keep the previous point in mind when
              adding or removing support for either IPv4 or IPv6.</t>
            </list></t>

          <t>With multi-topology mode [ref]:<list style="symbols">
              <t>IS-IS keeps two link-state databases, one for IPv4 and one
              for IPv6.</t>

              <t>IPv4 and IPv6 can have separate link metrics. Note that most
              implementations today require separate link metrics: a number of
              operators have rudely discovered that they have forgotten to
              configure the IPv6 metric until sometime after deploying IPv6 in
              multi-topology mode!</t>

              <t>Some links can be IPv4-only, some IPv6-only, and some
              dual-stack. Routes to IPv4 and IPv6 addresses are computed
              separately and may take different paths even if the addresses
              are located on the same remote device.</t>

              <t>The previous point may help when adding or removing support
              for either IPv4 or IPv6.</t>
            </list></t>

          <t>In the informal poll of operators, out of 12 production networks
          that ran IS-IS for both IPv4 and IPv6, 6 used single topology mode,
          4 used multi-topology mode, and 2 did not specify. One motivation
          often cited by then operators for using Single Topology mode was
          because some device did not support multi-topology mode.</t>

          <t>When asked, many people feel multi-topology mode is superior to
          single-topology mode because it provides greater flexibility at
          minimal extra cost. Never-the-less, as shown by the poll results, a
          number of operators have used single-topology mode successfully.</t>

          <t>Note that this issue does not come up with OSPF, since there is
          nothing that corresponds to IS-IS single-topology mode with
          OSPF.</t>
        </section>

        <section title="RIP / RIPng">
          <t>A protocol option not described in the table above is RIP for
          IPv4 and RIPng for IPv6 <xref target="RFC2080"/>. These are distance
          vector protocols that are almost universally considered to be
          inferior to OSPF, IS-IS, or EIGRP for general use.</t>

          <t>However, there is one specialized use where RIP/RIPng is still
          considered to be appropriate: in star topology networks where a
          single core device has lots and lots of links to edge devices and
          each edge device has only a single path back to the core. In such
          networks, the single path means that the limitations of RIP/RIPng
          are mostly not relevant and the very light-weight nature of
          RIP/RIPng gives it an advantage over the other protocols mentioned
          above. One concrete example of this scenario is the use of RIP/RIPng
          between cable modems and the CMTS.</t>
        </section>
      </section>

      <section title="BGP">
        <section title="Which Transport for Which Routes?">
          <t>BGP these days is multi-protocol. It can carry routes of many
          different types, or more precisely, many different AFI/SAFI
          combinations. It can also carry routes when the BGP session, or more
          accurately the underlying TCP connection, runs over either IPv4 or
          IPv6 (here referred to as either "IPv4 transport" or "IPv6
          transport"). Given this flexibility, one of the biggest questions
          when deploying BGP in a dual-stack network is the question of which
          route types should be carried over sessions using IPv4 transport and
          which should be carried over sessions using IPv6 transport.</t>

          <t>This section discusses this question for the three
          most-commonly-used SAFI values: unlabeled (SAFI 1), labeled (SAFI 4)
          and VPN (SAFI 128). Though we do not explicitly discuss other SAFI
          values, many of the comments here can be applied to the other
          values.</t>

          <t>Consider the following table:</t>

          <texttable style="all">
            <ttcol align="center">Route Family</ttcol>

            <ttcol align="center">Transport</ttcol>

            <ttcol>Comments</ttcol>

            <!-- Blank Row separator-->

            <c/>

            <c/>

            <c/>

            <!-- Row separator-->

            <c>Unlabeled IPv4</c>

            <c>IPv4</c>

            <c>Works well</c>

            <!-- Row separator-->

            <c>Unlabeled IPv4</c>

            <c>IPv6</c>

            <c>Next-hop</c>

            <!-- Row separator-->

            <c>Unlabeled IPv6</c>

            <c>IPv4</c>

            <c>Next-hop</c>

            <!-- Row separator-->

            <c>Unlabeled IPv6</c>

            <c>IPv6</c>

            <c>Works well</c>

            <!-- Blank Row separator-->

            <c/>

            <c/>

            <c/>

            <!-- Row separator-->

            <c>Labeled IPv4</c>

            <c>IPv4</c>

            <c>Works well</c>

            <!-- Row separator-->

            <c>Labeled IPv4</c>

            <c>IPv6</c>

            <c>Next-hop</c>

            <!-- Row separator-->

            <c>Labeled IPv6</c>

            <c>IPv4</c>

            <c>(6PE) Works well</c>

            <!-- Row separator-->

            <c>Labeled IPv6</c>

            <c>IPv6</c>

            <c>Next-hop or MPLS over IPv6</c>

            <!-- Blank Row separator-->

            <c/>

            <c/>

            <c/>

            <!-- Row separator-->

            <c>VPN IPv4</c>

            <c>IPv4</c>

            <c>Works well</c>

            <!-- Row separator-->

            <c>VPN IPv4</c>

            <c>IPv6</c>

            <c>Next-hop</c>

            <!-- Row separator-->

            <c>VPN IPv6</c>

            <c>IPv4</c>

            <c>(6VPE) Works well</c>

            <!-- Row separator-->

            <c>VPN IPv6</c>

            <c>IPv6</c>

            <c>Next-hop or MPLS over IPv6</c>
          </texttable>

          <t>The first column in this table lists various route families,
          where &ldquo;unlabeled&rdquo; means SAFI 1, &ldquo;labeled&rdquo;
          means the routes carry an MPLS label (SAFI 4, see <xref
          target="RFC3107"/>), and &ldquo;VPN&rdquo; means the routes are
          normally associated with a layer-3 VPN (SAFI 128, see <xref
          target="RFC4364"/>). The second column lists the protocol used to
          transport the BGP session, frequently specified by giving either an
          IPv4 or IPv6 address in the &ldquo;neighbor&rdquo; statement.</t>

          <t>The third column comments on the combination in the first two
          columns:<list style="symbols">
              <t>For combinations marked &ldquo;Works well&rdquo;, these
              combinations are standardized, widely supported and widely
              deployed.</t>

              <t>For combinations marked &ldquo;Next-hop&rdquo;, these
              combinations are not standardized and are less-widely supported.
              These combinations all have the "next-hop mismatch" problem: the
              transported route needs a next-hop address from the other
              address family than the transport address (for example, an IPv4
              route needs an IPv4 next-hop, even when transported over IPv6).
              Some vendors have implemented ways to solve this problem for
              specific combinations, but for combinations marked "next-hop",
              these solutions have not been standardized (cf. 6PE and 6VPE,
              where the solution has been standardized).</t>

              <t>For combinations marked as &ldquo;Next-hop or MPLS over
              IPv6&rdquo;, these combinations either require a non-standard
              solution to the next-hop problem, or require MPLS over IPv6. At
              the time of writing, MPLS over IPv6 is not widely supported or
              deployed.</t>
            </list></t>

          <t>Also, it is important to note that changing the set of address
          families being carried over a BGP session requires the BGP session
          to be reset (unless something like <xref
          target="I-D.ietf-idr-dynamic-cap"/> or <xref
          target="I-D.ietf-idr-bgp-multisession"/> is in use). This is
          generally more of an issue with eBGP sessions than iBGP sessions:
          for iBGP sessions it is common practice for a router to have two
          iBGP sessions, one to each member of a route reflector pair, so one
          can change the set of address families on first one of the sessions
          and then the other.</t>

          <t>The following subsections discuss specific combinations in more
          detail.</t>

          <section title="BGP Sessions for Unlabeled Routes">
            <t>Unlabeled routes are commonly carried on eBGP sessions, as well
            as on iBGP sessions in networks where Internet traffic is carried
            unlabeled across the network.</t>

            <t>In these scenarios, there are three reasonable choices:<list
                style="letters">
                <t>Carry unlabeled IPv4 and IPv6 routes over IPv4, OR</t>

                <t>Carry unlabeled IPv4 and IPv6 routes over IPv6, OR</t>

                <t>Carry unlabeled IPv4 routes over IPv4, and unlabeled IPv6
                routes over IPv6</t>
              </list></t>

            <t>Options (a) and (b) have the advantage that one one BGP session
            is required between pairs of routers. However, option (c) is
            widely considered to be the best choice. There are several reasons
            for this :<list style="symbols">
                <t>It gives a clean separation between IPv4 and IPv6. This can
                be especially useful when first deploying IPv6 and
                troubleshooting resulting problems.</t>

                <t>This avoids the next-hop problem described above.</t>

                <t>The status of the routes follows the status of the
                underlying transport. If, for example, the IPv6 data path
                between the two BGP speakers fails, then the IPv6 session
                between the two speakers will fail and the IPv6 routes will be
                withdrawn, which will allow the traffic to be re-routed
                elsewhere. By contrast, if the IPv6 routes were transported
                over IPv4, then the failure of the IPv6 data path might leave
                a working IPv4 data path, so the BGP session would remain up
                and the IPv6 routes would not be withdrawn, and thus the IPv6
                traffic would be sent into a black hole.</t>

                <t>It avoids resetting the BGP session when adding IPv6 to an
                existing session, or when removing IPv4 from an existing
                session.</t>
              </list></t>

            <t>Rarely, there are situations where option (c) is not practical.
            In those cases today, most operators use option (a), carrying both
            route types over a single BGP session.</t>
          </section>

          <section title="BGP sessions for Labeled or VPN Routes">
            <t>When carrying labeled or VPN routes, the only widely-supported
            solution at time of writing is to carry both route types over
            IPv4. This may change in as MPLS over IPv6 becomes more widely
            implemented.</t>

            <t>There are two options when carrying both over IPv4:<list
                style="letters">
                <t>Carry all routes over a single BGP session, OR</t>

                <t>Carry the routes over multiple BGP sessions (e.g. one for
                VPN IPv4 routes and one for VPN IPv6 routes)</t>
              </list></t>

            <t>Using a single session is usually simplest for an iBGP session
            going to a route reflector handling both route families. Using a
            single session here usually means that the BGP session will reset
            when changing the set of address families, but as noted above,
            this is usually not a problem when redundant route reflectors are
            involved.</t>

            <t>In eBGP situations, two sessions are usually more appropriate.
            [JUSTIFICATION?]</t>
          </section>
        </section>

        <section title="eBGP Endpoints: Global or Link-Local Addresses?">
          <t>When running eBGP over IPv6, there are two options for the
          addresses to use at each end of the eBGP session (or more properly,
          the underlying TCP session):<list style="letters">
              <t>Use link-local addresses for the eBGP session, OR</t>

              <t>Use global addresses for the eBGP session.</t>
            </list></t>

          <t>Note that the choice here is the addresses to use for the eBGP
          sessions, and not whether the link itself has global (or
          unique-local) addresses. In particular, it is quite possible for the
          eBGP session to use link-local addresses even when the link has
          global addresses.</t>

          <t>The big attraction for option (a) is security: an eBGP session
          using link-local addresses is extremely difficult to attack from a
          device that is off-link. This provides very strong protection
          against TCP RST and similar attacks. Though there are other ways to
          get an equivalent level of security (e.g. GTSM <xref
          target="RFC5082"/>, MD5 <xref target="RFC5925"/>, or ACLs), these
          other ways require additional configuration which can be forgotten
          or potentially mis-configured.</t>

          <t>However, there are a number of small disadvantages to using
          link-local addresses:<list style="symbols">
              <t>Using link-local addresses only works for single-hop eBGP
              sessions; it does not work for multi-hop sessions.</t>

              <t>One must use &ldquo;next-hop self&rdquo; at both endpoints,
              otherwise re-advertising routes learned via eBGP into iBGP will
              not work. (Some products enable &ldquo;next-hop self&rdquo; in
              this situation automatically).</t>

              <t>Operators and their tools are used to referring to eBGP
              sessions by address only, something that is not possible with
              link-local addresses.</t>

              <t>If one is configuring parallel eBGP sessions for IPv4 and
              IPv6 routes, then using link-local addresses for the IPv6
              session introduces extra operational differences between the two
              sessions which could otherwise be avoided.</t>

              <t>On some products, an eBGP session using a link-local address
              is more complex to configure than a session that uses a global
              address.</t>

              <t>If hardware or other issues cause one to move the cable to a
              different local interface, then reconfiguration is required at
              both ends: at the local end because the interface has changed
              (and with link-local addresses, the interface must always be
              specified along with the address), and at the remote end because
              the link-local address has likely changed. (Contrast this with
              using global addresses, where less re-configuration is required
              at the local end, and no reconfiguration is required at the
              remote end).</t>

              <t>Finally, a strict application of <xref target="RFC2545"/>
              forbids running eBGP between link-local addresses, as <xref
              target="RFC2545"/> requires the BGP next-hop field to contain at
              least a global address.</t>
            </list>For these reasons, most operators today choose to have
          their eBGP sessions use global addresses.</t>
        </section>
      </section>
    </section>

    <section title="General Observations">
      <t>There are two themes that run though many of the design choices in
      this document. This section presents some general discussion on these
      two themes.</t>

      <section title="Use of Link-Local Addresses">
        <t>The proper use of link-local addresses is a common theme in the
        IPv6 network design choices. Link-layer addresses are, of course,
        always present in an IPv6 network, but current network design practice
        mostly ignores them, despite efforts such as <xref
        target="RFC7404"/>.</t>

        <t>There are three main reasons for this current practice:</t>

        <t><list style="symbols">
            <t>Network operators are concerned about the volatility of
            link-local addresses based on MAC addresses, despite the fact that
            this concern can be overcome by manually-configuring link-local
            addresses;</t>

            <t>It is very difficult to impossible to ping a link-local address
            from a device that is not on the same subnet. This is a
            troubleshooting disadvantage, though it can also be viewed as a
            security advantage.</t>

            <t>Most operators are currently running networks that carry both
            IPv4 and IPv6 traffic, and wish to harmonize their IPv4 and IPv6
            design and operational practices where possible.</t>
          </list></t>
      </section>

      <section title="Separation of IPv4 and IPv6">
        <t>Currently, most operators are running or planning to run networks
        that carry both IPv4 and IPv6 traffic. Hence the question: To what
        degree should IPv4 and IPv6 be kept separate? As can be seen above,
        this breaks into two sub-questions: To what degree should IPv4 and
        IPv6 traffic be kept separate, and to what degree should IPv4 and IPv6
        routing information be kept separate?</t>

        <t>The general consensus around the first question is that IPv4 and
        IPv6 traffic should generally be mixed together. This recommendation
        is driven by the operational simplicity of mixing the traffic, plus
        the general observation that the service being offered to the end user
        is Internet connectivity and most users do not know or care about the
        differences between IPv4 and IPv6. Thus it is very desirable to mix
        IPv4 and IPv6 on the same link to the end user. On other links,
        separation is possible but more operationally complex, though it does
        occasionally allow the operator to work around limitations on network
        devices. The situation here is roughly comparable to IP and MPLS
        traffic: many networks mix the two traffic types on the same links
        without issues.</t>

        <t>By contrast, there is more of an argument for carrying IPv6 routing
        information over IPv6 transport, while leaving IPv4 routing
        information on IPv4 transport. By doing this, one gets fate-sharing
        between the control and data plane for each IP protocol version: if
        the data plane fails for some reason, then often the control plane
        will too.</t>
      </section>
    </section>

    <section title="IANA Considerations">
      <t>This document makes no requests of IANA.</t>
    </section>

    <section title="Security Considerations">
      <t>This document introduces no new security considerations that are not
      already documented elsewhere.</t>

      <t>The following is a brief list of pointers to documents related to the
      topics covered above that the reader may wish to review for security
      considerations.</t>

      <t>For general IPv6 security, <xref target="RFC4942"/> provides guidance
      on security considerations around IPv6 transition and coexistence.</t>

      <t>For OSPFv3, the base protocol specification <xref target="RFC5340"/>
      has a short security considerations section which notes that the
      fundamental mechanism for protecting OSPFv3 from attacks is the
      mechanism described in <xref target="RFC4552"/>.</t>

      <t>For IS-IS, <xref target="RFC5308"/> notes that ISIS for IPv6 raises
      no new security considerations over ISIS for IPv4 over those documented
      in <xref target="ISO10589"/> and <xref target="RFC5304"/>.</t>

      <t>For BGP, <xref target="RFC2545"/> notes that BGP for IPv6 raises no
      new security considerations over those present in BGP for IPv4. However,
      there has been much discussion of BGP security recently, and the
      interested reader is referred to the documents of the IETF's SIDR
      working group.</t>
    </section>

    <section title="Acknowledgements">
      <t>Many, many people in the V6OPS working group provided comments and
      suggestions that made their way into this document. A partial list
      includes: Rajiv Asati, Fred Baker, Michael Behringer, Marc Blanchet, Ron
      Bonica, Randy Bush, Cameron Byrne, Brian Carpenter, KK Chittimaneni, Tim
      Chown, Lorenzo Colitti, Gert Doering, Francis Dupont, Bill Fenner, Kedar
      K Gaonkar, Chris Grundemann, Steinar Haug, Ray Hunter, Joel Jaeggli,
      Victor Kuarsingh, Jen Linkova, Ivan Pepelnjak, Alexandru Petrescu, Rob
      Shakir, Mark Smith, Jean-Francois Tremblay, Dave Thaler, Tina Tsou, Eric
      Vyncke, Dan York, and Xuxiaohu.</t>

      <t>The authors would also like to thank Pradeep Jain and Alastair
      Johnson for helpful comments on a very preliminary version of this
      document.</t>
    </section>

    <!-- This PI places the pagebreak correctly (before the section title) in the text output. -->

    <?rfc needLines="8" ?>
  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Informative References">
      <reference anchor="ISO10589">
        <front>
          <title>Intermediate system to Intermediate system intra-domain
          routeing information exchange protocol for use in conjunction with
          the protocol for providing the connectionless-mode Network Service
          (ISO 8473)</title>

          <author>
            <organization>International Standards Organization</organization>
          </author>

          <date month="Nov" year="2002"/>
        </front>

        <seriesInfo name="International Standard" value="10589:2002"/>
      </reference>

      <?rfc include="reference.RFC.1918"?>

      <?rfc include="reference.RFC.2080"?>

      <?rfc include="reference.RFC.2328"?>

      <?rfc include="reference.RFC.2545"?>

      <?rfc include="reference.RFC.3107"?>

      <?rfc include="reference.RFC.4193"?>

      <?rfc include="reference.RFC.4291"?>

      <?rfc include="reference.RFC.4364"?>

      <?rfc include="reference.RFC.4472"?>

      <?rfc include="reference.RFC.4552"?>

      <?rfc include="reference.RFC.4852"?>

      <?rfc include="reference.RFC.4861"?>

      <?rfc include="reference.RFC.4942"?>

      <?rfc include="reference.RFC.5082"?>

      <?rfc include="reference.RFC.5120"?>

      <?rfc include="reference.RFC.5220"?>

      <?rfc include="reference.RFC.5304"?>

      <?rfc include="reference.RFC.5308"?>

      <?rfc include="reference.RFC.5340"?>

      <?rfc include="reference.RFC.5375"?>

      <?rfc include="reference.RFC.5533"?>

      <?rfc include="reference.RFC.5838"?>

      <?rfc include="reference.RFC.5925"?>

      <?rfc include="reference.RFC.5963"?>

      <?rfc include="reference.RFC.6180"?>

      <?rfc include="reference.RFC.6342"?>

      <?rfc include="reference.RFC.6296"?>

      <?rfc include="reference.RFC.6752"?>

      <?rfc include="reference.RFC.6879"?>

      <?rfc include="reference.RFC.6782"?>

      <?rfc include="reference.RFC.6883"?>

      <?rfc include="reference.RFC.7010"?>

      <?rfc include="reference.RFC.7217"?>

      <?rfc include="reference.RFC.7381"?>

      <?rfc include="reference.RFC.7404"?>

      <?rfc include="reference.RFC.7868"?>

      <?rfc include="reference.I-D.ietf-idr-dynamic-cap"?>

      <?rfc include="reference.I-D.ietf-idr-bgp-multisession"?>

      <?rfc include="reference.I-D.ietf-v6ops-ula-usage-recommendations"?>

      <reference anchor="v6-addressing-plan"
                 target="http://www.ripe.net/lir-services/training/material/IPv6-for-LIRs-Training-Course/Preparing-an-IPv6-Addressing-Plan.pdf">
        <front>
          <title>Preparing an IPv6 Address Plan</title>

          <author>
            <organization>SurfNet</organization>
          </author>

          <date year="2013"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
