MikroTik для Больших Дядей (Задание 5)

Пятая часть.

Освежим в памяти схему сети.

Схема сети MPLS MikroTik by vasilevkirill

Подведём небольшой итог всего того, чего мы добились.

На данный момент у нас работает MPLS и прохождение пакета стало быстрее, из за того, что трафик не стал заходить в процесс обычной маршрутизации, а подвергается процессу маршрутизации с помощью протокола MPLS на основании меток.

Когда маршрутизатор добавляет метку к пакету, такая процедура называется push. Метка добавляется между заголовков IP и ethernet именно поэтому MPLS называют протоколов уровня L2.5 OSI.

Ниже анимация формирования пакета MPLS.

MikroTik MPLS Push Label by vasilevkirill

Нечего интересного в данном процессе нет, просто добавили к пакету метку, не более чем. А вот дальнейший процесс будет показывать нагляднее почему MPLS выигрывает у обычного процесса IP маршрутизации.

Взгляните на процес forward при работающим MPLS. Процесс IP маршрутизации не происходит как такового. Так как до него просто пакет не доходит. Из таблицы forward MPLS маршрутизатор сверил метку 5000, понял, что её надо поменять на 8888 сменил метку (SWAP) и отправил next-hop-у.

MikroTik MPLS Swap Label

Снятие метку называется процедура POP, процесс сложнее о нём мы поговорим немного позже. Так как снятие происходит, не на последнем маршрутизаторе, а на предпоследним, и само сняти не всегда приводит конкретно к снятию метки, а к изменению метки на специальные номера, те самые которые зарезервированные от 0 до 15.

Скорее всего появился вопрос "что нам дал MPLS", ну в первую очередь конечно ускорение процесса маршрутизации и всё! Сам MPLS в чистом виде, не так очевиден и зачастую не используется в том виде как это сделано сейчас у нас. Но появляется возможность использовать такие технологии как PW он же VPLS, а также VPN4

VPLS - это туннель, которые позволяет, пропустить через себя ethernet трафик, т.е для того чтобы предоставить услугу L2 VPN, по сути аналогичную роль в RouterOS выполняет EoIP туннель.

VPN4 - это способ доставки IP пакета, через MPLS сеть, т.е предоставление клиенту услуги L3 VPN, но самое главное, что клиент может использовать любые сети, и они не как не будут влиять на ваши сети и сети других ваших клиентов.

Но мы же провайдер, поэтому ручной метод нам не подходит, мы бы хотели всё и вся оптимизировать.

BGP

Перед тем как начать, настраивать BGP нам надо осознать, что всё что мы до этого делали, необходимо было для работы в BGP между Loopback адресами.

Уточним задачу, у нас есть клиент под Котору необходимо предоставить услуги L2VPN, между двумя маршрутизаторами CE.

И так нам необходимо связать два маршрутизатора CE с помощь протокола BGP и указать чем будет заниматься BGP протокол. Напомню, что он может распространять не только маршрутную информацию но и распространять дополнительную информацию, именно эту дополнительную информацию мы будем распространять.

Точно также как и в OSPF у BGP маршрутизатора есть RouterID значение должно быть уникальным в пределах одной AS.

AS - автономная система, помимо того что это номер 16 бит, а сейчас и все 32 бита, это ещё и политическая сущность, которая определяет, маршрутизаторы которые находятся в одной AS подчиняются одним правилам.

Для наших задач мы будем использовать отдельный instance и номер автономной системы 65000. Необходимо напомнить что диапазон номеров AS разделён на две части приватный и публичный, примерно также как и BOGON адреса, только есть одно серьёзное отличие, эти диапазоны намертво вшиты в протокол и его реализацию в RouterOS, поэтому вы ОБЯЗАНЫ использовать именно из приватного диапазона номера AS от 64512 до 65535. Публичный диапазон только если у вас есть своя AS либо на стендах когда вы делаете "один к одному".

И так сначала нам необходимо на CE маршрутизаторах создать BGP instance

/routing bgp instance add router-id=172.31.253.2 as=65000 name=bgp65000

Следующим шагом, нам необходимо связать два маршрутизатора, с помощью настроенных пиров BGP с двух сторон.

Давайте посмотрим на команду и распишем, какие параметры bgp Peer и для чего они нужны, не все, а только те который нам необходимы.

/routing bgp peer add address-families=l2vpn,l2vpn-cisco,vpnv4 instance=bgp65000 name=CE-2 remote-address=172.31.253.2 remote-as=65000 update-source=172.31.253.1

remote-address=172.31.243.2 - Указываем адрес противоположенного пира.

update-source=172.31.253.1 - Указываем адрес с которого будет строиться соединение, тут надо уточнить. Вы можете указать не адрес, а интерфейс, но если на интерфейс будет несколько IP адресов может произойти факап.

remote-as=65000 - Удалённая AS, если её номер совпадает с instance указанным в instance=bgp65000 то такое соединение считается как iBGP internal т.е. Внутренним. Если значения AS разные то такое поведение называется eBGP т.е. Внешнее соединение.

address-families=l2vpn,l2vpn-cisco,vpnv4 - так называемые типы данных которые будут передаваться с помощью данного пира BGP.

После того вы сделаете на всех маршрутизаторах, проверить то, что мы идём по верной дороге и всё у нас получается. Узнать состояние Peer

[admin@CE-1] > /routing bgp peer print 
Flags: X - disabled, E - established 
 #   INS.. REMOTE-ADDRESS                               REMOTE-AS  
 0 E bgp.. 172.31.253.2                                 65000 

Состояние соединения должно быть Established, слево флаг E.

VLPS

Когда мы строим VPLS то у пакета появляется не одна метка, а две (стек меток), первая метка обеспечивает прохождение трафика по MPLS сети, вторая метка указывает непосредственно на PW туннель.

Для того, чтобы запустить нашу "Трубу" или PW нам необходимо подготовить инфраструктуру. Надеюсь вы помните, что CE маршрутизатор, это тот маршрутизатор к которому подключается непосредственно клиенты.

Нам необходимо подготовить Bridge в порты которого будут присоединено оборудование клиента, также можно сделать и с vlan. Мы не будем добавлять интерфейсы нам достаточно для понимания самого принципа построения таких сетей.

И так необходимо создать Bridge c отключенным rstp\stp, мы не будем мешать нашему клиенту делать петли, если ему надо будет делает петли, пусть делает это его желание )), наша задача предоставить ему L2 туннель между точками включения на маршрутизаторах CE.

/interface bridge add name=bridge-C1 protocol-mode=none

Название бриджа позаимствовано из вымышленного номера договора либо какого-то внутренного номера. Пусть будет клиент под номером 1.

Далее нам необходимо объявить через BGP на CE маршрутизаторах VPLS туннели.

/interface vpls bgp-vpls add bridge=bridge-C1 bridge-horizon=10 export-route-targets=65000:1 import-route-targets=65000:1 name=C0001 pw-type=raw-ethernet route-distinguisher=172.31.253.1:0 site-id=1001

route-distinguisher=172.31.253.1:0 - Уникальное значение для каждого маршрутизатора, и в некоторых случаях может быть для уникальное значение для разных ролей. С помощью данного значения создаётся уникальность информации которая передаётся средствами BGP. Лучше всего укажите адрес loopback и просто порядковый номер, пока это неважно.

bridge=bridge-C1 - Когда VPLS поднимется, то интерфейс добавится автоматически в Bridge нашего клиента.

bridge-horizon=10 - технология которая позволит нам поднять fullmesh связь между все маршрутизаторами и защититься от возможной петли, если не указать, то она будет 100% при подключении следующего маршрутизатора. Смысл технологии очень простой если фрейм придёт в интерфейс Bridge, и у интерфейса с которого пришло фрейм установлено значение horizon, такой фрейм не будет отправлен в интерфейсы у которых значение horizon аналогичное. Будте пределы аккуратны, если на Bridge будет отключен rstp/stp и вы не установите значение horizon у вас будет L2 Loop.

pw-type=raw-ethernet - указываем какого типа PW.

site-id=1001 - уникальное значение, для всей AS и для каждого маршрутизатора. Тут надо быть внимательным, необходимо найти такой способ, чтобы сделать это значение с двух стороны уникальным и это значение не должно больше использоваться. Лучше все использовать такой подход, берём номер маршрутизатора умножаем на 1000 и прибавляем номер клиента. Получается, что значение site-id на первом маршрутизаторе будет для первого клиента 1001, а для второго 1002, на маршрутизаторе CE-3 3001 и соответственно 3002. Уникальность значения требуется из за того, что значение site-id используется для расчёта номера метки MPLS, но просто давать порядковые номера не очень удобно, в виду того, что придёться вести где-то документацию. Я несколько не призываю отказываться от документации, но всегда можно упростить себе жизнь прибегая к определённым шаблонам.

А наверное самое главное.

export-route-targets=65000:1 - хорошим кейсом (Вообще так и задумывалось, но некоторые игнорируют даней аспект) считается указывать сначала номер AS, а далее через разделитель двоеточие, номер клиента. Чтобы понять для чего этот параметр необходим, это уникальный идентификатор данного туннеля. Ключевое слово export т.е. Данный маршрутизатор будет "вещать" раскатывать всем своим пирам, о том что у него есть такой туннель VPLS. На стороне клиента данное значение должно быть указанно в поле import-route-targets.

import-route-targets=65000:1 - тип записи который мы ожидаем для сопоставления с данным VPLS туннелем, часто мы должны указать значение которое указанно на противоположенной стороне в export-route-targets.

Задачи

  • Создать BGP instance на CE маршрутизаторах. AS 65000
  • Создать BGP Peer на двух CE маршрутизаторах. FullMesh
  • Создаёте Bridge для нашего клиента.
  • Опубликуйте через BGP VPLS туннели на CE маршрутизаторах.
  • Чтобы закрепить результат
    • Необходимо к маршрутизатору PE-1 подключить ещё один CE маршрутизатор CE-3.
    • К маршрутизатору CE-1 подключен только клиент C1
    • К маршрутизатору CE-2 подключены клиенты C2 и С3
    • К маршрутизатору CE-3 подключены клиенты C2 и С3

Итого у нас есть два клиента C1 и C2

Следующий пост с заданием MikroTik для Больших Дядей (Задание 6)

Рассказать друзьям

Чатик телеграм

@mikrotikme