IPFW: ограничение скорости Internet (часть 1)

Октябрь, 12th 2012Рубрика: *NIX 16973
Подписаться на комментарии по RSS

Минули времена, когда Интернет был очень дорог и строго лимитированным. Сейчас задачи стали другими и на смену ограничений количества траффика пришла пора ограничивать скорость канала.

Наверняка, всем знакома ситуация, когда какой-либо ушлый пользователь в локалке "забивал" весь канал скачиванием торрентов или особо тяжелых файлов в несколько потоков. Вот и решил я умерить аппетиты таких несознательных товарищей, распределив ширину Internet канала "по справедливости", чтобы никто никому не мешал. В этом нам помогут каналы (pipe) фиктивной сети DUMMYNET. Система, как и прежде, FreeBSD - привыкайте к хорошему.

Впрочем, "справедливость" может быть разной, как в жизни (все равны, но кое-кто ровнее). Хватит предисловий, для начала давайте определимся что же такое DUMMYNET...

DUMMYNET - это системное средство, которое дает возможность управления сетевым трафиком, проходящим через различные сетевые интерфейсы, путем применения имитации различной ширины полосы пропускания, ограничения размера очереди, имитации задержек и потерь пакетов.

Стало легче? Думаю нет, потому начнем с самого начала...

Немного теории. Что такое pipe (каналы) и queue (очереди).

Прежде чем перейти непосредственно к настройке, следует разобраться что же такое pipe (каналы) и queue (очереди) DUMMYNET. Без знания основ, нормально настроить ничего не получится. Честно говоря, понимание сути работы каналов и очередей пришло не сразу, потому подробнее остановимся на этом вопросе.

Представить себе каналы (pipe) в DUMMYNET проще всего схематически:

____________________________________________________________________
        < очередь queue 1 weight 70 | пакет1 | пакет2 | ...пакет Q |
pipe1   ____________________________________________________________
        < очередь queue 2 weight 30 | пакет1 | пакет2 | ...пакет Q |
____________________________________________________________________
        > очередь queue 3 weight 70 | пакет1 | пакет2 | ...пакет Q |
pipe2   ____________________________________________________________
        > очередь queue 4 weight 30 | пакет1 | пакет2 | ...пакет Q |
____________________________________________________________________

Здесь я изобразил два канала (pipe) - первый для входящего траффика со скоростью 3Mbit/s и второй для исходящего - 512Kbit/s, каждый из которых содержит по две очереди (queue) с определенными параметрами: весовым коэффициентом (weight - от 1 до 100), соответствующему приоритету очереди и длины очереди (queue) в Q пакетов.

В правилах эту конструкцию можно описать следующим образом:

ipfw pipe 1 config bw 3Mbit/s
ipfw pipe 2 config bw 512Kbit/s
ipfw queue 1 config pipe 1 weight 70 queue 20
ipfw queue 2 config pipe 1 weight 30 queue 20
ipfw queue 3 config pipe 2 weight 70 queue 20
ipfw queue 4 config pipe 2 weight 30 queue 20

Длина очереди в примерах равняется 20 пакетам - queue 20, просто показать где это используется и как выглядит. Честно говоря с этим параметром глубоко не разбирался, потому про рассчеты размеров очередей ничего сказать не могу, можете поразбираться сами и написать дополнение к статье. В реальных задачах я этот параметр не использовал, т.к. столько тонкая настройка мне без надобности.

Для себя сделал вывод, что если хочешь получить надёжную связь, ставишь queue побольше, но при этом получаешь бОльшие задержки, хочешь маленькие задержки (на взгляд пользователя, но не гарантированную доставку, ставишь поменьше) По умолчанию размер очереди берется в 50 пакетов, если мне изменяет память.

Что нам дают веса очередей? Можно организовать приоретизацию траффика, выдавая большую полосу канала отдельным протоколам или пользователям, или "душить" пропорционально определенные IP. Здесь ключевое слово ПРОПОРЦИОНАЛЬНО, ибо никто не сможет захватить канал целиком (когда все пользователи имеют одинаковые веса - пример такой настройки я покажу в следующей статье).

Если же необходимо выделить определенный канал, с заданными параметрами, то тут необходимо создать отдельный pipe под нужную задачу с заданными параметрами. Полагаю, с теорией построения каналов для распределения скорости Internet немного разобрались. Можно приступать к решению поставленной в начале статьи задачи - справедливого деления Internet канала между всеми пользователями сети.

IPFW: распределение скорости Internet (часть 2)

Подписывайтесь на канал Яндекс.Дзен и узнавайте первыми о новых материалах, опубликованных на сайте.

Если считаете статью полезной,
не ленитесь ставить лайки и делиться с друзьями.

ваш комментарий будет опубликован после проверки
на указанный адрес будет отправлено письмо с кодом активации. Вы можете настроить собственный профиль и стать активным участником или автором.