MikroTik Для больших дядей часть 4
Подведём небольшой итог всего того, чего мы добились.
У нас есть топология сети, которая равноправна по всем интерфейсам, кроме интерфейса между маршрутизаторами P-2 и P-5. Данный интерфейс выступает в роли резервного, так как его пропускная способность заведомо меньше.
В данный момент все маршрутизаторы могу связаться с другими маршрутизаторами по их loopback адресам. И лучший маршрут до маршрутизаторов будет выбран с помощью протокола OSPF.
Освежим в памяти схему сети.
Нет повести печальнее на свете, чем повесть о BGP c MPLS-ом.
о MPLS
Настал тот час, когда мы уже должны каким то образом реализовать нашу сеть.
И конечно MPLS нам здесь поможет сам MPLS это всего лишь процесс маршрутизации пакетов на основании меток. Особое место занимает не процесс маршрутизации, а процесс распространения меток по маршрутизаторам. Все маршрутизаторы в сети должны знать какую метку надо ожидать с интерфейса и в какой интерфейс с какой меткой его необходимо перенаправить.
И для данного кейса в RouterOS есть два варианта, это протокол LDP и протокол Traffic-Engineering.
LDP протокол тупой как танк, его задача найти соседей обменяться с ним сетями и метками и создать таблицу forward. Особенность LDP заключается в том, что он полностью подчиняется маршрутизации. Как таблица маршрутизации решит куда отправлять трафик, туда LDP и будет отправлять трафик с метками. А так как у нас таблицей маршрутизацией заведует протокол OSPF, и часто его схождение требует приличного времени, полагаться на данный способ можно, но… мы пойдём другим путём.
Кто-то из вас скажет “но ведь можно изменить Hello интервалы или использовать BFD”, да можно, но при этом мы не сможем утилизировать резервный интерфейс. Данные настройки всего лишь могут способствовать уменьшению времени запуска процедуры калькуляции SPF и тем самым уменьшить простой, но не поможет утилизировать все интерфейсы.
А если посмотреть ещё глубже, каждый интерфейс между маршрутизаторами является бизнес активом, который стоит денег. Обслуживание, интерфейсы ну и в конце концов Человеко-часы которые затрачены на настройку и подержанные такого стыка. Возможно вы арендуете некоторые интерфейсы. Если деньги потрачены, то нет смысла делать так, чтобы интерфейс простаивал, его необходимо загрузить, но обычной маршрутизацией этого сделать не получиться, так как пропускная способность резервного интерфейса 100Mbps. Если мы направим весь трафик в данный интерфейс, то он будет заполнен на 100% и ещё куда-то надо будет деть 900Mbps.
Напоминание. Всегда когда рассчитываете нагрузку на сеть и failover, вы должны использовать подход худшего сценария. Т.е “всё упало”, всё загружённое на максимум.
MPLS
В первую очередь метки, диапазон возможных меток от 0 до 1048575, но притом надо учитывать, что первые 15 меток зарезервированы для специальных условий. Об этом позже.
Нам соответственно необходимо использовать от 16 до 1048575, кстати это два в двадцатой степени, а так как счёт идёт от нуля, то минус один.
Хорошим тоном считается выделить каждому маршрутизатору свой диапазон меток, чтобы вы понимали с какого маршрутизатора прилетела метка.
Я предлагаю выделить каждому маршрутизатору по 5000 меток, такого количества будет достаточно для наших целей. Если оставить как есть значения по умолчанию, то может получиться таким образом, что маршрутизаторов будут использовать одинаковые метки, что становиться неудобно при troubleshooting.
Не будем как-то привязывать к типам маршрутизаторов, а просто по порядку распишем номера меток на нашей схеме, последовательно по 5000 меток.
Для установки диапазона меток из которого будет выбирать маршрутизатор метки можно указать следующей командой.
/mpls set dynamic-label-range=5000-9999
LDP
Label Distribution Protocol - как я уже писал выше, простой как танк. Его задача рассказать всем какие у маршрутизатора есть сети и какие метки использовать для сетей, а также принять от других маршрутизаторов аналогичную информации и составить таблицу forward label.
По умолчанию LDP берёт таблицу маршрутизации и рассказывает всем соседям о всей своей таблице маршрутизации. Это не лучший кейс, лучше всего рассказать только о Loopback адресах.
Но для начало нам необходимо установить уникальный ID маршрутизатора.
Делается это командой
/mpls ldp set lsr-id=172.31.255.100
Естественно значение желательно чтобы было ожидаемым и мы для этих целей будем использовать адрес loopback интерфейса.
Далее необходимо установить адрес транспорта, т.е. С какого адреса будет происходить “вещание” поиск соседей и обмен с ними информацией.
Так же как и с lsr-id устанавливаем адрес loopback интерфейса.
/mpls ldp set transport-address=172.31.255.100
Следующим шагом нам необходимо, указать какие сети мы будем опубликовывать c помощью LDP протокола. Наша задача рассказать всем соседям о наших адресах, в том числе connected и loopback. Нам поможет, то что мы правильно спланировали адресацию, и можем описать все адреса одним префиксом 172.31.0.0/16
. ОН немного большой, но возможно он нам в дальнейшем еще пригодится.
Делается данная настройка следующим образом:
/mpls ldp advertise-filter add prefix=172.31.0.0/16 advertise=yes
/mpls ldp advertise-filter add advertise=no
Первая командой мы указываем, что какой-то префикс из таблицы маршрутизации мы разрешаем анонсировать advertise=yes
, следующей командой указываем, что всё остальное запрещаем. Тем самым мы исключаем появления ошибки в конфигурации.
Следующим шагом настроить фильтр “на входе” какие префиксы мы можем ожидать.
/mpls ldp accept-filter add prefix=172.31.0.0/16 accept=yes
/mpls ldp accept-filter add accept=no
Мы будем принимать только те маршруты которые попадают под префиксы наших служебных IP адресов маршрутизаторов.
LDP интерфейсы
Последний момент который необходимо сделать, это непосредственно запустить процесс LDP на интерфейсах. Указываем интерфейсы которыми связаны между собой маршрутизаторы.
/mpls ldp interface add interface=ether1
/mpls ldp interface add interface=ether2
/mpls ldp interface add interface=ether3
Обращаю ваше внимания ещё раз, указывать надо только те интерфейсы которыми между собой связанны маршрутизаторы.
Включение LDP
После всех манипуляций нам необходимо просто включить LDP и в нашей сети трафик между loopback интерфейсами будет маршрутизироваться на основании меток, т.е. У нас заработает MPLS.
/mpls ldp set enabled=yes
Проверка
Проверить можно простой трассировкой с CE-1 до CE-2 естественно проверяйте именно до адреса loopback.
[admin@CE-1] > /tool traceroute 172.31.253.2
# ADDRESS LOSS SENT LAST AVG BEST WORST STD-DEV STATUS
1 172.31.252.45 0% 5 14.1ms 28.2 12.6 83 27.4 <MPLS:L=15007,E=0>
2 172.31.252.41 0% 5 8.9ms 19.5 7.9 51.6 16.3 <MPLS:L=15007,E=0>
3 172.31.252.2 0% 5 6.2ms 13.3 6.2 17.1 3.9 <MPLS:L=20007,E=0>
4 172.31.252.6 0% 5 6.8ms 12.1 6.8 16.8 3.6 <MPLS:L=25014,E=0>
5 172.31.252.30 0% 5 7.8ms 9.9 7.8 12 1.6 <MPLS:L=20007,E=0>
6 172.31.253.2 0% 5 6.2ms 9.6 6.2 15.3 3.1
-- [Q quit|D dump|C-z pause]
Обратите внимание, что хоп уже не loopback адрес, а транспортный адрес из 252 сети.
Так же можно посмотреть какие метки для каких маршрутов использует каждый маршрутизатор.
Local-bindings - Метки которые будет использовать маршрутизатор при необходимости отправить трафик.
/mpls local-bindings print
Flags: X - disabled, A - advertised, D - dynamic, L - local-route, G - gateway-route, e - egress
# DST-ADDRESS LABEL PEERS
0 ADG 172.31.255.1/32 15009 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
1 ADLe 172.31.254.1/32 impl-null 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
2 ADG 172.31.254.2/32 15010 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
3 ADLe 172.31.252.40/30 impl-null 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
4 ADG 172.31.255.6/32 15011 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
5 ADG 172.31.255.4/32 15012 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
6 ADG 172.31.253.2/32 15013 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
7 ADG 172.31.255.2/32 15014 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
8 ADG 172.31.255.3/32 15015 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
9 ADLe 172.31.252.44/30 impl-null 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
10 ADG 172.31.255.5/32 15016 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
11 ADG 172.31.253.1/32 15017 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
12 ADLe 172.31.252.36/30 impl-null 172.31.255.4:0
172.31.255.1:0
172.31.253.1:0
Forward
Когда необходимо будут переслать трафик по сети, будут использоваться следующие метки.
/mpls forwarding-table print
Flags: H - hw-offload, L - ldp, V - vpls, T - traffic-eng
# IN-LABEL OUT-LABELS DESTINATION INTERFACE NEXTHOP
0 expl-null
1 L 15009 172.31.255.1/32 ether1 172.31.252.41
2 L 15010 15002 172.31.254.2/32 ether1 172.31.252.41
3 L 15011 50002 172.31.255.6/32 ether2 172.31.252.37
4 L 15012 172.31.255.4/32 ether2 172.31.252.37
5 L 15013 15007 172.31.253.2/32 ether1 172.31.252.41
6 L 15014 15005 172.31.255.2/32 ether1 172.31.252.41
7 L 15015 15003 172.31.255.3/32 ether1 172.31.252.41
8 L 15016 50003 172.31.255.5/32 ether2 172.31.252.37
9 L 15017 172.31.253.1/32 ether3 172.31.252.46
Задачи
- На всех маршрутизаторах, установить диапазон меток согласно схеме.
- Установить LDP lsr-id на всех маршрутизаторах.
- Установить на всех маршрутизаторах LDP transport-address.
- Разрешите на всех маршрутизаторах в
advertise-filter
все сети для адресов 172.31.0.0/16. - Принимать на всех маршрутизаторах только маршруты из префикса 172.31.0.0/16.
- На всех маршрутизаторах добавить в LDP интерфейсы между маршрутизаторами.
- Включить LDP на всех маршрутизаторах.
Поделиться
Обсуждение
Лицензия
Текст данной статьи распространяется под общедоступной лицензией CC BY-NC-ND 4.0, ознакомиться с тектом лицензии вы можете на данной странице.