IPv6 in Carrier Networks

There is a lot of buzz on the Internet about IP addresses running out. It has been like that for years, but voices are even louder these days. RIPE NCC has even opened informational web site called IPv6 Act Now. There is a lot of information out there how to deploy IPv6, how to connect to the Internet using it, so on and so forth.

As it is usually the case, those of us working with service providers and carriers are usually left out of the whole thing with, comparably, very little options. Some of the large carriers and content providers are going over multi-month/multi-year projects of redesigning their networks to support IPv6. The challenge is not a small one. Those who run OSPF is IGP are having hard time. The process, probably, calls for OSPFv3 deployment and with protocol changing over time, it’s no easy task. Not to mention that running IPv4 OSPF and IPv6 OSPF essentially means two topologies and higher complexity. Natural workaround for this is to use IS-IS and that may mean higher learning curve for operators used to OSPF.

One, largerly overlooked approach for enabling IPv6 in SP networks is concept outlined in RFC4798 titled “Connecting IPv6 Islands over IPv4 MPLS Using IPv6 Provider Edge Routers”, which is an easy way to enable IPv6 over an existing IPv4+MPLS backbone. Of course, some may even today be scared of MPLS, but I will assume in further text that it is not the case. Enabling MPLS in existing IPv4 networks should be relatively painless.

Before I dive into implementation details, few notes. In order to be good netizen, all IPv4 addresses in examples are RFC3330 friendly and IPv6 addresses are generated with guidance from RFC4193. BGP AS numbers are, similarly, friendly with RFC1930.

The setup for our story is Internet provider with AS number AS65123. It has an MPLS network with two PE and one P router, with OSPF as IGP. This provider is connected to two upstream carriers for IPv6 – ISP1 (AS65001) and ISP2 (AS65002). Downstream customer, CE (AS65003), wants IPv6 transit from AS65123. Easy enough. Let’s look at the diagram.

6PE

Allow me to skip over “basic” configuration of IGP and MPLS. Briefly, do the following:

  • Configure OSPF area 0 on all IPv4 interfaces in AS65123
  • Enable MPLS LDP on all IPv4 interfaces in AS65123

After you have finished that, you should be able to ping between Loopback0 interfaces on PE1 and PE2.

  • Enable unicast IPv6 routing (ipv6 unicast-routing) on PE1, PE2, ISP1, ISP2 and CE
  • Enable IPv6 CEF (ipv6 cef) on PE1 and PE2 – you should do this on all IPv6 routers…
  • Configure IPv6 on appropriate interfaces on all IPv6 routers (ipv6 address …)

At this point, let’s configure IPv6 BGP between CE and PE2.

CE:

router bgp 65003
 no bgp default ipv4-unicast
 neighbor FD41:5A1C:1A2D:3EB7::2 remote-as 65123
 !
 address-family ipv6
  no synchronization
  network FD99:8649:B59D:420C::/64
  neighbor FD41:5A1C:1A2D:3EB7::2 activate
 exit-address-family
!

To make things more fun, we’ll configure PE2 to announce only default route to CE:

ipv6 prefix-list default-only seq 10 permit ::/0
!
route-map CE-out permit 10
 match ipv6 address prefix-list default-only
!
router bgp 65123
 no bgp default ipv4-unicast
 neighbor FD41:5A1C:1A2D:3EB7::CE remote-as 65003
 !
 address-family ipv6
  no synchronization
  neighbor FD41:5A1C:1A2D:3EB7::CE activate
  neighbor FD41:5A1C:1A2D:3EB7::CE default-originate
  neighbor FD41:5A1C:1A2D:3EB7::CE route-map CE-out out
 exit-address-family
!

Similarly to the configuration above, proceed and configure BGP sessions between PE1 and ISP1 & ISP2.

PE1:

router bgp 65123
 no bgp default ipv4-unicast
 neighbor FDA5:2072:2864:A05C::11 remote-as 65001
 neighbor FDCD:1D34:16C6:800B::22 remote-as 65002
 !
 address-family ipv6
  neighbor FDA5:2072:2864:A05C::11 activate
  neighbor FDCD:1D34:16C6:800B::22 activate
 exit-address-family
!

ISP1:

router bgp 65001
 no bgp default ipv4-unicast
 neighbor FDA5:2072:2864:A05C::1 remote-as 65123
 !
 address-family ipv6
  network FDD2:D801:3D4D:3446::/64
  neighbor FDA5:2072:2864:A05C::1 activate
 exit-address-family
!

ISP2:

router bgp 65002
 no bgp default ipv4-unicast
 neighbor FDCD:1D34:16C6:800B::1 remote-as 65123
 !
 address-family ipv6
  network FDB7:802D:4A6F:741B::/64
  neighbor FDCD:1D34:16C6:800B::1 activate
 exit-address-family
!

We now have two IPv6 islands that can’t communicate. One island consists of ISP1, ISP2 and PE1, while the other consists of PE2 and CE.

To connect these two islands, we could enable IPv6 routing in AS65123 using OSPFv3, or we can implement 6PE feature. At this point in the configuration, enabling 6PE is very easy. We need to enable IPv6 peering between Loopback0 interfaces on PE1 and PE2 and make sure that they exchange MPLS labels for advertised prefixes. Careful reader will notice that neither PE1 nor PE2 have IPv6 addresses on Loopback0 interfaces. That’s of no importance, in fact, that’s a feature. Remember that we are implementing IPv6 over IPv4+MPLS backbone. Here we go.

PE1:

router bgp 65123
 neighbor 192.168.0.2 remote-as 65123
 neighbor 192.168.0.2 update-source Loopback0
 !
 address-family ipv6
  neighbor 192.168.0.2 activate
  neighbor 192.168.0.2 next-hop-self
  neighbor 192.168.0.2 send-label
!

PE2:

router bgp 65123
 neighbor 192.168.0.1 remote-as 65123
 neighbor 192.168.0.1 update-source Loopback0
 !
 address-family ipv6
  neighbor 192.168.0.1 activate
  neighbor 192.168.0.1 next-hop-self
  neighbor 192.168.0.1 send-label
!

At this point, pinging between Loopback6 on CE and Loopback6 interfaces on ISP1 and ISP2 should work like a charm. Due to space constraints, I’ll skip that here.

This is a very neat, simple and straightforward solution for service providers who wish to enable IPv6 in their MPLS networks without added complexity of actually running IPv6 backbone.

She’s also very busy writing. So busy in fact that She was so kind to let me finish this article today, without once asking me to do something else. Real gem, I tell ya!

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>