Основы протокола OSPF (Базовая настройка динамической маршрутизации OSPF на роутере mikrotik)

02.12.2021

Основы протокола OSPF (Базовая настройка динамической маршрутизации OSPF на роутере mikrotik)

Начнем с базовой настройки ospf на роутере mikrotik. смотрите видео: 




Основы протокола OSPF

Протокол OSPF (Open Shortest Path First) был создан IETF в 1988 и является стандартным протоколом, а также, как не трудно догадаться по названию, открытым, то есть его может использовать любой вендор и более того, реализации протокола OSPF у различных вендоров должны совпадать. Естественно, команды будут отличаться, но структура сообщений и общие принципы должны быть одинаковыми, хотя бывают и трудности с тем, чтобы подружить два маршрутизатора различных вендоров по OSPF.

На данный момент в мире две версии протокола OSPF: OSPFv2 и OSPFv3. Первая используется для динамической маршрутизации IPv4 (RFC 2328), вторая для IPv6 (RFC 2740). Вне зависимости от версии протокола OSPF относится к группе IGP протоколов.

В основе работы протокола OSPF лежит Алгоритм Дейксты или алгоритм поиска кратчайшего пути, отсюда, собственно и вытекает SPF (shortest path first). Для обмена информацией о маршрутах, а также для обмена дополнительной информацией, использует несколько разных типов пакет. 

Сейчас нам нужно для себя отметить, что пакеты OSPF инкапсулируются в IP-пакеты. Вы должны помнить, что у IP-пакета есть код вложения, увидев этот код, роутер поймет, что находится внутри IP-пакета, для OSPF зарезервирован код 89. Передача OSPF пакета может происходить как unicast, так и multicast, при этом используется два multicast адреса:
  • 224.0.0.5, этот IP-адрес используют все маршрутизаторы, на которых запущен процесс OSPF, чтобы отправлять сообщения своим соседям;
  • 224.0.0.6, а этот IP-адрес используют так называемые DR-роутеры, для тех же целей – чтобы рассказать что-нибудь своему соседу.
Ну и еще одна важна вещь, о которой стоит сказать. OSPF относится к протоколам типа Link-State, а это означает, что каждый маршрутизатор внутри автономной системы обладает полным представлением о том, как устроена его сеть на уровне IP протокола.

 Виды пакетов в OSPF

Последний блок терминов, который мы рассмотрим, касается пакетов в OSPF, их довольно много и у каждого типа свое назначение. Тут главное не запутаться пакетов много.

  1. Hello – эти пакеты используются для обнаружения соседей, установления соседских отношений, а также для поддержания соседских отношений или иначе мониторинга соседей (keepalive-ссобщения, роутер как бы спрашивает: есть кто живой на том конце?). Именно в таком порядке, как я написал сообщения hello и применяются.
  2. DBD (Database Description) – такой пакет роутер отправляет своему соседу, чтобы дать краткое описание всех LSA, которые хранятся в его LSDB, нет смысла сразу загружать канал маршрутной информацией, ведь сосед может уже знать эти маршруты. Роутер, получивший DBD, посмотрит его содержимое и сам запросит всю недостающую ему информацию, чтобы синхронизировать базы данных.
  3. LSR (Link-State Request) – этим пакетом роутер отвечает на полученный DBD пакет, в нем он сообщает какую информацию хочет получить от соседа, чтобы базы данных этих роутеров были синхронными. При помощи LSR роутер запрашивает LSU от соседа.
  4. LSU (Link-State Update) – этими пакетами роутер отвечает на LSR, внутри пакетов LSU роутеры передают друг другу недостающие LSA для синхронизации LSDB.
  5. LSAck (Link-State Acknowledgmen) – самыми большими, толстыми и важными пакетами являются LSU, их получение нужно подтверждать, для этих целей есть LSAck. Дело в том, что для передачи сообщений OSPF не используется TCP, это было бы слишком накладно, сложно, дорого и неудобно.

Процесс обнаружения соседей в OSPF

Обнаружение соседей происходит при помощи сообщений Hello. Роутеры отправляют их во все интерфейсы, на которых включен OSPF. Подробный процесс рассмотрения соседства требует отдельного разговора, и он у нас будет, сейчас нам лишь просто нужно увидеть, что для установления соседства роутеры обмениваются сообщениями Hello. В этих сообщениях содержится Router ID, IP-адрес интерфейса, с которого был послан Hello и другая необходимая для установления соседства информация.

1.7-Установление-соседства-в-OSPF-1.png

Тут стоит обратить внимание на то, что сначала роутеры обменялись Hello при помощи multicast адресов, а дальше 10.0.0.1 делает ARP-запрос с целью выяснения unicast адреса на 10.0.0.2, дело в том, что роутеры будут синхронизировать свои LSDB уже при помощи unicast. Тут стоит добавить, что соседями становятся только те маршрутизаторы, которые находятся в одной канальной среде.

 /routing ospf neighbor print 

 instance=default router-id=192.168.XXX.XXX    priority=1 state="Full" address=10.XXX.XXX.1 interface=R1

Команда нам показывает Router ID соседа, его приоритет, состояние соседства, в данном случае соседство установлено и тип соседства FULL ,  следующий столбец показывает unicast адрес, по которому сосед доступен и в последнем столбце мы видим интерфейс, за которым находится наш сосед. 

Возможные состояния OSPF соединения

  1. Down – самое первое состояние в котором находится роутер, когда пытается найти OSPF соседей.
  2. Init – в это состояние роутер переходит сразу после того, как отправит свой первый hello соседу, когда роутер в состояние Init, он ждет от соседа ответный Hello.
  3. Two-way – в этом состояние соседи могут остаться. При установлении соседства роутеры отправляют сообщение hello друг другу два раза, первый раз чтобы нащупать соседа, а второй раз, чтобы сообщить соседу о том, что его заметили и с ним хотят дружить, во втором hello пакете роутер посылает RID соседа, если всё прошло гладко, соседство устанавливается. Чуть ниже мы поговорим про DR и BDR и раскроем эту тему полностью.
  4. Exstart – в этом состояние маршрутизаторы договариваются о том, кто первый начнет обмен полезными пакетами, при этом роутеры должны договориться о том, кто начнет процесс обмена маршрутной информацией и будет главным в этом процессе, а кто будет на подхвате. Тот, кто главный, будет иметь статус Master, а тот, кто на подхвате – Маргарита Slave. Статус Master получает тот роутер, у которого RID больше, он определит DBD Sequence number и первым посылает DBD пакет.
  5. Exchange – в этом состояние маршрутизаторы начинают обмениваться DBD пакетами, в которых они рассказывают о содержимом своих LSDB.
  6. Loading – переход в это состояние происходит тогда, когда роутер осознает, что в его LSDB не хватает части маршрутной информации, которая есть у соседа. В этом состояние роутер отсылает LSR сообщения, в котором содержится запрос на необходимые LSU. Пока роутер себя накачивает соседскими LSU, он находится в состояние Loading.
  7. Full – роутер в этом состояние чувствует себя прекрасно, ведь его LSDB полностью синхронна с соседской.

Как происходит установление соседства в OSPF, если на L2 используется Ethernet.

2.4-Диаграмма-демонстрирующая-процесс-установления-соседства-и-обмен-маршрутной-информацией-в-OSPF.png   

Синхронизация LSDB в OSPF или обмен маршрутной информацией

Настало время поговорить о том, как происходит синхронизация LSDB в OSPF или как роутеры рассказывают о известных им маршрутах. Сразу же смотрим в Wireshark, но пока не лезем во внутренности пакетов.

1.9-Процесс-обмена-маршрутной-информацией-в-OSPF-1.png

Сейчас мы не будем говорить о том, почему первым DBD послал роутер RO2, но позже мы этой поймем. Нам важен сам факт, что после того, как сосед был обнаружен и настройки согласованы, первым был послан DBD пакет, в котором роутеры рассказывают о содержимом свой LSDB.

Когда RO1 понял, что RO2 передал ему полное описание своей LSDB, он направил ему сообщение LSR, а еще после LSR он отправил ему еще один свой DBD. В общем, процесс обмена маршрутной информацией в OSPF нельзя назвать ни синхронным, ни последовательным. Всё зависит от объемов LSDB роутера и может получиться так, что один уже будет передавать LSU, а другой будет еще рассказывать о содержимом LSDB при помощи DBD.

В пакете LSR RO1 сообщил о том, каких LSA, из имеющихся у RO2, нет у RO1. RO2 тоже отправил LSR, но в нем содержится информация о том, каких LSA нет у RO2. А дальше начинается обмен сообщениями LS Update, в которых роутеры делятся недостающей информацией друг с другом, то есть обмениваются маршрутной информацией, по сути известными маршрутами и их показателями в виде метрики. Количество LSU зависит от того, сколько нужно рассказать.

Также обратите внимание на то, что подтверждение LSAack отправляется не для каждого LSU, а после того, как роутер поймет, что он получил всю необходимую информацию для синхронизации от соседа, а как он это поймет? А очень просто, ведь буквально несколько секунд назад он получил полное описание LSDB соседа в пакетах DBD и сравнил его LSDB со своей.

Тут стоит заметить следующее: если бы к роутеру RO2 был подключен роутер RO3, то после того, как он синхронизировал свою LSDB с RO1, ему бы непременно захотелось рассказать о том, что он получил от RO1 своему соседу RO3 и так для каждого соседа в каждой канальной среде. И этот базар будет продолжаться до тех пор, пока маршрутизаторы внутри одного региона не поймут, что их LSDB полностью синхронны. После синхронизации маршрутизаторы будут посылать Hello пакеты на мультикаст адреса. Почему на мультикаст? А тут две цели:

  1. Убедиться, что сосед на том конце все еще жив.
  2. А вдруг в этой канальной среде появится еще один роутер и нам с ним захочется подружиться?
1.10-Обмен-Hello-пакетами-после-синхронизации-LSDB-1.png

Наполнение таблицы маршрутизации

LSDB синхронизировались, роутеры получили полную информацию о сети, в которой они очутились, и тут начинается самое важное. Каждый роутер сети запускает алгоритм SPF, цель которого заключается в том, чтобы рассчитать кратчайший путь к каждому известному префиксу, то есть роутер строит кратчайший граф, ребра которого имеют вес (стоимости интерфейсов), у такого графа корнем является сам роутер, производящий эти вычисления. Этот механизм позволяет избежать петель маршрутизации внутри региона OSPF. Сколько таких путей построит роутер? Чаще всего один, но если у него получится два одинаковых пути, что тогда? Тогда будет балансировка, но об этом в другой раз.

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


Выбор и назначение Router ID в OSPF

Для разогрева дам немного теории о том, что такое Router ID в OSPF и зачем он нужен. Для протокола OSPF каждый роутер внутри автономной системы должен иметь уникальный номер, это нужно, чтобы другие роутеры понимали кто является источником маршрутной информации, если внутри АС будет два роутера с одинаковым номером, то всем будет плохо, будет хаос и неразбериха, на это мы еще посмотрим.

Вся соль в том, что когда вы запускаете процесс OSPF на роутере, на нем уже должен быть задан Router ID. Но если Router ID еще не задан, то маршрутизатор попробует его назначить себе сам. И сделает он очень просто. Мы уже говорили, что Router ID – это 32-ух битное число, а что у нас еще имеет размер 32 бита? Правильно! IP-адрес в протоколе IPv4 ровно тридцать два бита. Итак, у роутеров есть несколько способов получить Router ID:

  1. Внимательный инженер назначит его роутеру сам и не доверит выбор Router ID глупой железяки. Этот способ имеет наивысший приоритет.
  2. Если инженер не назначил Router ID, то маршрутизатор Cisco назначит его сам. Первым делом он посмотрит на IP-адреса, которые светятся на Loopback интерфейсах и в качестве Router ID будет выбран наибольший IP-адрес.
  3. Если Loopback интерфейсов нет, но есть обычные интерфейсы с IP-адресами, которые активны, то роутер выберет наибольший IP-адрес в качестве RID с обычного интерфейса.
  4. Если интерфейсов с IP-адресами нет, то зачем вам вообще запускать OSPF? RID назначен не будет, соседства никакого не будет.
OSPF работает не только в Ethernet

1. Сети типа точка-точка или point-to-point. И тут у нас целое раздолье! OSPF может быть инкапсулирован в самые различные туннели, а еще: T1, E1, HDLC, Frame-Relay, P-to-P, PPP.
2. Поверх NBMA (Non Broadcast Multiple Access) сетей OSPF тоже может работать (Frame-Relay, ATM, X.25).

Тут стоит заметить, что чаще всего OSPF разворачивается поверх broadcast сетей, то есть поверх Ethernet. Несколько реже поверх Point-to-Point сред, еще реже поверх NBMA. При этом для broadcast и NBMA роутеры устраивают выборы DR и BDR, о которых чуть ниже.


Для того, чтобы соседство между роутерами было установлено, настройки OSPF на устройствах должны быть консистентные, для этого должно соблюдаться следующие правила:

  1. Роутеры в Hello сообщениях отправляют значения двух таймеров: hello interval и router dead interval, значение этих таймеров у OSPF роутеров в одной канальной среде должны совпадать, если не совпали, то облом, сессия OSPF не поднимется.
  2. Есть еще таймер, который должен совпадать у роутеров, чтобы они стали соседями – Router Dead Interval. В большей сети может случиться всякое: порвется линия связи, на площадке с оборудованием отключат питание и многое другое. В общем, OSPF роутер может стать недоступным, Dead Interval – это то время, через которое роутер признает соседа недоступным, если тот не будет отвечать на hello сообщения. Вы же помните, что роутеры постоянно шлют hello сообщения? Этот таймер у соседей тоже должен совпадать.
  3. Интерфейсы маршрутизаторов, смотрящие друг на друга находятся в одной канальной среде, OSPF сессия не поднимется, если эти интерфейсы будут принадлежать к разным OSPF Area.
  4. В OSPF можно настроить пароль для аутентификации, в случае, если она используется, пароль у соседей должен совпадать.
  5. В OSPF есть регионы, которые называются Stub, каждый маршрутизатор такого региона в своих hello-пакетах несет флаг, в котором он всем сообщает, что он Stub, если маршрутизатор из Stub региона не говорит, о том, что он Stub, то соседи с ним дружить не будут.
  6. На интерфейсах маршрутизаторов, через которые они устанавливают соседство, должны совпадать сеть и маска подсети. Здесь является исключением канальные среды с типом взаимодействия point-to-point, в таких средах можно использовать IP unnumbered, а маска и сеть не проверяется.
  7. Значение IP MTU на интерфейсах, через которые будет установлено соседство, должно совпадать.

Что такое DR, BDR и DROTHER в OSPF и зачем они нужны?

Для начала надо объясниться — зачем вообще нужны DR и BDR, и без них всё сложно? Дело в том, что в одной канальной среде Ethernet соседей может быть не два и не три, а гораздо больше и маршрутов, которыми хотят поделиться роутеры, может оказать не два-три, как у нас, а несколько сотен, а это уже внушительно, если учесть, что каждый роутер должен синхронизировать свою LSDB с каждым. 

Разработчики протокола OSPF подумали и решили: а что если роутеры в канальной среде будут синхронизировать свои LSDB не каждый с каждым? Допустим, появится как-то центральный роутер, который будет впитывать в себя маршрутную информацию от каждого и передавать ее другим, таким образом количество служебной информации, передаваемой по сети, уменьшится в разы.  И появился DR, его задача наполнить свою LSDB информацией от каждого роутера в канальной среде, а затем раздать эту информацию всем соседям по канальной среде, при таком подходе объемы служебного трафика упадут в разы.

Выделенный маршрутизатор (DR или designated router) – это и есть наш диспетчер, который управляет процессом рассылки LSA в канальной среде, именно он отвечает за то, что LSDB всех роутеров будет синхронной. Вы же помните, что LSDB состоит из LSA? Я тут хочу сказать, что LSA бывают разного типа, у каждого типа свое предназначение. Так, например, обычные роутеры делятся информацией с DR из записей LSA 1, а DR в свою очередь кормит соседей по канальной среде из записями LSA 2.

Вы уже, наверное, заметили недостаток схемы с DR и хотите спросить, что будет если DR упадет, как будет происходить синхронизация LSDB? Вопрос вполне правильный, ведь если упадет DR, то все соседские отношения рухнут и их нужно переустановить, договориться заново, выбрать нового DR. Пока будет происходить этот бардак, полезные данные не будут передаваться, а это плохо. Но вы же помните, что до нас были люди умные и они придумали BDR.

Резервный выделенный маршрутизатор (backup designated router или BDR), ну это нам уже понятно. Особенность роутера BDR заключается в том, что все маршрутизаторы в канальной среде устанавливают с ним такое же соседство, как и с DR и они точно также кормят его маршрутной информацией, как и DR. Но BDR не рассылает LSA 2, он просто ждет, пока упадет его старший товарищ. Как только DR выйдет из строя, роутер BDR подхватывает его функции и происходят выборы нового BDR, таким образом время недоступности сети минимизируется.

Роутеры, которые не стали ни DR, ни BDR имеют статус DROTHER. Роутеры DROTHER имеют статус соседства FULL с роутерами DR и BDR. А соседство двух роутеров DROTHER описывается состоянием two-way.

Тут стоит заметить, что не сам роутер получает статус DR, BDR или DROTHER, а конкретный интерфейс роутера, который смотрит в канальную среду. Если у роутера два OSPF интерфейса, то в одной канальной среде роутер может быть, например, DR, а в другой DROTHER.


По какому принципу роутер становится DR? Тут есть два критерия, на оба критерия влияет администратор:

  1. Первый и более важный критерий – приоритет. У каждого OSPF интерфейса роутера есть приоритет, по умолчанию интерфейсы роутера Cisco имеют приоритет равный единице. Роутер с наивысшим приоритет станет DR, BDR станет роутер со следующим по значению приоритетом, все остальные будут DROTHER.
  2. Если приоритет интерфейсов одинаковый, то роутеры сравнивают Router ID, побеждает тот, у кого больше. Router ID обязательное уникальное значение, поэтому кто-то в любом случае будет DR, кто-то BDR, а кто-то DROTHER.

Приоритет роутеров в OSPF и его настройка на оборудование mikrotik

Теперь нам осталось обсудить то, какими критериями руководствуются роутеры при выборе DR и BDR. Как я уже говорил, тут у нас два критерия. Сразу стоит заметить, что параметр Router ID глобальный для процесса OSPF, а параметр приоритета настраивается на интерфейсе роутера, приоритет на разных интерфейсах может быть разным. Также интерфейсу можно задать нулевой приоритет, тогда роутер не станет ни DR, ни BDR.

Роутеры mikrotik из коробки имеют приоритет равный единице, максимально возможный приоритет 255

mikrotikк.JPG

На скрине видно поле priority, которое мы можем менять, также видно во втором поле что он DR, Router ID - можно задавать в разделе instances



< Назад к списку новостей