Thursday, January 5, 2017

CCIE SPv4 - MPLS L3 VPN - Initial L3 VPN setup - RD - RT - VRF - MP-BGP w/ Route Reflection

Software versions:
IOS XE 15.5
IOS XR 5.3

The topology for this demo:
This post will focus on getting the base configuration in place that is needed to get MPLS L3 VPN up and running. You'll notice that it is significantly more involved than L2VPN in almost any aspect. L2 VPN doesn't require VRFs, MP-BGP RT/RD for the most part, only the advanced configuration, all of those features are required for L3 VPN. 

We are going to focus on getting the infrastructure up and running in this post, then we'll be able to test out a variety of scenarios. This foundation setup will be in place likely the remainder of the Intra AS testing of technologies. We'll be able to test all the L3 VPN scenarios around Intra AS design, MPLS TE, Multicast, QoS. We'll be adding to this design once we get into the Inter AS and CSC designs later on. 

For those of you not familiar with MPLS L3 VPN there are a few things we need to cover before you start looking over the configuration. The components used to make L3 VPN work; VRF (RD/RT) MP-BGP, IGP/LDP are the minimum required configurations.

IGP and LDP: IGP is used to build a loop free topology, we'll use OSPF and IS-IS but can test with EIGRP or RIPv2 if needed. the DV IGPs don't have the flexibility that OSPF/IS-IS do. LDP relies on IGP to build a loop free topology. LDP can not operation without IGP. LDP requires that every PE advertise a /32 loopback into IGP used to terminate LSPs or Label Switch Paths.

VRFs: Virtual Routing and Forwarding: This is the same concept as a "VLAN" on a switch but unique to a router. They can be configured on a switch. VRF are to a Router what VLANs are to a switch. you can virtualize a router's routing table with VRFs. Each VRF gets a RD or Route Distinguisher and a RT or Route Target. The RD is prepended or added to the front of a customer prefix to make it globally unique. The Rt determines what routes/prefixes can be imported to or exported from the VRF. Import takes routes from MP-BGP and injects them into the VRF RIB. Export take routes from the VRF RIB and injects them into the MP-BGP RIB. 

MP-BGP: Multi Protocol BGP - used to advertise VPNv4 and VPNv6 prefixes learned from customer to other PEs. Every PE needs to be peered in a full mesh with all the other PEs it needs to send routing information to or to peer with a Route Reflector (our design). The MP-BGP learned routes are what allocate the "VPN" label to a prefix learned from the customer. LDP is used to allocate "Transport" labels that the PE will use to reach the remote PE that connects to the CE the received traffic needs to reach. 

I will give detailed breakdowns of how this works as we progress through the difference scenarios. For now, focus on the SP core and edge configuration. 

We'll begin with enabling IGP/LDP, in this case it's OSPFv2 and LDP. We actually have this going, I enable OSPFv2 globally on all interfaces and use mpls ldp autoconfig to get everything up. 

IOS
router ospf 1
 network 0.0.0.0 255.255.255.255 area 0
 mpls ldp autoconfig
mpls ldp label
 allocate global host-routes

XR1
router ospf 1
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.111
  !
  interface GigabitEthernet0/0/0/0.1114
!
mpls ldp
 address-family ipv4
  label
   local
    allocate for host-routes

XR2
router ospf 1
 area 0
  mpls ldp auto-config
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.112
  !
  interface GigabitEthernet0/0/0/0.1213
  !
  interface GigabitEthernet0/0/0/0.1216
!
mpls ldp
 address-family ipv4
  label
   local
    allocate for host-routes


XR3
router ospf 1
 area 0
  mpls ldp auto-config
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.132
  !
  interface GigabitEthernet0/0/0/0.1213
!
mpls ldp
 address-family ipv4
  label
   local
    allocate for host-routes


XR4
router ospf 1
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.143
  !
  interface GigabitEthernet0/0/0/0.1114
  !
  interface GigabitEthernet0/0/0/0.1415
!
mpls ldp
 address-family ipv4
  label
   local
    allocate for host-routes

XR5
router ospf 1
 area 0
  mpls ldp auto-config
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.115
  !
  interface GigabitEthernet0/0/0/0.154
  !
  interface GigabitEthernet0/0/0/0.1415
  !
  interface GigabitEthernet0/0/0/0.1516
!
mpls ldp
 address-family ipv4
  label
   local
    allocate for host-routes


XR6
router ospf 1
 area 0
  mpls ldp auto-config
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0.162
  !
  interface GigabitEthernet0/0/0/0.165
  !
  interface GigabitEthernet0/0/0/0.1216
  !
  interface GigabitEthernet0/0/0/0.1516
!
mpls ldp
 address-family ipv4
  label
   local
    allocate for host-routes


IGP and LDP should be fully converged in a few minutes, likely faster than that but it will take you longer to copy and paste the config's in that it will take OSPF to converge. 


Now we need to configure the VRFs on IOS and IOS XR. Overall pretty straight forward. This is only done on the PEs for IOS and XR. I create 7 different VRFs, one for each IGP, one for BGP, one for Static routes and the last for PBR. I enable both IPv4 and IPv6 for each VRF. The RD is the AD value for BGP, IGP and Static routes, PBR just received 10 for simplicity. The RT or Route Target, which determines flood/learn policies for each VRF, also follows the RD format. 

IOS
vrf definition BGP
 rd 20:50693
 !
 address-family ipv4
  route-target export 20:50693
  route-target import 20:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 20:50693
  route-target import 20:50693
 exit-address-family
!
!
!
vrf definition EIGRP
 rd 90:50693
 !
 address-family ipv4
  route-target export 90:50693
  route-target import 90:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 90:50693
  route-target import 90:50693
 exit-address-family
!
!
!
vrf definition IS-IS
 rd 115:50693
 !
 address-family ipv4
  route-target export 115:50693
  route-target import 115:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 115:50693
  route-target import 115:50693
 exit-address-family
!
!
!
vrf definition OSPF
 rd 110:50693
 !
 address-family ipv4
  route-target export 110:50693
  route-target import 110:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 110:50693
  route-target import 110:50693
 exit-address-family
!
!
!
vrf definition PBR
 rd 10:50693
 !
 address-family ipv4
  route-target export 10:50693
  route-target import 10:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 10:50693
  route-target import 10:50693
 exit-address-family
!
!
!
vrf definition RIPv2
 rd 120:50693
 !
 address-family ipv4
  route-target export 120:50693
  route-target import 120:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 120:50693
  route-target import 120:50693
 exit-address-family
!
!
!
vrf definition STATIC
 rd 1:50693
 !
 address-family ipv4
  route-target export 1:50693
  route-target import 1:50693
 exit-address-family
 !
 address-family ipv6
  route-target export 1:50693
  route-target import 1:50693
 exit-address-family


IOS XR
vrf BGP
address-family ipv4 unicast
import route-target 20:50693
export route-target 20:50693
address-family ipv6 unicast
export route-target 20:50693
import route-target 20:50693
!
vrf OSPF
address-family ipv4 unicast
import route-target 110:50693
export route-target 110:50693
address-family ipv6 unicast
export route-target 110:50693
import route-target 110:50693
!
vrf EIGRP
address-family ipv4 unicast
import route-target 90:50693
export route-target 90:50693
address-family ipv6 unicast
export route-target 90:50693
import route-target 90:50693
!
vrf RIPv2
address-family ipv4 unicast
import route-target 120:50693
export route-target 120:50693
address-family ipv6 unicast
export route-target 120:50693
import route-target 120:50693
!
vrf IS-IS
address-family ipv4 unicast
import route-target 115:50693
export route-target 115:50693
address-family ipv6 unicast
export route-target 115:50693
import route-target 115:50693
!
vrf STATIC
address-family ipv4 unicast
import route-target 1:50693
export route-target 1:50693
address-family ipv6 unicast
export route-target 1:50693
import route-target 1:50693
!
vrf PBR
address-family ipv4 unicast
import route-target 10:50693
export route-target 10:50693
address-family ipv6 unicast
export route-target 10:50693
import route-target 10:50693




Now we have to apply the VRF to the appropriate interfaces. I am not applying IPv4/IPv6 addressing yet for the simple reason, each PE would have unique address spaces. I will show you the technique I use for IOS and XR for R1 and XR1 each. I use the CE router number and the PE router number, R13 (CE) and R1 (PE) for instance would get 131.0.0.0/24 and 2131:CC1E::/64 for all VRF defined interfaces. You can follow that stanza and address as we go or at one time. 


IOS
interface GigabitEthernet1.1001
 encapsulation dot1Q 1001
 vrf forwarding STATIC
interface GigabitEthernet1.1010
 encapsulation dot1Q 1010
 vrf forwarding PBR
interface GigabitEthernet1.1020
 encapsulation dot1Q 1020
 vrf forwarding BGP
interface GigabitEthernet1.1090
 encapsulation dot1Q 1090
 vrf forwarding EIGRP
interface GigabitEthernet1.1110
 encapsulation dot1Q 1110
 vrf forwarding OSPF
interface GigabitEthernet1.1115
 encapsulation dot1Q 1115
 vrf forwarding IS-IS
interface GigabitEthernet1.1120
 encapsulation dot1Q 1120
 vrf forwarding RIPv2


IOS XR
interface GigabitEthernet0/0/0/0.1001
 vrf STATIC
 encapsulation dot1q 1001
!
interface GigabitEthernet0/0/0/0.1010
 vrf PBR
 encapsulation dot1q 1010
!
interface GigabitEthernet0/0/0/0.1020
 vrf BGP
 encapsulation dot1q 1020
!
interface GigabitEthernet0/0/0/0.1090
 vrf EIGRP
 encapsulation dot1q 1090
!
interface GigabitEthernet0/0/0/0.1110
 vrf OSPF
 encapsulation dot1q 1110
!
interface GigabitEthernet0/0/0/0.1115
 vrf IS-IS
 encapsulation dot1q 1115
!
interface GigabitEthernet0/0/0/0.1120
 vrf RIPv2
 encapsulation dot1q 1120


Onto the addressing piece.

IOS
interface GigabitEthernet1.1001
 encapsulation dot1Q 1001
 vrf forwarding STATIC
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64
!
interface GigabitEthernet1.1010
 encapsulation dot1Q 1010
 vrf forwarding PBR
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64
!
interface GigabitEthernet1.1020
 encapsulation dot1Q 1020
 vrf forwarding BGP
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64
!
interface GigabitEthernet1.1090
 encapsulation dot1Q 1090
 vrf forwarding EIGRP
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64
!
interface GigabitEthernet1.1110
 encapsulation dot1Q 1110
 vrf forwarding OSPF
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64
!
interface GigabitEthernet1.1115
 encapsulation dot1Q 1115
 vrf forwarding IS-IS
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64
!
interface GigabitEthernet1.1120
 encapsulation dot1Q 1120
 vrf forwarding RIPv2
 ip address 131.0.0.1 255.255.255.0
 ipv6 address 2131:CC1E::1/64


IOS XR
interface GigabitEthernet0/0/0/0.1001
 vrf STATIC
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1001
!
interface GigabitEthernet0/0/0/0.1010
 vrf PBR
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1010
!
interface GigabitEthernet0/0/0/0.1020
 vrf BGP
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1020
!
interface GigabitEthernet0/0/0/0.1090
 vrf EIGRP
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1090
!
interface GigabitEthernet0/0/0/0.1110
 vrf OSPF
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1110
!
interface GigabitEthernet0/0/0/0.1115
 vrf IS-IS
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1115
!
interface GigabitEthernet0/0/0/0.1120
 vrf RIPv2
 ipv4 address 113.0.0.11 255.255.255.0
 ipv6 address 2113:cc1e::11/64
 encapsulation dot1q 1120


Now that we have that part knocked out. We need to rollout the MP-BGP VPNv4 peerings. After that, we'll be in good shape to get the rest up and running and start playing with PE-CE routing. R2 and XR4 are both Route Reflectors in this design, they peer with each other as well. 

IOS and IOS XR PE configs
IOS
router bgp 50693
 bgp log-neighbor-changes
 neighbor 192.168.1.2 remote-as 50693
 neighbor 192.168.1.2 password CCIE
 neighbor 192.168.1.2 update-source Loopback0
 neighbor 192.168.1.14 remote-as 50693
 neighbor 192.168.1.14 password CCIE
 neighbor 192.168.1.14 update-source Loopback0
 !
 address-family vpnv4
  neighbor 192.168.1.2 activate
  neighbor 192.168.1.2 send-community extended
  neighbor 192.168.1.14 activate
  neighbor 192.168.1.14 send-community extended
 exit-address-family

IOS XR
router bgp 50693
 address-family vpnv4 unicast
 !
 address-family ipv6 unicast
 !
 address-family vpnv6 unicast
 !
 af-group VPN address-family vpnv4 unicast
 !
 af-group VPNv6 address-family vpnv6 unicast
 !
 session-group VPN
  remote-as 50693
  password encrypted 0130252D7E
  update-source Loopback0
 !
 neighbor 192.168.1.2
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.14
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6


Now onto the Route Reflector configuration. R2 and XR4

R2
router bgp 50693
 template peer-policy VPN
  route-reflector-client
  send-community both
 exit-peer-policy
 !
 template peer-session VPN
  remote-as 50693
  password CCIE
  update-source Loopback0
 exit-peer-session
 !
 bgp log-neighbor-changes
 neighbor 192.168.1.1 inherit peer-session VPN
 neighbor 192.168.1.3 inherit peer-session VPN
 neighbor 192.168.1.4 remote-as 50693
 neighbor 192.168.1.4 update-source Loopback0
 neighbor 192.168.1.5 remote-as 50693
 neighbor 192.168.1.5 inherit peer-session VPN
 neighbor 192.168.1.5 update-source Loopback0
 neighbor 192.168.1.6 inherit peer-session VPN
 neighbor 192.168.1.11 inherit peer-session VPN
 neighbor 192.168.1.12 inherit peer-session VPN
 neighbor 192.168.1.13 inherit peer-session VPN
 neighbor 192.168.1.14 inherit peer-session VPN
 !
 address-family ipv4
  neighbor 192.168.1.1 activate
  neighbor 192.168.1.1 send-community extended
  neighbor 192.168.1.1 inherit peer-policy VPN
  neighbor 192.168.1.3 activate
  neighbor 192.168.1.3 send-community extended
  neighbor 192.168.1.3 inherit peer-policy VPN
  neighbor 192.168.1.4 activate
  neighbor 192.168.1.5 activate
  neighbor 192.168.1.5 send-community extended
  neighbor 192.168.1.5 inherit peer-policy VPN
  neighbor 192.168.1.6 activate
  neighbor 192.168.1.6 send-community extended
  neighbor 192.168.1.6 inherit peer-policy VPN
  neighbor 192.168.1.11 activate
  neighbor 192.168.1.11 send-community extended
  neighbor 192.168.1.11 inherit peer-policy VPN
  neighbor 192.168.1.12 activate
  neighbor 192.168.1.12 send-community extended
  neighbor 192.168.1.12 inherit peer-policy VPN
  neighbor 192.168.1.13 activate
  neighbor 192.168.1.13 send-community extended
  neighbor 192.168.1.13 inherit peer-policy VPN
  neighbor 192.168.1.14 activate
  neighbor 192.168.1.14 send-community extended
  neighbor 192.168.1.14 inherit peer-policy VPN
 exit-address-family
 !
 address-family vpnv4
  neighbor 192.168.1.1 activate
  neighbor 192.168.1.1 send-community extended
  neighbor 192.168.1.1 inherit peer-policy VPN
  neighbor 192.168.1.3 activate
  neighbor 192.168.1.3 send-community extended
  neighbor 192.168.1.3 inherit peer-policy VPN
  neighbor 192.168.1.5 activate
  neighbor 192.168.1.5 send-community extended
  neighbor 192.168.1.5 inherit peer-policy VPN
  neighbor 192.168.1.6 activate
  neighbor 192.168.1.6 send-community extended
  neighbor 192.168.1.6 inherit peer-policy VPN
  neighbor 192.168.1.11 activate
  neighbor 192.168.1.11 send-community extended
  neighbor 192.168.1.11 inherit peer-policy VPN
  neighbor 192.168.1.12 activate
  neighbor 192.168.1.12 send-community extended
  neighbor 192.168.1.12 inherit peer-policy VPN
  neighbor 192.168.1.13 activate
  neighbor 192.168.1.13 send-community extended
  neighbor 192.168.1.13 inherit peer-policy VPN
  neighbor 192.168.1.14 activate
  neighbor 192.168.1.14 send-community extended
  neighbor 192.168.1.14 inherit peer-policy VPN
 exit-address-family
 !
 address-family vpnv6
  neighbor 192.168.1.1 activate
  neighbor 192.168.1.1 send-community extended
  neighbor 192.168.1.1 inherit peer-policy VPN
  neighbor 192.168.1.3 activate
  neighbor 192.168.1.3 send-community extended
  neighbor 192.168.1.3 inherit peer-policy VPN
  neighbor 192.168.1.5 activate
  neighbor 192.168.1.5 send-community extended
  neighbor 192.168.1.5 inherit peer-policy VPN
  neighbor 192.168.1.6 activate
  neighbor 192.168.1.6 send-community extended
  neighbor 192.168.1.6 inherit peer-policy VPN
  neighbor 192.168.1.11 activate
  neighbor 192.168.1.11 send-community extended
  neighbor 192.168.1.11 inherit peer-policy VPN
  neighbor 192.168.1.12 activate
  neighbor 192.168.1.12 send-community extended
  neighbor 192.168.1.12 inherit peer-policy VPN
  neighbor 192.168.1.13 activate
  neighbor 192.168.1.13 send-community extended
  neighbor 192.168.1.13 inherit peer-policy VPN
  neighbor 192.168.1.14 activate
  neighbor 192.168.1.14 send-community extended
  neighbor 192.168.1.14 inherit peer-policy VPN
 exit-address-family



XR4
router bgp 50693
 address-family ipv4 unicast
 !
 address-family vpnv4 unicast
 !
 address-family ipv6 unicast
 !
 address-family vpnv6 unicast
 !
 af-group VPN address-family vpnv4 unicast
  route-reflector-client
 !
 af-group VPNv6 address-family vpnv6 unicast
  route-reflector-client
 !
 session-group VPN
  remote-as 50693
  password encrypted 0130252D7E
  update-source Loopback0
 !
 session-group VPNv6
  remote-as 50693
  password encrypted 1326343B2E
  update-source Loopback0
 !
 neighbor 192.168.1.1
  use session-group VPNv6
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.2
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.3
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.5
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.6
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.11
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.12
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6
  !
 !
 neighbor 192.168.1.13
  use session-group VPN
  address-family vpnv4 unicast
   use af-group VPN
  !
  address-family vpnv6 unicast
   use af-group VPNv6

As you can see, the configuration is rather intense on the RRs. The PE side is pretty light. 

XR4s output of BGP VPNv4:
RP/0/0/CPU0:XR4#sh bgp vpnv4 unicast summary
Wed Jan  4 23:10:51.337 UTC
BGP is operating in STANDALONE mode.

Process       RcvTblVer   bRIB/RIB   LabelVer  ImportVer  SendTblVer  StandbyVer
Speaker               1          1          1          1           1           0

Neighbor        Spk    AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down  St/PfxRcd
192.168.1.1       0 50693     109      99        1    0    0 01:36:22          0
192.168.1.2       0 50693     114     103        1    0    0 01:40:44          0
192.168.1.3       0 50693     109      99        1    0    0 01:36:43          0
192.168.1.5       0 50693     109      99        1    0    0 01:36:43          0
192.168.1.6       0 50693     110     100        1    0    0 01:36:51          0
192.168.1.11      0 50693      98      98        1    0    0 01:35:09          0
192.168.1.12      0 50693      97      99        1    0    0 01:34:41          0
192.168.1.13      0 50693      97      98        1    0    0 01:34:27          0

As you can see we are peered with both PEs and the other RR. No routes have been learned or exchanged yet since we don't have any PE-CE routing in place yet. That will start in the next post.

Thanks for stopping by!
Rob Riker, CCIE #50693

No comments:

Post a Comment