An In-Depth Look at RD and RT, Pt. 3

In part 3, we’ll use RD to facilitate multipathing for a multi-homed customer.

We’ll add another CE for CUSTOMER_A, CE5. The customer wants you, the provider, to make sure that 10.20.0.0/16 traffic is load balanced between CE1 and CE5. Both CE1 and CE5 will advertise this prefix.

Let’s advertise 10.20.0.0/16 from both CE1 and CE5 and see what happens by default. We’ll continue to use the same RD and RT for CUSTOMER_A, 123:100, on PE4.

#CE1
int lo20
 ip address 10.20.0.1 255.255.0.0
!
router bgp 65000
 network 10.20.0.0 mask 255.255.0.0

#CE5
int lo20
 ip address 10.20.0.1 255.255.0.0
!
router bgp 65002
 network 10.20.0.0 mask 255.255.0.0

Because PE1 and PE4 use the same RD for the VRF, P3 will choose only a single route:

P3#show bgp vpnv4 unicast rd 123:100 | begin Network
     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 123:100
 *>i  10.0.0.0/24      1.1.1.1                  0    100      0 65000 i
 *>i  10.0.1.0/24      2.2.2.2                  0    100      0 65001 i
 *>i  10.10.10.0/24    1.1.1.1                  0    100      0 65000 i
 *>i  10.20.0.0/16     1.1.1.1                  0    100      0 65000 i
 * i                   4.4.4.4                  0    100      0 65002 i

P3 chosse the route from PE1 as best, and this is what PE2 sees:

RP/0/0/CPU0:PE2#show bgp vrf CUSTOMER_A ipv4 unicast | be Network
Fri Jul 22 02:43:05.698 UTC
   Network            Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 123:100 (default for vrf CUSTOMER_A)
*>i10.0.0.0/24        1.1.1.1                  0    100      0 65000 i
*> 10.0.1.0/24        100.64.1.6               0             0 65001 i
*>i10.10.10.0/24      1.1.1.1                  0    100      0 65000 i
*>i10.20.0.0/16       1.1.1.1                  0    100      0 65000 i

So how do we accomplish the customer’s request? We need PE2 to load balance traffic destined to 10.20.0.0/16 to PE1 and PE4.

First we need to set ibgp maximum-paths to 2 for the VRF under BGP. At minimum we need to do this for PE2 in our lab, but in the real world you’d do this on all PEs participating in the L3VPN.

#PE2
router bgp 123
 vrf CUSTOMER_A address-family ipv4 uni
  maximum-paths ibgp 2

Now PE2 will load balance up to 2 paths, but we still only have 1 path received on PE2. In order to make the RR (P3) send both paths to PE2, we’ll simply use a unique RD on PE4.

#PE4
no router bgp 123 vrf CUSTOMER_A
commit

router bgp 123
vrf CUSTOMER_A
  rd 123:104
  address-family ipv4 unicast
  !
  neighbor 100.64.0.10
   remote-as 65002
   address-family ipv4 unicast
    route-policy PASS_ALL in
    route-policy PASS_ALL out

We have two routes now for 10.20.0.0/16 but PE2 is not load balancing them:

RP/0/0/CPU0:PE2#show bgp vrf CUSTOMER_A ipv4 uni | be Network
Fri Jul 22 03:53:59.276 UTC
   Network            Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 123:100 (default for vrf CUSTOMER_A)
*>i10.0.0.0/24        1.1.1.1                  0    100      0 65000 i
*>i10.10.10.0/24      1.1.1.1                  0    100      0 65000 i
*>i10.20.0.0/16       1.1.1.1                  0    100      0 65000 i
* i                   4.4.4.4                  0    100      0 65002 i

RP/0/0/CPU0:PE2#sho route vrf CUSTOMER_A 10.20.0.0/16
Fri Jul 22 03:59:22.594 UTC

Routing entry for 10.20.0.0/16
  Known via "bgp 123", distance 200, metric 0
  Tag 65000, type internal
  Installed Jul 22 03:59:15.855 for 00:00:06
  Routing Descriptor Blocks
    1.1.1.1, from 3.3.3.3
      Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
      Route metric is 0
  No advertising protos.

This is because by default, BGP will only load balance routes if they have the same AS path. We’ll add a command to relax the as-path check for multipathing under the BGP VRF config. This is needed because we used a unique private AS at each customer location.

router bgp 123
 vrf CUSTOMER_A
  bgp bestpath as-path multipath-relax
RP/0/0/CPU0:PE2#show route vrf CUSTOMER_A 10.20.0.0/16 
Fri Jul 22 03:58:51.886 UTC

Routing entry for 10.20.0.0/16
  Known via "bgp 123", distance 200, metric 0
  Tag 65000, type internal
  Installed Jul 22 03:58:12.089 for 00:00:39
  Routing Descriptor Blocks
    1.1.1.1, from 3.3.3.3, BGP multi path
      Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
      Route metric is 0
    4.4.4.4, from 3.3.3.3, BGP multi path
      Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
      Route metric is 0
  No advertising protos.

Conclusion

By using a unique RD value per-PE for a VRF, we can achieve multipathing. This technique is very easy to implement, and causes the RR to view prefixs received from each PE as unique, instead of prefixes from each VRF among all PEs as unique (when using the same RD everywhere).

Last updated