MPLS и VPLS в Mikrotik
С одной стороны, желание несколько странное – организация “серьезного” MPLS/VPLS на дешевом железе типа Mikrotik. С другой стороны – за 70 баксов (1500-2000р) за младшую модель RB/750(GL) мы получаем PE/CE-устройство, умеющее (помимо прочего) L2VPN/L3VPN поверх MPLS-среды и способное прокачать через себя порядка 70 мегабит дуплекса (на больших пакетах).
Mikrotik RouterOS умеет как MPLS (L3VPN, Traffic Engeneering), так и L2VPN (l2circuit aka VPWS, VPLS), что покрывает практически все возможные задачи (учитывая производительность железа, разумеется).
Интересно? Прошу под кат!
Для начала, немного теории.
MPLS (multiprotocol label switching) – механизм маршрутизации на основе меток. Каждому пакету, проходящему через MPLS-сеть, независимо от типа этого пакета, назначается определенная метка, на основе которой принимается решение о маршрутизации. Важно отметить, что содержимое при этом не изучается, т.е. внутри MPLS можно гонять абсолютно любой L2/L3 трафик (STP, BPDU и т.д., вплоть до SDH и ATM) без какого-либо влияния на транспортную сеть (флуд, вланы с большим количеством мак-адресов, петли и прочие “радости” становятся вам, как транспорту, глубоко фиолетовы).
Ключевым понятием в MPLS является LSP (Label Switched Path) – путь прохождения пакета, который устанавливается на основе протоколов LDP, RSVP-TE, BGP или CR-LDP. В данной статье я не буду распространяться, по каким критериям устанавливается LSP, а из протоколов остановлюсь на LDP. Литературы по MPLS в сети достаточно, чтобы интересующийся читатель почерпнул для себя много нового, целью же данной статьи является демонстрация вполне конкретных возможностей RouterOS.
Роутер в MPLS-сети может выполнять одну из трех функций:
1. CE-роутер (Client-edge) – не является членом MPLS-сети, и вообще ничего про нее не знает, это просто клиентское устройство, которое имеет L2/L3 связность с роутером провайдера.
2. PE-роутер (Provider-edge) – пограничный MPLS маршрутизатор. Является шлюзом для клиента и пересылает его трафик в MPLS-сеть провайдера. Другое название – LER – label edge router.
3. P-роутер (provider router) – MPLS маршрутизатор, который прозрачно пропускает MPLS-траффик, не занимаясь анализом его содержимого. Другое название – LSR (label-switch router).
VPWS (l2circuit) – канал точка-точка (он же pseudo-wire).
VPLS – многоточечный канал, для клиента выглядит как виртуальный “тупой” свич, прозрачно пропускающий любые пакеты.
Теперь, когда определились с терминологией, рассмотрим конкретные примеры:
1. Mikrotik – Juniper – Mikrotik L2Circuit
Вариант первый: Mikrotik выступает в качестве PE-роутера, Juniper – в качестве P-роутера.
Схема сети
Все картинки кликабельны
Конфигурация Miktorik в качестве PE-роутера
Поднимаем интерфейсы и ip-адреса:
/interface bridge add name=loopback add l2mtu=1526 name=vpn /ip address add address=10.0.11.24/24 interface=eth2 add address=172.19.238.33/32 interface=loopback network=172.19.238.33
Настраиваем OSPF, анонсируем сети, через которые видим своих соседей + loopback:
/routing ospf instance set [ find default=yes ] router-id=172.19.238.33 /routing ospf interface add interface=eth2 /routing ospf network add area=backbone network=10.0.11.0/24 add area=backbone network=172.19.238.33/32
Настраиваем LDP, не забываем про mpls-mtu (для успешного прохождения тегированных пакетов и QinQ:
/mpls interface set [ find default=yes ] mpls-mtu=1526 /mpls ldp set enabled=yes lsr-id=172.19.238.33 transport-address=172.19.238.33 /mpls ldp interface add interface=eth2
Наконец, поднимаем L2VPN и заворачиваем туда eth5, где будут жить наши клиенты:
/interface vpls add advertised-l2mtu=1526 cisco-style=yes cisco-style-id=5 disabled=no l2mtu=1526 \ name=junos-l2circuit remote-peer=172.19.238.34 /interface bridge port add bridge=vpn interface=eth5 add bridge=vpn interface=junos-l2circuit
Cisco-style определяет параметры id, по которому маршрутизаторы узнают друг друга. l2-mtu определяет максимальный размер кадра, который может пройти без фрагментации.
/interface bridge add name=loopback add l2mtu=1526 name=vpn /ip address add address=172.19.238.34/32 interface=loopback network=172.19.238.34 add address=192.168.168.2/24 interface=eth2 network=192.168.168.0 /routing ospf instance set [ find default=yes ] router-id=172.19.238.34 /routing ospf interface add interface=eth2 /routing ospf network add area=backbone network=192.168.168.0/24 add area=backbone network=172.19.238.34/32 /mpls interface set [ find default=yes ] mpls-mtu=1526 /mpls ldp set enabled=yes lsr-id=172.19.238.34 transport-address=172.19.238.34 /mpls ldp interface add interface=eth2 /interface vpls add advertised-l2mtu=1526 cisco-style=yes cisco-style-id=5 disabled=no l2mtu=1526 \ name=junos-l2circuit remote-peer=172.19.238.33 /interface bridge port add bridge=vpn interface=eth5 add bridge=vpn interface=junos-l2circuit
Конфигурация Juniper SRX в качестве P-роутера
Настраиваем интерфейсы, IP-адреса:
interfaces { fe-0/0/6 { description mkt.192.168.168.2--pe; mtu 1624; unit 0 { family inet { mtu 1500; address 192.168.168.1/24; } family mpls; } } fe-0/0/7 { description mkt.10.0.11.24--pe; mtu 1624; unit 0 { family inet { mtu 1500; address 10.0.11.23/24; } family mpls; } } lo0 { unit 0 { family inet { address 172.19.238.35/32; } } } }
Затем поднимаем OSPF:
protocols { ospf { area 0.0.0.0 { interface fe-0/0/6.0 { hello-interval 10; } interface fe-0/0/7.0 { hello-interval 10; } interface lo0.0 { passive; } } } }
Наконец, настраиваем MPLS:
protocols { mpls { interface all; } ldp { egress-policy CONNECTED-ONLY; transport-address 172.19.238.35; interface fe-0/0/6.0; interface fe-0/0/7.0; interface lo0.0; } policy-options { prefix-list LOOPBACK-PREFIX { 172.19.238.35/32; } policy-statement CONNECTED-ONLY { from { prefix-list LOOPBACK-PREFIX; } then accept; } } security { forwarding-options { family { mpls { mode packet-based; } } } }
В данном случае SRX, как P-роутер, не устанавливает сам никаких MPLS-коннектов, а только лишь пропускает LDP-пакеты.
2. Juniper – Mikrotik – Mikrotik L2Circuit
Другой вариант – теперь Juniper SRX у нас выступает как PE-роутер, а Mikrotik – как P-роутер.
Схема сети
Конфигурация Juniper SRX в качестве PE-роутера
Конфигурация интерфейсов
interfaces { fe-0/0/5 { description vpws2--pe; vlan-tagging; mtu 1624; encapsulation vlan-ccc; unit 0 { encapsulation vlan-ccc; vlan-id 1806; } } fe-0/0/7 { description mkt.10.0.11.24--p; mtu 1624; unit 0 { family inet { mtu 1500; address 10.0.11.23/24; } family mpls { mtu 1526; } } } lo0 { unit 0 { family inet { address 172.19.238.35/32; } } } }
Из особенностей стоит отметить encapsulation vlan-ccc; который говорит нам, что этот порт заворачивается в кросс-коннект. mpls-mtu должен совпадать с таковым у другого PE-устройства.
Настройка маршрутизации
routing-options { static { route 0.0.0.0/0 { next-hop 172.19.238.1; no-readvertise; preference 200; } } } protocols { mpls { interface all; } ospf { area 0.0.0.0 { interface fe-0/0/7.0 { hello-interval 10; } interface lo0.0 { passive; } } } ldp { egress-policy CONNECTED-ONLY; transport-address 172.19.238.35; interface all; } l2circuit { neighbor 172.19.238.34 { interface fe-0/0/5.0 { virtual-circuit-id 5; mtu 1526; } } } }
Здесь мы строим l2circuit, указываем id и mpls-mtu.
Конфигурация Mikrotik в качестве P-роутера
/interface bridge add name=loopback /ip address add address=10.0.11.24/24 interface=eth3 add address=172.19.238.33/32 interface=loopback network=172.19.238.33 add address=192.168.168.1/24 interface=eth2 /routing ospf instance set [ find default=yes ] router-id=172.19.238.33 /routing ospf interface add interface=eth2 add interface=eth3 /routing ospf network add area=backbone network=10.0.11.0/24 add area=backbone network=172.19.238.33/32 add area=backbone network=192.168.168.0/24 /mpls interface set [ find default=yes ] mpls-mtu=1526 /mpls ldp set enabled=yes lsr-id=172.19.238.33 transport-address=172.19.238.33 /mpls ldp interface add interface=eth2 add interface=eth3
Тут все абсолютно стандартно, vpls-интерфейсы создавать не нужно.
3. Juniper – Mikrotik VPLS
Третий вариант – настройка не L2circuit (он же – CrossConnect Circuit в реализации Juniper), а полноценного многоточечного VPLS.
Конфигурация Mikrotik в качестве P-роутера
/interface bridge add name=loopback /ip address add address=10.0.11.24/24 interface=eth3 add address=10.0.12.24/24 interface=eth5 add address=172.19.238.33/32 interface=loopback network=172.19.238.33 add address=192.168.168.1/24 interface=eth2 add address=192.168.88.1/24 interface=eth4 /routing ospf instance set [ find default=yes ] router-id=172.19.238.33 /routing ospf interface add interface=eth2 add interface=eth3 add interface=eth4 add interface=eth5 /routing ospf network add area=backbone network=10.0.11.0/24 add area=backbone network=10.0.12.0/24 add area=backbone network=172.19.238.33/32 add area=backbone network=192.168.168.0/24 add area=backbone network=192.168.88.0/24 /mpls interface set [ find default=yes ] mpls-mtu=1526 /mpls ldp set enabled=yes lsr-id=172.19.238.33 transport-address=172.19.238.33 /mpls ldp interface add interface=eth2 add interface=eth3 add interface=eth4 add interface=eth5
Конфигурация Miktorik в качестве PE-роутера
/interface bridge add name=loopback add l2mtu=1526 name=vpn /ip address add address=172.19.238.34/32 interface=loopback network=172.19.238.34 add address=192.168.168.2/24 interface=eth2 network=192.168.168.0 /routing ospf instance set [ find default=yes ] router-id=172.19.238.34 /routing ospf interface add interface=eth2 /routing ospf network add area=backbone network=192.168.168.0/24 add area=backbone network=172.19.238.34/32 /mpls interface set [ find default=yes ] mpls-mtu=1526 /mpls ldp set enabled=yes lsr-id=172.19.238.34 transport-address=172.19.238.34 /mpls ldp interface add interface=eth2 /interface vpls add advertised-l2mtu=1526 cisco-style=yes cisco-style-id=5 disabled=no l2mtu=1526 \ name=junos-l2circuit remote-peer=172.19.238.33 /interface bridge port add bridge=vpn interface=eth5 add bridge=vpn interface=junos-l2circuit horizon=1
Аналогично настройке для l2circuit, но есть пара нюансов:
1. Каналы в одном VPLS-домене должны иметь один vpls-id.
2. Связность должна быть full-mesh (каждый с каждым) для обеспечения наибольшей надежности. Впрочем, это условие не является обязательным.
3. Для избавления от возможности петли нужно использовать следующую опцию:
/interface bridge port set 0 horizon=1
Конфигурация Juniper SRX в качестве PE-роутера
Настройка интерфейсов
interfaces { fe-0/0/5 { description vpws2--pe; mtu 1624; encapsulation ethernet-vpls; unit 0 { family vpls; } } fe-0/0/6 { description mkt.192.168.168.2--pe; mtu 1624; unit 0 { family inet { mtu 1500; address 192.168.168.1/24; } family mpls; } } lo0 { unit 0 { family inet { address 172.19.238.35/32; } } } }
Если для кросс-коннекта мы указывали encapsulation vlan-ccc, то для VPLS нам нужно encapsulation ethernet-vpls и указать family vpls в настройках юнита.
Настройка маршрутизации
protocols { mpls { interface all; } ospf { area 0.0.0.0 { interface fe-0/0/6.0 { hello-interval 10; } interface fe-0/0/7.0 { hello-interval 10; } interface lo0.0 { passive; } } } ldp { egress-policy CONNECTED-ONLY; transport-address 172.19.238.35; interface all; } } policy-options { prefix-list LOOPBACK-PREFIX { 172.19.238.35/32; } policy-statement CONNECTED-ONLY { from { prefix-list LOOPBACK-PREFIX; } then accept; } } security { forwarding-options { family { mpls { mode packet-based; } } } }
Настройка VPLS-коннектов
routing-instances { vpls-re { instance-type vpls; interface fe-0/0/5.0; protocols { vpls { no-tunnel-services; vpls-id 5; mtu 1526; neighbor 172.19.238.34; neighbor 172.19.238.105; } } } }
VPLS-коннекты так же строятся, по возможности “каждый с каждым”, хотя это не обязательно.
4. Проверка
PE Juniper
snake@srx1> show ldp neighbor Address Interface Label space ID Hold time 172.19.238.34 lo0.0 172.19.238.34:0 42 10.0.11.24 fe-0/0/7.0 172.19.238.33:0 11
snake@srx1> show l2circuit connections status Layer-2 Circuit Connections: Legend for connection status (St) EI -- encapsulation invalid NP -- interface h/w not present MM -- mtu mismatch Dn -- down EM -- encapsulation mismatch VC-Dn -- Virtual circuit Down CM -- control-word mismatch Up -- operational VM -- vlan id mismatch CF -- Call admission control failure OL -- no outgoing label IB -- TDM incompatible bitrate NC -- intf encaps not CCC/TCC TM -- TDM misconfiguration BK -- Backup Connection ST -- Standby Connection CB -- rcvd cell-bundle size bad SP -- Static Pseudowire LD -- local site signaled down RS -- remote site standby RD -- remote site signaled down XX -- unknown Legend for interface status Up -- operational Dn -- down Neighbor: 172.19.238.34 Interface Type St Time last up # Up trans fe-0/0/5.0(vc 5) rmt Up Nov 9 18:27:45 2012 1 Remote PE: 172.19.238.34, Negotiated control-word: No Incoming label: 300096, Outgoing label: 21 Negotiated PW status TLV: No Local interface: fe-0/0/5.0, Status: Up, Encapsulation: VLAN
PE Mikrotik
[admin@pe-router] /mpls ldp neighbor> print Flags: X - disabled, D - dynamic, O - operational, T - sending-targeted-hello, V - vpls # TRANSPORT LOCAL-TRANSPORT PEER SEND-TARGETED ADDRESSES 0 DO 172.19.238.33 172.19.238.34 172.19.238.33:0 no 10.0.11.24 172.19.74.2 172.19.238.33 192.168.88.1 192.168.168.1 1 DOTV 172.19.238.35 172.19.238.34 172.19.238.35:0 yes 10.0.11.23 172.19.238.4 172.19.238.30 172.19.238.35 172.19.238.58
[admin@pe-router] /mpls> forwarding-table print Flags: L - ldp, V - vpls, T - traffic-eng # IN-LABEL OUT-LABELS DESTINATION INTERFACE NEXTHOP 0 expl-null 1 L 16 56 172.19.238.56/30 eth2 192.168.168.1 2 L 17 10.0.11.0/24 eth2 192.168.168.1 3 L 18 57 172.19.238.28/30 eth2 192.168.168.1 4 L 19 58 172.19.238.35/32 eth2 192.168.168.1 5 L 20 172.19.238.33/32 eth2 192.168.168.1 6 V 21 junos-l2circuit
[admin@pe-router] > interface vpls monitor junos-l2circuit once remote-label: 300096 local-label: 21 remote-status: transport: 172.19.238.35/32 transport-nexthop: 192.168.168.1 imposed-labels: 58,300096
Если канал не поднялся сразу, то помогает выключение-включение VPLS-интерфейса со стороны Mikrotik. В остальных случаях канал, что называется, “либо работает, либо нет”.
На этом, собственно, все.
5. Теория
Мануалы по теме:
1. MPLS
2. MPLS Overview
3. MPLSVPLS
4. L2VPN with Juniper
P.S. Заранее прошу прощения за большой объем и большое количество конфигов, но тут, что называется, лучше один раз увидеть конфиг, чем пускаться в теоретические рассуждения.
P.P.S Это копия моей вчерашней статьи на Хабре, благодаря которой я получил инвайт и первые плюсы в карму ;).