Содержание


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

Comments

О чем эта статья

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

Преимущества и недостатки динамической маршрутизации

Динамическая маршрутизация используется преимущественно в средних и крупных сетях со сложной, часто меняющейся инфраструктурой, где прежде всего важна оперативность отслеживания и устранения проблем связи. Это достигается за счет программного управления таблицами маршрутизации при помощи демонов (в unix-подобных системах для этих целей используются процессы routed и gated). Периодический обмен информацией между маршрутизаторами осуществляется с помощью соответствующих протоколов - на основании полученных данных корректируются записи в таблицах маршрутизации.

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

Внутри- и междоменные протоколы динамической маршрутизации

По мере разрастания локальной сети вопрос эффективной организации динамической маршрутизации становится более актуальным из-за ограничения объема памяти маршрутизаторов и, как следствия, снижения быстродействия в результате увеличения нагрузки на сеть. Для его решения используется понятие «автономная система» (AS), которое представляет собой совокупность локальных сетей, объединенных единой маршрутной политикой. Протоколы, осуществляющие маршрутизацию внутри автономных систем в пределах домена, - RIP/RIPv2, IS-IS, IGRP, OSPF - входят в соответствующую группу «Interior Routing Protocols». В свою очередь, протоколы, выполняющие функцию организации маршрутизации между AS и являющиеся, своего рода, пограничными, или междоменными, - EGP, BGP - объединяются в группу Exterior Routing Protocols.

RIP (Routing Information Protocol) относится к протоколам дистанционного-векторного типа, использующим узел назначения и число хопов (переходов между транзитными узлами) до него в качестве простейшей метрики маршрутизации. В маршрутные таблицы RIP записывается информация об IP-адресах узла назначения и ближайшего шлюза, а также таймерах маршрута. Каждые 30 секунд маршрутизаторы отправляют широковещательные RIP-сообщения с текущими данными своей маршрутной таблицы, обновляя, таким образом, информацию о сети. В Unix и GNU/Linux поддержку протокола RIP первой версии (RIPv1) осуществляет демон маршрутизации routed.

Одним из недостатков протокола RIP является слабая проработка механизма обнаружения неработающих транзитных узлов, в частности, в самом формате RIP-сообщения не предусмотрено какого-либо флага, который бы фиксировал данное изменение сети. Для выявления проблемы для каждого транзитного узла существует период TTL (Time-to-Live), равный шестикратному периоду рассылки векторов по сети. Маршрут считается недоступным, если по истечении указанного времени он не смог отправить соответствующий RIP-сообщение. На практике обновление маршрутных таблиц подобным образом происходит достаточно медленно и не синхронизировано. Нередко это приводит к появлению маршрутных петель, когда из-за образовавшихся некорректных записей в маршрутных таблицах пакеты начинают циркулировать между узлами вплоть до истечения их собственного TTL.

RIP является одним из старейших протоколов динамической маршрутизации, в силу чего его возможности зачастую уступают более современным аналогам. Он прост в настройке, однако имеет ограничение на число хопов (всего 15). Это делает невозможным его использование в крупных сетях, несмотря на доработку протокола до версии RIPv2, в которой была добавлена поддержка VLSM-адресации (масок подсетей переменной длины), multicast-рассылки и возможность агрегации маршрутов. Тем не менее, RIPv2 может использоваться в малых и средних сетях как альтернатива статической маршрутизации.

Более эффективным способом организации динамической маршрутизации внутри AS является использование протоколов состояния связи (link-state protocols). При этом метрикой маршрутизации служит не узел назначения и его удаленность от источника, а коэффициент качества обслуживания канала ближайших маршрутизаторов, или «соседей». Решение об оптимизации маршрута принимается на основании данных о пропускной способности, периоде задержки, надежности и общей загрузке канала, что позволяет обслуживать средние и крупные сети со сложной инфраструктурой.

К протоколам состояния связи относится OSPF (Open Shortest Part First), являющийся усовершенствованной версией протокола IS-IS и получивший широкое распространение в TCP/IP-сетях. Помимо стандартной поддержки VLSM-адресации, multicast-рассылки, возможности агрегации маршрутов и использования аутентификации, OSPF учитывает в формате рассылаемых сообщений данные поля TOS (Type-of-Service) для вычисления альтернативных маршрутов согласно текущему состоянию каналов связи. В Unix и Gnu/Linux OSPF входит в список протоколов, поддерживаемых демоном маршрутизации gated и пакетом GNU Zebra1 или его усовершенствованной версией Quagga2.

Каждый маршрутизатор хранит информацию о состоянии соседних транзитных узлов, а также общую базу данных о топологии сети, представленную в виде графа. Актуальность состояния связей между соседними маршрутизаторами поддерживается за счет частого (от 10 до 30 секунд) обмена короткими hello-сообщениями. Информация об изменениях топологии всей сети передается с периодичностью раз в 30 минут отдельными пакетами «router links advertisment». Важной особенностью OSPF является поддержка разделения AS на несколько сегментов сети, каждый из которых имеет выделенный маршрутизатор (DR – Designated Router) и резервный (BDR – Backup Designated Router). Узлы, входящие в отдельный сегмент сети, получают информацию только от DR, который, в свою очередь, обменивается данными с другими выделенными маршрутизаторами. Такой метод позволяет поддерживать актуальность маршрутных таблиц и более эффективно распределять сетевую нагрузку.

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

BGP (Border Gateway protocol), или BGP4, является на сегодняшний день единственным междоменным протоколом, способным передавать информацию между отдельными AS. Он обеспечивает функционирование сети Интернет, используя для передачи данных маршруты, проходящие через наименьшее число AS. При этом каждые 30 секунд для проверки работоспособности узла происходит широковещательная рассылка TCP-пакетов (KEEPALIVE). Полученная информация добавляется в маршрутные таблицы только после инкрементного обновления. В дальнейшем AS обмениваются текущими изменениями.

Алгоритм работы BGP4 похож на векторно-дистанционный, с той разницей, что вектор пути ориентируется на номер сети и набор атрибутов, позволяющих принимать решение о выборе оптимального маршрута. В их число входят обязательные атрибуты AS_PATH (список AS, через которые должен проходить пакет) и NEXT_HOP (адрес следующего BGP-маршрутизатора), а также дополнительные параметры, отвечающие за агрегацию маршрутов, приоритет AS и маршрутизаторов и т. д.

BGP4 также поддерживает CIDR – бесклассовую маршрутизацию. В Unix и GNU/Linux BGP4, как и OSPF, настраивается при помощи gated или Quagga.

Демоны маршрутизации routed и gated

Routed3 – стандартный демон маршрутизации, поддерживающий только протокол RIPv1. Он прост в использовании, так как не требует дополнительной настройки и самостоятельно вносит изменения в маршрутную таблицу при обнаружении более оптимальных маршрутов. Тем не менее, он обладает рядом недостатков, в частности, отсутствием поддержки других протоколов, неудобством при одновременном использовании статических и динамических маршрутов. В этом плане предпочтение отдается демону gated4, который обладает более широкими возможностями. В число поддерживаемых им протоколов входят RIPv2, OSPF, BGP4 и некоторые другие. Вместе с тем настройка конфигурационного файла /etc/gated.conf, в котором прописываются не только опции самого демона, но и настройки протоколов и маршрутов, и чей синтаксис схож с языками программирования, может показать достаточно сложной тем, кто впервые сталкивается с настройкой маршрутизации при помощи данной утилиты.

Настройка протокола OSPF при помощи Quagga

Пакет Quagga, разработанный как ответвление GNU Zebra, представляет собой набор утилит, предназначенных для настройки протоколов динамической маршрутизации в unix-подобных системах. Он входит в стандартную сборку большинства дистрибутивов, поддерживает все распространенные версии протоколов (OSPFv2, OSPFv3, RIPv1, RIPv2, RIPng, BGP4) и достаточно прост в настройке и использовании. При использовании Quagga под GNU/LInux рекомендуется проверять наличие выставленных параметров ядра CONFIG_NETLINK, CONFIG_RTNETLINK и CONFIG_IP_MULTICAST – они обеспечивают взаимодействие ядра и демона zebra, а также поддержку multicast-рассылки, используемой демонами ripd и osfpd.

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

# vim /etc/quagga/daemons

zebra=yes
ospfd=yes

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

Для каждой установленной службы существует возможность редактирования конфигурационных файлов через отдельный интерфейс vty, подключение к которому реализуется при помощи telnet. Для этого автоматически выделяется номер порта, информацию о котором необходимо добавить в /etc/services:

zebra 2601/tcp # zebra vty
ospfd 2604/tcp # ospfd vty

Для настройки демонов создается одноименный файл в /etc/quagga/ вида *.conf, при этом его владельцем должен быть пользователь quagga.

Запуск демонов осуществляется при помощи следующих команд:

# /usr/sbin/zebra –dk  
# запуск демона с сохранением уже сконфигурированных маршрутов

# /usr/sbin/ospfd –d

Автономная система состоит из нескольких подсетей, объединенных тремя маршрутизаторами, которые также образуют отдельную подсеть (см. рис. 1)5. Один из маршрутизаторов является шлюзом по умолчанию для доступа в Интернет. Необходимо настроить динамическую маршрутизацию по протоколу OSPF между подсетями 192.168.10.0/24 и 192.168.12.0/24.

Рис. 1.
Рис. 1.
Рис. 1.

Для настройки OSPF необходимо установить пакет Quagga на каждом маршрутизаторе, а также отредактировать файл zebra.conf:

# vim /etc/quagga/zebra.conf

Router1

!Имя хоста
hostname Router1

!пароль для доступа в vty-интерфейс
password zebra

!пароль для административного доступа и настройки
enable password zebra

!путь к лог-файлу
log file /var/log/quagga/zebra.log 

!интерфейс в подсеть 192.168.0.0/24
interface eth0
ip address 192.168.0.1./24

!шлюз в Интернет по умолчанию
interface eth1
ip route 0.0.0.0./0 213.190.94.6

Router2

hostname Router2
password zebra
enable password zebra
log file /var/log/quagga/zebra.log 

interface eth0
ip address 192.168.0.2./24

interface eth1
ip address 192.168.12.1./24

Router3

hostname Router3
password zebra
enable password zebra
log file /var/log/quagga/zebra.log 

interface eth0
ip address 192.168.0.3./24

interface eth1
ip address 192.168.10.1./24

Таким же образом настраиваются конфигурационные файлы ospfd.conf:

# vim /etc/quagga/ospfd.conf

Router1

hostname Router1
password zebra
enable password zebra

router ospf
	ospf router-id 192.168.0.1          #ID роутера 
	network 192.168.0.0/24 area 0       #указание на подсеть и номер области,
                                        #которой она принадлежит
	default-information originate       #анонсирование маршрута по умолчанию
	                                    #происходит с данного шлюза

log file /var/log/quagga/ospfd.log

Router2

hostname Router2
password zebra
enable password zebra

router ospf
	ospf router-id 192.168.0.2
	network 192.168.0.0/24 area 0
	network 192.168.12.0/24 area 1
	redistribute connected          #все сети, подключенные к данным
	                                #интерфейсам, необходимо анонсировать 
									#по ospf 

log file /var/log/quagga/ospfd.log

Router3

hostname Router3
password zebra
enable password zebra
router ospf
	ospf router-id 192.168.0.3
	network 192.168.0.0/24 area 0
	network 192.168.10.0/24 area 2
	redistribute connected
log file /var/log/quagga/ospfd.log

После того как настройка закончена, необходимо запустить демоны и подключиться через telnet к tvy-интерфейсу ospfd:

# /usr/sbin/zebra –dk
# /usr/sbin/ospfd –d

# telnet localhost ospfd

Проверить работоспособность протокола можно, запустив в консоли Quagga команду show ip ospf neighbor, которая выводит список активных «соседних» маршрутизаторов. Команда show ip ospf route выводит список маршрутов, которые были получены по протоколу OSPF.

Средства мониторинга и анализа сети с динамической маршрутизацией

В большинстве случаев стандартные утилиты, при помощи которых конфигурируются протоколы динамической маршрутизации, уже содержат встроенные средства для ее мониторинга и анализа. Так, команда ospf_monitor, используемая в gated, позволяет увидеть подробную статистику по сконфигурированным маршрутным таблицам OSPF, а также информацию о соседних маршрутизаторах. Кроме того, поддержка логирования как в gated, так и в Quagga, позволяет системному администратору при создании соответствующего скрипта перенаправлять сообщения о критических ошибках на e-mail или другое средство оповещения.

Заключение

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


Ресурсы для скачивания


Похожие темы


Комментарии

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=525109
ArticleTitle=Динамическая маршрутизация в Linux
publish-date=09212010