Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/admin/etcnet/qos ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

Настройка QoS в /etc/net (редакция 3)

Общая теория

QoS — quality of service (качество обслуживания) — общий термин, обозначающий технологии управления скоростными и временными характеристиками пропускаемого трафика.
Конфигурация выполняется для каждого интерфейса отдельно. Для этого создаётся древовидная структура, состоящая из дисциплин очередей и классов. Корень этой структуры — так называемая корневая дисциплина очереди, которая является обязательным атрибутом интерфейса. Увидеть её можно так:

В данном случае корневая дисциплина очереди — pfifo_fast (она назначается по умолчанию). Иерархия очередей и классов определяет, как именно будут обрабатываться исходящие с интерфейса пакеты: номинальная скорость, параметры допустимых кратковременных всплесков, правила переупорядочивания пакетов внутри очередей, условия взаимного заимствования полосы пропускания между объектами на одном уровне иерархии и прочие параметры, зависящие от конкретной используемой структуры. «Перпендикулярно» этому дереву существует набор фильтров, которые описывают прохождение пакетов по структуре. Наиболее популярными являются дисциплины очередей CBQ (class based queueing) и HTB (hierarchical token bucket).
Дерево CBQ формируется по довольно простым принципам:

Дерево HTB строится ещё проще:

Описание реализации

Общая идея реализации в /etc/net заключается в том, что иерархия объектов QoS представляется в виде дерева каталогов и файлов. Конфигурация начинается с каталога qos, располагающегося в каталоге конфигурации интерфейса. Далее в нём могут содержаться другие каталоги, которые представляют либо дисциплины очереди, либо классы. В каталогах дисциплин присутствуют файлы с названием qdisc, а в каталогах с классами — файлы class. Эти файлы содержат параметры дисциплин и классов. Фильтры располагаются в файлах с названием filter.

Пример 1

Рассмотрим пример конфигурации HTB, поставляемый с /etc/net: http://etcnet.org/examples/QoS-HTB-user-guide/1/qdisc
Так как дерево начинается с корневой дисциплины, то в каталоге qos будет содержаться только один каталог qos/1, а в нём будет содержаться файл qdisc:

Корневая дисциплина здесь имеет номер 1. Параметры корневой дисциплины простые: htb default 12. Корневая дисциплина кроме своих параметров содержит один класс в каталоге qos/1/1. Полным именем объекта будет 1:1. Левое число отсутствует в названии каталога, так как оно всегда равно идентификатору очереди. В файле qos/1/1/class содержатся параметры класса: htb rate 100kbps ceil 100kbps. Кроме этого, в каталогах qos/1/1/2 и qos/1/1/12 определено ещё два класса: 1:2 и 1:12. В файле qos/1/1/extra содержатся параметры, общие для классов 1:2 и 1:12: htb ceil 100kbps. Это необязательный файл, можно было бы поместить эти параметры в файлы qos/1/1/2/class и qos/1/1/12/class. Если у вас много классов на одном уровне, то файл extra поможет вынести общую часть «за скобки».
Класс 1:12 пуст, а класс 1:2 содержит 1:10 и 1:11. В файлах qos/1/1/2/10/filter и qos/1/1/2/11/filter содержатся описания фильтров по одному в каждой строке. Местоположение файла filter определяет, куда будут направлены пакеты, которые ему удовлетворяют. Для класса 1:10 будет использован один фильтр protocol ip prio 1 u32 match ip src 1.2.3.4 match ip dport 80 0xffff, что соответствует исходящему HTTP-трафику с адреса 1.2.3.4, а для класса 1:11 будет использован фильтр protocol ip prio 1 u32 match ip src 1.2.3.4, что соответствует всему исходящему трафику с адреса 1.2.3.4. Файлы class классов 1:10 и 1:11 содержат соответственно rate 30kbps и rate 10kbps.

Пример 2

1. Я советую, поставив пакет etcnet, сначала спрятать куда-нибудь все каталоги интерфейсов из /etc/net/ifaces ( кроме lo, default и unknown) и запустить /etc/net/scripts/initconf. Его выдачу сохранить и на основании этой выдачи организовать файл /etc/net/iftab, который определит логические имена интерфейсов. Например, одну сетевую карту можно из eth0 переименовать в соответствии с её макадресом в wan, другую – в lan. Я для себя использовал вместо wan имя провайдера (comcast), а вместо lan – придуманное самим имя локального домена своей сети 192.168.10.0/24 (menlo). Ну и дальше буду их использовать, чтобы не ошибиться где-нибудь заменяя их на более нейтральные типа wan и lan. Далее создайте каталоги с именами определёнными в таблице /etc/net/iftab, внутри /etc/ifaces. Я создал /etc/net/ifaces/comcast и /etc/net/ifaces/comcast. И положил туда нужные мне файлы options. Для внешней сети comcast достаточно определить TYPE и BOOTPROTO, я добавил строчку MODULE как того рекомендовал initconf:

Для интерфейса локальной сети menlo адрес задан статически, так что там кроме файла options ещё нужен файл ipv4address:

2. Дальше настраиваете ip-forwarding и nat masquarading. За первый отвечает строчка

в файле /etc/net/sysctl.conf, в то время как другое делается добавлением строки
masquerade out-iface comcast
в файл /etc/net/ifaces/default/fw/iptables/nat/POSTROUTING:

После этого ваш раутер после # service network restart уже должен начать выполнять свою функцию разделения доступа в интернет.


3. Далее я настраивал распознавание и маркирование пакетов, которым надо было обеспечить гарантированную ширину пропускания канала. Для меня это были два телефонных адаптера, которые не искажают звук только если им предоставлены 10 килобит в секунду. Эти адаптеры стоят в локальной сети и dhcp сервер по их мак-адресам даёт им статические адреса. Эти адреса я и использовал в качестве критерия для маркировки. Маркировка обеспечивается следующим образом:

Мысль для себя на будущее: наверно можно было маркировать по мак-адресу, и тем самым избежать необходимости настраивать статические адреса выдаваемые dhcpd.


4. Ну а теперь остаётся самое настроить qos htb для идущего наружу интерфейса comcast.


Теперь телефонам будет предоставляться 80 килобит в секунду как только они того потребуют, а если они недоиспользуют эти 80kbit, всё оставшееся будет предоставляться другим соединениям.


P.S Большое спасибо Денису Овсиенко за то, что объяснил, как правильно организовать иерархию фильтров, чтобы эта конструкция заработала.

Утилиты


 
Файлов нет. [Показать файлы/форму]
Много комментариев (6). [Показать комментарии/форму]