mikrotik-wiki.ru
Главная
Загрузка...

MPLS и VPLS на MikroTik — L2/L3 VPN для провайдеров

RouterOS 7.xRouting11 мин30 мар. 2026 г.
TelegramVK

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 решает эту проблему:

  1. На входе в MPLS-сеть пакету присваивается метка (label) — числовой идентификатор
  2. Промежуточные роутеры коммутируют пакеты по метке, не анализируя IP-заголовок
  3. На выходе из 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)
Label20-битное число (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

КритерийMPLSWireGuard
УровеньL2.5 (между L2 и L3)L3 VPN
ШифрованиеНет (доверенная сеть)Да (ChaCha20-Poly1305)
НазначениеПровайдерский backboneSite-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:

code
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
[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 работает по принципу:

  1. На PE-роутере Ethernet-фреймы от клиента инкапсулируются в MPLS
  2. Фреймы передаются через MPLS backbone к удалённому PE
  3. На удалённом PE фреймы извлекаются и доставляются клиенту
  4. 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

Проверяем статус:

code
 0   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:

code
ping 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 оправдан при десятках и сотнях клиентов на собственной инфраструктуре.

[admin@MikroTik] >
[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"
Routing / MPLS и VPLS на MikroTik — L2/L3 VPN для провайдеров