L2VPN: различия между версиями
м (→Martini (LDP)) |
|||
Строка 31: | Строка 31: | ||
Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все. | Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все. | ||
Circuit - это по сути 2 метки: на вход (inncoming), на выход (outgoing). | |||
Пример (часть ненужных полей в выводе удалена): | Пример (часть ненужных полей в выводе удалена): |
Версия 10:01, 8 ноября 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ми метками (туннельная и интерфейсная).
Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все.
Circuit - это по сути 2 метки: на вход (inncoming), на выход (outgoing).
Пример (часть ненужных полей в выводе удалена):
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.