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

Справка по NSG Linux 2.1.3
Дерево команд: ip.dynamic-routing.…далее…

Что это такое?

Это настройка динамической маршрутизации, а также сложной статической маршутизации (equal cost multipath и др.)

Зачем это нужно?

Чтобы маршрутизаторы могли сами сообщать друг другу о подключённых сетях и маршрутах к ним.

Как это настроить?

Динамическая и сложная статическая маршрутизация в NSG Linux реализованы на основе пакета bird (BIRD Internet Routing Daemon). Соответственно, структура настроек в целом соответствует синтаксису файла конфигурации данного проекта. Данный узел меню содержит наиболее употребительные параметры bird. Параметры и опции, не представленные явно, в любом случае можно задать в полях extra. Подробно о настройках bird см. оригинальную документацию на Web-сайте проекта.

ПРИМЕЧАНИЕ. Если имеется готовый конфигурационный файл bird, то можно вставить всё содержимое этого файла, за исключением узлов debug и device, в поле ip.dynamic-routing.extra.

Помимо динамической маршрутизации, пакет обеспечивает развитые средства для сложной статической маршрутизации с использованием нескольких таблиц, встроенные опции для фильтрации пакетов по IP-адресам и др. В некотором смысле, он заменяет собой ручную настройку маршрутов в узле .ip.route. Рекомендуется использовать узел .ip.route для простой статической маршрутизации (к ней относится большинство случаев), а возможности bird — для настройки более сложных случаев (например, с использованием алгоритма equal cost multipath) в сочетании с динамической маршрутизацией (это позволяет, в частности, унифицировать метрики маршрутов, созданных различными способами). Маршруты, созданные в узле .ip.route, также интегрируются в маршрутные таблицы bird со статусом kernel routes.

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

Каждая копия каждого протокола должна быть связана с некоторой таблицей маршрутизации BIRD. Для этого используется параметр table внутри данной копии. Он должен указывать на таблицу из числа созданных в узле .ip.dynamic-routing.table. Если параметр не указан или таблица с таким именем не существует, то данная копия связывается с основной таблицей BIRD (master table), существующей всегда.

Список интерфейсов, на которых работает данная копия протокола, со специфическими опциями для этого протокола на этих интерфейсах, задаётся в узле interface. Именем каждого элемента списка является один или несколько шаблонов интерфейсов (в терминологии BIRD — clauses).

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

Для передачи маршрутов из протокола в таблицу BIRD служит поле import, в обратном направлении — export. Поле может содержать ключевое слово all или none, имя фильтра, описание фильтра или выражение фильтра (filter expression). По умолчанию, для фильтров импорта установлено значение all, для фильтров экспорта — none.

В заключение необходимо во всех случаях настроить протокол kernel и в его рамках — экспорт из таблиц BIRD в маршрутные таблицы ядра Linux. Без этого никакие маршруты, известные BIRD, не будут использованы по прямому назначению.

Что делать, если это не работает?

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

Принципы работы пакета BIRD

Пакет BIRD представляет собой надстройку над подсистемой маршрутизации, встроенной в ядро ОС Linux. Он выполняет обработку всей маршрутной информации, доступной из различных источников, вычисление маршрутов и, в конечном счёте, вносит изменения в маршрутные таблицы ядра Linux. BIRD включает в себя следующие основные компоненты:

Схема взаимодействия различных составляющих BIRD показана на рисунке.

Схема обмена маршрутной информацией в пакете BIRD

Каждая из маршрутных таблиц BIRD может синхронизироваться или не синхронизироваться с таблицами в ядре Linux и друг с другом. Каждый маршрут в таблице BIRD содержит следующую информацию:

Для одной сети в маршрутной таблице BIRD может быть несколько записей, но не более одной записи с одной и той же подсетью и одним и тем же протоколом. Для отправки пакетов выбирается маршрут, имеющий наибольший приоритет (selected route). Если в BIRD имеется информация о нескольких маршрутах в одну и ту же сеть, полученная по одному и тому же протоколу, то сам протокол выбирает из них оптимальный (как правило, по своей локальной метрике) до экспорта в маршрутную таблицу BIRD. Если маршруты получены по разным протоколам, то для выбора используются глобальные приоритеты (параметр preference).

Каждый протокол соединяется с маршрутной таблицей BIRD посредством двух фильтров. Каждый из этих фильтров может пропускать (accept), не пропускать (deny) или модифицировать маршруты по установленным правилам. Фильтр для экспорта передаёт маршруты из маршрутной таблицы в протокол, фильтр для импорта — из протокола в маршрутную таблицу. Когда маршрутная таблица получает от какого-либо протокола новый маршрут, она заново вычисляет действующий маршрут (selected route) и рассылает его во все протоколы, подключённые к ней. После этого протоколы рассылают свои обновления маршрутов другим маршрутизаторам в сети.

Список таблиц BIRD создаётся в узле .ip.dynamic-routing.table. В системе всегда существует, как минимум, одна таблица (master); другие могут добавляться по мере необходимости и обязательно должны иметь имена, по которым они будут идентифицироваться. В описаниях каждой копии каждого протокола указывается, с какой из таблиц она работает (если не указано — то, соответственно, с таблицей master).


Описание интерфейсов в BIRD

Для большинства протоколов динамической маршрутизации необходимо указать список интерфейсов, на которых они работают. Для добавления нового элемента списка используйте команды +, _new или _insert. Данный список является именованным и не упорядочивается автоматически. Для удаления используйте команду - или _remove. По умолчанию (если список не задан явно), протокол работает на всех интерфейсах.

Элементом списка является шаблон или последовательность шаблонов интерфейсов, которые имеют одинаковые параметры применительно к BIRD. Шаблон интерфейса (в терминах BIRD — clause) может содержать имя (маску имени), префикс, или то и другое. Маска может содержать подстановочные символы *, ? и \. Интерфейс соответствует шаблону, если он совпадает по имени/маске (если оно задано) и по префиксу (если задан) одновременно. Для IPv6 используется только маска. Маска и префикс разделяются пробелом, шаблоны отделяются друг от друга запятыми.

Знак - исключает из списка интерфейсы, соответствующие данному шаблону. Список шаблонов интерпретируется слева направо до первого совпадения интерфейса с одним из шаблонов. Например, запись

"eth0", -"eth*", "*"

содержит 3 шаблона (первый и третий включительно, второй исключительно) и означает eth0 и все интерфейсы, имя которых не начинается с символов eth.

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

ПРИМЕЧАНИЕ. В синтаксисе BIRD, если указывается имя или маска имени интерфейса, то оно должно быть заключено в двойные кавычки. В связи с особенностями синтаксиса командного языка NSG Linux , при любом вводе они заключаются или преобразуются в кавычки с использованием escape-символа \, а затем вся запись заключается в двойные кавычки уже без \, например:
"\"eth*\" 192.168.1.0/24, \"br*\""

Примеры описания интерфейсов (из документации BIRD):

Протокол (OSPF) работает на всех интерфейсах данного устройства с опцией type broadcast:

interface
: "*"
: : type = "broadcast"

Протокол (OSPF) работает на трёх перечисленных интерфейсах с опцией type ptp:

interface
: "eth1", "eth4", "eth5"
: : type = "ptp"

Протокол работает на всех интерфейсах с адресами из диапазона 192.168.0.0/16, за исключением более узкого диапазона 192.168.1.0/24:

interface
: -192.168.1.0/24, 192.168.0.0/16

Протокол работает на всех интерфейсах Ethernet с адресами из диапазона 192.168.1.0/24.

interface
: "eth*" 192.168.1.0/24

© Network Systems Group 2015–2024 Отдел документации