Когда вы большой провайдер и перед вами стоит задача организовать L3VPN, как правило, вы используете MPLS. Если усложнить ситуацию наличием посередине другого провайдера, то вы вынуждены обратиться к Inter-AS VPN.
Часто вместо PE-устройства используется Route Reflector.
На последнем варианте мы и остановимся. Выше типичная схема работа Inter-AS Option C. ASBR просто передают маршруты из удалённой AS к PE, а PE их хранит и анонсирует IBGP-соседям. Между AS не поднимаются никакие протоколы распространения меток - ни LDP, ни RSVP - во избежание проблем с построением ненужных LSP между провайдерами, исчерпания пространства меток и прочих возможных неожиданностей.
Между PE и ASBR, согласно документации различных вендоров, может использоваться как LDP, так и RSVP. По идее никаких ограничений нет. С LDP всё сравнительно просто. Есть доступные инструкции и логика работы довольно ясная. Но сколько я ни пытался найти документацию по настройке RSVP, я упирался в полное её отсутствие.
Моя задача была протестировать работу Option C с использованием RSVP на оборудовании Huawei. Ниже подробное howto как это сделать и какие могут быть трудности.
В качестве оборудования используется CX600-X3 и NE40E-X3
Не буду останавливаться на настройке банальных вещей, вроде IP-адресов и OSPF. Вы можете найти их в полных конфигурациях устройств. Перейдём сразу к сути.
На PE1 MPLS активируется только на интерфейсе в сторону ASBR1
[PE1] mpls lsr-id 1.1.1.1
[PE1] mpls
[PE1-mpls] quit
[PE1] mpls ldp
[PE1] interface Gi0/0/2
[PE1-GigabitEthernet0/0/1] mpls
[PE1-GigabitEthernet0/0/1] mpls ldp
На ASBR1 оба интерфейса MPLS:
[ASBR1] mpls lsr-id 2.2.2.2
[ASBR1] mpls
[ASBR1-mpls] quit
[ASBR1] mpls ldp
[ASBR1] interface Gi0/0/1
[ASBR1-GigabitEthernet0/0/1] mpls
[ASBR1-GigabitEthernet0/0/1] mpls ldp
Но на интерфейсе в сторону другой AS не нужно запускать LDP:
ASBR1] interface Gi0/0/2
[ASBR1-GigabitEthernet0/0/1] mpls
Настройка в AS200 полностью аналогична.
Если вы обеспечили IP-связность, то самое время проверить построение LSP:
[PE1]dis mpls lsp
LSP Information: LDP LSP
FEC
1.1.1.1/32
2.2.2.2/32
2.2.2.2/32In/Out Label
3/NULL
NULL/3
1024/3In/Out IF
-/-
-/Eth0/0/1
-/Eth0/0/1Vrf Name
[ASBR1]dis mpls lsp
LSP Information: LDP LSP
FEC
1.1.1.1/32
1.1.1.1/32
2.2.2.2/32In/Out Label
NULL/3
1025/3
3/NULLIn/Out IF
-/Eth0/0/1
-/Eth0/0/1
-/-Vrf Name
PE1
Поскольку это PE, нужно создать VPN-instance
[PE1] ip vpn-instance VPN1
[PE1-vpn-instance-vpn1] ipv4-family
[PE1-vpn-instance-vpn1-af-ipv4] route-distinguisher 100:1
[PE1-vpn-instance-vpn1-af-ipv4] vpn-target 1:1 both
[PE1] interface gigabitethernet 0/0/1
[PE1-GigabitEthernet2/0/0] ip binding vpn-instance VPN1
[PE1-GigabitEthernet2/0/0] ip address 10.1.1.2 24
То же самое на PE2
CE1
Со стороны CE - это типичный EBGP:
[CE1] bgp 65001
[CE1-bgp] peer 10.1.1.2 as-number 100
[CE1-bgp] import-route direct
PE1
EBGP с CE1:
[PE1] bgp 100
[PE1-bgp] ipv4-family vpn-instance vpn1
[PE1-bgp-vpn1] peer 10.1.1.1 as-number 65001
PE1
IBGP с внутренним соседом ASBR1:
[PE1] bgp 100
[PE1-bgp] peer 2.2.2.2 as-number 100
[PE1-bgp] peer 2.2.2.2 connect-interface loopback 0
[PE1-bgp] ipv4-family vpnv4
[PE1-bgp-af-vpnv4] peer 4.4.4.4 enable
ASBR1
EBGP c ASBR2 и IBGP с внутренним соседом PE1:
[ASBR1] bgp 100
[ASBR1-bgp] peer 198.51.100.2 as-number 200
[ASBR1-bgp] peer 1.1.1.1 as-number 100
[ASBR1-bgp] peer 1.1.1.1 connect-interface loopback 0
[ASBR1-bgp] ipv4-family vpnv4
[ASBR1-bgp-af-vpnv4] peer 1.1.1.1 enable
Это необходимый минимум. После таких настроек у вас должно быть такой состояние соседей BGP:
[PE1]dis bgp peer
BGP local router ID : 1.1.1.1
Local AS number : 100
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 2.2.2.2 4 100 3 4 0 00:00:05 Established 1
[PE1]dis bgp vpnv4 vpn-instance vpn1 peer
BGP local router ID : 1.1.1.1
Local AS number : 100
VPN-Instance vpn1, Router ID 1.1.1.1:
Total number of peers : 2 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 2.2.2.2 4 100 0 0 0 00:10:20 Idle 0 10.1.1.1 4 65001 12 11 0 00:09:54 Established 1
[ASBR1]dis bgp peer
BGP local router ID : 198.51.100.1
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 1.1.1.1 4 100 7 9 0 00:05:47 Established 0 198.51.100.2 4 200 18 17 0 00:15:15 Established 1
При этом изменений в LSP быть пока не должно.
Передача VPN-маршрутов
Теперь обратимся к передаче маршрутов VPN между AS. Они должны быть промаркированы.
PE1.
Разрешаем передачу маркированных маршрутов
[PE1] bgp 100
[PE1-bgp] peer 2.2.2.2 label-route-capability
ASBR1
Настроим политики по применению MPLS-меток.
Безусловное применение метки на любой маршрут:
[ASBR1] route-policy POLICY1 permit node 1
[ASBR1-route-policy] apply mpls-label
Применение дополнительной метки на любой маршрут, который уже пришёл с меткой
[ASBR1] route-policy POLICY2 permit node 1
[ASBR1-route-policy] if-match mpls-label
[ASBR1-route-policy] apply mpls-label
Применяем политики в BGP:
[ASBR1] bgp 100
[ASBR1-bgp] peer 1.1.1.1 route-policy POLICY2 export
[ASBR1-bgp] peer 1.1.1.1 label-route-capability
То есть если соседу 1.1.1.1 мы хотим передать промаркированный маршрут (он уже пришёл с меткой), то мы на него вешаем дополнительную метку. При этом в противном случае - это обычный маршрут внутри AS и на него метку добавлять не будем.
[ASBR1-bgp] peer 198.51.100.2 as-number 200
[ASBR1-bgp] peer 198.51.100.2 route-policy POLICY1 export
[ASBR1-bgp] peer 198.51.100.2 label-route-capability
При анонсировании маршрутов соседу из другой AS - 198.51.100.2 мы всегда применяем метку. Делать это на линке ASBR1-ASBR2 нам нужной по той простой причине, что ни LDP, ни RSVP там не запущен.
Кроме того ASBR1 должен в удалённую AS анонсировать маршрут до адреса 1.1.1.1 - должны же они иметь связность:
[ASBR1] bgp 100
[ASBR1-bgp] network 1.1.1.1 32
[ASBR1-bgp] quit
Ну и собственно последнее, что нам нужно сделать - настроить Multihop EBGP-сессию на PE-устройствах:
PE1
[PE1] bgp 100
[PE1-bgp] peer 4.4.4.4 as-number 200
[PE1-bgp] peer 4.4.4.4 connect-interface LoopBack 0
[PE1-bgp] peer 4.4.4.4 ebgp-max-hop 10
[PE1-bgp] ipv4-family vpnv4
[PE1-bgp-af-vpnv4] peer 4.4.4.4 enable
[PE1-bgp-af-vpnv4] quit
[PE1-bgp] quit
[PE1]dis bgp peer
BGP local router ID : 1.1.1.1
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 2.2.2.2 4 100 57 57 0 00:54:48 Established 1 4.4.4.4 4 200 46 49 0 00:42:15 Established 0
[PE1]dis bgp vpnv4 vpn-instance vpn1 peer
BGP local router ID : 1.1.1.1
Local AS number : 100
VPN-Instance vpn1, Router ID 1.1.1.1:
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 10.1.1.1 4 65001 72 73 0 01:09:22 Established 1
Тут надо заметить, что полностью симметричные настройки необходимо сделать на устройствах AS 200.
Данной конфигурации достаточно для достижения поставленной задачи.
[CE1]dis ip routing-table
Route Flags: R - relay, D - download to fib
Routing Tables: Public
Destinations : 5 Routes : 5
Destination/Mask Proto Pre Cost Flags NextHop Interface 10.1.1.0/24
10.1.1.1/32
10.2.1.0/24
127.0.0.0/8
127.0.0.1/32Direct
Direct
EBGP
Direct
Direct0
0
255
0
00
0
0
0
0D 10.1.1.1
D 127.0.0.1
D 10.1.1.2
D 127.0.0.1
D 127.0.0.1Ethernet0/0/0
InLoopBack0
Ethernet0/0/0
InLoopBack0
InLoopBack0
Попробуем запустить пинг от CE1 к CE2 и снять дамп трафика на линке ASBR1-ASBR2.
Ниже по выводу информации о LSP можно отследить назначение меток (внутренних VPN и внешних транспортных).
[PE1]dis mpls lsp
LSP Information: BGP LSP
FEC In/Out Label In/Out IF VrfName 4.4.4.4/32
10.1.1.0/24NULL/1027
1025/NULL-/-
-/-
vpn1
LSP Information: LDP LSP
FEC In/Out Label In/Out IF Vrf Name 1.1.1.1/32
2.2.2.2/32
2.2.2.2/323/NULL
NULL/3
1024/3-/-
-/Eth0/0/1
-/Eth0/0/1PE1
[PE1]display mpls lsp vpn-instance vpn1
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name 10.1.1.0/24 1025/NULL -/- vpn1
[ASBR1]dis mpls lsp
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name 1.1.1.1/32
4.4.4.4/32
4.4.4.4/321026/NULL
1027/1026
NULL/1026-/-
-/-
-/-
LSP Information: LDP LSP
FEC In/Out Label In/Out IF Vrf Name 1.1.1.1/32
1.1.1.1/32
2.2.2.2/32NULL/3
1025/3
3/NULL-/Eth0/0/1
-/Eth0/0/1
-/-
[ASBR2]dis mpls lsp
LSP Information: BGP LSP
FEC In/Out Label In/Out IF Vrf Name 1.1.1.1/32
4.4.4.4/32
1.1.1.1/32NULL/1026
1026/NULL
1027/1026-/-
-/-
-/-
LSP Information: LDP LSP
FEC In/Out Label In/Out IF Vrf Name 4.4.4.4/32
4.4.4.4/32
3.3.3.3/32NULL/3
1025/3
3/NULL-/Eth0/0/1
-/Eth0/0/1
-/-
А так выглядят маршруты, передающиеся в AS200:
[ASBR1]dis bgp routing-table 1.1.1.1
BGP local router ID : 2.2.2.2
Local AS number : 100
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 1.1.1.1/32:
Network route.
Label information (Received/Applied): NULL/4104
From: 0.0.0.0 (0.0.0.0)
Route Duration: 00h00m08s
Direct Out-interface: Tunnel0/0/0
Original nexthop: 2.2.2.2
Qos information : 0x0
AS-path Nil, origin igp, MED 1, pref-val 0, valid, local, best, select, pre 10
Advertised to such 1 peers: 198.51.100.2
[ASBR2]display bgp routing-table 1.1.1.1
BGP local router ID : 3.3.3.3
Local AS number : 200
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 1.1.1.1/32:
Label information (Received/Applied): 4102/4104 From: 198.51.100.1 (2.2.2.2)
Route Duration: 00h00m12s
Direct Out-interface: GigabitEthernet1/1/2
Relay Tunnel Out-Interface: GigabitEthernet1/1/2
Relay token: 0x42004000
Original nexthop: 198.51.100.1
Qos information : 0x0
AS-path 100, origin igp, MED 1, pref-val 0, valid, external, best, select, active, pre 255
Advertised to such 1 peers: 4.4.4.4
Обратите внимание, что они анонсируются с метками MPLS. Это пригодится нам чуть позже.
А теперь представим, что по каким-то неведомым причинам вам захотелось в AS100 использовать для Option C не LDP, а RSVP. Это задача скорее умозрительная и рождена воспалённым сознанием, но с точки зрения разобраться, как работает, весьма полезная. Что меняется в этом случае? Да практически всё. Принцип настройки значительно различается.
Конечно, сначала стандартные настройки RSVP (тут есть ещё элементы IGP shortcut - они не являются обязательными):
PE1:
[PE1]mpls
[PE1-mpls] mpls te
[PE1-mpls] mpls rsvp-te
[PE1-mpls] mpls te cspf
[PE1-mpls]
[PE1-mpls] ospf 1
[PE1-ospf-1] opaque-capability enable
[PE1-ospf-1] enable traffic-adjustment advertise
[PE1-ospf-1] area 0.0.0.0
[PE1-ospf-1-area-0.0.0.0] mpls-te enable
Для того, чтобы RSVP вообще начал строить LSP, нужно создать двунаправленный туннель между PE1 и ASBR1.
PE1:
[PE1-Tunnel0/0/0] ip address unnumbered interface LoopBack0
[PE1-Tunnel0/0/0] tunnel-protocol mpls te
[PE1-Tunnel0/0/0] destination 2.2.2.2
[PE1-Tunnel0/0/0] mpls te tunnel-id 100
[PE1-Tunnel0/0/0] mpls te igp advertise
[PE1-Tunnel0/0/0] mpls te igp metric absolute 1
[PE1-Tunnel0/0/0] mpls te commit
ASBR1:
[ASBR1]interface Tunnel0/0/0
[ASBR1-Tunnel0/0/0] ip address unnumbered interface LoopBack0
[ASBR1-Tunnel0/0/0] tunnel-protocol mpls te
[ASBR1-Tunnel0/0/0] destination 1.1.1.1
[ASBR1-Tunnel0/0/0] mpls te tunnel-id 200
[ASBR1-Tunnel0/0/0] mpls te igp advertise
[ASBR1-Tunnel0/0/0] mpls te igp metric absolute 1
[ASBR1-Tunnel0/0/0] mpls te commit
Если мы посмотрим на ASBR1 и ASBR2, то увидим, что маршрут не маркируется меткой (в отличие от случая с LDP):
[ASBR1]dis bgp routing-table 1.1.1.1
BGP local router ID : 2.2.2.2
Local AS number : 100
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 1.1.1.1/32:
Network route.
From: 0.0.0.0 (0.0.0.0)
Route Duration: 00h26m42s
Direct Out-interface: Tunnel0/0/0
Original nexthop: 2.2.2.2
Qos information : 0x0
AS-path Nil, origin igp, MED 1, pref-val 0, valid, local, best, select, pre 10
Advertised to such 1 peers: 198.51.100.2
[ASBR2]display bgp routing-table 1.1.1.1
BGP local router ID : 3.3.3.3
Local AS number : 200
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 1.1.1.1/32:
From: 198.51.100.1 (2.2.2.2)
Route Duration: 00h02m07s
Direct Out-interface: GigabitEthernet1/1/2
Original nexthop: 198.51.100.1
Qos information : 0x0
AS-path 100, origin igp, MED 1, pref-val 0, valid, external, best, select, active, pre 255
Not advertised to any peer yet
Очевидно, это происходит (или точнее не происходит) при отправке маршрута с 1.1.1.1 на 2.2.2.2. Поэтому продолжаем настройку устройств AS100. Начнём с PE1 должен быть подвергнут юстировке.
Во-первых, назначаем недостающую метку:
[PE1]route-policy LABEL permit node 10
[PE1-route-policy] apply mpls-label
[PE1-route-policy]
[PE1-route-policy]bgp 100
[PE1-bgp] ipv4-family unicast
[PE1-bgp-af-ipv4] peer 2.2.2.2 route-policy LABEL export
Все маршруты, передающиеся на 2.2.2.2 должны получить метку
Ещё один любопытный момент: пока у нас с PE1 не анонсируются никакие сети, команда network сейчас прописана на ASBR1, как того требует схема с LDP. Надо перенести её на PE1:
[PE1] bgp 100
[PE1-bgp] network 1.1.1.1 32
[ASBR1] bgp 100
[ASBR1-bgp] undo network 1.1.1.1 32
Теперь последний шаг - выбор туннеля для анонсирования VPN-маршрутов BGP:
[PE1]tunnel-policy TP
[PE1-tunnel-policy-TP] tunnel select-seq cr-lsp load-balance-number 1
[PE1-tunnel-policy-TP]tunnel-selector TS permit node 10
[PE1-tunnel-selector] apply tunnel-policy TP
[PE1-tunnel-selector]bgp 100
[PE1-bgp] ipv4-family unicast
[PE1-bgp-af-ipv4] tunnel-selector TS
Этот самый последний шаг необходимо повторить и на ASBR1.
[ASBR1]tunnel-policy TP
[ASBR1-tunnel-policy-TP] tunnel select-seq cr-lsp load-balance-number 1
[ASBR1-tunnel-policy-TP]tunnel-selector TS permit node 10
[ASBR1-tunnel-selector] apply tunnel-policy TP
[ASBR1-tunnel-selector]bgp 100
[ASBR1-bgp] ipv4-family unicast
[ASBR1-bgp-af-ipv4] tunnel-selector ts-test
Теперь можно проверить, что LSP простроены
[PE1]dis mpls lsp
LSP Information: RSVP LSP
FEC In/Out Label In/Out IF Vrf Name 2.2.2.2/32
1.1.1.1/32NULL/3
3/NULL-/GE1/1/6
GE1/1/6/-
LSP Information: BGP LSP
FEC n/Out Label I In/Out IF Vrf Name 1.1.1.1/32
4.4.4.4/32
10.1.1.1/324096/NULL
NULL/4096
4097/NULL-/-
-/-
-/-
vpn1
И маршрут передаётся на ASBR2 маркированный:
[ASBR2]dis bgp routing-table 1.1.1.1
BGP local router ID : 3.3.3.3
Local AS number : 200
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 1.1.1.1/32:
Label information (Received/Applied): 4097/4099
From: 198.51.100.1 (2.2.2.2)
Route Duration: 00h24m34s
Direct Out-interface: GigabitEthernet1/1/2
Relay Tunnel Out-Interface: GigabitEthernet1/1/2
Relay token: 0x42004000
Original nexthop: 198.51.100.1
Qos information : 0x0
AS-path 100, origin igp, pref-val 0, valid, external, best, select, active, pre 255
Advertised to such 1 peers: 4.4.4.4
На этом заканчивается решение этой надуманной задачи. Как видите, она несёт в себе значительное усложнение настройки и понимания. При этом, учитывая, что одновременно в сети вполне могут работать как RSVP, так и LDP, нет смысла городить такой лес. Единственное оправданное использование - это когда между ASBR и PE у вас находится ещё сеть MPLS и вы нуждаетесь в возможностях MPLS TE.
Материал:
Когда вы большой провайдер и перед вами стоит задача организовать L3VPN, как правило, вы используете MPLS. Если усложнить ситуацию наличием посередине другого провайдера, то вы вынуждены обратиться к Inter-AS VPN.
Полный текст
Всё делается гораздо проще: заказывается L2VPN по сети партнёра. Если чужая АС принадлежит неадекватным товарищам, у них покупается просто интернет и строится туннель.
В случае, когда у вас с другой стороны ваша AS и вы в неё примете те же VPN, да, возомжно, это будет лучшим решением. Но если у вас договорённость с другим провайдером, что вы просто передаёте свои впн в чужую AS, а они должны обеспечить L3VPN клиентам? Как тогда поступать?
вообшето в таком случае предпочитают back to back VRF на PE одеих сторон а не MP-eBGP
Если я правльно понимаю, это Option A? Когда подключение между провайдерами, это как PE-CE? То есть для каждого VRF нужен свой интерфейс.
А что там с масштабируемостью в этом случае? 100 VPN=100 интерфейсов?
eucariot поднимать с соседями mpls - это уже интим. Я даже не знаю с кем могут быть столь доверительные отношения... да и смысл есть только в случае десятков тысяч интерфейсов. Чтоб я так жил!
Спасибо за пример настройки!
back to back VRF или Inter-AS Option A очень популярен на стыке двух "чужих" AS и это очень правильно, так как можно обеспечить per-vpn QOS и так далее. Короче, задать для каждого VPN свои правила, политики и т.д.
Inter-AS Option C более подходит для стыка двух "родственных" AS которые по факту принадлежат одному хозяину. Например, купил большой оператор-магистрал оператора поменьше и вот таким образом он скорее всего соединятся.
Еще есть вариант с CsC ( Carrier's Carrier ) или Carrier Supporting Carrier, он в этой ситуации даже лучше, наверно.
Тема не раскрыта, где транзит то тут?
dot1q subinterface