Родерик Смит - Сетевые средства Linux
Рис. 24.2. Значение в поле Metric определяет стоимость передачи пакета по данному маршруту
Протоколы маршрутизации позволяют маршрутизаторам обмениваться информацией о маршрутах, в том числе передавать значения метрики. Если все маршрутизаторы, показанные на рис. 24.1, будут поддерживать протокол маршрутизации, они сообщат друг другу сведения об имеющихся маршрутах и каждый из них построит таблицу маршрутизации, в которой будут указаны реальные значения метрики. Если один из маршрутизаторов выйдет из строя, остальные маршрутизаторы получат информацию об этом и перенаправят трафик в обход неисправного участка сети.
Протоколы маршрутизации используют следующие алгоритмы.
• Дистанционно-векторный алгоритм. Этот алгоритм отслеживает число маршрутизаторов, находящихся между текущим маршрутизатором и узлом назначения. При передаче пакета в некоторую сеть выбирается такой путь, на котором число маршрутизаторов будет минимальным. Данный алгоритм используется при работе протокола RIP (Routing Information Protocol — протокол маршрутной информации).
• Алгоритм маршрутизации по состоянию канала. Данный алгоритм связывает информацию о стоимости передачи пакета с каждым соединением. Маршрутизатор, использующий такой алгоритм, выбирает путь к целевой сети, для которого значение стоимости минимально. Стоимость не обязательно должна быть равна числу маршрутизаторов, при ее определении могут также учитываться различия в быстродействии сетевых соединений. Данный алгоритм используется при работе протокола OSPF (Open Shortest Path First — первоочередное открытие кратчайших маршрутов).
Использование routed
В системе UNIX традиционно используется протокол RIP. В Linux он реализуется демоном routed, входящим в состав одноименного пакета. Маршрутизаторы, поддерживающие RIP, обмениваются адресами сетей (например, 172.22.0.0) и связанными с ними метриками (в качестве метрики принимается число маршрутизаторов между маршрутизатором, который должен отправить пакет, и целевой сетью). Значения метрики могут лежать в пределах от 0 до 15. Если на пути к целевой сети лежит больше 15 маршрутизаторов, длина маршрута считается бесконечной и информация об этом маршруте удаляется из таблицы. При работе протокола RIP используется дистанционно-векторный алгоритм, а значение метрики оценивается очень грубо. Протокол RIP в основном применяется в небольших и средних сетях; для управления передачей данных по магистралям Internet он не используется.
Когда маршрутизатор получает информацию от другого маршрутизатора, он либо добавляет запись о маршруте в таблицу, либо заменяет существующую запись с более высоким значением метрики, либо удаляет маршрут, если полученное значение метрики, увеличенное на единицу, превышает 15.
При использовании программы routed в системе Linux обычно не возникает проблем. Для ее запуска применяются средства, рассмотренные в главе 4. Работой сервера управляет конфигурационный файл /etc/gateways, в котором содержится список начальных маршрутов. Пример записи в файле /etc/gateways приведен ниже.
net 0.0.0.0 gateway 172.22.7.1 metric 1 active
В данном примере определяется маршрут по умолчанию (net 0.0.0.0), для которого задан шлюз 172.22.7.1. Метрика маршрута равна 1. Ключевое слово active указывает на то, что этот маршрут может быть обновлен. Если вы хотите, чтобы маршрут сохранялся в таблице в неизменном виде, надо заменить ключевое слово active на passive. Для работы routed можно использовать файл /etc/gateways, поставляемый в составе пакета. В процессе работы демон routed может, передавая широковещательные запросы, находить другие маршрутизаторы, использующие протокол RIP. После обнаружения маршрутизатора с ним начинается обмен информацией о маршрутах.
Использование GateD
Несмотря на то что протокол RIP традиционно используется в системе UNIX, область его применения ограничена. Одно из ограничений связано с тем, что пакет не может быть передан по маршруту, насчитывающему больше маршрутизаторов; это не позволяет использовать данный протокол в больших сетях. Еще одна проблема связана с медленной сходимостью алгоритма. При изменении структуры сети для достижения стабильного состояния таблицы маршрутизации может потребоваться несколько минут. И наконец, RIP не поддерживает маски подсетей, поэтому он может использоваться только для сетей, соответствующих классам А, В и С. Если, например, сеть класса С разбита на несколько подсетей, маршрутизатор, поддерживающий RIP, передает адрес подсети как адрес всей сети класса С. В результате возникают проблемы при обмене данными между различными подсетями.
В версии 2 протокола RIP (RIPv2) была добавлена поддержка маски подсети. Для хранения данных о маске использовалось поле, которое в исходном варианте RIP было зарезервировано. Протокол RIPv2 реализован в программе GateD (http://www.gated.net). Работой GateD управляет конфигурационный файл /etc/gated.conf. Для изменения конфигурации GateD используется утилита gdc, которая поставляется в составе того же пакета. Настройка GateD не требует много усилий. В процессе выполнения программа взаимодействует с другими маршрутизаторами, поддерживающими протокол RIP или RIPv2, и модифицирует содержимое таблицы маршрутизации. Подобно другим демонам, GateD запускается с помощью сценария SysV либо локального сценария запуска.
Помимо RIP и RIPv2, GateD также поддерживает протокол маршрутизации OSPF. Другие средства маршрутизации, например Zebra, также поддерживают несколько протоколов.
Использование Zebra
Наряду с рассмотренными выше программами маршрутизации в Linux инструмент Zebra, который представляет собой пакет, состоящий из нескольких доменов и поддерживающий следующие протоколы.
• RIP. Zebra поддерживает протоколы RIP и RIPv2, а также версию RIP для IPv6, которая называется RIPng. Для взаимодействия по протоколам RIP и используется сервер ripd, а поддержка RIPng реализована в программе ripngd.
• OSPF. Для работы по протоколу OSPF используется программа ospfd, а вариант OSPF для IPv6 реализован в программе ospf6d. Подобно RIP, OSPF применяется для маршрутизации пакетов в сетевых структурах, насчитывающих несколько локальных сетей.
• BGP (Border Gateway Protocol — пограничный шлюзовый протокол) широко используется в Internet. Для поддержки данного протокола предназначен сервер bgpd.
Общее управление работой пакета осуществляет программа zebra. Серверы, входящие в состав пакета, используют ее для обновления таблицы маршрутизации. zebra выполняется как сервер; обратиться к ней можно с помощью клиентской программы telnet.
Каждый из демонов маршрутизации выполняется независимо от других. Например, если вам нужно обеспечить поддержку RIP или RIPv2, вы можете запустить только программы zebra и ripd. Работой каждого сервера управляет отдельный конфигурационный файл, расположенный в каталоге /etc или /etc/zebra. Имя файла совпадает с именем соответствующего демона. Например, содержимое файла /etc/zebra/ospfd.conf определяет конфигурацию сервера ospfd. Все конфигурационные файлы строятся по единому принципу. Символы ! и # являются признаками комментариев. Опции, используемые для определения конфигурации, перечислены ниже.
• hostname. В качестве значения данной опции задается имя узла, выполняющего функции маршрутизатора.
• password. Программа zebra использует пароль для управления доступом других систем и серверов. Пароль необходимо задать в каждом конфигурационном файле. Этот пароль предоставляет ограниченный доступ к серверу.
• enable password. Данная опция позволяет задать специальный административный пароль, используемый программой zebra. Этот пароль надо задать в, том случае, если вам необходимо изменить конфигурацию сервера.
• router протокол. Конфигурационные файлы серверов требуют указания протокола. Так, в файле ripd.conf указывается router rip, в файле ospfd.conf — router ospf, а в файле bgpd.conf — router bgp номер_автономной_системы. (Номера автономных систем назначаются подобно IP-адресам. Если вы хотите применить BGP только в своей локальной сети, вам надо использовать номер автономной системы в диапазоне 64512-65535.)
В процессе работы программы zebra вы можете изменить ее конфигурацию, обратившись к ней с помощью клиентской программы telnet. При обращении указывается порт 2601. Пример вызова telnet приведен ниже.
$ telnet localhost 2601
После ввода пароля надо задать одну из следующих команд: enable (получение доступа к командам настройки), configure (изменение конфигурации) или show (отображение сведений о текущей конфигурации). На каждом этапе работы вы можете получить информацию о доступных командах и опциях; для этого надо ввести символ ?. Если вы работали с маршрутизаторами Cisco, то команды Zebra знакомы вам.