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:
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 188.8.131.52 255.255.255.255 end
Enable MPLS and IP:
mpls ip mpls label protocol ldp mpls ldp router-id Loopback0
router ospf 123 router-id 184.108.40.206 log-adjacency-changes network 220.127.116.11 0.0.0.0 area 0 network 18.104.22.168 0.0.0.0 area 0
Provision PE-P link:
interface FastEthernet1/0 description ** Connection to R2 f1/0 ** ip address 22.214.171.124 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 126.96.36.199/8 is variably subnetted, 6 subnets, 2 masks O 188.8.131.52/24 [110/2] via 184.108.40.206, 00:00:57, FastEthernet1/0 C 220.127.116.11/24 is directly connected, FastEthernet1/0 L 18.104.22.168/32 is directly connected, FastEthernet1/0 O 22.214.171.124/32 [110/3] via 126.96.36.199, 00:00:57, FastEthernet1/0 O 188.8.131.52/32 [110/2] via 184.108.40.206, 00:00:57, FastEthernet1/0 C 220.127.116.11/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 18.104.22.168/24 0 Fa1/0 22.214.171.124 17 16 126.96.36.199/32 0 Fa1/0 188.8.131.52 18 Pop Label 184.108.40.206/32 0 Fa1/0 220.127.116.11
Finally a traceroute to R1 Loopback0 from R3:
R3#trace 18.104.22.168 so lo0 Type escape sequence to abort. Tracing the route to 22.214.171.124 1 126.96.36.199 [MPLS: Label 16 Exp 0] 64 msec 84 msec 64 msec 2 188.8.131.52 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 184.108.40.206 remote-as 123 neighbor 220.127.116.11 update-source Loopback0 ! address-family ipv4 no synchronization no auto-summary exit-address-family ! address-family ipv6 redistribute connected redistribute static no synchronization neighbor 18.104.22.168 activate neighbor 22.214.171.124 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 126.96.36.199/24 0 Fa1/0 188.8.131.52 17 Pop Label 184.108.40.206/32 0 Fa1/0 220.127.116.11 18 17 18.104.22.168/32 0 Fa1/0 22.214.171.124 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:126.96.36.199 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:188.8.131.52 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:184.108.40.206 [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 : Probe count : Minimum Time to Live : Maximum Time to Live : Priority : Port Number : 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:220.127.116.11 [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.