IPv6 - MPLS migration with 6PE
In our recent CCDE study group meeting, we covered 6PE (IPv6 Provider Edge). This method integrates IPv6 into an IPv4 MPLS network. Yet, we were unsure of its operation and use. To clarify, I set up an EVE-NG environment and ran a lab test.
The key point is that 6PE setups do not use VRFs on PE routers. Instead, they place all CEs in the global routing table. VRFs help isolate customer traffic. This setup prevents unauthorized interference. In L3VPN networks, people usually combine VRFs with MPLS and MP-BGP.
But why would you use 6PE in your MPLS network?
Your core MPLS network is running IPv4 only, and you cannot change it that easy.
You might not need traffic segmentation.
You deliver internet service via global routing table to the customers
So for a better understanding, let's check the lab topology.
We have our IPv4 MPLS network, which uses OSPFv2 as underlay routing and LDP for label exchange. On top, we're running BGP between the loopback IPs of the PE routers.
P-Router config (P1 as an example)
mpls label range 10000 10999 |
! |
|
You can see that the P router config is pretty easy. Lets see the PE router config now.
PE-Router config (PE1 as an example)
|
We should have reachability between the loopback IPs of the PE routers. So let's continue with our BGP configuration on the PE nodes.
PE-Router BGP config (full meshed)
router bgp 65000 |
Important here is the "send-label" command in the neighbor statement. So, BGP will exchange the assigned labels for the IPv6 prefixes between the PE routers. Next, it's to create the PE-CE BGP connection. You could do any other form of routing between these two devices and redistribute into BGP. We also need to set the next-hop to the PEs' interface IP address via route-map.
PE-Router (PE1)
|
CE-Router (CustomerA-Site1)
|
So now we've been able to ping between the two CE nodes of the customer.
|
Let's dive into the BGP table
|
We can see that the BGP table holds all routes of all the different customers in the global routing table. We'll look into a possible solution later on. Now let's have a more detailed look at the labels. Labels are used to transport our IPv6 packets from PE to PE. We are using two different labels.
BGP label for the IPv6 prefix on the other PE
IGP label to transport the packet to the loopback of the other PE
|
|
To make it easier to understand, I created a dedicated label range on each MPLS router.
PE1 1000 - 1999
PE2 2000 - 2999
PE3 3000 - 3999
PE4 4000 - 4999
P1 10000 - 10999
P2 20000 - 20999
So let's check the labeled packets on the wire by capturing the packets on the links between MPLS routers.
We can observe that the inner label is the BGP label (in our case 3010), which is sent from PE3 to PE1 via BGP. It's preserved from PE1 to PE3.
The outer label is the "transport" or IGP label. From a numerical view, we see that PE1 is sending a packet with label 10008. P1 announced the label by LDP and is the label used for 3.3.3.3 (next-hop from BGP point of view).
Capture from PE1 to P1
This mechanism lets us send IPv6 packets over an IPv4 MPLS network. The P-routers do not need IPv6. They also do not need to understand the labels that PE-routers exchanged via BGP.
Keep in mind that everything is happening in the global routing table. There is no segmentation on vrf basis. Overlapping IPv6 address spaces would be a problem. In case you're already using MPLS for L3VPN you would need an additional link (physical or subinterface) between CE-PE. This link would peer in the global routing table to be able to use 6PE between CE and PE.
A possible use-case would be to offer customers IPv6 internet connectivity on the existing MPLS network.
You can still limit customers to their own IPv6 prefixes. You can do this with regular BGP tagging and filtering.
Filtering on PE1 for Customer 1
ip community-list 1 permit 4259840001
|
If you have interesting 6PE use-cases or more info, I'd love to hear from you in the comments.
Kommentare
Kommentar veröffentlichen