Inter-AS Option C: Connecting CustD Sites Across Two Providers

Inter-AS Option C connects an L3VPN across two providers without a VPN session between the ASBRs. The ASBRs exchange labelled PE and route reflector loopbacks over eBGP, and the route reflectors of the two providers exchange the VPN routes over a multihop eBGP session. The LSP runs from PE to PE through both providers, and the VPN label allocated by the far PE reaches it unchanged.

CustD is a new customer with two sites. We simulate them without adding dedicated CE routers: a loopback in VRF CustD on A-PE1 in SP-A stands for one site, and a loopback in the same VRF on B-PE2 in SP-B stands for the other. In this stage, A-ASBR and B-ASBR exchange the labelled PE and route reflector loopbacks over a third sub-interface on the link from the Option A post, and A-RR and B-RR exchange CustD’s routes.

At the end of the stage, A-PE1’s traceroute to B-PE2’s CustD loopback looks as below:

A-PE1#traceroute vrf CustD 10.40.0.2 source lo40
Type escape sequence to abort.
Tracing the route to 10.40.0.2
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.21 [MPLS: Labels 17800/1813/24018 Exp 0] 4 msec 4 msec 3 msec
  2 10.1.1.42 [MPLS: Labels 1813/24018 Exp 0] 3 msec 3 msec 4 msec
  3 10.255.0.10 [MPLS: Labels 24/24018 Exp 0] 3 msec 3 msec 3 msec
  4 10.2.1.41 [MPLS: Labels 16600/24018 Exp 0] 3 msec 4 msec 3 msec
  5 10.2.1.14 [MPLS: Labels 16600/24018 Exp 0] 3 msec 3 msec * 
  6  * 
    10.2.1.30 15 msec * 
A-PE1#

Topology file: topology.clab.yml · Addressing: ipam.md · Stage configs, 6 nodes (A-PE1, B-PE2, A-ASBR, B-ASBR, A-RR, B-RR): stage_configs/lab04-s2-interas-optc/

VRF CustD on the PEs

Each PE has VRF CustD with a Loopback40 in it and redistributes the loopback into BGP. A-PE1:

vrf definition CustD
 rd 10.1.0.5:40
 !
 address-family ipv4
  route-target export 64501:40
  route-target import 64501:40
  route-target import 64502:40
 exit-address-family
 !
 address-family ipv6
  route-target export 64501:40
  route-target import 64501:40
  route-target import 64502:40
 exit-address-family
!
interface Loopback40
 vrf forwarding CustD
 ip address 10.40.0.1 255.255.255.255
 ipv6 address 2001:DB8:40::1/128
!
router bgp 64501
 address-family ipv4 vrf CustD
  redistribute connected
 exit-address-family
 !
 address-family ipv6 vrf CustD
  redistribute connected
 exit-address-family
!

B-PE2 has the same in IOS-XR form, with the route distinguisher under router bgp:

vrf CustD
 address-family ipv4 unicast
  import route-target
   64501:40
   64502:40
  !
  export route-target
   64502:40
  !
 !
 address-family ipv6 unicast
  import route-target
   64501:40
   64502:40
  !
  export route-target
   64502:40
  !
 !
!
interface Loopback40
 vrf CustD
 ipv4 address 10.40.0.2 255.255.255.255
 ipv6 address 2001:db8:40::2/128
!
router bgp 64502
 vrf CustD
  rd 10.2.0.6:40
  address-family ipv4 unicast
   redistribute connected
  !
  address-family ipv6 unicast
   redistribute connected
  !
 !
!

Each PE exports the route target of its own provider and imports both. In the Option B post, the ASBRs rewrite CustA’s route target between the providers. CustD’s route targets cross unchanged.

Labelled Loopbacks Between the ASBRs

The ASBRs peer over Gi4.254, a dot1Q sub-interface in the global table. A-ASBR:

interface GigabitEthernet4.254
 encapsulation dot1Q 254
 ip address 10.255.0.9 255.255.255.252
 ipv6 address 2001:DB8:FF:FE::1/64
!
ip prefix-list PL-SPA-LU-EXPORT seq 5 permit 10.1.0.5/32
ip prefix-list PL-SPA-LU-EXPORT seq 10 permit 10.1.0.7/32
!
route-map RM-LU-OUT permit 10
 match ip address prefix-list PL-SPA-LU-EXPORT
 set mpls-label
!
router bgp 64501
 neighbor 10.255.0.10 remote-as 64502
 !
 address-family ipv4
  neighbor 10.255.0.10 activate
  neighbor 10.255.0.10 route-map RM-LU-OUT out
  neighbor 10.255.0.10 send-label
 exit-address-family
!
router bgp 64501
 address-family ipv4
  neighbor 10.1.0.7 next-hop-self
 exit-address-family
!

send-label makes this eBGP session carry labels, and set mpls-label in the route map sends the permitted routes with a label. The prefix list permits two loopbacks: 10.1.0.5, A-PE1, the next hop of its VPN routes, and 10.1.0.7, A-RR, one end of the session between the route reflectors. B-ASBR has the same configuration for B-PE2’s loopback, 10.2.0.6, and B-RR’s, 10.2.0.7.

A-ASBR learns SP-B’s loopbacks with next hop 10.255.0.10, an address that is not in SP-A’s OSPF. next-hop-self on the session to A-RR changes the next hop to A-ASBR’s loopback, 10.1.0.8.

As on Gi4.255 in the Option B post, IOS-XE adds mpls bgp forwarding to Gi4.254 by itself when the labelled eBGP session comes up:

A-ASBR#show run int gi4.254
Building configuration...

Current configuration : 158 bytes
!
interface GigabitEthernet4.254
 encapsulation dot1Q 254
 ip address 10.255.0.9 255.255.255.252
 ipv6 address 2001:DB8:FF:FE::1/64
 mpls bgp forwarding
end

A-ASBR’s labelled unicast table has B-PE2’s and B-RR’s loopbacks from 10.255.0.10:

A-ASBR#show bgp ipv4 unicast labels
   Network          Next Hop      In label/Out label
   10.1.0.5/32      10.1.0.5        1807/imp-null
   10.1.0.6/32      10.1.0.6        nolabel/imp-null
   10.1.0.7/32      10.1.0.7        1809/imp-null
   10.1.0.8/32      0.0.0.0         imp-null/nolabel
   10.2.0.6/32      10.255.0.10     1813/24
   10.2.0.7/32      10.255.0.10     1810/37

B-ASBR’s has A-PE1’s and A-RR’s from 10.255.0.9:

B-ASBR#show bgp ipv4 unicast labels
   Network          Next Hop      In label/Out label
   10.1.0.5/32      10.255.0.9      31/1807
   10.1.0.7/32      10.255.0.9      36/1809
   10.2.0.5/32      10.2.0.5        nolabel/imp-null
   10.2.0.6/32      10.2.0.6        24/imp-null
   10.2.0.7/32      10.2.0.7        37/imp-null
   10.2.0.8/32      0.0.0.0         imp-null/nolabel

For B-PE2’s loopback, 10.2.0.6, the Out label on A-ASBR is 24, the In label on B-ASBR. The Out label on B-ASBR is imp-null, the label B-PE2 advertised for itself. A-PE2’s loopback, 10.1.0.6, is not in A-ASBR’s prefix list, so A-ASBR does not advertise it with itself as the next hop, and its In label is nolabel.

The Route Reflectors

The session between A-RR and B-RR runs between their loopbacks, so each loopback has to be reachable from the other provider. In the previous post, the route reflectors originated no prefixes. In this stage, each one advertises its own loopback. A-RR:

router bgp 64501
 address-family ipv4 unicast
  network 10.1.0.7/32

B-RR has the same line for 10.2.0.7. IOS-XR sends a prefix as labelled unicast only when the prefix has a local label, so this line needs allocate-label all from the previous post. In a later test, A-RR without allocate-label all removed 10.1.0.7/32 from its labelled unicast table, and the session to B-RR came back only after the line was restored.

A-RR’s session to B-RR uses two route policies:

route-policy PASS
  pass
end-policy
!
extcommunity-set rt RT_CUSTD
  64501:40,
  64502:40
end-set
!
route-policy SCOPE_CUSTD_OUT
  if extcommunity rt matches-any RT_CUSTD then
    pass
  else
    drop
  endif
end-policy

Below is A-RR’s neighbour configuration. B-RR has the same toward A-RR:

RP/0/RP0/CPU0:A-RR#show run router bgp 64501 neigh 10.2.0.7
Tue Aug  4 13:14:53.723 UTC
router bgp 64501
 neighbor 10.2.0.7
  remote-as 64502
  ebgp-multihop 255
  update-source Loopback0
  address-family vpnv4 unicast
   route-policy PASS in
   route-policy SCOPE_CUSTD_OUT out
   next-hop-unchanged
  !
  address-family vpnv6 unicast
   route-policy PASS in
   route-policy SCOPE_CUSTD_OUT out
   next-hop-unchanged
  !
 !
!

ebgp-multihop allows an eBGP peer more than one hop away. 255 is the maximum TTL, and any value that covers the path would work. VPNv6 runs on the same IPv4 session, as in the Option B post.

By default, IOS-XR drops routes on an eBGP session in a direction with no route policy, so PASS is applied inbound. Outbound, SCOPE_CUSTD_OUT sends only the routes with CustD’s route targets, so CustA stays on Option B and CustC on Option A.

next-hop-unchanged keeps the PE’s loopback as the next hop of the VPN routes. By default, eBGP changes the next hop to the route reflector, and traffic would go through it.

A-RR receives one route per address family from B-RR, 10.2.0.7. The sessions to its three clients did not restart, because adding a neighbour changes no capability on them:

! trimmed to the timestamps and the neighbour tables
RP/0/RP0/CPU0:A-RR#show bgp vpnv4 unicast sum
Tue Aug  4 13:14:15.690 UTC
Neighbor        Spk    AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down  St/PfxRcd
10.1.0.5          0 64501   30690   28145      136    0    0     1w1d          3
10.1.0.6          0 64501   30718   28111      136    0    0     1w1d          3
10.1.0.8          0 64501   30719   28001      136    0    0     1w1d          4
10.2.0.7          0 64502    7080    7080      136    0    0    4d21h          1
RP/0/RP0/CPU0:A-RR#show bgp vpnv6 unicast sum
Tue Aug  4 13:14:23.080 UTC
Neighbor        Spk    AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down  St/PfxRcd
10.1.0.5          0 64501   30690   28146       98    0    0     1w1d          2
10.1.0.6          0 64501   30718   28112       98    0    0     1w1d          2
10.1.0.8          0 64501   30720   28002       98    0    0     1w1d          4
10.2.0.7          0 64502    7081    7080       98    0    0    4d21h          1

A-PE1 has B-PE2’s routes with B-PE2’s loopback, 10.2.0.6, as the next hop, and IOS-XE prints the IPv6 next hop as an IPv4-mapped address:

A-PE1#show bgp vpnv4 unicast vrf CustD 10.40.0.2/32      
BGP routing table entry for 10.1.0.5:40:10.40.0.2/32, version 180
Paths: (1 available, best #1, table CustD)
  Flag: 0x100
  Not advertised to any peer
  Refresh Epoch 1
  64502, imported path from 10.2.0.6:40:10.40.0.2/32 (global)
    10.2.0.6 (metric 3) (via default) from 10.1.0.7 (10.1.0.7)
      Origin incomplete, localpref 100, valid, internal, best
      Extended Community: RT:64502:40
      mpls labels in/out nolabel/24018
      rx pathid: 0, tx pathid: 0x0
A-PE1#show bgp vpnv6 unicast vrf CustD 2001:db8:40::2/128
BGP routing table entry for [10.1.0.5:40]2001:DB8:40::2/128, version 115
Paths: (1 available, best #1, table CustD)
  Flag: 0x100
  Not advertised to any peer
  Refresh Epoch 1
  64502, imported path from [10.2.0.6:40]2001:DB8:40::2/128 (global)
    ::FFFF:10.2.0.6 (metric 3) (via default) from 10.1.0.7 (10.1.0.7)
      Origin incomplete, localpref 100, valid, internal, best
      Extended Community: RT:64502:40
      mpls labels in/out nolabel/24017
      rx pathid: 0, tx pathid: 0x0

B-PE2 has A-PE1’s routes with A-PE1’s loopback, 10.1.0.5, as the next hop, and IOS-XR prints the IPv6 next hop as a plain IPv4 address:

! trimmed to the timestamps and the paths
RP/0/RP0/CPU0:B-PE2#show bgp vpnv4 unicast vrf CustD 10.40.0.1/32
Tue Aug  4 13:16:45.136 UTC
BGP routing table entry for 10.40.0.1/32, Route Distinguisher: 10.2.0.6:40
  64501
    10.1.0.5 (metric 20) from 10.2.0.7 (10.2.0.7)
      Received Label 1523 
      Origin incomplete, localpref 100, valid, internal, best, group-best, import-candidate, imported
      Received Path ID 0, Local Path ID 1, version 68
      Extended community: RT:64501:40 
      Source AFI: VPNv4 Unicast, Source VRF: default, Source Route Distinguisher: 10.1.0.5:40
RP/0/RP0/CPU0:B-PE2#show bgp vpnv6 unicast vrf CustD 2001:db8:40::1/128
Tue Aug  4 13:17:06.609 UTC
BGP routing table entry for 2001:db8:40::1/128, Route Distinguisher: 10.2.0.6:40
  64501
    10.1.0.5 (metric 20) from 10.2.0.7 (10.2.0.7)
      Received Label 1524 
      Origin incomplete, localpref 100, valid, internal, best, group-best, import-candidate, imported
      Received Path ID 0, Local Path ID 1, version 66
      Extended community: RT:64501:40 
      Source AFI: VPNv6 Unicast, Source VRF: default, Source Route Distinguisher: 10.1.0.5:40

The Path Between the Sites

A-PE1 resolves 10.40.0.2 through B-PE2’s loopback with VPN label 24018, and that loopback through A-ASBR’s loopback, 10.1.0.8, with labelled unicast label 1813. The top label is 17800, A-PE1’s SR label for 10.1.0.8 from the SR/LDP post:

A-PE1#show ip cef vrf CustD 10.40.0.2 detail
10.40.0.2/32, epoch 0, flags [rib defined all labels]
  recursive via 10.2.0.6 label 24018
    recursive via 10.1.0.8 label 1813
      nexthop 10.1.1.21 GigabitEthernet2 label [17800|17800]-(local:17800)
        repair: attached-nexthop 10.1.1.25 GigabitEthernet3
      nexthop 10.1.1.25 GigabitEthernet3 label 17800-(local:17800), repair

A-PE1’s traceroute from the first output shows the stack each router receives:

A-PE1#traceroute vrf CustD 10.40.0.2 source lo40
Type escape sequence to abort.
Tracing the route to 10.40.0.2
VRF info: (vrf in name/id, vrf out name/id)
  1 10.1.1.21 [MPLS: Labels 17800/1813/24018 Exp 0] 4 msec 4 msec 3 msec
  2 10.1.1.42 [MPLS: Labels 1813/24018 Exp 0] 3 msec 3 msec 4 msec
  3 10.255.0.10 [MPLS: Labels 24/24018 Exp 0] 3 msec 3 msec 3 msec
  4 10.2.1.41 [MPLS: Labels 16600/24018 Exp 0] 3 msec 4 msec 3 msec
  5 10.2.1.14 [MPLS: Labels 16600/24018 Exp 0] 3 msec 3 msec * 
  6  * 
    10.2.1.30 15 msec * 
A-PE1#
  • Hop 1, A-P1, 10.1.1.21, receives all three labels. It removes 17800, because the next router, A-ASBR, is the end of that LSP.
  • Hop 2, A-ASBR, 10.1.1.42, receives 1813 and 24018 and swaps 1813 for 24, B-ASBR’s label.
  • Hop 3, B-ASBR, 10.255.0.10, receives 24 and 24018. B-PE2 advertised implicit-null for its loopback, so B-ASBR removes 24 and sends the packet on with 16600, the SR label for 10.2.0.6.
  • Hop 4, B-P1, 10.2.1.41, receives 16600 and 24018 and sends the same two labels to B-P4.
  • Hop 5, B-P4, 10.2.1.14, receives 16600 and 24018 and removes 16600 toward B-PE2.
  • Hop 6, B-PE2, replies from 10.2.1.30, its address on the link to B-P3. The packet arrived on the link from B-P4.

24018 is at the bottom of the stack on every hop. In the Option B post, each ASBR swaps the VPN label for its own.

16600 is B-PE2’s SR label in algorithm 0, and 16650 is its label in algorithm 128, as B-PE1’s route to 10.2.0.6 shows:

RP/0/RP0/CPU0:B-PE1#show route 10.2.0.6/32 detail
Routing entry for 10.2.0.6/32
  Known via "isis 1", distance 115, metric 30, labeled SR, type level-2
  Installed Aug  4 10:50:38.289 for 03:07:36
    10.2.1.21, via GigabitEthernet0/0/0/0, Backup (Local-LFA)  Label: 0x40d8 (16600)
    10.2.1.25, via GigabitEthernet0/0/0/1, Protected           Label: 0x40d8 (16600)
  Local Label: 0x40d8 (16600)
  Local Label Algo Set (ID, Label, Metric): (128, 16650, 200)

SET_COLOR_128 from the SR-TE post matches only CustC’s route target, 64502:30, so CustD’s routes have no colour and follow algorithm 0.

On B-PE2, 24018 and the IPv6 label 24017 end as Aggregate entries for VRF CustD. B-PE2 removes the label and looks up the destination in the VRF:

! the other SR entries are trimmed
RP/0/RP0/CPU0:B-PE2#show mpls forwarding             
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
16800  16800       SR Pfx (idx 800)   Gi0/0/0/1    10.2.1.33       13080       
24009  31          10.1.0.5/32                     10.2.0.8        0           
24010  Unlabelled  2001:db8:30::3/128[V]   \
                                      Gi0/0/0/3    fe80::e00:f2ff:feea:d401   \
                                                                   1000        
24011  Unlabelled  10.30.0.3/32[V]    Gi0/0/0/3    10.2.12.6       0           
24015  36          10.1.0.7/32                     10.2.0.8        0           
24017  Aggregate   CustD: Per-VRF Aggr[V]   \
                                      CustD                        1520        
24018  Aggregate   CustD: Per-VRF Aggr[V]   \
                                      CustD                        12230       

In the other direction, B-PE2 imposes 1523, A-PE1’s VPN label, then 31, B-ASBR’s label for 10.1.0.5, and 16800, the SR label for B-ASBR’s loopback:

! trimmed to the route and the imposed labels
RP/0/RP0/CPU0:B-PE2#show cef vrf CustD 10.40.0.1/32 detail
Tue Aug  4 13:17:30.100 UTC
10.40.0.1/32, version 3, internal 0x5000001 0x30 (ptr 0xe70a640) [1], 0x600 (0xdb79ad0), 0xa08 (0xf683ac8)
   via 10.1.0.5/32, 5 dependencies, recursive [flags 0x6000]
    next hop 10.1.0.5/32 via 24009/0/21
     next hop 10.2.1.33/32 Gi0/0/0/1    labels imposed {16800 31 1523}
A-PE1 to B-PE2 through A-P1, A-ASBR, B-ASBR, B-P1 and B-P4: B-PE2's route and loopback advertised from right to left, the labels in each provider, and the label stack on each link

A-PE1’s ping to B-PE2’s CustD loopback got 5 of 5 replies in both address families:

A-PE1#ping vrf CustD 10.40.0.2 source lo40
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.40.0.2, timeout is 2 seconds:
Packet sent with a source address of 10.40.0.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 5/7/15 ms
A-PE1#ping vrf CustD 2001:db8:40::2 source lo40
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:DB8:40::2, timeout is 2 seconds:
Packet sent with a source address of 2001:DB8:40::1%CustD
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/8/23 ms
A-PE1#

B-PE2’s ping in the other direction got the same:

RP/0/RP0/CPU0:B-PE2#ping vrf CustD 10.40.0.1 source lo40
Tue Aug  4 13:22:58.811 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.40.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/5/8 ms
RP/0/RP0/CPU0:B-PE2#ping vrf CustD 2001:db8:40::1 source lo40
Tue Aug  4 13:23:12.982 UTC
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:db8:40::1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 11/23/38 ms
RP/0/RP0/CPU0:B-PE2#

Three Options on A-ASBR

Gi4 on A-ASBR now has a sub-interface for each option, and its forwarding table shows all three:

A-ASBR#show mpls forwarding-table 
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
1800       Pop Label  10.1.0.100/32    0             Gi2        10.1.1.41   
1801       Pop Label  10.1.0.4/32      19809998      Gi3        10.1.1.45   
1802       1105       10.1.0.3/32      0             Gi2        10.1.1.41   
           1401       10.1.0.3/32      0             Gi3        10.1.1.45   
1803       1106       10.1.0.2/32      0             Gi2        10.1.1.41   
1804       Pop Label  10.1.0.1/32      19818190      Gi2        10.1.1.41   
1805       1404       10.1.0.106/32    0             Gi3        10.1.1.45   
1806       1405       10.1.0.6/32      0             Gi3        10.1.1.45   
1807       1103       10.1.0.5/32      4758          Gi2        10.1.1.41   
1808       Pop Label  10.255.0.2/32    0             Gi4.255    10.255.0.2  
1809       1118       10.1.0.7/32      1027289       Gi2        10.1.1.41   
1810       37         10.2.0.7/32      1075669       Gi4.254    10.255.0.10 
1813       24         10.2.0.6/32      5040          Gi4.254    10.255.0.10 
1816       25         10.2.0.5:10:10.2.10.0/30   \
                                       0             Gi4.255    10.255.0.2  
1817       26         10.2.0.5:10:10.10.0.3/32   \
                                       1830          Gi4.255    10.255.0.2  
1820       Pop Label  10.255.0.10/32   0             Gi4.254    10.255.0.10 
1823       27         [167903237:10]2001:DB8:2:20::/64   \
                                       0             Gi4.255    10.255.0.2  
1824       28         [167903237:10]2001:DB8:10::3/128   \
                                       1830          Gi4.255    10.255.0.2  
1828       1517       10.1.0.5:10:10.1.10.0/30   \
                                       0             Gi2        10.1.1.41   
1829       1518       10.1.0.5:10:10.10.0.1/32   \
                                       1830          Gi2        10.1.1.41   
1830       1614       10.1.0.6:10:10.1.10.4/30   \
                                       0             Gi3        10.1.1.45   
1831       1615       10.1.0.6:10:10.10.0.2/32   \
                                       0             Gi3        10.1.1.45   
1832       1519       [167837701:10]2001:DB8:10::1/128   \
                                       1586          Gi2        10.1.1.41   
1833       1612       [167837702:10]2001:DB8:10::2/128   \
                                       0             Gi3        10.1.1.45   
1837       No Label   2001:DB8:30::3/128[V]   \
                                       0             Gi4.30     FE80::E00:86FF:FEF3:D403
1838       No Label   2001:DB8:30::2/128[V]   \
                                       0             Gi4.30     FE80::E00:86FF:FEF3:D403
1841       No Label   10.30.0.3/32[V]  0             Gi4.30     10.255.0.6  
1842       No Label   10.30.0.2/32[V]  0             Gi4.30     10.255.0.6  
  • Gi4.30 is Option A: CustC’s prefixes in the VRF, marked [V], leave with No Label.
  • Gi4.255 is Option B: CustA’s VPN prefixes, shown with their route distinguisher, leave with B-ASBR’s VPN labels, 25 to 28.
  • Gi4.254 is Option C: B-RR’s and B-PE2’s loopbacks leave with B-ASBR’s labelled unicast labels, 37 and 24. Traffic to B-RR’s loopback, including the session between the route reflectors, arrives with label 1810 and leaves with 37.

[167903237:10] is the route distinguisher 10.2.0.5:10, with the IP address printed as one decimal number. The Pop Label entries for 10.255.0.2 and 10.255.0.10 are the next hops of the eBGP sessions on Gi4.255 and Gi4.254.

A-ASBR has no VRF CustD. However, its VPNv4 table has both CustD routes:

A-ASBR#show vrf                                             
  Name                             Default RD            Protocols   Interfaces
  CustC                            10.1.0.8:30           ipv4,ipv6   Gi4.30
  clab-mgmt                        <not set>             ipv4        Gi1
A-ASBR#show bgp vpnv4 unicast all | i 10.40|:40             
Route Distinguisher: 10.1.0.5:40
 *>i  10.40.0.1/32     10.1.0.5                 0    100      0 ?
Route Distinguisher: 10.2.0.6:40
 *>i  10.40.0.2/32     10.2.0.6                      100      0 64502 ?
A-ASBR#show ip route vrf CustD                              
% IP routing table vrf CustD does not exist

A-RR reflects them over its VPNv4 session to A-ASBR, which Options A and B use, since SCOPE_CUSTD_OUT applies only toward B-RR. With Option C alone, an ASBR needs no VPN session. no bgp default route-target filter, from the Option B post, keeps them:

A-ASBR#show run | i route-target filter
 no bgp default route-target filter

BGP allocates a label for a VPN route when it changes the route’s next hop. RM-OPTB-OUT from the Option B post sends B-ASBR only the routes with route target 64501:10, so A-ASBR leaves the next hop of the CustD routes unchanged and allocates no label for them. The forwarding table above has no CustD entry.

A-ASBR’s entry for A-PE1’s route reads Not advertised to any peer, with nolabel as the in label. This capture is from a later date, when A-PE1’s VPN label for the route had changed from 1523 to 1519:

A-ASBR#show bgp vpnv4 unicast rd 10.1.0.5:40 10.40.0.1/32
BGP routing table entry for 10.1.0.5:40:10.40.0.1/32, version 34
Paths: (1 available, best #1, no table)
  Not advertised to any peer
  Refresh Epoch 1
  Local
    10.1.0.5 (metric 3) (via default) from 10.1.0.7 (10.1.0.7)
      Origin incomplete, metric 0, localpref 100, valid, internal, best
      Extended Community: RT:64501:40
      Originator: 10.1.0.5, Cluster list: 10.1.0.7
      mpls labels in/out nolabel/1519
      rx pathid: 0, tx pathid: 0x0
A-ASBR#

Adding Option C did not break the existing setup. CustA-HQ’s ping to CustA-Br2, over the path from the Option B post, got 5 of 5 replies in both address families:

CustA-HQ#ping 10.10.0.3 source lo0     
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.0.3, timeout is 2 seconds:
Packet sent with a source address of 10.10.0.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 5/7/11 ms
CustA-HQ#ping 2001:db8:10::3 source lo0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2001:DB8:10::3, timeout is 2 seconds:
Packet sent with a source address of 2001:DB8:10::1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/5/8 ms
CustA-HQ#

What’s Next

The next post adds Inter-AS Option AB for a new customer, on the same physical link.

Leave a Reply