Multiprotocol Label Switching EcoRouter Documentation / Multiprotocol Label Switching
MPLS (multiprotocol label switching — многопротокольная коммутация по меткам) — механизм, осуществляющий передачу данных от одного узла сети к другому с помощью меток.
Каждому пакету, проходящему через MPLS-сеть, независимо от типа этого пакета, назначается определенная метка, на основе которой принимается решение о маршрутизации. Содержимое пакетов при этом не изучается.
Маршрутизаторы в сети MPLS разделяются по своему функционалу на граничные (Label Edge Router, LER) и промежуточные (Label Switch Router, LSR) маршрутизаторы, на которых происходит смена меток.
В таблице ниже представлены основные команды, необходимые для настройки MPLS на EcoRouter.
Команда | Описание |
---|---|
mpls ac-group <имя> <номер> | Создание новой группы каналов доступа |
mpls bandwidth-class | |
mpls disable-all-interfaces | Отключение MPLS на всех интерфейсах |
mpls egress-ttl <0-255> | Задание значения TTL для выхода с маршрутизатора |
mpls enable-all-interfaces | Включение MPLS на всех интерфейсах |
mpls ftn-entry <ip-префикс> <метка> <ip-адрес ожидающего интерфейса> <имя исходящего интерфейса> | Настройка метки для FEC при входе в MPLS облако |
mpls ilm-entry <приходящая метка> <имя входного интерфейса> swap <исходящая метка> <имя исходящего интерфейса> <ip-адрес ожидающего интерфейса> <ip-префикс> | Настройка замены метки для FEC при транзите через LSR |
mpls ingress-ttl <0-255> | Задание значения TTL при входе на маршрутизатор |
mpls ldp <max-label-value|min-label-value> | Задание диапазона значений выдаваемых меток. Возможные значения от 16 до 1048575 |
mpls lsp-tunneling <имя входного интерфейса> <приходящая метка> <исходящая метка> <ip-префикс> | |
mpls map-route <ip-префикс|ip-префикс/маска> <ip-префикс> | |
mpls propagate-ttl | Управление переносом значения TTL из IP в MPLS |
mpls l2-circuit <имя> <ID> <ip-префикс> | Создание l2-circuit 5 типа |
mpls l2-circuit <имя> <ID> <ip-префикс> mode tagged svlan <VLAN> tpid <TPID> | Создание l2-circuit 4 типа |
Настройка статического MPLS
Статический MPLS позволяет вручную настроить все операции с метками на маршрутизаторе. Для хранения используются таблицы ILM и FTN. Настройки правила ILM применяются для проведения операций замены метки внутри домена MPLS. Настройки правила FTN применяются для навешивания или срезания метки на граничном маршрутизаторе домена MPLS.
Задание правила ILM. Где 1111 — метка, которая ожидается на интерфейсе е1; 2222 — новое значение метки и отправка ее через интерфейс е2; 10.0.0.1 — адрес следующего маршрутизатора(nexthop), а 2.2.2.2/32 — FEC.
ecorouter(config)#mpls ilm-entry 1111 e1 swap 2222 e2 10.0.0.1 2.2.2.2/32
Для explicit-null и implicit-null выходящие метки должны быть 0 и 3, соответственно.
Задание правила FTN. Где 2.2.2.2/32 — FEC; 2222 — метка, которая будет навешана; 10.0.0.2 — адрес следующего маршрутизатора(nexthop); е1 — интерфейс для отправки.
ecorouter(config)#mpls ftn-entry 2.2.2.2/32 2222 10.0.0.2 e1
LDP
LDP (Label Distribution Protocol) — протокол распределения меток. Метки генерируются для всех маршрутов в таблице маршрутизации. Все локальные метки хранятся в LIB. Метки распространяются в направлении от Egress LER к Ingress LER. В зависимости от настроек распространение меток может происходить либо в режиме Downstream Unsolicited — распространение меток сразу всем соседним маршрутизаторам, либо Downstream-on-Demand — распространение меток по запросу. Соответствие между меткой и сетью отправляется всем соседям LDP.
Настройка LDP
Для начала обмена метками между маршрутизаторами необходимо настроить работу протокола LDP и включить функцию работы с метками на интерфейсах в сторону соседнего MPLS маршрутизатора.
Переход в режим настройки и активация протокола LDP.
ecorouter(config)#router ldp
При изменении у FEC (Forwarding equivalence class) адреса next-hop (адрес следующего маршрутизатора) маршрутизатор генерирует для этого FEC новую метку и сообщает ее своим соседям. Для того чтобы маршрутизатор использовал одну и ту же метку для одного FEC при изменении адреса next-hop, необходимо включить данную опцию в режиме конфигурации протокола LDP.
ecorouter(config)#ldp label preserve
Метка сохраняется 30 секунд. Поэтому для корректной работы данной опции смена next-hop должна быть произведена за меньшее время.
Определение транспортного адреса маршрутизатора (необязательный параметр).
ecorouter(config-router)#transport-address ipv4 <ip-address>
Включение LDP и функции работы с метками на интерфейсах.
ecorouter(config-if)#ldp enable ipv4
ecorouter(config-if)#label-switching
Просмотр информации о LDP-соседстве.
ecorouter#sh mpls ldp neighbor
Команды просмотра
Для просмотра конфигурации и статуса протокола LDP используются команды, представленные в таблице ниже.
Команда | Описание |
---|---|
show ldp adjacency | Список LDP-связности |
show ldp advertise-labels | Просмотр информации о метках |
show ldp downstream | Просмотр распространение меток по методу downstream |
show ldp upstream | Просмотр распространение меток по методу upstream |
show ldp fec | Информация о Forwarding Equivalence Class |
show ldp fec-ipv4 | Информация о Forwarding Equivalence Class |
show ldp graceful-restart | Статус механизма Graceful Restart |
show ldp igp | Параметры IGP |
show ldp interface | Статус интерфейсов с функцией LDP |
show ldp lsp | Просмотр пути прохождения пакета на основе протоколов LDP |
show ldp mpls-l2-circuit | Просмотр конфигурации l2-circuit |
show ldp ms-pw | Multi-Segment PW information |
show ldp routes | Таблица NSM маршрутов LDP |
show ldp session | Информация о сессии LDP |
show ldp statistics | Просмотр статистики LDP |
show ldp targeted-peer | Информация о пограничном MPLS маршрутизаторе |
show ldp targeted-peers | List of targeted peers defined |
Pseudowire
Pseudowire (pseudo-wire) или L2-circuit — это сервис виртуальной частной сети для связи между собой двух сегментов сети по типу точка-точка. Любому поступающему трафику на РЕ маршрутизаторе назначается метка MPLS по которой происходит маршрутизация.
Настройка L2-circuit
Базовая настройка pseudowire включает в себя настройку граничных (Label Edge Router, LER) и промежуточных (Label Switch Router, LSR) маршрутизаторов сети.
Пример настройки LSR.
Создание loopback интерфейса.
ecorouter(config)#interface loopback.<number>
ecorouter(config-if)#ip address <address/mask>
Переход в режим настройки протокола LDP.
ecorouter(config)#router ldp
Определение транспортного адреса маршрутизатора.
ecorouter(config-router)#transport-address ipv4 <ip-address>
Включение LDP и функции работы с метками на интерфейсах.
ecorouter(config-if)#enable-ldp ipv4
ecorouter(config-if)#label-switching
Пример настройки LER.
Создание loopback интерфейса.
ecorouter(config)#interface loopback.<number>
ecorouter(config-if)#ip address <address/mask>
Переход в режим настройки протокола LDP.
ecorouter(config)#router ldp
Определение транспортного адреса маршрутизатора.
ecorouter(config-router)#transport-address ipv4 <ip-address>
Определение целевого маршрутизатора. Где в качестве <ip-address> указывается сетевой адрес пограничного маршрутизатора, до которого будет построен l2-circuit.
ecorouter(config-router)#targeted-peer ipv4 <ip-address>
Включение ldp и функции работы с метками на интерфейсах.
ecorouter(config-if)#enable-ldp ipv4
ecorouter(config-if)#label-switching
L2-circuit конфигурируется в зависимости от типа создаваемой схемы.
Создание l2-circuit type 5.
mpls l2-circuit <name> <Identifying value> <ip-address for end-point>
Где в качестве <name> задается идентификационное имя соединения, <Identifying value> - номер l2-circuit, <ip-address for end-point> - адрес граничного маршрутизатора.
Создание l2-circuit type 4.
mpls l2-circuit <name> <Identifying value> <ip-address for end-point> mode tagged svlan <vlan Identifier>
Где в качестве <name> задается идентификационное имя соединения, <Identifying value> - номер l2-circuit, <ip-address for end-point> - адрес граничного маршрутизатора, <vlan Identifier> - номер виртуальной сети.
Привязка созданной l2-circuit к порту.
ecorouter(config)#port ge2
ecorouter(config-port)#service-instance ge2/e2
ecorouter(config-service-instance)#encapsulation <tag/untag>
ecorouter(config-service-instance)#mpls-l2-circuit <name>
Где в зависимости от типа l2-circuit указывается тегированный или нетегированный трафик, параметр <name> - имя ранее созданного l2-circuit.
Просмотр состояния l2-circuit. Где <name> - имя ранее созданного l2-circuit.
ecorouter#show mpls l2-circuit <name>
Гибкая настройка различных операций с VLAN-тегами на service-instance позволяет передавать пакет через l2-circuit, предварительно проделав эти операции с VLAN-тегами. При этом используется тип инкапсуляции 5 (ethernet).
Поддерживаются следующие операции:
Снять внешнюю метку с пакета с двумя метками, перед отправкой в MPLS-туннель:
mpls l2-circuit pop_sv_any_cv 20 2.2.2.2
!
port te1
service-instance pop_sv_any_cv
encapsulation dot1q 40 second-dot1q any
rewrite pop 1
mpls-l2-circuit pop_sv_any_cv primary
Внутренняя метка может быть любой (second-dot1q any) или жестко заданной (second-dot1q 100). Во втором случае, все пакеты должны иметь внешнюю метку 40 и внутреннюю метку 100. В противном случае пакет будет отброшен.
Снять обе метки с пакета перед отправкой в MPLS-туннель:
mpls l2-circuit pop_pop 30 2.2.2.2
!
port te1
service-instance pop_pop
encapsulation dot1q 40 second-dot1q 90
rewrite pop 2
mpls-l2-circuit pop_pop primary
Cнять внешнюю метку и заменить внутреннюю на произвольную перед отправкой в MPLS-туннель:
mpls l2-circuit pop_swap 40 2.2.2.2
!
port te1
service-instance pop_swap
encapsulation dot1q 40 second-dot1q 90
rewrite translate 2-to-1 77
mpls-l2-circuit pop_swap primary
Добавить внешнюю метку перед отправкой в MPLS-туннель:
mpls l2-circuit push_sv 50 2.2.2.2
!
port te1
service-instance push_sv
encapsulation dot1q 60 exact
rewrite push 77
mpls-l2-circuit push_sv primary
Добавить две метки перед отправкой в MPLS-туннель:
mpls l2-circuit push_two 60 2.2.2.2
!
port te1
service-instance push_two
encapsulation untagged
rewrite push 77 88
mpls-l2-circuit push_two primary
Заменить внешнюю метку перед отправкой в MPLS-туннель:
mpls l2-circuit swap_sv 70 2.2.2.2
!
port te1
service-instance swap_sv
encapsulation dot1q 40 second-dot1q 90
rewrite translate 1-to-1 77
mpls-l2-circuit push_two primary
Заменить обе метки перед отправкой в MPLS-туннель:
mpls l2-circuit swap_swap 80 2.2.2.2
!
port te1
service-instance swap_swap
encapsulation dot1q 40 second-dot1q 90
rewrite translate 2-to-2 77 88
mpls-l2-circuit swap_swap primary
Заменить внутреннюю метку и добавить внешнюю перед отправкой в MPLS-туннель:
mpls l2-circuit swap_push 90 2.2.2.2
!
port te1
service-instance swap_push
encapsulation dot1q 60 exact
rewrite translate 1-to-2 77 88
mpls-l2-circuit swap_push primary
Backup Pseudowire
Pseudowire Redundancy (backup pseudowire) позволяет настроить один из граничных маршрутизаторов сети MPLS для обнаружения сбоя в сети и перенаправить трафик к другой конечной точке. Функция обеспечивает возможность восстановления после сбоя одного из удаленных граничных маршрутизаторов.
Для аварийного переключения на резервный pseudowire в конфигурации EcoRouter должно быть настроено два L2 туннеля, один из которых будет выполнять роль backup pseudowire. При передаче трафика по основному L2 туннелю backup pseudowire будет находиться в состоянии standby.
Для настройки backup pseudowire необходимо произвести описанные ниже действия.
Создать loopback интерфейс loopback.0 с сетевым адресом 1.1.1.1 и маской 32.
ecorouter(config)#interface loopback.0
ecorouter(config-if)#ip address 1.1.1.1/32
Перейти в режим настройки протокола LDP.
ecorouter(config)#router ldp
Определить транспортный адрес маршрутизатора.
ecorouter(config-router)#transport-address ipv4 1.1.1.1
Определить целевой маршрутизатор, например, сетевой адрес конечного маршрутизатора будет 2.2.2.2 с маской 32.
ecorouter(config-router)#targeted-peer ipv4 2.2.2.2
Включить режим распространения меток по всей таблице маршрутизации.
ecorouter(config-router)#pw-status-tlv
Включить LDP и функцию работы с метками на интерфейсе в сторону MPLS сети.
ecorouter(config-if)#enable-ldp ipv4
ecorouter(config-if)#label-switching
Далее необходимо настроить основной L2 туннель. Например, создать l2-circuit type 5 с именем vc1, Identifying value — 1111.
Для этого нужно создать l2-circuit type 5.
mpls l2-circuit vc1 1111 2.2.2.2
Настроить резервный L2 туннель, с именем vc2, Identifying value — 2222.
mpls l2-circuit vc2 2222 2.2.2.2
Привязать созданный l2-circuit к порту ge2, включить функцию переключения на основной l2-circuit при его доступности.
ecorouter(config)#port ge2
ecorouter(config-port)#service-instance ge2/e2
ecorouter(config-service-instance)#encapsulation untag
ecorouter(config-service-instance)#mpls-l2-circuit vc1
ecorouter(config-service-instance)#mpls-l2-circuit vc2
ecorouter(config-service-instance)#vc-mode revertive
Совместная работа BGP и MPLS
В данном разделе рассматривается реализация совместной работы протоколов BGP и MPLS на базе EcoRouterOS.
Главным отличием протокола BGP от IGP при работе с MPLS является то, что для BGP-маршрутов метки не создаются. Когда маршрутизатор LSR получает маршрут по BGP, то дальше он передает пакеты в сторону BGP-соседа, который указан, как next-hop в анонсе этого маршрута, используя созданную для next-hop метку. Поэтому нет необходимости настраивать BGP на каждом маршрутизаторе в автономной системе, его конфигурируют только на пограничных маршрутизаторах, к которым подключены клиенты или другие провайдеры.
Топология
Приведенная ниже схема реализует классический сценарий совместной работы протоколов BGP и MPLS, который явно демонстрирует все плюсы коммутации по меткам.
На схеме маршрутизаторы ECO-1, ECO-2 и R2 находятся в MPLS-облаке, и между ECO-1 и ECO-2 настроен iBGP. Маршрутизаторы R1 и R3 подключены к MPLS-облаку через eBGP. Локальные сети маршрутизаторов R1 и R3 представлены в виде loopback-интерфейсов. Необходимо создать связность между локальными сетями маршрутизаторов R1 и R3.
Конфигурация маршрутизаторов
Ниже приведена конфигурация маршрутизаторов для реализации данной схемы.
ECO-1
ECO-1#sh running-config
!
router ldp
transport-address ipv4 100.100.100.100
!
mpls map-route 3.3.3.3/32 200.200.200.200/32
!
router ospf 1
network 10.0.0.0 0.255.255.255 area 0.0.0.0
network 100.100.100.100 0.0.0.0 area 0.0.0.0
!
router bgp 200
neighbor 11.0.0.1 remote-as 100
neighbor 200.200.200.200 remote-as 200
neighbor 200.200.200.200 update-source loopback.0
neighbor 200.200.200.200 next-hop-self
!
port te0
lacp-priority 32767
mtu 9728
service-instance te0/e1
encapsulation untagged
!
port te1
lacp-priority 32767
mtu 9728
service-instance te1/e2
encapsulation untagged
!
interface loopback.0
ip mtu 1500
ip address 100.100.100.100/32
!
interface e2
ip mtu 1500
label-switching
connect port te1 service-instance te1/e2
ip address 10.12.0.100/16
ldp enable ipv4
!
interface e1
ip mtu 1500
connect port te0 service-instance te0/e1
ip address 11.0.0.100/16
!
end
ECO-2
ECO-2#sh running-config
!
router ldp
transport-address ipv4 200.200.200.200
!
mpls map-route 1.1.1.1/32 100.100.100.100/32
!
router ospf 1
network 10.0.0.0 0.255.255.255 area 0.0.0.0
network 200.200.200.200 0.0.0.0 area 0.0.0.0
!
router bgp 200
neighbor 23.0.0.3 remote-as 300
neighbor 100.100.100.100 remote-as 200
neighbor 100.100.100.100 update-source loopback.0
neighbor 100.100.100.100 next-hop-self
!
port te1
lacp-priority 32767
mtu 9728
service-instance te1/e2
encapsulation untagged
!
port te2
lacp-priority 32767
mtu 9728
service-instance te2/e3
encapsulation untagged
!
interface loopback.0
ip mtu 1500
ip address 200.200.200.200/32
!
interface e3
ip mtu 1500
connect port te2 service-instance te2/e3
ip address 23.0.0.200/16
!
interface e2
ip mtu 1500
label-switching
connect port te1 service-instance te1/e2
ip address 10.22.0.200/16
ldp enable ipv4
!
end
R1
R1#sh running-config
!
router bgp 100
neighbor 11.0.0.100 remote-as 200
network 1.1.1.1 mask 255.255.255.255
!
port te0
lacp-priority 32767
mtu 9728
service-instance te0/FastEthernet0/0
encapsulation untagged
!
interface loopback.0
ip mtu 1500
ip address 1.1.1.1/32
!
interface FastEthernet0/0
ip mtu 1500
connect port te0 service-instance te0/FastEthernet0/0
ip address 11.0.0.1/16
!
end
R3
R3#sh running-config
!
router bgp 300
neighbor 23.0.0.200 remote-as 200
network 3.3.3.3 mask 255.255.255.255
!
port te0
lacp-priority 32767
mtu 9728
service-instance te0/FastEthernet0/0
encapsulation untagged
!
interface loopback.0
ip mtu 1500
ip address 3.3.3.3/32
!
interface FastEthernet0/0
ip mtu 1500
connect port te0 service-instance te0/FastEthernet0/0
ip address 23.0.0.3/16
!
end
R2
R2#sh running-config
!
router ldp
transport-address ipv4 22.22.22.22
!
mpls map-route 3.3.3.3/32 200.200.200.200/32
!
router ospf 1
network 10.0.0.0 0.255.255.255 area 0.0.0.0
network 22.22.22.22 0.0.0.0 area 0.0.0.0
!
port te0
lacp-priority 32767
mtu 9728
service-instance te0/FastEthernet0/1
encapsulation untagged
!
port te1
lacp-priority 32767
mtu 9728
service-instance te1/FastEthernet0/0
encapsulation untagged
!
interface loopback.0
ip mtu 1500
ip address 22.22.22.22/32
!
interface FastEthernet0/0
ip mtu 1500
label-switching
connect port te1 service-instance te1/FastEthernet0/0
ip address 10.12.0.2/16
ldp enable ipv4
!
interface FastEthernet0/1
ip mtu 1500
label-switching
connect port te0 service-instance te0/FastEthernet0/1
ip address 10.22.0.2/16
ldp enable ipv4
!
end
Для связности между loopback-интерфейсами маршрутизаторов R1 и R3 не требуется, чтобы на маршрутизаторе R2 был настроен BGP и присутствовали все маршруты в таблице маршрутизации. При увеличении MPLS-облака в размерах это становится заметным преимуществом использования технологии коммутации по меткам.
Ниже представлен вывод на консоль таблицы маршрутизации ECO-1.
ECO-1#sh ip route
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default
IP Route Table for VRF "default"
B 1.1.1.1/32 [20/0] via 11.0.0.1, e1, 19:33:53
B 3.3.3.3/32 [200/0] via 200.200.200.200 (recursive via 10.12.0.2 ), 19:33:40
C 10.12.0.0/16 is directly connected, e2
O 10.22.0.0/16 [110/20] via 10.12.0.2, e2, 19:34:09
C 11.0.0.0/16 is directly connected, e1
C 100.100.100.100/32 is directly connected, loopback.0
O 200.200.200.200/32 [110/30] via 10.12.0.2, e2, 19:33:56
MPLS карта
Маршрут до адреса 3.3.3.3/32, полученный от BGP-соседа ECO-2, пролегает по MPLS-облаку через устройство с адресом 10.12.0.2. Такие маршруты называются рекурсивными. Для того чтобы при передаче пакетов в сторону адреса 3.3.3.3 добавлялась MPLS-метка, предназначенная для адреса next-hop BGP-соседа, в EcoRouterOS требуется явно указать «MPLS карту».
Для этого необходимо ввести команду конфигурационного режима mpls map-route <IP подсеть/маска подсети> <FEC подсеть/маска подсети>, где подсети задаются статически. Первый параметр в команде - IP-подсеть, для которой необходимо составить MPLS-карту. Второй параметр - FEC для этой подсети. FEC (Forwarding Equivalence Class) представляет собой класс трафика. В простейшем случае идентификатором класса является адресный префикс назначения (другими словами, IP-адрес или подсеть назначения).
В приведенной выше конфигурации маршрутизатора ECO-1 этому действию соответствует строка:
mpls map-route 3.3.3.3/32 200.200.200.200/32
Эта строка конфигурации означает, что при отправке пакета в сторону подсети 3.3.3.3/32 для него необходимо использовать метку для подсети 200.200.200.200/32.
Подобные статические карты более полно описывают топологию и операции над фреймами, что позволяет уменьшить время поиска проблем в сети.