MPLS и VPLS на MikroTik — L2/L3 VPN для провайдеров
MPLS (Multiprotocol Label Switching) — технология коммутации пакетов по меткам, обеспечивающая высокую производительность и гибкость при построении провайдерских сетей. VPLS (Virtual Private LAN Service) — сервис L2 VPN поверх MPLS, позволяющий объединить удалённые площадки в единый Ethernet-сегмент. В RouterOS 7 поддержка MPLS полностью переработана: LDP, VPLS и L3VPN настраиваются через обновлённый синтаксис. Это провайдерская технология, требующая понимания основ маршрутизации, BGP и L2/L3 VPN.
Описание
Зачем нужен MPLS
В классической IP-маршрутизации каждый роутер на пути пакета выполняет lookup в таблице маршрутизации (longest prefix match). Это ресурсоёмкая операция. MPLS решает эту проблему:
- На входе в MPLS-сеть пакету присваивается метка (label) — числовой идентификатор
- Промежуточные роутеры коммутируют пакеты по метке, не анализируя IP-заголовок
- На выходе из MPLS-сети метка снимается, и пакет маршрутизируется обычным способом
Это значительно ускоряет обработку трафика и позволяет строить сложные сервисы (L2VPN, L3VPN, Traffic Engineering).
Терминология MPLS
| Термин | Описание |
|---|---|
| LER (Label Edge Router) | Пограничный роутер MPLS-домена. Назначает и снимает метки. Также называется PE (Provider Edge) |
| LSR (Label Switch Router) | Промежуточный роутер. Коммутирует пакеты по меткам (swap). Также называется P (Provider) |
| LSP (Label Switched Path) | Путь через MPLS-сеть — последовательность роутеров и меток от входа до выхода |
| FEC (Forwarding Equivalence Class) | Группа пакетов, обрабатываемых одинаково (обычно — по prefix) |
| Label | 20-битное число (0–1048575). Метки 0–15 зарезервированы |
| Push | Добавление метки (на LER входе) |
| Pop | Снятие метки (на LER выходе) |
| Swap | Замена метки (на LSR) |
| LDP (Label Distribution Protocol) | Протокол автоматического распределения меток между MPLS-роутерами |
| PHP (Penultimate Hop Popping) | Предпоследний роутер снимает метку, чтобы разгрузить выходной LER |
Архитектура MPLS-сети
code[CE-A] [CE-B] [CE-C] │ │ │ ether2 ether2 ether2 │ │ │ [PE1/LER]───────[P/LSR]──────[PE2/LER] 10.0.0.1 10.0.0.2 10.0.0.3 Loopback Loopback Loopback │ │ │ └────── MPLS backbone ───────────┘
- PE1, PE2 — пограничные роутеры (LER), подключают клиентов
- P — транзитный роутер (LSR), коммутирует трафик по меткам
- CE-A, CE-B, CE-C — клиентское оборудование
Между PE/P-роутерами работает IGP (OSPF) для IP-связности и LDP для распределения меток.
MPLS vs WireGuard
| Критерий | MPLS | WireGuard |
|---|---|---|
| Уровень | L2.5 (между L2 и L3) | L3 VPN |
| Шифрование | Нет (доверенная сеть) | Да (ChaCha20-Poly1305) |
| Назначение | Провайдерский backbone | Site-to-site через интернет |
| Производительность | Максимальная (коммутация по метке) | Ограничена CPU (шифрование) |
| Масштабирование | Тысячи клиентов | Десятки-сотни туннелей |
| Требования к сети | Собственная инфраструктура (тёмное волокно, аренда каналов) | Любой интернет-канал |
| Типичные пользователи | ISP, дата-центры | Офисы, удалённые сотрудники |
MPLS — это провайдерская технология для собственной инфраструктуры. Если ваши точки соединены через публичный интернет — используйте WireGuard, IPsec или другие VPN.
Настройка
Требования
- RouterOS 7.20+ на всех роутерах MPLS-домена
- Достаточный CPU (MPLS создаёт дополнительную нагрузку при большом количестве LSP)
- IGP (OSPF или IS-IS) для IP-связности между loopback-адресами
- Рекомендуемое оборудование: CCR-серия или RB5009 для PE, любой RouterOS-совместимый для P
Шаг 1: Базовая IP-настройка и OSPF
Сначала обеспечим IP-связность между всеми роутерами через OSPF.
PE1 (10.0.0.1):
[admin@MikroTik] ># Loopback /interface/bridge add name=loopback /ip/address add address=10.0.0.1/32 interface=loopback # Линк к P-роутеру /ip/address add address=10.1.12.1/30 interface=ether1 # OSPF /routing/ospf/instance add name=default router-id=10.0.0.1 /routing/ospf/area add name=backbone instance=default area-id=0.0.0.0 /routing/ospf/interface-template add area=backbone interfaces=loopback type=passive /routing/ospf/interface-template add area=backbone interfaces=ether1 type=ptp
P (10.0.0.2):
[admin@MikroTik] ># Loopback /interface/bridge add name=loopback /ip/address add address=10.0.0.2/32 interface=loopback # Линки к PE1 и PE2 /ip/address add address=10.1.12.2/30 interface=ether1 /ip/address add address=10.1.23.1/30 interface=ether2 # OSPF /routing/ospf/instance add name=default router-id=10.0.0.2 /routing/ospf/area add name=backbone instance=default area-id=0.0.0.0 /routing/ospf/interface-template add area=backbone interfaces=loopback type=passive /routing/ospf/interface-template add area=backbone interfaces=ether1,ether2 type=ptp
PE2 (10.0.0.3):
[admin@MikroTik] ># Loopback /interface/bridge add name=loopback /ip/address add address=10.0.0.3/32 interface=loopback # Линк к P-роутеру /ip/address add address=10.1.23.2/30 interface=ether2 # OSPF /routing/ospf/instance add name=default router-id=10.0.0.3 /routing/ospf/area add name=backbone instance=default area-id=0.0.0.0 /routing/ospf/interface-template add area=backbone interfaces=loopback type=passive /routing/ospf/interface-template add area=backbone interfaces=ether2 type=ptp
Проверяем IP-связность:
[admin@MikroTik] ># На PE1 /ping 10.0.0.3 src-address=10.0.0.1
Пинг должен проходить через P-роутер.
Шаг 2: Включение MPLS и LDP
LDP автоматически распределяет метки между MPLS-роутерами. Включаем на всех PE и P роутерах.
PE1:
[admin@MikroTik] >/mpls/ldp add lsr-id=10.0.0.1 enabled=yes transport-addresses=10.0.0.1 /mpls/ldp/interface add interface=ether1
P:
[admin@MikroTik] >/mpls/ldp add lsr-id=10.0.0.2 enabled=yes transport-addresses=10.0.0.2 /mpls/ldp/interface add interface=ether1 /mpls/ldp/interface add interface=ether2
PE2:
[admin@MikroTik] >/mpls/ldp add lsr-id=10.0.0.3 enabled=yes transport-addresses=10.0.0.3 /mpls/ldp/interface add interface=ether2
Параметры:
lsr-id— уникальный идентификатор роутера в MPLS-домене (обычно loopback IP)transport-addresses— адрес для установления LDP-сессий (loopback для стабильности)interface— интерфейсы, на которых работает LDP discovery (Hello-пакеты)
Шаг 3: Проверка LDP и MPLS
[admin@MikroTik] ># Проверка LDP-соседей /mpls/ldp/neighbor print
Ожидаемый вывод на PE1:
codeFlags: X - disabled, D - dynamic, O - operational # TRANSPORT LOCAL-TRANSPORT PEER ADDRESSES 0 DO 10.0.0.2 10.0.0.1 10.0.0.2:0 10.1.12.2,10.1.23.1
[admin@MikroTik] ># Проверка таблицы MPLS-меток /mpls/forwarding-table print
Вывод покажет метки для каждого FEC (prefix):
code# IN-LABEL OUT-LABEL DESTINATION INTERFACE NEXTHOP 0 17 impl-null 10.0.0.2/32 ether1 10.1.12.2 1 18 19 10.0.0.3/32 ether1 10.1.12.2
impl-null(implicit null) — PHP: предпоследний роутер снимает метку- Числовая метка (19) — swap: метка заменяется на следующую
VPLS — Virtual Private LAN Service
Что такое VPLS
VPLS создаёт L2 VPN поверх MPLS backbone. Удалённые площадки клиента оказываются в одном Ethernet-сегменте — broadcast, ARP, STP работают так, как если бы устройства были подключены к одному коммутатору.
VPLS работает по принципу:
- На PE-роутере Ethernet-фреймы от клиента инкапсулируются в MPLS
- Фреймы передаются через MPLS backbone к удалённому PE
- На удалённом PE фреймы извлекаются и доставляются клиенту
- PE-роутеры выполняют MAC-learning для оптимизации forwarding
Настройка VPLS
VPLS создаётся как виртуальный интерфейс на PE-роутерах. Существует два способа: статический (ручное указание remote-peer) и динамический (через BGP auto-discovery).
Статический VPLS
PE1:
[admin@MikroTik] >/interface/vpls add name=vpls-client-a remote-peer=10.0.0.3 \ vpls-id=100:0 mac-address=auto cisco-style=no \ disabled=no
PE2:
[admin@MikroTik] >/interface/vpls add name=vpls-client-a remote-peer=10.0.0.1 \ vpls-id=100:0 mac-address=auto cisco-style=no \ disabled=no
Параметры:
remote-peer— loopback IP удалённого PE-роутераvpls-id— идентификатор VPLS-инстанса (должен совпадать на обоих PE)cisco-style— формат инкапсуляции (no = стандартный, yes = совместимость с Cisco)
Добавление VPLS в bridge с клиентским интерфейсом
VPLS-интерфейс работает как обычный Ethernet-порт. Чтобы связать его с клиентским интерфейсом, помещаем оба в один bridge:
PE1:
[admin@MikroTik] >/interface/bridge add name=bridge-client-a /interface/bridge/port add bridge=bridge-client-a interface=ether2 /interface/bridge/port add bridge=bridge-client-a interface=vpls-client-a
PE2:
[admin@MikroTik] >/interface/bridge add name=bridge-client-a /interface/bridge/port add bridge=bridge-client-a interface=ether2 /interface/bridge/port add bridge=bridge-client-a interface=vpls-client-a
Теперь CE-A (подключённый к ether2 на PE1) и CE-B (подключённый к ether2 на PE2) находятся в одном L2-сегменте.
VPLS с тремя и более PE
При N PE-роутерах каждый PE устанавливает VPLS-туннель к каждому другому PE (full mesh). Для 3 PE:
PE1:
[admin@MikroTik] >/interface/vpls add name=vpls-to-pe2 remote-peer=10.0.0.3 vpls-id=100:0 /interface/vpls add name=vpls-to-pe3 remote-peer=10.0.0.4 vpls-id=100:0 /interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe2 /interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe3
PE2:
[admin@MikroTik] >/interface/vpls add name=vpls-to-pe1 remote-peer=10.0.0.1 vpls-id=100:0 /interface/vpls add name=vpls-to-pe3 remote-peer=10.0.0.4 vpls-id=100:0 /interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe1 /interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe3
С ростом числа PE full-mesh становится неуправляемым (N*(N-1)/2 туннелей). Для масштабных сетей рекомендуется BGP auto-discovery VPLS.
BGP auto-discovery VPLS
BGP автоматически обнаруживает PE-роутеры и создаёт VPLS-туннели:
PE1:
[admin@MikroTik] ># BGP template для VPLS signaling /routing/bgp/template add name=vpls-tmpl as=65000 \ address-families=l2vpn # BGP connection к route reflector или другому PE /routing/bgp/connection add name=pe2-vpls template=vpls-tmpl \ remote.address=10.0.0.3 remote.as=65000 local.role=ibgp # VPLS instance через BGP /interface/vpls/bgp-vpls add bridge=bridge-client-a \ bridge-horizon=1 export-route-targets=65000:100 \ import-route-targets=65000:100 route-distinguisher=65000:100 \ site-id=1
PE2:
[admin@MikroTik] >/routing/bgp/template add name=vpls-tmpl as=65000 \ address-families=l2vpn /routing/bgp/connection add name=pe1-vpls template=vpls-tmpl \ remote.address=10.0.0.1 remote.as=65000 local.role=ibgp /interface/vpls/bgp-vpls add bridge=bridge-client-a \ bridge-horizon=1 export-route-targets=65000:100 \ import-route-targets=65000:100 route-distinguisher=65000:100 \ site-id=2
site-id должен быть уникальным для каждого PE в рамках одного VPLS-инстанса.
L3 VPN через MPLS + BGP VPNv4
Для L3 VPN (каждая площадка клиента в своей подсети, маршрутизация между ними через MPLS) используется связка VRF + MP-BGP VPNv4.
PE1:
[admin@MikroTik] ># VRF для клиента /ip/vrf add name=client-a interfaces=ether2 \ route-distinguisher=65000:100 \ import-route-targets=65000:100 \ export-route-targets=65000:100 # IP в VRF /ip/address add address=192.168.1.1/24 interface=ether2 # BGP для L3VPN /routing/bgp/template add name=vpnv4-tmpl as=65000 \ address-families=vpnv4 /routing/bgp/connection add name=pe2-l3vpn template=vpnv4-tmpl \ remote.address=10.0.0.3 remote.as=65000 local.role=ibgp
PE2:
[admin@MikroTik] >/ip/vrf add name=client-a interfaces=ether2 \ route-distinguisher=65000:100 \ import-route-targets=65000:100 \ export-route-targets=65000:100 /ip/address add address=192.168.2.1/24 interface=ether2 /routing/bgp/template add name=vpnv4-tmpl as=65000 \ address-families=vpnv4 /routing/bgp/connection add name=pe1-l3vpn template=vpnv4-tmpl \ remote.address=10.0.0.1 remote.as=65000 local.role=ibgp
В результате CE-A (192.168.1.0/24) и CE-B (192.168.2.0/24) могут маршрутизировать трафик друг к другу через MPLS backbone, при этом трафик полностью изолирован от других клиентов.
Пример: три офиса через MPLS backbone
Рассмотрим полный сценарий: три офиса компании подключены через провайдерский MPLS backbone (L2 VPLS).
code[Офис A]──ether2──[PE1]──ether1──[P]──ether2──[PE2]──ether2──[Офис B] │ ether3 │ [PE3]──ether2──[Офис C]
Все три офиса должны быть в одном L2-сегменте (192.168.10.0/24).
PE1 (полная конфигурация):
[admin@MikroTik] ># Identity /system/identity set name=PE1 # Loopback /interface/bridge add name=loopback /ip/address add address=10.0.0.1/32 interface=loopback # WAN к P-роутеру /ip/address add address=10.1.12.1/30 interface=ether1 # OSPF /routing/ospf/instance add name=default router-id=10.0.0.1 /routing/ospf/area add name=backbone instance=default area-id=0.0.0.0 /routing/ospf/interface-template add area=backbone interfaces=loopback type=passive /routing/ospf/interface-template add area=backbone interfaces=ether1 type=ptp # MPLS LDP /mpls/ldp add lsr-id=10.0.0.1 enabled=yes transport-addresses=10.0.0.1 /mpls/ldp/interface add interface=ether1 # VPLS /interface/vpls add name=vpls-to-pe2 remote-peer=10.0.0.2 vpls-id=100:0 /interface/vpls add name=vpls-to-pe3 remote-peer=10.0.0.3 vpls-id=100:0 # Bridge (объединяем клиентский порт и VPLS-туннели) /interface/bridge add name=bridge-office /interface/bridge/port add bridge=bridge-office interface=ether2 /interface/bridge/port add bridge=bridge-office interface=vpls-to-pe2 /interface/bridge/port add bridge=bridge-office interface=vpls-to-pe3
Проверка
LDP-соседи
[admin@MikroTik] >/mpls/ldp/neighbor print
Все P и PE роутеры должны быть в списке со статусом operational.
Таблица MPLS forwarding
[admin@MikroTik] >/mpls/forwarding-table print
Для каждого loopback-адреса должна быть запись с in-label и out-label.
VPLS-интерфейсы
[admin@MikroTik] >/interface/vpls print detail
Проверяем статус:
code0 name="vpls-to-pe2" remote-peer=10.0.0.2 vpls-id=100:0 running=yes disabled=no
running=yes означает, что VPLS-туннель установлен.
Мониторинг VPLS
[admin@MikroTik] >/interface/vpls monitor vpls-to-pe2
Покажет статистику: входящие/исходящие пакеты, состояние туннеля, используемые метки.
Bridge MAC-table
[admin@MikroTik] >/interface/bridge/host print where bridge=bridge-office
Должны быть видны MAC-адреса устройств со всех площадок. MAC-адреса, изученные через VPLS-интерфейсы, относятся к удалённым площадкам.
Проверка L2-связности
С устройства в Офисе A пингуем устройство в Офисе B:
codeping 192.168.10.20
Если VPLS работает — пинг проходит, TTL не уменьшается (L2-коммутация).
MPLS traceroute
[admin@MikroTik] >/tool/traceroute 10.0.0.3 src-address=10.0.0.1
В выводе должны быть видны MPLS-метки (если промежуточные роутеры поддерживают MPLS ICMP extensions).
Типичные ошибки
1. OSPF не объявляет loopback
Проблема: LDP не может установить сессию, потому что loopback-адреса не достижимы.
Симптом: /mpls/ldp/neighbor print — пусто.
Решение: убедитесь, что loopback-интерфейс включён в OSPF:
[admin@MikroTik] >/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
Тип passive — OSPF объявляет подсеть, но не отправляет Hello.
2. LDP transport-address не совпадает с OSPF
Проблема: LDP использует transport-address для установления TCP-сессии. Если этот адрес не маршрутизируется (нет в OSPF), сессия не установится.
Решение: transport-addresses должен быть loopback-адресом, который объявляется через OSPF:
[admin@MikroTik] >/mpls/ldp set transport-addresses=10.0.0.1
3. MTU mismatch в VPLS
Проблема: MPLS добавляет 4 байта на каждую метку (обычно 2 метки = 8 байт). Если MTU на промежуточных линках = 1500, то Ethernet-фреймы от клиента (1500 байт) + MPLS заголовок не помещаются.
Симптом: мелкие пакеты (ping) проходят, но крупные (скачивание файлов, SSH) зависают.
Решение: увеличьте MTU на всех MPLS-линках:
[admin@MikroTik] ># На всех интерфейсах MPLS backbone /interface/ethernet set ether1 mtu=9000
Или используйте MPLS MTU:
[admin@MikroTik] >/mpls set dynamic-label-range=16-1048575 allow-fast-path=yes
Рекомендуемый MTU для MPLS backbone: 9000 (jumbo frames).
4. Петли в VPLS bridge
Проблема: при full-mesh VPLS между тремя PE и включённом STP на bridge возникают конфликты. BPDUs от одного клиента могут прийти через другой PE и заблокировать порт.
Решение: используйте horizon для предотвращения петель. Все VPLS-интерфейсы в одном bridge должны иметь одинаковый horizon:
[admin@MikroTik] >/interface/bridge/port set [find interface~"vpls"] horizon=1
Bridge horizon гарантирует, что фрейм, полученный через VPLS-интерфейс с horizon=1, не будет отправлен в другой VPLS-интерфейс с тем же horizon.
5. Firewall блокирует LDP
Проблема: LDP использует TCP/UDP порт 646 и multicast 224.0.0.2. Firewall может блокировать эти пакеты.
Решение:
[admin@MikroTik] >/ip/firewall/filter add chain=input protocol=tcp dst-port=646 action=accept \ comment="Allow LDP TCP" /ip/firewall/filter add chain=input protocol=udp dst-port=646 action=accept \ comment="Allow LDP UDP" /ip/firewall/filter add chain=input dst-address=224.0.0.2 action=accept \ comment="Allow LDP multicast"
6. VPLS-интерфейс не переходит в running
Проблема: VPLS создан, но статус running=no.
Диагностика:
[admin@MikroTik] >/interface/vpls monitor vpls-to-pe2
Проверьте:
- LDP-сессия к remote-peer установлена (
/mpls/ldp/neighbor print) - VPLS-ID совпадает на обоих PE
- Loopback remote-peer доступен (
/ping 10.0.0.3 src-address=10.0.0.1)
7. Высокая загрузка CPU на PE
Проблема: MPLS и VPLS создают дополнительную нагрузку. На маломощных устройствах (hAP, hEX) это может привести к потере производительности.
Рекомендации:
- Используйте CCR-серию для PE-роутеров
- Включите fast-path для MPLS:
[admin@MikroTik] >/mpls set allow-fast-path=yes
- Минимизируйте количество VPLS-инстансов на одном PE
- Мониторьте CPU:
[admin@MikroTik] >/system/resource print
Мониторинг MPLS-сети
Сводка MPLS
[admin@MikroTik] >/mpls/forwarding-table print count-only=yes # Количество MPLS-записей /mpls/ldp/neighbor print count-only=yes # Количество LDP-соседей /interface/vpls print count-only=yes # Количество VPLS-туннелей
Статистика интерфейсов
[admin@MikroTik] >/interface/vpls print stats
Показывает tx/rx bytes и packets для каждого VPLS-туннеля.
Логирование MPLS-событий
[admin@MikroTik] >/system/logging add topics=mpls action=memory /log print where topics~"mpls"
Заключение
MPLS и VPLS — мощные провайдерские технологии, позволяющие строить масштабируемые L2 и L3 VPN-сервисы. На MikroTik RouterOS 7 весь стек MPLS полностью функционален: LDP для распределения меток, VPLS для L2 VPN, VRF + MP-BGP VPNv4 для L3 VPN. Ключевые требования: OSPF для IP-связности backbone, LDP для распределения меток, достаточный MTU на промежуточных линках и производительное оборудование (CCR-серия). Для малых сетей (до 5 площадок) рассмотрите WireGuard как более простую альтернативу; MPLS оправдан при десятках и сотнях клиентов на собственной инфраструктуре.
[CE-A] [CE-B] [CE-C]
│ │ │
ether2 ether2 ether2
│ │ │
[PE1/LER]───────[P/LSR]──────[PE2/LER]
10.0.0.1 10.0.0.2 10.0.0.3
Loopback Loopback Loopback
│ │ │
└────── MPLS backbone ───────────┘
# Loopback
/interface/bridge add name=loopback
/ip/address add address=10.0.0.1/32 interface=loopback
# Линк к P-роутеру
/ip/address add address=10.1.12.1/30 interface=ether1
# OSPF
/routing/ospf/instance add name=default router-id=10.0.0.1
/routing/ospf/area add name=backbone instance=default area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1 type=ptp
# Loopback
/interface/bridge add name=loopback
/ip/address add address=10.0.0.2/32 interface=loopback
# Линки к PE1 и PE2
/ip/address add address=10.1.12.2/30 interface=ether1
/ip/address add address=10.1.23.1/30 interface=ether2
# OSPF
/routing/ospf/instance add name=default router-id=10.0.0.2
/routing/ospf/area add name=backbone instance=default area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1,ether2 type=ptp
# Loopback
/interface/bridge add name=loopback
/ip/address add address=10.0.0.3/32 interface=loopback
# Линк к P-роутеру
/ip/address add address=10.1.23.2/30 interface=ether2
# OSPF
/routing/ospf/instance add name=default router-id=10.0.0.3
/routing/ospf/area add name=backbone instance=default area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether2 type=ptp
# На PE1
/ping 10.0.0.3 src-address=10.0.0.1
/mpls/ldp add lsr-id=10.0.0.1 enabled=yes transport-addresses=10.0.0.1
/mpls/ldp/interface add interface=ether1
/mpls/ldp add lsr-id=10.0.0.2 enabled=yes transport-addresses=10.0.0.2
/mpls/ldp/interface add interface=ether1
/mpls/ldp/interface add interface=ether2
/mpls/ldp add lsr-id=10.0.0.3 enabled=yes transport-addresses=10.0.0.3
/mpls/ldp/interface add interface=ether2
# Проверка LDP-соседей
/mpls/ldp/neighbor print
Flags: X - disabled, D - dynamic, O - operational
# TRANSPORT LOCAL-TRANSPORT PEER ADDRESSES
0 DO 10.0.0.2 10.0.0.1 10.0.0.2:0 10.1.12.2,10.1.23.1
# Проверка таблицы MPLS-меток
/mpls/forwarding-table print
# IN-LABEL OUT-LABEL DESTINATION INTERFACE NEXTHOP
0 17 impl-null 10.0.0.2/32 ether1 10.1.12.2
1 18 19 10.0.0.3/32 ether1 10.1.12.2
/interface/vpls add name=vpls-client-a remote-peer=10.0.0.3 \
vpls-id=100:0 mac-address=auto cisco-style=no \
disabled=no
/interface/vpls add name=vpls-client-a remote-peer=10.0.0.1 \
vpls-id=100:0 mac-address=auto cisco-style=no \
disabled=no
/interface/bridge add name=bridge-client-a
/interface/bridge/port add bridge=bridge-client-a interface=ether2
/interface/bridge/port add bridge=bridge-client-a interface=vpls-client-a
/interface/bridge add name=bridge-client-a
/interface/bridge/port add bridge=bridge-client-a interface=ether2
/interface/bridge/port add bridge=bridge-client-a interface=vpls-client-a
/interface/vpls add name=vpls-to-pe2 remote-peer=10.0.0.3 vpls-id=100:0
/interface/vpls add name=vpls-to-pe3 remote-peer=10.0.0.4 vpls-id=100:0
/interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe2
/interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe3
/interface/vpls add name=vpls-to-pe1 remote-peer=10.0.0.1 vpls-id=100:0
/interface/vpls add name=vpls-to-pe3 remote-peer=10.0.0.4 vpls-id=100:0
/interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe1
/interface/bridge/port add bridge=bridge-client-a interface=vpls-to-pe3
# BGP template для VPLS signaling
/routing/bgp/template add name=vpls-tmpl as=65000 \
address-families=l2vpn
# BGP connection к route reflector или другому PE
/routing/bgp/connection add name=pe2-vpls template=vpls-tmpl \
remote.address=10.0.0.3 remote.as=65000 local.role=ibgp
# VPLS instance через BGP
/interface/vpls/bgp-vpls add bridge=bridge-client-a \
bridge-horizon=1 export-route-targets=65000:100 \
import-route-targets=65000:100 route-distinguisher=65000:100 \
site-id=1
/routing/bgp/template add name=vpls-tmpl as=65000 \
address-families=l2vpn
/routing/bgp/connection add name=pe1-vpls template=vpls-tmpl \
remote.address=10.0.0.1 remote.as=65000 local.role=ibgp
/interface/vpls/bgp-vpls add bridge=bridge-client-a \
bridge-horizon=1 export-route-targets=65000:100 \
import-route-targets=65000:100 route-distinguisher=65000:100 \
site-id=2
# VRF для клиента
/ip/vrf add name=client-a interfaces=ether2 \
route-distinguisher=65000:100 \
import-route-targets=65000:100 \
export-route-targets=65000:100
# IP в VRF
/ip/address add address=192.168.1.1/24 interface=ether2
# BGP для L3VPN
/routing/bgp/template add name=vpnv4-tmpl as=65000 \
address-families=vpnv4
/routing/bgp/connection add name=pe2-l3vpn template=vpnv4-tmpl \
remote.address=10.0.0.3 remote.as=65000 local.role=ibgp
/ip/vrf add name=client-a interfaces=ether2 \
route-distinguisher=65000:100 \
import-route-targets=65000:100 \
export-route-targets=65000:100
/ip/address add address=192.168.2.1/24 interface=ether2
/routing/bgp/template add name=vpnv4-tmpl as=65000 \
address-families=vpnv4
/routing/bgp/connection add name=pe1-l3vpn template=vpnv4-tmpl \
remote.address=10.0.0.1 remote.as=65000 local.role=ibgp
[Офис A]──ether2──[PE1]──ether1──[P]──ether2──[PE2]──ether2──[Офис B]
│
ether3
│
[PE3]──ether2──[Офис C]
# Identity
/system/identity set name=PE1
# Loopback
/interface/bridge add name=loopback
/ip/address add address=10.0.0.1/32 interface=loopback
# WAN к P-роутеру
/ip/address add address=10.1.12.1/30 interface=ether1
# OSPF
/routing/ospf/instance add name=default router-id=10.0.0.1
/routing/ospf/area add name=backbone instance=default area-id=0.0.0.0
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/routing/ospf/interface-template add area=backbone interfaces=ether1 type=ptp
# MPLS LDP
/mpls/ldp add lsr-id=10.0.0.1 enabled=yes transport-addresses=10.0.0.1
/mpls/ldp/interface add interface=ether1
# VPLS
/interface/vpls add name=vpls-to-pe2 remote-peer=10.0.0.2 vpls-id=100:0
/interface/vpls add name=vpls-to-pe3 remote-peer=10.0.0.3 vpls-id=100:0
# Bridge (объединяем клиентский порт и VPLS-туннели)
/interface/bridge add name=bridge-office
/interface/bridge/port add bridge=bridge-office interface=ether2
/interface/bridge/port add bridge=bridge-office interface=vpls-to-pe2
/interface/bridge/port add bridge=bridge-office interface=vpls-to-pe3
/mpls/ldp/neighbor print
/mpls/forwarding-table print
/interface/vpls print detail
0 name="vpls-to-pe2" remote-peer=10.0.0.2 vpls-id=100:0
running=yes disabled=no
/interface/vpls monitor vpls-to-pe2
/interface/bridge/host print where bridge=bridge-office
ping 192.168.10.20
/tool/traceroute 10.0.0.3 src-address=10.0.0.1
/routing/ospf/interface-template add area=backbone interfaces=loopback type=passive
/mpls/ldp set transport-addresses=10.0.0.1
# На всех интерфейсах MPLS backbone
/interface/ethernet set ether1 mtu=9000
/mpls set dynamic-label-range=16-1048575 allow-fast-path=yes
/interface/bridge/port set [find interface~"vpls"] horizon=1
/ip/firewall/filter add chain=input protocol=tcp dst-port=646 action=accept \
comment="Allow LDP TCP"
/ip/firewall/filter add chain=input protocol=udp dst-port=646 action=accept \
comment="Allow LDP UDP"
/ip/firewall/filter add chain=input dst-address=224.0.0.2 action=accept \
comment="Allow LDP multicast"
/interface/vpls monitor vpls-to-pe2
/mpls set allow-fast-path=yes
/system/resource print
/mpls/forwarding-table print count-only=yes
# Количество MPLS-записей
/mpls/ldp/neighbor print count-only=yes
# Количество LDP-соседей
/interface/vpls print count-only=yes
# Количество VPLS-туннелей
/interface/vpls print stats
/system/logging add topics=mpls action=memory
/log print where topics~"mpls"