6PE Configuration with Cisco IOS

Posted by

In a previous article, we discussed 6VPE, a technology used to transport IPv6 traffic inside of existing VRF-based L3VPNs. This article describes 6PE, a similar technology that is used to transport IPv6 traffic across an existing IPv4+MPLS core without touching your core equipment (P routers).

The primary reason for this solution is as of this writing LDP does not support IPv6 prefixes. You can not create a fully functional label switched core using IPv6.  This requires making use of an existing IPv4 label switched core in order to distribute IPv6 labels properly. 6PE uses MP-BGP to distribute labels for IPv6 prefixes since LDP doesn’t currently support it.

We will be using the same network for this solution as we did for the 6VPE example:

GNS3 6VPE Lab Diagram

Basic core configuration

The first step in setting up a network like this is to get the core configured with LDP and OSPF.  The idea here is to give R1 the ability to ping R3 Loopback0 from R1 Loopback0, while making use of label switching.  This will be the base that we build the IPv6 MP-BGP peering later.

We will walk through the configuration of R1. Full router configs are included at the end of the article.

Configure loopback interface:

interface Loopback0 
 ip address 123.123.123.1 255.255.255.255
end

Enable MPLS and IP:

mpls ip
mpls label protocol ldp
mpls ldp router-id Loopback0

Enable OSPF:

router ospf 123 
 router-id 123.123.123.1 
 log-adjacency-changes 
 network 123.123.12.1 0.0.0.0 area 0 
 network 123.123.123.1 0.0.0.0 area 0

Provision PE-P link:

interface FastEthernet1/0 
 description ** Connection to R2 f1/0 ** 
 ip address 123.123.12.1 255.255.255.0 
 speed auto 
 duplex auto 
 mpls ip
end

This should give you a good idea of how we are configuring the core.  Basically repeat this process on the other routers to get a complete end-to-end LSP (label switched path) between R1 and R3.  You can verify this by reviewing a few pieces of information. Examples are below.

R3 routing table:

R3#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
ia - IS-IS inter area, * - candidate default, U - per-user static route
o - ODR, P - periodic downloaded static route, H - NHRP
+ - replicated route, % - next hop override
Gateway of last resort is not set
123.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
O        123.123.12.0/24 [110/2] via 123.123.23.2, 00:00:57, FastEthernet1/0
C        123.123.23.0/24 is directly connected, FastEthernet1/0
L        123.123.23.3/32 is directly connected, FastEthernet1/0
O        123.123.123.1/32 [110/3] via 123.123.23.2, 00:00:57, FastEthernet1/0
O        123.123.123.2/32 [110/2] via 123.123.23.2, 00:00:57, FastEthernet1/0
C        123.123.123.3/32 is directly connected, Loopback0

R3 mpls forwarding table

R3#sh mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
16         Pop Label  123.123.12.0/24  0             Fa1/0      123.123.23.2
17         16         123.123.123.1/32 0             Fa1/0      123.123.23.2
18         Pop Label  123.123.123.2/32 0             Fa1/0      123.123.23.2

Finally a traceroute to R1 Loopback0 from R3:

R3#trace 123.123.123.1 so lo0
Type escape sequence to abort.
Tracing the route to 123.123.123.1
1 123.123.23.2 [MPLS: Label 16 Exp 0] 64 msec 84 msec 64 msec
2 123.123.12.1 120 msec 80 msec *

Based on the output from the verification commands we can see we have routes and labels between R1 and R3.  This is necessary to be able to do MP-BGP peering between R1 and R3 for IPv6 label distribution. With proper connectivity now established we’ll move onto getting IPv6 peering configured and verified.

The IPv4 “transport” label determined by LDP will be the first label on the stack and will be determined by the BGP next hop.  The second label will be determined by the “send-label” function of the IPv6 family BGP peering.

MP-BGP IPv6 Peering

Now that we have our IPv4+MPLS core configured we can layer on the IPv6 address-family configuration to support IPv6 transport.

Our configuration example will focus on R1. Full config files for the other routers are available at the end of this article.

Enable IPv6 on R1 & R3

ipv6 unicast-routing
ipv6 cef

Configure BGP with IPv6 support:

router bgp 123
no bgp default ipv4-unicast
bgp log-neighbor-changes
neighbor 123.123.123.3 remote-as 123
neighbor 123.123.123.3 update-source Loopback0
!
address-family ipv4
no synchronization
no auto-summary
exit-address-family
!
address-family ipv6
redistribute connected
redistribute static
no synchronization
neighbor 123.123.123.3 activate
neighbor 123.123.123.3 send-label
exit-address-family
!

Configure CE-facing interface with IPv6 support:

interface FastEthernet1/1
description ** Connection to R4 f1/0 **
no ip address
speed auto
duplex auto
ipv6 address FEC0:0:0:1::1/64
end

With the interfaces up and BGP peering complete the forwarding label tables look like this:

R1#sh mpls forwarding-table

Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop

Label      Label      or Tunnel Id     Switched      interface

16         Pop Label  123.123.23.0/24  0             Fa1/0      123.123.12.2

17         Pop Label  123.123.123.2/32 0             Fa1/0      123.123.12.2

18         17         123.123.123.3/32 0             Fa1/0      123.123.12.2

19         No Label   FEC0:0:0:1::/64  3492          aggregate

20         No Label   FEC0:0:0:4::/64  0             Fa1/1      FEC0:0:0:1::2

R1#sh bgp ipv6 uni lab

Network          Next Hop      In label/Out label

FEC0::/64        ::FFFF:123.123.123.3

nolabel/19

FEC0:0:0:1::/64  ::              19/nolabel

FEC0:0:0:4::/64  FEC0:0:0:1::2   20/nolabel

FEC0:0:0:5::/64  ::FFFF:123.123.123.3

nolabel/20

A traceroute from R1 to R3 looks like:

R1#trace ipv6 fec0::1
Type escape sequence to abort.
Tracing the route to FEC0::1
1 ::FFFF:123.123.12.2 [MPLS: Labels 17/19 Exp 0] 56 msec 68 msec 44 msec
2 FEC0::1 76 msec 112 msec 84 msec

Notice the two labels of 17/19.  The first label is the transport label and determined by LDP. See the show mpls forwarding-table command.  The second label is the BGP label and determined by the send-label function in BGP.  See the show bgp ipv6 unicast label command.

A traceroute from R4 to R5 looks like this:

R4#trace
Protocol [ip]: ipv6
Target IPv6 address: fec0:0:0:5::1
Source address: fec0:0:0:4::1
Insert source routing header? [no]:
Numeric display? [no]:
Timeout in seconds [3]:
Probe count [3]:
Minimum Time to Live [1]:
Maximum Time to Live [30]:
Priority [0]:
Port Number [0]:
Type escape sequence to abort.
Tracing the route to FEC0:0:0:5::1
1 FEC0:0:0:1::1 16 msec 68 msec 36 msec
2 ::FFFF:123.123.12.2 [MPLS: Labels 17/20 Exp 0] 88 msec 100 msec 88 msec
3 FEC0::1 [MPLS: Label 20 Exp 0] 56 msec 108 msec 88 msec
4 FEC0::2 64 msec 60 msec 92 msec

6PE gives you the flexibility to run IPv6 between PE routers without the need to configure IPv6 on the core of the network.  This can prevent unnecessary software and hardware upgrades.

6PEconfigs

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s