Инструменты пользователя

Инструменты сайта


net:quagga-ospf

Настройка OSPF

Вступление

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

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

Наша задача - обеспечить надежную связь между офисами для совместного использования общих ресурсов, например, веб сервера (apache), базы данных (MySQL, PostgreSQL,…), файл сервер (win 2k3/samba) и т.д.

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

Для лучшего понимания задачи ниже привожу упрощенную логическую схему.

Как видно из рисунка у нас в любой момент времени доступны два канала связи между офисами - транспорт и интернет. Для того, чтобы подсети двух офисов видели друг друга мы поднимаем vpn тунели между ними. Как именно вы будете делать - не имеет особого значения, я это реализовал с помощью openvpn. Вы можете использовать для этих целей например ipsec. Один vpn тунель у нас поднят поверх транспорта и этот канал является основным для обмена информацией между офисами. Второй vpn тунель поднят поверх интернет каналов каждого из офисов. И данный тунель будет использоваться нами только в случае недоступности основного vpn тунеля.

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

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

Краткий обзор OSPF

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

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

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

  • Увеличение скорости сходимости (в сравнении с протоколом RIP2, т.к. нет необходимости выжидания многократных таймаутов по 30с);
  • Поддержка сетевых масок переменной длины (VLSM);
  • Достижимость сети (быстро обнаруживаются отказавшие маршрутизаторы, и топология сети изменяется соответствующим образом);
  • Оптимальное использование пропускной способности;
  • Метод выбора пути.

Терминология 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

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

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

  • Type 1 LSA — Router LSA — объявление о состоянии каналов маршрутизатора. Эти LSA распространяются всеми маршрутизаторами. В LSA содержится описание всех каналов маршрутизатора и стоимость (cost) каждого канала. Распространяются только в пределах одной зоны.
  • Type 2 LSA — Network LSA — объявление о состоянии каналов сети. Распространяется DR в сетях со множественным доступом. В LSA содержится описание всех маршрутизаторов присоединенных к сети, включая DR. Распространяются только в пределах одной зоны.
  • Type 3 LSA — Network Summary 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.

Для более детального ознакомления с OPSF рекомендую прочитать следующую статью http://xgu.ru/wiki/Ospf

Настройка Quagga

Устанавливаем необходимые пакеты на обоих серверах

# yum install quagga openvpn

Как настроить OpenVPN для режима point-to-point можно прочитать в соответствующей статье - OpenVPN: point to point

Перед непосредственной настройкой OSPF сначала произведем небольшую настройку самой quagga. Для этого редактируем файл /etc/sysconfig/quagga

#
# Default: Bind all daemon vtys to the loopback(s) only
#
QCONFDIR="/etc/quagga"
OSPFD_OPTS="-A 127.0.0.1 -f ${QCONFDIR}/ospfd.conf"
ZEBRA_OPTS="-A 127.0.0.1 -f ${QCONFDIR}/zebra.conf"

# Watchquagga configuration (please check timer values before using):
WATCH_DAEMONS="zebra ospfd"

Так как quagga поддерживает не только OSPF, а также BGP, RIP, IS-IS, то по умолчанию в папке /etc/quagga будут заготовки для каждого из демонов. Для реализации нашей задачи нам необходимо оставить только два файла - ospfd.conf и zebra.conf.

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

!
hostname router1.vmware.local
password zebra
log file /var/log/quagga/quagga.log
!
line vty
!

После этого можно запускать сам демон

# service zebra start
Starting zebra: Nothing to flush.
                                                           [  OK  ]

При этом в log-файле должна быть следующая строка

# cat /var/log/quagga/quagga.log
2009/10/29 19:08:57 ZEBRA: Zebra 0.99.15 starting: vty@2601

Теперь мы можем уже подключиться к vty на порт 2601

# telnet localhost 2601
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

Hello, this is Quagga (ver