Lab9 MPLS + RDs + UCMP

Load lab9.init.cfg

#R1, R6
configure replace unix:lab9.init.cfg

#R2-R5, R7
configure
load bootflash:lab9.init.cfg
commit replace
y

R7 is the only RR, and it is reflecting VPNv4 and VPN6 routes. The iBGP sessions have already been established.

  • On the PEs, place the customer in a VRF called CUST_A and exchange IPv4 and IPv6 routes.

    • The VRF has not been configured yet.

  • Configure dmz-linkbw so that R2 will forward traffic to R6 in a 2:1 ratio to R4/R5.

Answer

https://www.youtube.com/watch?v=Er2fq1yL0rc&list=PL3Y9eZjZCcsejbVWD3wJIePqe3NiImqxB&index=12

#R2
vrf CUST_A
 address-family ipv4 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
 !
 address-family ipv6 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
!
interface GigabitEthernet0/0/0/0
 vrf CUST_A
 no ipv4 address
 ipv4 address 10.1.2.2 255.255.255.0
 no ipv6 address
 ipv6 address fe80::2 link-local
 ipv6 address fc00:10:1:2::2/64
!
router bgp 65000
 no neighbor 10.1.2.1
 no neighbor fc00:10:1:2::1
 vrf CUST_A
  rd 100:2
  address-family ipv4 unicast
   maximum-paths ibgp 2
  !
  address-family ipv6 unicast
   maximum-paths ibgp 2
  !
  neighbor 10.1.2.1
   remote-as 65001
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
  neighbor fc00:10:1:2::1
   remote-as 65001
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out

#R4
vrf CUST_A
 address-family ipv4 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
 !
 address-family ipv6 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
!
interface GigabitEthernet0/0/0/1
 vrf CUST_A
 no ipv4 address
 ipv4 address 10.4.6.4 255.255.255.0
 no ipv6 address
 ipv6 address fe80::4 link-local
 ipv6 address fc00:10:4:6::4/64
!
router bgp 65000
 no neighbor 10.4.6.6
 no neighbor fc00:10:4:6::6
 vrf CUST_A
  rd 100:4
  address-family ipv4 unicast
  !
  address-family ipv6 unicast
  !
  neighbor 10.4.6.6
   dmz-link-bandwidth
   remote-as 65006
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
  neighbor fc00:10:4:6::6
   dmz-link-bandwidth
   remote-as 65006
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out

#R5
vrf CUST_A
 address-family ipv4 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
 !
 address-family ipv6 unicast
  import route-target
   100:100
  !
  export route-target
   100:100
!
interface GigabitEthernet0/0/0/0
 vrf CUST_A
 no ipv4 address
 ipv4 address 10.5.6.5 255.255.255.0
 no ipv6 address
 ipv6 address fe80::5 link-local
 ipv6 address fc00:10:5:6::5/64
!
router bgp 65000
 no neighbor 10.5.6.6
 no neighbor fc00:10:5:6::6
 vrf CUST_A
  rd 100:5
  address-family ipv4 unicast
  !
  address-family ipv6 unicast
  !
  neighbor 10.5.6.6
   dmz-link-bandwidth
   remote-as 65006
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
  neighbor fc00:10:5:6::6
   dmz-link-bandwidth
   remote-as 65006
   address-family ipv6 unicast
    route-policy PASS in
    route-policy PASS out

Explanation/Verification

This lab uses VPNv4 and VPN6 for the first time in this topology. The VRF configuration is straightforward. The PEs must each use a unique RD, because we are not using add path. Without this, R7 will pick the best path for all routes with the same RD. R7 would end up reflecting only the path via R4 to R2.

The BGP configuration uses VPNv4 and VPNv6 for iBGP RR. On IOS-XE, all routers would need to activate bgp dmzlink-bw for the VPNv4/VPNv6 address-family. But on IOS-XR, you only need this command under the neighbor.

On R4 and R5, we specify the R6 neighbor with dmz-link-bandwidth to add the dmz link-bw extcommunity to routes learned from this peer.

#R4
router bgp 65000
 vrf CUST_A
  neighbor 10.4.6.6
   dmz-link-bandwidth
  !
  neighbor fc00:10:4:6::6
   dmz-link-bandwidth

#R5
router bgp 65000
 vrf CUST_A
  neighbor 10.5.6.6
   dmz-link-bandwidth
  neighbor fc00:10:5:6::6
   dmz-link-bandwidth

On R7, we can see both routes are learned and both are choosen as a best path. This is because we are using unique RDs per-PE. This is an easy way to achieve additional path functionality in a VPN environment.

Thanks to the unique RDs, R2 receives both paths. R2 also configures mulitpath for iBGP routes under the customer VRF in BGP. This allows R2 to do UCMP for this VPN.

#R2
router bgp 65000
 vrf CUST_A
  rd 100:2
  address-family ipv4 unicast
   maximum-paths ibgp 2
  !
  address-family ipv6 unicast
   maximum-paths ibgp 2

We can see the traffic share count is 2:1 for IPv4 traffic:

Unlike on IOS-XE, dmz-linkbw works for VPNv6 on IOS-XR:

Using show cef … detail on IOS-XR, we can see the 2:1 load distribution. There are two hashes for path 0, which is via R4, and one for path 1, which is via R5.

Last updated