L2VPN: различия между версиями
(Новая страница: «==Martini (LDP)== ==Kompella (BGP)==») |
|||
Строка 1: | Строка 1: | ||
ISP предоставляет только транспорт. Маршрутизация ложится на клиента. | |||
Обе схемы работают одинаково с точки зрения forwarding (используют одинаковую инкаспуляцию). Разница только в signaling (control plane)- BGP vs LDP. | |||
Martini - даже нет понятия VPN, это просто объединение 2х точек. | |||
==Martini (LDP)== | ==Martini (LDP)== | ||
===Signaling=== | |||
На PE2 int 1 приходит l2-пакет. Пакет нужно туннелировать. Но если просто отправить пакет, то на PE1: не понятно что делать с пакетом. Поэтому при передаче через туннель нужно добавить 2 метки. Верхняя, чтобы передать по туннелю, нижняя связана с интерфейсом. | |||
* Каждый PE каждому интерфейсу выделяет метку (VC label). | |||
* Приходящие пакеты будут сразу обрабатываться по mpls.0: 40 pop -> int 1, 50 pop -> int 2, 60 pop -> int 3. | |||
* Как только сконфигурирован ''l2circuit'', интерфейсу выделена метка и записана в mpls.0. | |||
* Cо стороны PE1 (ingress) - mpls.0: int 1 push 40 push 20 -> P (резолв LDP соседа из inet.3), int 3 push 60 push 20 -> P. | |||
PE1 должен получить информацию о метках, которые нужно назначать. Как?? | |||
* Для передачи используется LDP сессия PE1 <> PE2, в конфигурации задано куда строить LDP туннель. Помним, что по умолчанию LDP поднимает сессии только с непосредственно подключенными соседями. | |||
* Метки (40, 50, 60) передали от PE2 к PE1. | |||
* PE1 должен определить какая метка какому интерфейсу соответствует. Этот параметр задаем руками. '''Virtual curcuit-ID (VCI)''' - должен быть уникальным для пары устройств, размер 4 байта. VCI передается вместе с метками. | |||
Дополнительно передается: | |||
* инкапсуляция, которая должна быть одинаковой с обоих концов l2curcuit | |||
* vlan-id - одинаковый (в Cisco может быть одинаковым) | |||
* MTU - одинаковый, задается только для сигналинга, не имеет практического значения. | |||
Lo интерфейсы должны быть добавлены в [protocols ldp] | |||
===Forwarding=== | |||
Фрейм: ip(1500) + l2 header(18) + CW-control word (4) + mpls int (4) + mpls tunnel (4) - это минимальный вариант, но он уже получается большой => стоит ставить MTU с запасом ~1570 или больше. | |||
Форвардинг строится только на метках mpls.0. Внутри сети провайдера пакет передается в 2ми метками (туннельная и интерфейсная). | |||
Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все. | |||
Пример (часть ненужных полей в выводе удалена): | |||
lagavulin> show route table l2circuit.0 detail | |||
l2circuit.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) | |||
'''10.200.86.3:CtrlWord:4:550:Local/96''' (1 entry, 1 announced) | |||
*L2CKT Preference: 7 | |||
Next hop type: Indirect | |||
Next hop: 192.168.86.1 via ge-0/0/0.30 weight 0x1, selected | |||
'''Label-switched-path lagavulin-to-oban''' | |||
'''Label operation: Push 300592''' | |||
Protocol next hop: 10.200.86.3 | |||
Age: 41:24 Metric2: 4 | |||
Announcement bits (1): 0-LDP | |||
AS path: I | |||
VC Label '''299968''', MTU 9000, VLAN ID 550 | |||
10.200.86.3:CtrlWord:4:550:Remote/96 (1 entry, 1 announced) | |||
*LDP Preference: 9 | |||
Next hop type: Discard | |||
Age: 37:49 | |||
Announcement bits (1): 1-l2 circuit | |||
AS path: I | |||
VC Label '''300064''', MTU 9000, VLAN ID 550 | |||
*300064 - push VC label for that destination (метка для интерфейса) | |||
*300592 - push MPLS label (для LSP туннеля) | |||
*299968 - роутер будет ожидать для данного circuit пакет с этой меткой | |||
===Configuration=== | |||
[edit interfaces ge-0/0/0] | |||
encapsulation flexible-ethernet-services; | |||
[edit interfaces ge-0/0/0] | |||
unit 560 { | |||
description l2-to-lagavulin; | |||
encapsulation vlan-ccc; | |||
vlan-id 560; | |||
} | |||
[edit protocols l2circuit neighbor 10.200.86.7] | |||
interface ge-0/0/0.560 { | |||
virtual-circuit-id 560; | |||
description l2-to-lagavulin; | |||
mtu 9000; | |||
} | |||
[edit protocols ldp] | |||
interface Lo0.0 | |||
{{note|text=Для ссс-инкапсуляции зарезервирован диапазон 512-4094}} | |||
Кстати, можно объединять интерфейсы между собой на одном роутере. | |||
[edit protocols l2circuit local-switching] | |||
interface ge-0/0/1.200 | |||
end-interface | |||
interface ge-0/0/3.200 | |||
===Troubleshooting=== | |||
Можно смотреть только состояние l2circuit connection. =( | |||
Если исключить всякие тупые ошибки, типа mtu mismatch, ненастроенный сигналинг с двух сторон и т.п., то в основном проблемы сводятся к проблемам с обменом метками между PE. В таком случае проверяем: | |||
* LDP соседство | |||
* LDP database | |||
* Наличие Lo в inet.3 и т.д. | |||
Если control plane поднялся: | |||
* Можем смотреть только обмен пакетами на интерфейсе. | |||
* Поднимать l3 интерфейсы и смотреть свзяность через l2circuit. | |||
* Если физически нет возможности поднять l3, то можно задействовать logical-tunnel. | |||
==Kompella (BGP)== | ==Kompella (BGP)== |
Версия 15:49, 6 ноября 2016
ISP предоставляет только транспорт. Маршрутизация ложится на клиента.
Обе схемы работают одинаково с точки зрения forwarding (используют одинаковую инкаспуляцию). Разница только в signaling (control plane)- BGP vs LDP.
Martini - даже нет понятия VPN, это просто объединение 2х точек.
Martini (LDP)
Signaling
На PE2 int 1 приходит l2-пакет. Пакет нужно туннелировать. Но если просто отправить пакет, то на PE1: не понятно что делать с пакетом. Поэтому при передаче через туннель нужно добавить 2 метки. Верхняя, чтобы передать по туннелю, нижняя связана с интерфейсом.
- Каждый PE каждому интерфейсу выделяет метку (VC label).
- Приходящие пакеты будут сразу обрабатываться по mpls.0: 40 pop -> int 1, 50 pop -> int 2, 60 pop -> int 3.
- Как только сконфигурирован l2circuit, интерфейсу выделена метка и записана в mpls.0.
- Cо стороны PE1 (ingress) - mpls.0: int 1 push 40 push 20 -> P (резолв LDP соседа из inet.3), int 3 push 60 push 20 -> P.
PE1 должен получить информацию о метках, которые нужно назначать. Как??
- Для передачи используется LDP сессия PE1 <> PE2, в конфигурации задано куда строить LDP туннель. Помним, что по умолчанию LDP поднимает сессии только с непосредственно подключенными соседями.
- Метки (40, 50, 60) передали от PE2 к PE1.
- PE1 должен определить какая метка какому интерфейсу соответствует. Этот параметр задаем руками. Virtual curcuit-ID (VCI) - должен быть уникальным для пары устройств, размер 4 байта. VCI передается вместе с метками.
Дополнительно передается:
- инкапсуляция, которая должна быть одинаковой с обоих концов l2curcuit
- vlan-id - одинаковый (в Cisco может быть одинаковым)
- MTU - одинаковый, задается только для сигналинга, не имеет практического значения.
Lo интерфейсы должны быть добавлены в [protocols ldp]
Forwarding
Фрейм: ip(1500) + l2 header(18) + CW-control word (4) + mpls int (4) + mpls tunnel (4) - это минимальный вариант, но он уже получается большой => стоит ставить MTU с запасом ~1570 или больше.
Форвардинг строится только на метках mpls.0. Внутри сети провайдера пакет передается в 2ми метками (туннельная и интерфейсная).
Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все.
Пример (часть ненужных полей в выводе удалена):
lagavulin> show route table l2circuit.0 detail l2circuit.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) 10.200.86.3:CtrlWord:4:550:Local/96 (1 entry, 1 announced) *L2CKT Preference: 7 Next hop type: Indirect Next hop: 192.168.86.1 via ge-0/0/0.30 weight 0x1, selected Label-switched-path lagavulin-to-oban Label operation: Push 300592 Protocol next hop: 10.200.86.3 Age: 41:24 Metric2: 4 Announcement bits (1): 0-LDP AS path: I VC Label 299968, MTU 9000, VLAN ID 550 10.200.86.3:CtrlWord:4:550:Remote/96 (1 entry, 1 announced) *LDP Preference: 9 Next hop type: Discard Age: 37:49 Announcement bits (1): 1-l2 circuit AS path: I VC Label 300064, MTU 9000, VLAN ID 550
- 300064 - push VC label for that destination (метка для интерфейса)
- 300592 - push MPLS label (для LSP туннеля)
- 299968 - роутер будет ожидать для данного circuit пакет с этой меткой
Configuration
[edit interfaces ge-0/0/0] encapsulation flexible-ethernet-services; [edit interfaces ge-0/0/0] unit 560 { description l2-to-lagavulin; encapsulation vlan-ccc; vlan-id 560; } [edit protocols l2circuit neighbor 10.200.86.7] interface ge-0/0/0.560 { virtual-circuit-id 560; description l2-to-lagavulin; mtu 9000; } [edit protocols ldp] interface Lo0.0
Для ссс-инкапсуляции зарезервирован диапазон 512-4094
Кстати, можно объединять интерфейсы между собой на одном роутере.
[edit protocols l2circuit local-switching] interface ge-0/0/1.200 end-interface interface ge-0/0/3.200
Troubleshooting
Можно смотреть только состояние l2circuit connection. =( Если исключить всякие тупые ошибки, типа mtu mismatch, ненастроенный сигналинг с двух сторон и т.п., то в основном проблемы сводятся к проблемам с обменом метками между PE. В таком случае проверяем:
- LDP соседство
- LDP database
- Наличие Lo в inet.3 и т.д.
Если control plane поднялся:
- Можем смотреть только обмен пакетами на интерфейсе.
- Поднимать l3 интерфейсы и смотреть свзяность через l2circuit.
- Если физически нет возможности поднять l3, то можно задействовать logical-tunnel.