ALT Linux Sisyphus и современные сети

Денис Овсиенко, ALTLinux. Доклад для конференции на Протве '2005.

Valid HTML 4.0 Transitional

  1. Факты

    Начиная с ноября 2004 года проводится ряд модификаций репозитория пакетов ALTLinux Sisyphus. Этот процесс направлен на повышение эффективности использования Sisyphus в сети. Вносимые модификации можно разделить на две группы.

    новая роль: network-config-subsystem

    До этого пакет net-scripts был единственным штатным средством конфигурирования сети в ALTLinux. Вместо него была введена абстракция network-config-subsystem, которая представляет собой нечто, обеспечивающее конфигурацию сетевых ресурсов Linux-хоста. Сейчас network-config-subsystem предоставлется двумя пакетами: net-scripts и etcnet. net-scripts -- одна из бывших составных частей пакета initscripts, разрабатываемого в RedHat и используемого во многих других дистрибутивах. /etc/net --- система конфигурации сети, которая разрабатывается с 2004 года и позиционируется как замена для той части, initscripts, которая обеспечивает конфигурацию сети. Эти два пакета взаимоисключают друг друга, но могут использоваться по очереди. В процессе внедрения /etc/net был адаптирован ряд пакетов, принимающих участие в процессе конфигурации, в результате чего система может работать корректно независимо от того, какая именно из двух реализаций установлена.

    постепенный отказ от net-tools

    Пакет net-tools в числе прочих содержит программы /sbin/ifconfig, /sbin/route и /sbin/arp. Эти программы когда-то были единственными утилитами для управления сетевыми интерфейсами, маршрутами и ARP-таблицей. С тех пор Linux три раза сменил версию стабильного ядра и два раза --- сетевой экран. Сейчас для адекватного конфигурирования сети в Linux используются пакеты iproute2 и iptables. Несмотря на это, до сих пор значительная часть документации ссылается на устаревшие команды. Для улучшения ситуации было принято решение не устанавливать по умолчанию пакет net-tools. Так как некоторые другие пакеты его требуют, используя ifconfig или route в своих сценариях, их мантейнерами были внесены соответствующие правки для ликвидации этой зависимости.

  2. Мотивы

    недостаточная гибкость

    Проект /etc/net разрабатывался, исходя из опыта использования initscripts в различных дистрибутивах и сопровождения net-scripts в рамках ALTLinux. Практика показала, что дизайн net-scripts не приспособлен для расширения его функций и поддержки новых типов интерфейсов. В то же время современные сети медленно, но верно меняют набор используемых протоколов; Linux-системы поддерживают всё больше аппаратного обеспечения, в том числе с горячим подключением; растёт популярность нетривиальных конфигураций Linux-маршрутизаторов.

    громоздкая конфигурация

    В системе net-scripts для каждого IP-адреса на интерфейсе необходимо создавать отдельный файл. В результате для одного логического интерфейса будет создано несколько файлов, отличающихся только двумя переменными.

    чрезмерное использование переменных

    В net-scripts каждый параметр интерфейса должен быть определён в переменной. Во-первых, это приводит к большому количеству переменных, а во-вторых, ограничивает набор параметров, которые можно передавать программам конфигурации, набором доступных переменных. Например, при определении статических маршрутов net-scripts полагается на единожды определённый формат файла, а /etc/net просто передаёт строки утилите ip.

    дублирование информации

    Из-за того, что данные конфигурации, относящиеся к одному интерфейсу, в net-scripts находятся в разных местах, они связаны по имени интерфейса. При его изменении необходимо изменить это имя во всех файлах, в которых оно упоминается. Кроме того, имеет место и дублирование кода. Например, каждый из ifup-сценариев net-scripts кроме кода, относящегося к своему виду интерфейса, содержит вызов ifup-post, так как сценарий ifup не вызывает вспомогательные сценарии, а передаёт на них управление.

    решение

    В этом контексте был проведён долговременный анализ роли подсистемы конфигурации сети в работе Linux-системы и выделен ряд требований, выполнить которые можно было только в рамках новой разработки:
  3. Подробности<

    /li>

    модульность

    Скелет системы образуют несколько сценариев, выполняющих самые основные функции в общем виде. В зависимости от контекста какие-то стадии конфигурации окажутся востребованы, а какие-то нет. Поддержка каждого протокола и вида интерфейса выделена в отдельные файлы. Это значительно уменьшает дублирование кода и облегчает его сопровождение. В настоящее время поддерживаются следующие протоколы: IPv4, IPv6, IPX.

    строгая типизация интерфейсов

    Одно из требований к конфигурационной базе --- каждый обслуживаемый интерфейс должен относиться к какому-либо из 5 предусмотренных типов. Тип интерфейса играет роль в порядке запуска и останова интерфейсов. Каждый из обрабатываемых системой видов интерфейсов принадлежит к какому-либо типу. Распределение видов интерфейсов по типам следующее:

    ориентировка на шаблоны

    Основу конфигурационной базы составляет набор системных опций и интерфейс default. Другие интерфейсы наследуют его конфигурацию и дополняют её своими опциями. Таким образом, нет необходимости для каждого интерфейса определять весь набор поддерживаемых опций, появляется возможность изменять конфигурацию нескольких интерфейсов за раз. Наследование опций в /etc/net двухуровневое: сначала общие для всех интерфейсов опции шаблона default, затем опции, специфические для текущего типа интерфейса, затем опции конкретного взятого интерфейса.

    простота и масштабируемость

    За счёт модульности и наследования простые конфигурации, востребованные на большинстве Linux-систем, реализуются несложно и быстро. В то же время при усложнении конфигурации используется тот же принцип формирования конфигурации. Конфигурационная база представляет собой иерархическую структуру в виде дерева каталогов, в котором каталог каждого интерфейса содержит все файлы и каталоги, к нему относящиеся. Это позволяет оперировать опциями сразу на уровне интерфейсов.

    Наименование файлов

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

    встроенная поддержка QoS

    /etc/net реализует встроенную поддержку QoS путём предоставления интерфейса к утилите tc. Интерфейс представляет собой дерево каталогов и файлов специального вида, располагающееся в конфигурационном каталоге интерфейса. Структура спланирована таким образом, чтобы максимально исключить дублирование параметров.

    Дополнительные удобства:

  4. Планы