Это настройка динамической маршрутизации, а также сложной статической маршутизации (equal cost multipath и др.)
Чтобы маршрутизаторы могли сами сообщать друг другу о подключённых сетях и маршрутах к ним.
Динамическая и сложная статическая маршрутизация в NSG Linux 2.1 реализованы на основе пакета 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, не будут использованы по прямому назначению.
tcpdump
и, при необходимости, пакета Wireshark.Пакет BIRD представляет собой надстройку над подсистемой маршрутизации, встроенной в ядро ОС Linux. Он выполняет обработку всей маршрутной информации, доступной из различных источников, вычисление маршрутов и, в конечном счёте, вносит изменения в маршрутные таблицы ядра Linux. BIRD включает в себя следующие основные компоненты:
Схема взаимодействия различных составляющих BIRD показана на рисунке.
Каждая из маршрутных таблиц BIRD может синхронизироваться или не синхронизироваться с таблицами в ядре Linux и друг с другом. Каждый маршрут в таблице BIRD содержит следующую информацию:
Для одной сети в маршрутной таблице BIRD может быть несколько записей, но не более одной записи с одной и той же подсетью и одним и тем же протоколом. Для отправки пакетов выбирается маршрут, имеющий наибольший приоритет (selected route). Если в BIRD имеется информация о нескольких маршрутах в одну и ту же сеть, полученная по одному и тому же протоколу, то сам протокол выбирает из них оптимальный (как правило, по своей локальной метрике) до экспорта в маршрутную таблицу BIRD. Если маршруты получены по разным протоколам, то для выбора используются глобальные приоритеты (параметр preference).
Каждый протокол соединяется с маршрутной таблицей BIRD посредством двух фильтров. Каждый из этих фильтров может пропускать (accept), не пропускать (deny) или модифицировать маршруты по установленным правилам. Фильтр для экспорта передаёт маршруты из маршрутной таблицы в протокол, фильтр для импорта — из протокола в маршрутную таблицу. Когда маршрутная таблица получает от какого-либо протокола новый маршрут, она заново вычисляет действующий маршрут (selected route) и рассылает его во все протоколы, подключённые к ней. После этого протоколы рассылают свои обновления маршрутов другим маршрутизаторам в сети.
Список таблиц BIRD создаётся в узле .ip.dynamic-routing.table
. В системе всегда существует, как минимум, одна таблица (master); другие могут добавляться по мере необходимости и обязательно должны иметь имена, по которым они будут идентифицироваться. В описаниях каждой копии каждого протокола указывается, с какой из таблиц она работает (если не указано — то, соответственно, с таблицей master).
Для большинства протоколов динамической маршрутизации необходимо указать список интерфейсов, на которых они работают. Для добавления нового элемента списка используйте команды +
, _new
или _insert
. Данный список является именованным и не упорядочивается автоматически. Для удаления используйте команду -
или _remove
. По умолчанию (если список не задан явно), протокол работает на всех интерфейсах.
Элементом списка является шаблон или последовательность шаблонов интерфейсов, которые имеют одинаковые параметры применительно к BIRD. Шаблон интерфейса (в терминах BIRD — clause) может содержать имя (маску имени), префикс, или то и другое. Маска может содержать подстановочные символы *
, ?
и \
. Интерфейс соответствует шаблону, если он совпадает по имени/маске (если оно задано) и по префиксу (если задан) одновременно. Для IPv6 используется только маска. Маска и префикс разделяются пробелом, шаблоны отделяются друг от друга запятыми.
Знак -
исключает из списка интерфейсы, соответствующие данному шаблону. Список шаблонов интерпретируется слева направо до первого совпадения интерфейса с одним из шаблонов. Например, запись
"eth0", -"eth*", "*"
содержит 3 шаблона (первый и третий включительно, второй исключительно) и означает eth0
и все интерфейсы, имя которых не начинается с символов eth
.
Записи интерпретируются для каждого конкретного интерфейса в порядке нумерации. Если в списке содержится несколько записей с разными параметрами, то к интерфейсу применяется первая запись, которой он будет соответствовать.
ПРИМЕЧАНИЕ. В синтаксисе BIRD, если указывается имя или маска имени интерфейса, то оно должно быть заключено в двойные кавычки. В связи с особенностями синтаксиса командного языка NSG Linux 2.1, при любом вводе они заключаются или преобразуются в кавычки с использованием 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 | Отдел документации |