Inter-AS L3VPN Option A, B and C

Топология для InterAS

В схеме у CE3 не корректно указан loopback, на самом деле используется 3.3.3.3/32


Вступление

Все три опции InterAS будут реализованы на топологии выше. Предварительно конфигурация в себя включает только LDP+IGP внутри AS (AS100 – ospf ; AS200 – isis). Между CE-PE будет eBGP.
Так же еще один момент, в AS100 роутеры на базе IOS-XE, в то время в AS200 на базе IOS-XR.


Как говорил Rohit Pardasani в своём вебинаре на тему InterAS, при конфигурации стоит придерживаться шести правил:

  1. Создать уникальную таблицу маршрутизации (т.е. vrf) – “creating a unique routing table” (c)
  2. Переместить интерфейс, смотрящий в сторону CE, в vrf – “to move the customer facing interface from GRT to the routing table of vrf” (c)
  3. Настроить маршрутизацию между CE<>PE и изучить маршруты от CE – “learning routers from the customer” (c)
  4. Настроить vpnv4 сессию между PE маршрутизаторами – “number four was vpnv4 neighborship” (c)
  5. Настроить редистрибьюцию между CE<>PE, это в случае если между CE<>PE был использован НЕ протокол bgp – “redistribution between the PE CE routing protocol” (c)
  6. Настроить импорт и экспорт route target для vrf – “step number six is your import export” (c)

Option A

Импровизированная схема optA

В Option A для каждого клиента на ASBR‘ах нужно создавать отдельный vrf и отдельный саб-интерфейс между ISP. При этом между ISP нет mpls, там только чистый IP трафик. В OptA ASBR’ы так же считаются как CE роутеры так как на них, повторюсь, создаются ipv4 (vrf) сессия (eBGP) для каждого vrf’а.

Основные моменты:

  • Между CE и PE поднимается ipv4 unicast eBGP сессия (с стороны PE ipv4 в vrf‘е).
  • Роут таргеты являются значимыми только внутри AS (т.е. обоим ISP НЕ ТРЕБУЕТСЯ знать какие RT они используют)
  • Между PE/ASBR <> RR поднимается глобальная vpnv4 сессия (iBGP).
  • Между ASBR‘ми ipv4 сессия для каждого vrf (eBGP).
  • Обмен сервисными метками, внутри одной AS, происходит с помощью RR.
  • Обмен транспортной меткой происходит напрямую между роутерами (т.е. с помощью LDP+IGP).

План что требуется сделать:
CE1/CE3: Поднять обычную eBGP сессию с PE и заредистрибьютить маршруты в bgp.
Y-PE4/B-PE4: Создать vrf, поместить клиентский интерфейс в него. Настроить eBGP с CE, настроить iBGP vpnv4 сессию с рефлектором. Заимпортировать и экспортировать роут таргеты.
Y-RR3/B-RR3: Настроить iBGP vpnv4 сессию с PE и ASBR, настроив его как рефлектор.
Y-ASBR1/B-ASBR1: Настроить глобально vpnv4 сессию с локальным рефлектором (iBGP) и ipv4 из под vrf с ASBR’ом соседнего ISP (eBGP).

Конфиг у CE прост, это eBGP с PE:

CE1:
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
!
router bgp 1
bgp log-neighbor-changes
 neighbor 192.168.1.4 remote-as 100
 neighbor 192.168.1.4 update-source Ethernet0/0
 !
address-family ipv4
  redistribute connected
  neighbor 192.168.1.4 activate
 exit-address-family

CE3:
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.2.3 255.255.255.0
!
router bgp 3
 bgp log-neighbor-changes
 neighbor 192.168.2.4 remote-as 200
 neighbor 192.168.2.4 update-source Ethernet0/0
 !
 address-family ipv4
  redistribute connected
  neighbor 192.168.2.4 activate
 exit-address-family

В конфиге для Y-PE4 применена команда no bgp default ipv4-unicast т.к. IOS/IOS-XE по дефолту в GRT (global routing table) еще будет пытаться поднять ipv4 unicast сессию, в данном случае эта сессия не нужна, поэтому она была отключена.
Сам конфиг:

Y-PE4:

ip vrf Green
 rd 100:1
 route-target export 100:1
 route-target import 100:1

interface GigabitEthernet2
 description _G-CE1_eth0/0_##TO-CLIENT##_
 ip vrf forwarding Green
 ip address 192.168.1.4 255.255.255.0

router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 description Y-RR3
 neighbor 3.3.3.3 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 send-community extended
  neighbor 3.3.3.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf Green
  neighbor 192.168.1.1 remote-as 1
  neighbor 192.168.1.1 description G-CE1
  neighbor 192.168.1.1 update-source GigabitEthernet2
  neighbor 192.168.1.1 activate
 exit-address-family

В IOS-XR логика не много другая (это еще не раз будет упомянуто), и тут как под vrf так и под самим нейбором требуется отдельно включать address-family ipv4 unicast.
Так же если поднимается eBGP сессия, то по дефолту, если не указать политику, то все маршруты будут фильтроваться (денаится) – т.е. неявное DENY-ANY (только для eBGP). Поэтому нужна route-policy PASS

B-PE4:

vrf Green
 address-family ipv4 unicast
  import route-target
   200:3
  !
  export route-target
   200:3
  !
 !
!
interface GigabitEthernet0/0/0/0
 description _G-CE3_eth0/0_##TO-CLIENT##_
 vrf Green
 ipv4 address 192.168.2.4 255.255.255.0
!
!
route-policy PASS
  pass
end-policy
!
router bgp 200
 address-family vpnv4 unicast
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family vpnv4 unicast
  !
 !
 vrf Green
  rd 200:3
  address-family ipv4 unicast  <<< включаем "глобально" для vrf
  !
  neighbor 192.168.2.3
   remote-as 3
   update-source GigabitEthernet0/0/0/0
   address-family ipv4 unicast  <<< включаем уже для нейбора
    route-policy PASS in
    route-policy PASS out
   !
  !
 !
!

Уже на этом этапе на PE должны видны маршруты от CE

Y-PE4 (IOS-XE):

Y-PE4#show bgp vpnv4 un al
BGP table version is 5, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 100:1 (default for vrf Green)
 *>  1.1.1.1/32       192.168.1.1              0             0 1 ?
 r>  192.168.1.0      192.168.1.1              0             0 1 ?

B-PE4 (IOS-XR):

RP/0/0/CPU0:B-PE4# show bgp vpnv4 un
Sat Mar 19 23:00:40.913 UTC
BGP router identifier 44.44.44.44, local AS number 200
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0x0   RD version: 0
BGP main routing table version 6
BGP NSR Initial initsync version 3 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs

Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 200:3 (default for vrf Green)
*> 3.3.3.3/32         192.168.2.3              0             0 3 ?
*> 192.168.2.0/24     192.168.2.3              0             0 3 ?

Processed 2 prefixes, 2 paths

т.к. на роутерах создан vrf, то маршруты в bgp, да и собственно в таблице маршрутизации, можно увидеть как из под bgp vpnv4 unicast (all), так и из под bgp vrf Green.
Теперь конфиг для ASBR’ов:

Y-ASBR1 (IOS-XE):

ip vrf Green
 rd 100:1
 route-target export 100:1
 route-target import 100:1

interface GigabitEthernet2
 description _B-ASBR1_Gi0/0/0/2_##PEERING##
 ip vrf forwarding Green
 ip address 100.200.1.100 255.255.255.0

router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 send-community extended
  neighbor 3.3.3.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf Green
  neighbor 100.200.1.200 remote-as 200
  neighbor 100.200.1.200 update-source GigabitEthernet2
  neighbor 100.200.1.200 activate
 exit-address-family
B-ASBR1 (IOS-XR):

vrf Green
 address-family ipv4 unicast
  import route-target
   200:3
  !
  export route-target
   200:3
  !
 !
!
interface GigabitEthernet0/0/0/2
 description _Y-ASBR1_Gi2_##PEERING##
 vrf Green
 ipv4 address 100.200.1.200 255.255.255.0
!
!
route-policy PASS
  pass
end-policy
!
router bgp 200
 address-family vpnv4 unicast
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family vpnv4 unicast
  !
 !
 vrf Green
  rd 200:3
  address-family ipv4 unicast
  !
  neighbor 100.200.1.100
   remote-as 100
   update-source GigabitEthernet0/0/0/2
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out

Теперь осталось настроить рефлектора (Y-RR3 / B-RR3). С стороны рефлекторов это такая же iBGP vpnv4 сессия. Конфиг будет похож c PE, когда настраивали сессию с рефлектором, только за исключением одного момента:

  • Включить функцию рефлектора на сессиях с PE. Для этого добавляем строчку – route-reflector-client – под нейбрами PE и ASBR. При добавлении данной строчки, роутер не будет фильтровать vpnv4 маршруты, даже если на нём нет vrf‘а с импортом RT.
Y-RR3:
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor IBGP peer-group
 neighbor IBGP remote-as 100
 neighbor IBGP update-source Loopback0
 neighbor 1.1.1.1 peer-group IBGP
 neighbor 4.4.4.4 peer-group IBGP
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor IBGP send-community extended
  neighbor IBGP route-reflector-client
  neighbor 1.1.1.1 activate
  neighbor 4.4.4.4 activate
 exit-address-family

B-RR3:
router bgp 200
address-family vpnv4 unicast
!
neighbor-group IBGP
remote-as 200
update-source Loopback0
address-family vpnv4 unicast
route-reflector-client
!
!
neighbor 11.11.11.11
use neighbor-group IBGP
!
neighbor 44.44.44.44
use neighbor-group IBGP

Теперь обе CE должны видеть маршруты друг друга, проверим:

G-CE1:
G-CE1#show ip route 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback0
      3.0.0.0/32 is subnetted, 1 subnets
B        3.3.3.3 [20/0] via 192.168.1.4, 00:18:44
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, Ethernet0/0
L        192.168.1.1/32 is directly connected, Ethernet0/0
B     192.168.2.0/24 [20/0] via 192.168.1.4, 00:19:45

G-CE3:
G-CE3#show ip route 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
B        1.1.1.1 [20/0] via 192.168.2.4, 00:20:41
      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
B     192.168.1.0/24 [20/0] via 192.168.2.4, 00:20:41
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, Ethernet0/0
L        192.168.2.3/32 is directly connected, Ethernet0/0

Связанность в обе стороны есть:

G-CE1# ping 3.3.3.3 source  1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 26/34/49 ms

G-CE3#ping 1.1.1.1 source 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 29/35/45 ms

Проверим трассировку и обратим внимание на хоп #4, в нём нет MPLS метки – в этом и есть optA. Между ISP нет MPLS’а

G-CE3#traceroute 1.1.1.1 source 3.3.3.3 numeric
Type escape sequence to abort.
Tracing the route to 1.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
1 192.168.2.4 15 msec 2 msec 3 msec
2 200.2.4.2 [MPLS: Labels 24001/24006 Exp 0] 32 msec 22 msec 23 msec
3 200.2.1.1 [MPLS: Label 24006 Exp 0] 27 msec 19 msec 18 msec
4 100.200.1.100 28 msec 25 msec 19 msec  <<< нет mpls  метки
5 100.2.1.2 [MPLS: Labels 16/21 Exp 0] 36 msec 27 msec 27 msec
6 192.168.1.4 [AS 1] [MPLS: Label 21 Exp 0] 25 msec 23 msec 42 msec
7 192.168.1.1 [AS 1] 25 msec * 48 msec

Сервисная метка
Транспортная метка

Из трассировки видим как ходит клиентский пакет, визуализируем это на топологии:

Путь хождения клиентского трафик с CE3 в сторону CE1 при реализации optA

Видим как B-PE4 запаковал клиентский ip пакет в стек из mpls, проверим:

RP/0/0/CPU0:B-PE4#show bgp vpnv4 un rd 200:3 1.1.1.1/32
Sun Mar 20 14:14:33.439 UTC
BGP routing table entry for 1.1.1.1/32, Route Distinguisher: 200:3
Versions:
Process   bRIB/RIB   SendTblVer
Speaker      13          13
Last Modified: Mar 20 12:36:41.503 for 01:37:52
Paths: (1 available, best #1)
Not advertised to any peer
Path #1: Received by speaker 0
Not advertised to any peer
100 1
11.11.11.11 (metric 30) from 33.33.33.33 (11.11.11.11)
Received Label 24006  <<< ASBR1 просигнализировал, что для этого сервиса метка 24006
Origin incomplete, localpref 100, valid, internal, best, group-best, import-candidate, imported
Received Path ID 0, Local Path ID 0, version 13
Extended community: RT:200:3
Originator: 11.11.11.11, Cluster list: 33.33.33.33
Source AFI: VPNv4 Unicast, Source VRF: Green, Source Route Distinguisher: 200:3

Видим, чтобы добраться до G-CE1 нужно направить пакет в сторону B-ASBR1 (11.11.11.11). Теперь нужно узнать какую метку использовать как транспортную до ASBR1:

RP/0/0/CPU0:B-PE4#show mpls forwarding  prefix 11.11.11.11/32
Sun Mar 20 14:18:12.674 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24003  24001       11.11.11.11/32     Gi0/0/0/1    200.2.4.2       6704    

Все как в трассировке: 24001 транспортная, 24006 сервисная.

Через ip cef можно увидеть сразу и транспортную и сервисную:

RP/0/0/CPU0:B-PE4#show cef vrf Green 1.1.1.1/32
Sun Mar 20 14:14:52.957 UTC
1.1.1.1/32, version 9, internal 0x1000001 0x0 (ptr 0xa141a1f4) [1], 0x0 (0x0), 0x208 (0xa1583230)
 Updated Mar 20 12:36:41.751
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
   via 11.11.11.11/32, 3 dependencies, recursive [flags 0x6000]
    path-idx 0 NHID 0x0 [0xa15eb7f4 0x0]
    recursion-via-/32
    next hop VRF - 'default', table - 0xe0000000
    next hop 11.11.11.11/32 via 24003/0/21
     next hop 200.2.4.2/32 Gi0/0/0/1    labels imposed {24001 24006}

Проверим на B-ASBR1

RP/0/0/CPU0:B-ASBR1#show mpls forwarding  vrf Green
Sun Mar 20 14:25:21.594 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24006  Unlabelled  1.1.1.1/32[V]      Gi0/0/0/2    100.200.1.100   9748        
24007  Unlabelled  192.168.1.0/24[V]  Gi0/0/0/2    100.200.1.100   0 

RP/0/0/CPU0:B-ASBR1#show ip cef vrf Green 1.1.1.1/32
Sun Mar 20 14:23:58.660 UTC
1.1.1.1/32, version 5, internal 0x1000001 0x0 (ptr 0xa1400374) [1], 0x0 (0x0), 0x200 (0xa1583190)
 Updated Mar 20 12:18:00.997 
 local adjacency 100.200.1.100
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
   via 100.200.1.100/32, 2 dependencies, recursive, bgp-ext [flags 0x6020]
    path-idx 0 NHID 0x0 [0xa13ffd74 0x0]
    next hop 100.200.1.100/32 via 100.200.1.100/32
     local label 24006 
     next hop 100.200.1.100/32 Gi0/0/0/2    labels imposed {None}

Посмотрим далее, на Y-ASBR1:

Y-ASBR1#show bgp vpnv4 unicast vrf Green 1.1.1.1/32 
BGP routing table entry for 100:1:1.1.1.1/32, version 4
Paths: (1 available, best #1, table Green)
Advertised to update-groups:
2
Refresh Epoch 1
1
4.4.4.4 (metric 3) (via default) from 3.3.3.3 (3.3.3.3)
Origin incomplete, metric 0, localpref 100, valid, internal, best
Extended Community: RT:100:1
Originator: 4.4.4.4, Cluster list: 3.3.3.3
mpls labels in/out nolabel/21
rx pathid: 0, tx pathid: 0x0


Y-ASBR1#show mpls forwarding-table 4.4.4.4 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
16         16         4.4.4.4/32       0             Gi1        100.2.1.2 

Y-ASBR1#show ip cef vrf Green 1.1.1.1/32
1.1.1.1/32
  nexthop 100.2.1.2 GigabitEthernet1 label 16() 21()

И уже на самом Y-PE4

Y-PE4#show mpls forwarding-table vrf Green 1.1.1.1 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
21         No Label   1.1.1.1/32[V]    7124          Gi2        192.168.1.1 
Y-PE4#show ip cef vrf Green 1.1.1.1/32               
1.1.1.1/32
  nexthop 192.168.1.1 GigabitEthernet2

И того имеем, optA прост, но масштабируемость у него ужасная – каждый раз когда будет появляться новый клиент, на стыке с ISP нужно будет поднимать новый саб-интерфейс в клиентском vrf’e.


Option B

Импровизированная схема optB

В Option B, на стыке между ISP, будет уже один отдельный саб-интерфейс и между ASBR будет mpls.

Основные моменты:

  • Между CE и PE поднимается ipv4 unicast eBGP сессия (с стороны PE ipv4 в vrf‘е).
  • Роут таргеты являются значимыми для обоих AS (т.е. обоим ISP ТРЕБУЕТСЯ знать какие RT они используют – необходимо для ликинга)
  • Между PE/ASBR <> RR поднимается глобальная vpnv4 сессия (iBGP).
  • Между ASBR‘ми одна vpnv4 сессия (eBGP).
  • Обмен сервисными метками, внутри одной AS, происходит с помощью RR.
  • Обмен транспортной меткой происходит напрямую между роутерами (т.е. с помощью LDP+IGP).

План что требуется сделать:
CE1/CE3: Поднять обычную eBGP сессию с PE и заредистрибьютить маршруты в bgp.
Y-PE4/B-PE4: Создать vrf, поместить клиентский интерфейс в него. Настроить eBGP с CE, настроить iBGP vpnv4 сессию с рефлектором. Заимпортировать и экспортировать роут таргеты.
Y-RR3/B-RR3: Настроить iBGP vpnv4 сессию с PE и ASBR, настроив его как рефлектор.
Y-ASBR1/B-ASBR1: Настроить глобально vpnv4 сессию с локальным рефлектором (iBGP) и с ASBR’ом соседнего ISP (eBGP).


Хотелось бы еще раз выделить основные отличия optA от optB.
В optB:

  • Между ASBR’ами теперь только одна vpnv4 unicast сессия для обмена всеми клиентскими маршрутами, вместо отдельной ipv4 для каждого vrf’а.
  • RT теперь являются значимыми для обоих ISP. Так теперь на PE требуется импортнуть RT, которая экспортируется в соседнем ISP и наоборот.

Для CE, очевидно, ничего не меняется это eBGP с PE:

CE1:
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
!
router bgp 1
bgp log-neighbor-changes
 neighbor 192.168.1.4 remote-as 100
 neighbor 192.168.1.4 update-source Ethernet0/0
 !
address-family ipv4
  redistribute connected
  neighbor 192.168.1.4 activate
 exit-address-family

CE3:
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.2.3 255.255.255.0
!
router bgp 3
 bgp log-neighbor-changes
 neighbor 192.168.2.4 remote-as 200
 neighbor 192.168.2.4 update-source Ethernet0/0
 !
 address-family ipv4
  redistribute connected
  neighbor 192.168.2.4 activate
 exit-address-family

Для PE в конфиге дополниться только строчка в vrf, необходимо добавить импорт RT с которой анонсит противоположный ISP. Напомню, что в AS100 RT: 100:1, а в AS200 RT: 200:3.
Соответственно на Y-PE4 необходимо импорнуть RT 200:3, а на B-PE4 100:1:

Y-PE4(IOS-XE):
ip vrf Green
 rd 100:1
 route-target export 100:1
 route-target import 100:1
 route-target import 200:3  <<< импорт маршрутов от ISP AS200

interface GigabitEthernet2
 description _G-CE1_eth0/0_##TO-CLIENT##_
 ip vrf forwarding Green
 ip address 192.168.1.4 255.255.255.0

router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 description Y-RR3
 neighbor 3.3.3.3 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 send-community extended
  neighbor 3.3.3.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf Green
  neighbor 192.168.1.1 remote-as 1
  neighbor 192.168.1.1 description G-CE1
  neighbor 192.168.1.1 update-source GigabitEthernet2
  neighbor 192.168.1.1 activate
 exit-address-family
B-PE4(IOS-XR):
vrf Green
 address-family ipv4 unicast
  import route-target
   100:1  <<< импорт маршрутов от ISP AS100
   200:3
  !
  export route-target
   200:3
  !
 !
!
interface GigabitEthernet0/0/0/0
 description _G-CE3_eth0/0_##TO-CLIENT##_
 vrf Green
 ipv4 address 192.168.2.4 255.255.255.0
!
!
route-policy PASS
  pass
end-policy
!
router bgp 200
 address-family vpnv4 unicast
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family vpnv4 unicast
  !
 !
 vrf Green
  rd 200:3
  address-family ipv4 unicast
  !
  neighbor 192.168.2.3
   remote-as 3
   update-source GigabitEthernet0/0/0/0
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
 !
!

Теперь конфиг ASBR’ов. Основные тут изменения в том, что нет vrf‘а и теперь у него только две vpnv4 сессии, одна с локальным рефлектором, другая с ISP роутером.
И тут один момент, это отключение стандартного поведения, когда роутер фильтрует все vpnv4 маршруты, если для них нет импорта по RT в vrf, а так как это не рефлектор и ни какого vrf’а нет на нём, то требуется отключить это поведение. IOS-XE это – no bgp default route-target filter, а у IOS-XR это – retain route-target all

Y-ASBR1:
interface GigabitEthernet2
 description _B-ASBR1_Gi0/0/0/2_##PEERING##
 ip address 100.200.1.100 255.255.255.0
!
router static
 address-family ipv4 unicast         <<< О необходимости статике чуть ниже
  100.200.1.100/32 GigabitEthernet0/0/0/2
!
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 no bgp default route-target filter <<< т.к. теперь нет vrf, необходимо отключить фильтр
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback0
 neighbor 100.200.1.200 remote-as 200
 neighbor 100.200.1.200 update-source GigabitEthernet2
 !
 address-family vpnv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 send-community extended
  neighbor 3.3.3.3 next-hop-self
  neighbor 100.200.1.200 activate
  neighbor 100.200.1.200 send-community extended
  neighbor 100.200.1.200 next-hop-self
 exit-address-family

B-ASBR1:
router bgp 200
 address-family vpnv4 unicast
  retain route-target all <<< т.к. теперь нет vrf, необходимо отключить фильтр
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family vpnv4 unicast
   next-hop-self
  !
 !
 neighbor 100.200.1.100
  remote-as 100
  update-source GigabitEthernet0/0/0/2
  address-family vpnv4 unicast
   route-policy PASS in
   route-policy PASS out
   next-hop-self
  !
 !
!

На рефлекторах конфиг без изменений:

Y-RR3:

router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast

 neighbor IBGP peer-group
 neighbor IBGP remote-as 100
 neighbor IBGP update-source Loopback0
 neighbor 1.1.1.1 peer-group IBGP
 neighbor 4.4.4.4 peer-group IBGP
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor IBGP send-community extended
  neighbor IBGP route-reflector-client
  neighbor 1.1.1.1 activate
  neighbor 4.4.4.4 activate
 exit-address-family

B-RR3:

router bgp 200
address-family vpnv4 unicast
!
neighbor-group IBGP
remote-as 200
update-source Loopback0
address-family vpnv4 unicast
route-reflector-client
!
!
neighbor 11.11.11.11
use neighbor-group IBGP
!
neighbor 44.44.44.44
use neighbor-group IBGP

Проверим маршруты на CE’шках

G-CE1#show ip route 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback0
      3.0.0.0/32 is subnetted, 1 subnets
B        3.3.3.3 [20/0] via 192.168.1.4, 00:00:32
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, Ethernet0/0
L        192.168.1.1/32 is directly connected, Ethernet0/0
B     192.168.2.0/24 [20/0] via 192.168.1.4, 00:00:32


G-CE3#show ip route 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
B        1.1.1.1 [20/0] via 192.168.2.4, 00:00:41
      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
B     192.168.1.0/24 [20/0] via 192.168.2.4, 00:00:41
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, Ethernet0/0
L        192.168.2.3/32 is directly connected, Ethernet0/0

Проверим связанность

G-CE1#ping 3.3.3.3 source  1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1 
.....
Success rate is 0 percent (0/5)

G-CE3#ping 1.1.1.1 source 3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3 
.....
Success rate is 0 percent (0/5)

Но связанности нет, а маршруты при этом везде есть. Зная, что с транспортом внутри одного mpls домена у нас все должно быть ок, по крайне мере optA у нас же работал, проверим стык между ISP. Предварительно посмотрев на Y-PE4, какая метка выделена для vpn’а.

Y-PE4#show ip cef vrf Green 3.3.3.3/32
3.3.3.3/32
  nexthop 100.2.4.2 GigabitEthernet1 label 18() 24()

Прошу обратить внимание, что в "Outgoing interface" присутствует выходной интерфейс.

Y-ASBR1#show mpls forwarding-table labels  24
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
24         24008      200:3:3.3.3.3/32 590           Gi2        100.200.1.20

Видим, что label switch с этой стороны в порядке, swap сервисной метки есть.

Y-ASBR1#show mpls forwarding-table interface gi2
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
21         Pop Label  100.200.1.200/32 0             Gi2        100.200.1.200
24         24008      200:3:3.3.3.3/32 590           Gi2        100.200.1.200
25         24009      200:3:192.168.2.0/24   \
                                       0             Gi2        100.200.1.200

Проверим с стороны B-ASRB1

RP/0/0/CPU0:B-PE4#show cef vrf Green 1.1.1.1/32
Sun Mar 20 18:50:24.865 UTC
1.1.1.1/32, version 23, internal 0x1000001 0x0 (ptr 0xa1419a74) [1], 0x0 (0x0), 0x208 (0xa1583230)
 Updated Mar 20 18:10:12.250
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
   via 11.11.11.11/32, 3 dependencies, recursive [flags 0x6000]
    path-idx 0 NHID 0x0 [0xa15eb7f4 0x0]
    recursion-via-/32
    next hop VRF - 'default', table - 0xe0000000
    next hop 11.11.11.11/32 via 24003/0/21
     next hop 200.2.4.2/32 Gi0/0/0/1    labels imposed {24001 24006}

Тут видим, что "исходящий" интерфейс отсутствует, что уже не есть хорошо

RP/0/0/CPU0:B-ASBR1#show mpls forwarding labels 24006
Sun Mar 20 18:51:04.782 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24006  23          100:1:1.1.1.1/32                100.200.1.100   0       

RP/0/0/CPU0:B-ASBR1#show mpls forwarding interface gigabitEthernet 0/0/0/2
Sun Mar 20 18:52:19.447 UTC
RP/0/0/CPU0:B-ASBR1#

Через detail видим, label switch с этой стороны "не работает"

RP/0/0/CPU0:B-ASBR1#show mpls forwarding labels 24006 detail 
Sun Mar 20 18:33:39.934 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24006  23          100:1:1.1.1.1/32                100.200.1.100   0           
     Updated: Mar 20 17:53:41.689
     Path Flags: 0x6000 [  ]
     Label Stack (Top -> Bottom): { }
     MAC/Encaps: 0/0, MTU: 0
     Packets Switched: 0

Нет mpls между ISP со стороны IOS-XR

RP/0/0/CPU0:B-ASBR1#show cef 100.200.1.100/32
Sun Mar 20 18:53:54.541 UTC
100.200.1.100/32, version 0, internal 0x1020001 0x0 (ptr 0xa13ffd74) [1], 0x0 (0xa13cb464), 0x0 (0x0)
 Updated Mar 20 18:08:58.606 
 local adjacency 100.200.1.100
 Prefix Len 32, traffic index 0, Adjacency-prefix, precedence n/a, priority 15
   via 100.200.1.100/32, GigabitEthernet0/0/0/2, 3 dependencies, weight 0, class 0 [flags 0x0]
    path-idx 0 NHID 0x0 [0xa10dc250 0x0]
    next hop 100.200.1.100/32
    local adjacency

И тут вскрывается еще одна особенность IOS-XR. Когда мы конфигурировали vpnv4 сессию на Y-ASBR1 (IOS-XE), то после активации vpnv4 unicast сессии с ISP, Y-ASBR1 автоматом включил mpls bgp forwarding на линке в сторону B-ASBR1:

*Mar 20 18:56:59.236: %BGP_LMM-6-AUTOGEN1: The mpls bgp forwarding command has been configured on interface: GigabitEthernet2

Y-ASBR1(config)#do sh run int GigabitEthernet2
Building configuration...

Current configuration : 156 bytes
!
interface GigabitEthernet2
 description _B-ASBR1_Gi0/0/0/2_##PEERING##
 ip address 100.200.1.100 255.255.255.0
 negotiation auto
 mpls bgp forwarding
end

А вот IOS-XR ничего подобного не делает, вся причина в том что IOS-XR не назначает MPLS метку, если маршрут в таблице маршрутизации не “выглядит” как /32. (!)
Если посмотреть в таблицу маршрутизации мы не увидим next-hop в сторону Y-ASBR1 (100.200.1.100/32), соответственно и нет метки

RP/0/0/CPU0:B-ASBR1#show route
Sun Mar 20 19:08:11.792 UTC

Codes: C - connected, S - static, R - RIP, B - BGP, (>) - Diversion path
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - ISIS, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, su - IS-IS summary null, * - candidate default
       U - per-user static route, o - ODR, L - local, G  - DAGR, l - LISP
       A - access/subscriber, a - Application route
       M - mobile route, r - RPL, (!) - FRR Backup path

Gateway of last resort is not set

L    11.11.11.11/32 is directly connected, 07:11:08, Loopback0
i L2 22.22.22.22/32 [115/20] via 200.2.1.2, 07:11:00, GigabitEthernet0/0/0/1
i L2 33.33.33.33/32 [115/30] via 200.2.1.2, 07:10:58, GigabitEthernet0/0/0/1
i L2 44.44.44.44/32 [115/30] via 200.2.1.2, 07:10:58, GigabitEthernet0/0/0/1
C    100.200.1.0/24 is directly connected, 03:38:29, GigabitEthernet0/0/0/2
L    100.200.1.200/32 is directly connected, 03:38:29, GigabitEthernet0/0/0/2
C    200.2.1.0/24 is directly connected, 07:11:07, GigabitEthernet0/0/0/1
L    200.2.1.1/32 is directly connected, 07:11:07, GigabitEthernet0/0/0/1
i L2 200.2.3.0/24 [115/20] via 200.2.1.2, 07:11:00, GigabitEthernet0/0/0/1
i L2 200.2.4.0/24 [115/20] via 200.2.1.2, 07:11:00, GigabitEthernet0/0/0/1
C    200.5.1.0/24 is directly connected, 07:11:07, GigabitEthernet0/0/0/0
L    200.5.1.1/32 is directly connected, 07:11:07, GigabitEthernet0/0/0/0

Для этого и нужна была статика до /32. И хочу заметить, что при добавлении статики обязательно надо указать выходной интерфейс, если просто указать Forwarding router’s address то маршрут в таблицу не попадет.
Статику так же нужно будет прописывать и при optC.

RP/0/0/CPU0:B-ASBR1(config-static-afi)#do show run router static
router static
 address-family ipv4 unicast
  100.200.1.100/32 GigabitEthernet0/0/0/2

Теперь проверим маршрут в таблице и метки на B-ASBR1

RP/0/0/CPU0:B-ASBR1(config-static-afi)#do show route
Sun Mar 20 19:11:16.139 UTC

Codes: C - connected, S - static, R - RIP, B - BGP, (>) - Diversion path
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - ISIS, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, su - IS-IS summary null, * - candidate default
       U - per-user static route, o - ODR, L - local, G  - DAGR, l - LISP
       A - access/subscriber, a - Application route
       M - mobile route, r - RPL, (!) - FRR Backup path

Gateway of last resort is not set

L    11.11.11.11/32 is directly connected, 07:14:13, Loopback0
i L2 22.22.22.22/32 [115/20] via 200.2.1.2, 07:14:04, GigabitEthernet0/0/0/1
i L2 33.33.33.33/32 [115/30] via 200.2.1.2, 07:14:02, GigabitEthernet0/0/0/1
i L2 44.44.44.44/32 [115/30] via 200.2.1.2, 07:14:02, GigabitEthernet0/0/0/1
C    100.200.1.0/24 is directly connected, 03:41:33, GigabitEthernet0/0/0/2
S    100.200.1.100/32 is directly connected, 00:00:03, GigabitEthernet0/0/0/2
L    100.200.1.200/32 is directly connected, 03:41:33, GigabitEthernet0/0/0/2
C    200.2.1.0/24 is directly connected, 07:14:11, GigabitEthernet0/0/0/1
L    200.2.1.1/32 is directly connected, 07:14:11, GigabitEthernet0/0/0/1
i L2 200.2.3.0/24 [115/20] via 200.2.1.2, 07:14:04, GigabitEthernet0/0/0/1
i L2 200.2.4.0/24 [115/20] via 200.2.1.2, 07:14:04, GigabitEthernet0/0/0/1
C    200.5.1.0/24 is directly connected, 07:14:11, GigabitEthernet0/0/0/0

Теперь "выходной" интерфейс появился и видим, что происходит swap метки

RP/0/0/CPU0:B-ASBR1#show mpls forwarding labels 24006 detail 
Sun Mar 20 19:16:23.528 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24006  26          100:1:1.1.1.1/32   Gi0/0/0/2    100.200.1.100   520         
     Updated: Mar 20 18:58:01.933
     Path Flags: 0x6000 [  ]
     Version: 57, Priority: 4
     Label Stack (Top -> Bottom): { 26 }
     NHID: 0x0, Encap-ID: N/A, Path idx: 0, Backup path idx: 0, Weight: 0
     MAC/Encaps: 14/18, MTU: 1500
     Packets Switched: 5


RP/0/0/CPU0:B-ASBR1#show mpls forwarding interface gigabitEthernet 0/0/0/2
Sun Mar 20 19:19:25.686 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24005  Pop         100.200.1.100/32   Gi0/0/0/2    100.200.1.100   1420        
24006  26          100:1:1.1.1.1/32   Gi0/0/0/2    100.200.1.100   520         
24007  27          100:1:192.168.1.0/24   \
                                      Gi0/0/0/2    100.200.1.100   0 

RP/0/0/CPU0:B-ASBR1#show cef 100.200.1.100/32
Sun Mar 20 19:17:17.075 UTC
100.200.1.100/32, version 59, attached, internal 0x1000041 0x0 (ptr 0xa13ffd74) [1], 0x0 (0xa13cb464), 0xa20 (0xa1583140)
 Updated Mar 20 19:11:12.840 
 local adjacency 100.200.1.100
 Prefix Len 32, traffic index 0, precedence n/a, priority 4
   via GigabitEthernet0/0/0/2, 3 dependencies, weight 0, class 0 [flags 0x8]
    path-idx 0 NHID 0x0 [0xa10dc250 0xa10dc1a8]
    local adjacency
     local label 24005      labels imposed {ImplNull}

Проверяем связанность:

G-CE1#ping 3.3.3.3 source  1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 27/33/51 ms

G-CE3#ping 1.1.1.1 source  3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 25/27/31 ms

Проверим трассировку и обратим внимание, что теперь на хопе #4, стык между ISP, есть MPLS метка и там происходит swap метки. В этом и есть optB.

G-CE3#traceroute 1.1.1.1 source  3.3.3.3
Type escape sequence to abort.
Tracing the route to 1.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.2.4 11 msec 2 msec 1 msec
  2 200.2.4.2 [MPLS: Labels 24001/24006 Exp 0] 37 msec 27 msec 36 msec
  3 200.2.1.1 [MPLS: Label 24006 Exp 0] 33 msec 37 msec 25 msec
  4 100.200.1.100 [MPLS: Label 26 Exp 0] 39 msec 34 msec 25 msec
  5 100.2.1.2 [MPLS: Labels 16/21 Exp 0] 29 msec 24 msec 24 msec
  6 192.168.1.4 [AS 1] [MPLS: Label 21 Ex

Сервисная метка
Транспортная метка

Изобразим клиентский трафик на топологии

Путь хождения клиентского трафик с CE3 в сторону CE1 при реализации optB

Option C

В Option C, так же как и в Option B, будет один саб-интерфейс между ISP и будет mpls. Между ASBR’ами, т.е. между ISP, поднимается ipv4 (eBGP) сессия, но это не обычная ipv4 unicast сессия, эта сессия используется для обмена транспортными метками (mpls метки) через BGP – и имя ей – Labeled unicast (в терминологии cisco). Еще одно отличие в optC это поднятие vpnv4 eBGP сессии уже между рефлекторами разных ISP, т.е. между Y-RR3 и B-RR3.

Как минимум есть несколько реализаций optC и их отличия в том, как будут распространятся внутри ISP loopback адреса роутеров другой ISP. Например, как внутри AS100 будут распространятся lo адреса B-RR3 и B-PE4. Лично у меня получилось реализовать два варианта:

  1. ASBR получая loopback адреса другой AS, т.е. от противоположного ASBR, по eBGP LU, а далее уже выполняется редистрибьюция этих адресов в IGP.
  2. Между рефлекторами и ASBR’ами, внутри одной AS, поднимается IPv4 Labeled unicast iBGP сессия.

Рассмотрим оба варианта и начнём с использованием редистрибьюции.

OptC с редистрибьюцией

Обратимся к импровизированной схеме:

Вариант optC с redistribution из BGP в IGP

Распространения сервисной метки между ISP происходит за счет поднятия vpnv4 сессии между рефлекторами.
Транспортная метка теперь распространяется за счет BGP LU сессии между ASBR’ами. Получая адрес loopback интерфейса другой AS, ASBR инсталирует их у себя в таблице маршрутизации, выполняет редистрибьюцию в IGP и сигнализирует остальным роутерам для них свою mpls метку.

Основные моменты:

  • Между CE и PE поднимается ipv4 unicast eBGP сессия (с стороны PE ipv4 в vrf‘е).
  • Роут таргеты являются значимыми для обоих AS (т.е. обоим ISP ТРЕБУЕТСЯ знать какие RT они используют – необходимо для ликинга)
  • Между PE <> RR поднимается глобальная vpnv4 сессия (iBGP).
  • Между ASBR‘ми одна ipv4 labeled-unicast сессия.
  • Обмен сервисными метками происходит между двумя RR (Y-RR3 и B-RR3).
  • Обмен транспортной меткой происходит напрямую между роутерами (т.е. с помощью LDP+IGP), а между AS с помощью BGP LU и redistribute в IGP.

План что требуется сделать:
CE1/CE3: Поднять обычную eBGP сессию с PE и заредистрибьютить маршруты в bgp.
Y-PE4/B-PE4: Создать vrf, поместить клиентский интерфейс в него. Настроить eBGP с CE, настроить iBGP vpnv4 сессию с рефлектором. Заимпортировать и экспортировать роут таргеты.
Y-RR3/B-RR3: Настроить iBGP vpnv4 сессию с PE, настроив его как рефлектор. А так же настроить eBGP vpnv4 сессию с удаленным рефлектором
Y-ASBR1/B-ASBR1: Настроить iBGP ipv4 Labeled-unicast сессию с противоположным ASBR и настроить redistribution LoopBack адресов, полученных от ASBR, с BGP в IGP.

Конфиг для CE такой же, без изменений:

G-CE1:
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
!
router bgp 1
 bgp log-neighbor-changes
 neighbor 192.168.1.4 remote-as 100
 neighbor 192.168.1.4 update-source Ethernet0/0
 !
 address-family ipv4
  redistribute connected
  neighbor 192.168.1.4 activate
 exit-address-family

G-CE3:
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.2.3 255.255.255.0
!
router bgp 3
 bgp log-neighbor-changes
 neighbor 192.168.2.4 remote-as 200
 neighbor 192.168.2.4 update-source Ethernet0/0
 !
 address-family ipv4
  redistribute connected
  neighbor 192.168.2.4 activate
 exit-address-family

Конфиг Y-CE4/B-CE4 такой же как и был при optB:

Y-PE4 (IOS-XE):
ip vrf Green
 rd 100:1
 route-target export 100:1
 route-target import 100:1
 route-target import 200:3
!
!
interface GigabitEthernet2
 description _G-CE1_eth0/0_##TO-CLIENT##_
 ip vrf forwarding Green
 ip address 192.168.1.4 255.255.255.0
!
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 description Y-RR3
 neighbor 3.3.3.3 update-source Loopback0
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 send-community extended
  neighbor 3.3.3.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf Green
  neighbor 192.168.1.1 remote-as 1
  neighbor 192.168.1.1 description G-CE1
  neighbor 192.168.1.1 update-source GigabitEthernet2
  neighbor 192.168.1.1 activate
 exit-address-family

B-PE4 (IOS-XR):
vrf Green
 address-family ipv4 unicast
  import route-target
   100:1
   200:3
  !
  export route-target
   200:3
  !
 !
!
interface GigabitEthernet0/0/0/0
 description _G-CE3_eth0/0_##TO-CLIENT##_
 vrf Green
 ipv4 address 192.168.2.4 255.255.255.0
!
router bgp 200
 address-family vpnv4 unicast
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family vpnv4 unicast
  !
 !
 vrf Green
  rd 200:3
  address-family ipv4 unicast
  !
  neighbor 192.168.2.3
   remote-as 3
   update-source GigabitEthernet0/0/0/0
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
 !
!

Для того, что бы у нас был обмен транспортными метками, на IOS-XE под AF ipv4 unicast нужно указать “send-label“, тем самым мы отправляем mpls метки bgp пиру. т.е. налаживаем наш транспорт.
Так же необходимо полученные от B-ASBR1 маршруты заредистрибьютить в ospf, чтобы у локального рефлектора и у PE были маршруты.
Помимо этого, нам надо как-то передать другой AS лупбеки локального Y-RR3 и Y-PE4, для этого мы объявляем их в network.

Y-ASBR1 (IOS-XE):
interface GigabitEthernet2
 description _B-ASBR1_Gi0/0/0/2_##PEEING##
 ip address 100.200.1.100 255.255.255.0
!
router bgp 100
 bgp log-neighbor-changes
 neighbor 100.200.1.200 remote-as 200
 neighbor 100.200.1.200 update-source GigabitEthernet2
 !
 address-family ipv4
  network 3.3.3.3 mask 255.255.255.255
  network 4.4.4.4 mask 255.255.255.255
  neighbor 100.200.1.200 activate
  neighbor 100.200.1.200 next-hop-self
  neighbor 100.200.1.200 send-label
 exit-address-family
!
router ospf 1
 redistribute bgp 100 subnets

У IOS-XR нет команды “send-label” для того, чтобы он начал генерировать транспортную метку, через BPG, надо глобально под AF ipv4 unicast дать команду “allocate-label all“. Так же не забываем про статический маршрут, редистрибьюцию и анонс лупбеков локального рефлектора и PE.

B-ASBR1 (IOS-XR):
!
interface GigabitEthernet0/0/0/2
 description _Y-ASBR1_Gi2_##PEEING##
 ipv4 address 100.200.1.200 255.255.255.0
!
router static
 address-family ipv4 unicast
  100.200.1.100/32 GigabitEthernet0/0/0/2
!
router isis 1
 address-family ipv4 unicast
  redistribute bgp 200
!
router bgp 200
 address-family ipv4 unicast
  network 33.33.33.33/32
  network 44.44.44.44/32
  allocate-label all
 !
 neighbor 100.200.1.100
  remote-as 100
  update-source GigabitEthernet0/0/0/2
  address-family ipv4 labeled-unicast
   route-policy PASS in
   route-policy PASS out
   next-hop-self
end

На рефлекторах мы поднимаем vpnv4 сессии с локальными PE и с удаленным рефлектором. Для удаленного рефлектора нужно не забыть указать ebgp-multihop, т.к. удаленный рефлектор не подключен к нам напрямую, он же находится в другой AS.
Еще один момент, при установлении eBGP сессии, все маршруты, которые рефлектор будет анонсить, на них он будет менять next-hop на себя (на свой lookpback адрес) и в таком случае весь трафик будет ходить через рефлектора, нам этого не надо поэтому мы указываем next-hop-unchanged.

Y-RR3 (ISO-XE):
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor IBGP peer-group
 neighbor IBGP remote-as 100
 neighbor IBGP update-source Loopback0
 neighbor B-RR3 peer-group
 neighbor B-RR3 remote-as 200
 neighbor B-RR3 ebgp-multihop 255
 neighbor B-RR3 update-source Loopback0
 neighbor 4.4.4.4 peer-group IBGP
 neighbor 33.33.33.33 peer-group B-RR3
 !
 address-family ipv4
 exit-address-family
 !
 address-family vpnv4
  neighbor IBGP send-community extended
  neighbor IBGP route-reflector-client
  neighbor B-RR3 send-community extended
  neighbor B-RR3 next-hop-unchanged
  neighbor 4.4.4.4 activate
  neighbor 33.33.33.33 activate
 exit-address-family

B-RR3 (IOS-XR):
router bgp 200
 address-family vpnv4 unicast
 !
 neighbor-group IBGP
  remote-as 200
  update-source Loopback0
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor-group Y-RR3
  remote-as 100
  ebgp-multihop 255
  update-source Loopback0
  address-family vpnv4 unicast
   route-policy PASS in
   route-policy PASS out
   next-hop-unchanged
  !
 !
 neighbor 3.3.3.3
  use neighbor-group Y-RR3
 !
 neighbor 44.44.44.44
  use neighbor-group IBGP
 !
!

Проверим маршруты на CE:

G-CE1#show ip ro
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback0
      3.0.0.0/32 is subnetted, 1 subnets
B        3.3.3.3 [20/0] via 192.168.1.4, 00:12:13
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, Ethernet0/0
L        192.168.1.1/32 is directly connected, Ethernet0/0
B     192.168.2.0/24 [20/0] via 192.168.1.4, 00:12:13

G-CE3#show ip ro
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
B        1.1.1.1 [20/0] via 192.168.2.4, 00:12:05
      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
B     192.168.1.0/24 [20/0] via 192.168.2.4, 00:12:05
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, Ethernet0/0
L        192.168.2.3/32 is directly connected, Ethernet0/0

Проверим связанность

G-CE1#ping 3.3.3.3 source  1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 25/35/62 ms

G-CE3#ping 1.1.1.1 source  3.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
Packet sent with a source address of 3.3.3.3 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 25/34/69 ms

Обращаем внимание, что теперь на стыке с ISP у хопа #4, присутствует и транспортная метка и сервисная, к тому же на всём пути (от AS200 до AS100) сервисная метка одна и та же, она не изменяется.

G-CE3#trace 1.1.1.1 source  3.3.3.3 num
Type escape sequence to abort.
Tracing the route to 1.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.2.4 10 msec 2 msec 1 msec
  2 200.2.4.2 [MPLS: Labels 24004/21 Exp 0] 52 msec 28 msec 29 msec
  3 200.2.1.1 [MPLS: Labels 24007/21 Exp 0] 32 msec 30 msec 25 msec
  4 100.200.1.100 [MPLS: Labels 19/21 Exp 0] 31 msec 24 msec 25 msec
  5 100.2.1.2 [MPLS: Labels 17/21 Exp 0] 27 msec 24 msec 22 msec
  6 192.168.1.4 [AS 1] [MPLS: Label 21 Exp 0] 24 msec 23 msec 22 msec
  7 192.168.1.1 [AS 1] 23 msec *  42 msec

Сервисная метка
Транспортная метка

Посмотрим более детально с B-PE4. Видим, что маршрут до 1.1.1.1/32 известен от локального рефлектора и сервисная метка прилетает прямиком от Y-PE4 (4.4.4.4), собственно и next-hop’ом он и является.

RP/0/0/CPU0:B-PE4#show bgp vpnv4 un rd 100:1 1.1.1.1/32
Thu Mar 24 19:11:24.575 UTC
BGP routing table entry for 1.1.1.1/32, Route Distinguisher: 100:1
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                121         121
Last Modified: Mar 24 18:31:19.256 for 00:40:05
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Not advertised to any peer
  100 1
    4.4.4.4 (metric 20) from 33.33.33.33 (33.33.33.33)
      Received Label 21

      Origin incomplete, localpref 100, valid, internal, best, group-best, import-candidate, not-in-vrf
      Received Path ID 0, Local Path ID 0, version 121
      Extended community: RT:100:1 

Так как с B-ASBR1 мы выполнили редистрибьюцию, то маршрут до 4.4.4.4/32 нам виден в самом is-is и, соответственно, у каждого роутера есть выделенная для этого FEC mpls метка. Посмотрим, как добраться до 4.4.4.4/32

RP/0/0/CPU0:B-PE4#show route vrf Green 1.1.1.1/32
Thu Mar 24 19:18:17.847 UTC

Routing entry for 1.1.1.1/32
  Known via "bgp 200", distance 200, metric 0
  Tag 100, type internal
  Installed Mar 24 18:31:19.070 for 00:46:58
  Routing Descriptor Blocks
    4.4.4.4, from 33.33.33.33
      Nexthop in Vrf: "default", Table: "default", IPv4 Unicast, Table Id: 0xe0000000
      Route metric is 0
  No advertising protos.

RP/0/0/CPU0:B-PE4#show mpls forwarding prefix 4.4.4.4/32
Thu Mar 24 19:16:53.033 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24006  24004       4.4.4.4/32         Gi0/0/0/1    200.2.4.2       5408 

RP/0/0/CPU0:B-PE4#show cef 4.4.4.4/32
Thu Mar 24 19:15:59.056 UTC
4.4.4.4/32, version 29, internal 0x1000001 0x0 (ptr 0xa141a1f4) [1], 0x0 (0xa13e55a8), 0xa28 (0xa1583370)
 Updated Mar 24 16:33:07.935 
 local adjacency 200.2.4.2
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
   via 200.2.4.2/32, GigabitEthernet0/0/0/1, 5 dependencies, weight 0, class 0 [flags 0x0]
    path-idx 0 NHID 0x0 [0xa10c2250 0x0]
    next hop 200.2.4.2/32
    local adjacency
     local label 24006      labels imposed {24004}  

Даже B-P2 роутер знает маршрут до 4.4.4.4/32 и выделил для этого метку:

RP/0/0/CPU0:B-P2# show mpls ldp bindings 4.4.4.4/32
Thu Mar 24 19:30:38.176 UTC
4.4.4.4/32, rev 29
        Local binding: label: 24004

        Remote bindings: (3 peers)
            Peer                Label    
            -----------------   ---------
            11.11.11.11:0       24007   
            33.33.33.33:0       24007   
            44.44.44.44:0       24006  

RP/0/0/CPU0:B-P2#show mpls forwarding prefix 4.4.4.4/32
Thu Mar 24 19:29:07.452 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24004  24007       4.4.4.4/32         Gi0/0/0/2    200.2.1.1       5786 

На стыке ISP B-ASBR1 просто выполнил swap транспортной метки, с 24007 на 19 и отправил пакет на Y-ASBR1

RP/0/0/CPU0:B-ASBR1#show mpls forwarding  prefix 4.4.4.4/32
Thu Mar 24 19:31:23.743 UTC
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes       
Label  Label       or ID              Interface                    Switched    
------ ----------- ------------------ ------------ --------------- ------------
24007  19          4.4.4.4/32         Gi0/0/0/2    100.200.1.100   6326  

Ну далее как обычно:

Y-ASBR1#show mpls forwarding-table 4.4.4.4 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
19         17         4.4.4.4/32       52510         Gi1        100.2.1.2   

Предпоследний LSR в mpls домене AS100 снимет верхнюю (транспортную метку) и отправит уже сервисную на B-PE4:

Y-P2#show mpls forwarding-table 4.4.4.4 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
17         Pop Label  4.4.4.4/32       138360        Gi4        100.2.4.4

Далее, придя пакет с меткой 21 Y-PE4 “обезглавливает” заголовок mpls и чистый пакет отправляется к G-CE1:

Y-PE4#show mpls forwarding-table vrf Green 1.1.1.1 32
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop    
Label      Label      or Tunnel Id     Switched      interface              
21         No Label   1.1.1.1/32[V]    51286         Gi2        192.168.1.1

Y-PE4#show ip route  vrf Green 1.1.1.1 255.255.255.255   

Routing Table: Green
Routing entry for 1.1.1.1/32
  Known via "bgp 100", distance 20, metric 0
  Tag 1, type external
  Last update from 192.168.1.1 08:20:45 ago
  Routing Descriptor Blocks:
  * 192.168.1.1, from 192.168.1.1, 08:20:45 ago
      Route metric is 0, traffic share count is 1
      AS Hops 1
      Route tag 1
      MPLS label: none

Y-PE4#show ip cef vrf Green 1.1.1.1 255.255.255.255 detail 
1.1.1.1/32, epoch 0, flags [rib only nolabel, rib defined all labels]
  dflt local label info: other/21 [0x2]
  recursive via 192.168.1.1
    attached to GigabitEthernet2

Посмотрим как же на рефлекторах виден обмен сервисными метриками:

Y-RR3#show bgp vpnv4 un al
BGP table version is 71, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 100:1
 *>i 1.1.1.1/32       4.4.4.4                  0    100      0 1 ?
 *>i 192.168.1.0      4.4.4.4                  0    100      0 1 ?
Route Distinguisher: 200:3
 *>  3.3.3.3/32       44.44.44.44                            0 200 3 ?
 *>  192.168.2.0      44.44.44.44                            0 200 3 ?

Y-RR3#show bgp vpnv4 un rd 100:1 1.1.1.1/32
BGP routing table entry for 100:1:1.1.1.1/32, version 54
Paths: (1 available, best #1, no table)
  Advertised to update-groups:
     14        
  Refresh Epoch 1
  1, (Received from a RR-client)
    4.4.4.4 (metric 3) (via default) from 4.4.4.4 (4.4.4.4)
      Origin incomplete, metric 0, localpref 100, valid, internal, best
      Extended Community: RT:100:1
      mpls labels in/out 23/21
      rx pathid: 0, tx pathid: 0x0


RP/0/0/CPU0:B-RR3#show bgp vpnv4 unicast rd 100:1 1.1.1.1/32       
Thu Mar 24 19:44:54.267 UTC
BGP routing table entry for 1.1.1.1/32, Route Distinguisher: 100:1
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                 78          78
Last Modified: Mar 24 18:31:20.059 for 01:13:34
Paths: (1 available, best #1)
  Advertised to peers (in unique update groups):
    44.44.44.44     
  Path #1: Received by speaker 0
  Advertised to peers (in unique update groups):
    44.44.44.44     <<< так же анонсим этот маршрут локальному PE, как RR клиенту
  100 1
    4.4.4.4 (metric 20) from 3.3.3.3 (3.3.3.3) <<< получаем маршрут от Y-RR3 и некстхоп Y-PE4
      Received Label 21
      Origin incomplete, localpref 100, valid, external, best, group-best, import-candidate, not-in-vrf
      Received Path ID 0, Local Path ID 0, version 78
      Extended community: RT:100:1

Теперь изобразим data-plane на нашей топологии:

Путь хождения клиентского трафик с CE3 в сторону CE1 при реализации optC c redistribution

Это был optC, в котором мы выполняли редистрибьцью loopback адресов, полученных по BGP LU от соседнего ASBR.

OptC с LU сессиями внутри IGP

Теперь приступим ко второму варианту optC, в котором вместо редистрибьюции loopback адресов, мы будем поднимать BGP LU между ASBR (Y-ASBR1 <> B-ASBR1), между PE и локальным рефлектором, а так же между локальным рефлектором и локальным ASBR.
Изобразим это на импровизированной схеме:

Вариант optC с LU сессиями

Основные моменты:

  • Между CE и PE поднимается ipv4 unicast eBGP сессия (с стороны PE ipv4 в vrf‘е).
  • Роут таргеты являются значимыми для обоих AS (т.е. обоим ISP ТРЕБУЕТСЯ знать какие RT они используют – необходимо для ликинга)
  • Между PE <> RR поднимается глобальная vpnv4 сессия (iBGP) и ipv4 labeled-unicast сессия.
  • Между ASBR‘ми и локальным рефлектором ipv4 labeled-unicast сессия.
  • Обмен сервисными метками происходит между двумя RR (Y-RR3 и B-RR3).
  • Обмен транспортной меткой происходит напрямую между роутерами (т.е. с помощью LDP+IGP), а между AS с помощью BGP LU.

План что требуется сделать:
CE1/CE3: Поднять обычную eBGP сессию с PE и заредистрибьютить маршруты в bgp.
Y-PE4/B-PE4: Создать vrf, поместить клиентский интерфейс в него и настроить eBGP с CE. С рефлектором настроить iBGP vpnv4 и ipv4 labeled-unicast сессии. Заимпортировать и экспортировать роут таргеты.
Y-RR3/B-RR3: Настроить iBGP vpnv4 и ipv4 LU сессию с локальным PE, а с локальным ASBR’ом только ipv4 LU, при этом настроив его как рефлектор для локальных роутеров. С удаленным рефлектором поднимаем eBGP vpnv4 сессию.
Y-ASBR1/B-ASBR1: Настроить iBGP ipv4 Labeled-unicast сессию с соседним ASBR, а так же с локальным рефлектором.

Так же перед началом, хотел бы заострить внимание на одном моменте, ранее в optC, на ASBR‘а мы анонсили loopback локальных PE и RR, теперь этого делать не будем, т.к. мы поднимаем BGP ipv4 между рефлектором, то и анонс loopback’ов каждого роутера будем на нём же и производить.
Приступим к конфигурации. На CE, как обычно, без изменений, их конфиг можно было бы и не выкладывать постоянно, но раз уж до этого выкладывал, то пусть и в последний раз будет:

G-CE1:
interface Loopback0
 ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.1.1 255.255.255.0
!
router bgp 1
 bgp log-neighbor-changes
 neighbor 192.168.1.4 remote-as 100
 neighbor 192.168.1.4 update-source Ethernet0/0
 !
 address-family ipv4
  redistribute connected
  neighbor 192.168.1.4 activate
 exit-address-family

G-CE3:
interface Loopback0
 ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.2.3 255.255.255.0
!
router bgp 3
 bgp log-neighbor-changes
 neighbor 192.168.2.4 remote-as 200
 neighbor 192.168.2.4 update-source Ethernet0/0
 !
 address-family ipv4
  redistribute connected
  neighbor 192.168.2.4 activate
 exit-address-family

Из изменений на PE роутерах у нас только доп. сессия ipv4 labeled-unicast с локальным рефлектором.

Y-PE4 (IOS-XE):
!
ip vrf Green
 rd 100:1
 route-target export 100:1
 route-target import 100:1
 route-target import 200:3
!
interface GigabitEthernet2
 description _G-CE1_eth0/0_##TO-CLIENT##_
 ip vrf forwarding Green
 ip address 192.168.1.4 255.255.255.0
!
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 description Y-RR3
 neighbor 3.3.3.3 update-source Loopback0
 !
 address-family ipv4
  network 4.4.4.4 mask 255.255.255.255   <<< анонсим в BGP loopback адрес Y-PE4
  neighbor 3.3.3.3 activate  <<< поднимаем ipv4 unicast сессию с Y-RR3
  neighbor 3.3.3.3 next-hop-self
  neighbor 3.3.3.3 send-label <<< генерируем транспортные метки в BGP
 exit-address-family
 !
 address-family vpnv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 send-community extended
  neighbor 3.3.3.3 next-hop-self
 exit-address-family
 !
 address-family ipv4 vrf Green
  neighbor 192.168.1.1 remote-as 1
  neighbor 192.168.1.1 description G-CE1
  neighbor 192.168.1.1 update-source GigabitEthernet2
  neighbor 192.168.1.1 activate
 exit-address-family

B-PE4 (ISO-XR):
vrf Green
 address-family ipv4 unicast
  import route-target
   100:1
   200:3
  !
  export route-target
   200:3
  !
 !
!
interface GigabitEthernet0/0/0/0
 description _G-CE3_eth0/0_##TO-CLIENT##_
 vrf Green
 ipv4 address 192.168.2.4 255.255.255.0
!
router bgp 200
 address-family ipv4 unicast
  network 44.44.44.44/32
  allocate-label all
 !
 address-family vpnv4 unicast
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
   next-hop-self
  !
  address-family vpnv4 unicast
  !
 !
 vrf Green
  rd 200:3
  address-family ipv4 unicast
  !
  neighbor 192.168.2.3
   remote-as 3
   update-source GigabitEthernet0/0/0/0
   address-family ipv4 unicast
    route-policy PASS in
    route-policy PASS out
   !
  !
 !
!

На ASBR из изменений – это убираем анонс локальных роутеров и поднимаем ipv4 LU с локальным рефлектором:

Y-ASBR1 (ISO-XE):
!
interface GigabitEthernet2
 description _B-ASBR1_Gi0/0/0/2_##PEEING##
 ip address 100.200.1.100 255.255.255.0
!
router bgp 100
 bgp log-neighbor-changes
 neighbor 3.3.3.3 remote-as 100
 neighbor 3.3.3.3 update-source Loopback0
 neighbor 100.200.1.200 remote-as 200
 neighbor 100.200.1.200 update-source GigabitEthernet2
 !
 address-family ipv4
  neighbor 3.3.3.3 activate
  neighbor 3.3.3.3 next-hop-self
  neighbor 3.3.3.3 send-label
  neighbor 100.200.1.200 activate
  neighbor 100.200.1.200 next-hop-self
  neighbor 100.200.1.200 send-label
 exit-address-family

B-ASBR1 (ISO-XR):
!
interface GigabitEthernet0/0/0/2
 description _Y-ASBR1_Gi2_##PEEING##
 ipv4 address 100.200.1.200 255.255.255.0
!
router static
 address-family ipv4 unicast
  100.200.1.100/32 GigabitEthernet0/0/0/2
!
router bgp 200
 address-family ipv4 unicast
  allocate-label all
 !
 neighbor 33.33.33.33
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
   next-hop-self
  !
 !
 neighbor 100.200.1.100
  remote-as 100
  update-source GigabitEthernet0/0/0/2
  address-family ipv4 labeled-unicast
   route-policy PASS in
   route-policy PASS out
   next-hop-self
  !
 !
!

Осталось настроить рефлектора:

Y-RR3 (IOS-XE):
router bgp 100
 bgp log-neighbor-changes
 no bgp default ipv4-unicast
 neighbor IBGP peer-group
 neighbor IBGP remote-as 100
 neighbor IBGP update-source Loopback0
 neighbor B-RR3 peer-group
 neighbor B-RR3 remote-as 200
 neighbor B-RR3 ebgp-multihop 255
 neighbor B-RR3 update-source Loopback0
 neighbor 1.1.1.1 peer-group IBGP
 neighbor 4.4.4.4 peer-group IBGP
 neighbor 33.33.33.33 peer-group B-RR3
 !
 address-family ipv4
  network 3.3.3.3 mask 255.255.255.255
  neighbor IBGP route-reflector-client
  neighbor IBGP send-label
  neighbor 1.1.1.1 activate
  neighbor 4.4.4.4 activate
 exit-address-family
 !
 address-family vpnv4
  neighbor IBGP send-community extended
  neighbor IBGP route-reflector-client
  neighbor B-RR3 send-community extended
  neighbor B-RR3 next-hop-unchanged
  neighbor 4.4.4.4 activate
  neighbor 33.33.33.33 activate
 exit-address-family

B-RR3 (IOS-XR):
router bgp 200
 address-family ipv4 unicast
  network 33.33.33.33/32
  allocate-label all
 !
 address-family vpnv4 unicast
 !
 neighbor-group IBGP
  remote-as 200
  update-source Loopback0
  address-family ipv4 labeled-unicast
   route-reflector-client
  !
  address-family vpnv4 unicast
   route-reflector-client
  !
 !
 neighbor-group Y-RR3
  remote-as 100
  ebgp-multihop 255
  update-source Loopback0
  address-family vpnv4 unicast
   route-policy PASS in
   route-policy PASS out
   next-hop-unchanged
  !
 !
 neighbor 3.3.3.3
  use neighbor-group Y-RR3
 !
 neighbor 11.11.11.11
  use neighbor-group IBGP
 !
 neighbor 44.44.44.44
  use neighbor-group IBGP
 !
!

Смотрим маршруты на CE:

G-CE1#show ip route 
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback0
      3.0.0.0/32 is subnetted, 1 subnets
B        3.3.3.3 [20/0] via 192.168.1.4, 00:05:36
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/24 is directly connected, Ethernet0/0
L        192.168.1.1/32 is directly connected, Ethernet0/0
B     192.168.2.0/24 [20/0] via 192.168.1.4, 00:05:36

G-CE3#show ip ro
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      1.0.0.0/32 is subnetted, 1 subnets
B        1.1.1.1 [20/0] via 192.168.2.4, 00:06:02
      3.0.0.0/32 is subnetted, 1 subnets
C        3.3.3.3 is directly connected, Loopback0
B     192.168.1.0/24 [20/0] via 192.168.2.4, 00:06:02
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, Ethernet0/0
L        192.168.2.3/32 is directly connected, Ethernet0/0

А теперь глянем на трейс и обратим внимание на кол-во меток в первом же хопе:

G-CE3#traceroute 1.1.1.1 source 3.3.3.3 numeric 
Type escape sequence to abort.
Tracing the route to 1.1.1.1
VRF info: (vrf in name/id, vrf out name/id)
  1 192.168.2.4 7 msec 3 msec 1 msec
  2 200.2.4.2 [MPLS: Labels 24002/24007/21 Exp 0] 30 msec 26 msec 26 msec
  3 200.2.1.1 [MPLS: Labels 24007/21 Exp 0] 36 msec 35 msec 31 msec
  4 100.200.1.100 [MPLS: Labels 19/21 Exp 0] 27 msec 37 msec 29 msec
  5 100.2.1.2 [MPLS: Labels 17/21 Exp 0] 37 msec 25 msec 49 msec
  6 192.168.1.4 [AS 1] [MPLS: Label 21 Exp 0] 25 msec 24 msec 23 msec
  7 192.168.1.1 [AS 1] 23 msec *  43 msec

Сервисная метка
Транспортная метка

Теперь у нас стек из трех меток, первая сервисная, две другие – транспортные.
24007 эта метка до удаленной PE (Y-PE4), 24002 это метка до локального ASBR (B-ASRB1)

P/0/0/CPU0:B-PE4#show cef vrf Green 1.1.1.1/32
Thu Mar 24 20:59:00.003 UTC
1.1.1.1/32, version 81, internal 0x1000001 0x0 (ptr 0xa141a1f4) [1], 0x0 (0x0), 0x208 (0xa15832d0)
 Updated Mar 24 20:41:36.524
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
   via 4.4.4.4/32, 3 dependencies, recursive [flags 0x6000]
    path-idx 0 NHID 0x0 [0xa15ebbf4 0x0]
    recursion-via-/32
    next hop VRF - 'default', table - 0xe0000000
    next hop 4.4.4.4/32 via 24006/0/21
     next hop 200.2.4.2/32 Gi0/0/0/1    labels imposed {24002 24007 21}
RP/0/0/CPU0:B-PE4#show cef 4.4.4.4/32          
Thu Mar 24 20:59:13.452 UTC
4.4.4.4/32, version 89, internal 0x1000001 0x0 (ptr 0xa141a2f4) [1], 0x0 (0xa13e577c), 0xa08 (0xa1583348)
 Updated Mar 24 20:50:12.539
 Prefix Len 32, traffic index 0, precedence n/a, priority 15
   via 11.11.11.11/32, 3 dependencies, recursive [flags 0x6000]
    path-idx 0 NHID 0x0 [0xa15eb8f4 0x0]
    recursion-via-/32
    next hop 11.11.11.11/32 via 24004/0/21
     local label 24006 
     next hop 200.2.4.2/32 Gi0/0/0/1    labels imposed {24002 24007}
RP/0/0/CPU0:B-PE4#show cef 11.11.11.11/32
Thu Mar 24 20:59:22.271 UTC
11.11.11.11/32, version 25, internal 0x1000001 0x0 (ptr 0xa141a074) [1], 0x0 (0xa13e5734), 0xa28 (0xa1583190)
 Updated Mar 24 14:39:34.772 
 local adjacency 200.2.4.2
 Prefix Len 32, traffic index 0, precedence n/a, priority 3
   via 200.2.4.2/32, GigabitEthernet0/0/0/1, 5 dependencies, weight 0, class 0 [flags 0x0]
    path-idx 0 NHID 0x0 [0xa10c2250 0x0]
    next hop 200.2.4.2/32
    local adjacency
     local label 24004      labels imposed {24002}

Изобразим хождение трафика на топологии, т.е. data-plane:

Путь хождения клиентского трафик с CE3 в сторону CE1 при реализации optC c LU сессиями

У optC, на самом деле, очень много плюсов, как например, масштабируемость или тот факт что MPLS метка не сбрасывается на стыке с ISP и, соответсвенно, не теряется значение поля QOS в ip пакете.

Источники

Добавить комментарий

Ваш адрес email не будет опубликован.