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

В 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
Сервисная метка
Транспортная метка
Из трассировки видим как ходит клиентский пакет, визуализируем это на топологии:

Видим как 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

В 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
Сервисная метка
Транспортная метка
Изобразим клиентский трафик на топологии

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. Лично у меня получилось реализовать два варианта:
- ASBR получая loopback адреса другой AS, т.е. от противоположного ASBR, по eBGP LU, а далее уже выполняется редистрибьюция этих адресов в IGP.
- Между рефлекторами и ASBR’ами, внутри одной AS, поднимается IPv4 Labeled unicast iBGP сессия.
Рассмотрим оба варианта и начнём с использованием редистрибьюции.
OptC с редистрибьюцией
Обратимся к импровизированной схеме:

Распространения сервисной метки между 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 на нашей топологии:

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

Основные моменты:
- Между 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:

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

