The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"ipfw + dummynet "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Информационная безопасность (BSD ipfw, ipf, ip-filter / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"ipfw + dummynet "  +/
Сообщение от Дмитрий email(??) on 11-Май-11, 14:36 
Доброго времени суток, уважаемые.

Ситуация такая: есть локальная подсеть для общественного пользования (10.84.252.0/24), есть север с FreeBSD 8.1, с 2 интерфейсами (1 во внутреннюю сеть, второй во внешнюю), клиенты из локальной сети через НАТ ходят в интернет. Была задача - ограничить скорость для пользователей из локалки (т.к. многие любят попользоваться торрентами и без ограничений эти любители занимали весь канал, создавая проблемы другим клиентам). Сделал ограничение вот таким образом:
ipfw pipe 100 config bw 521 Kbit/s
ipfw queue 1 config pipe 100 mask dst-ip 0xffffffff
ipfw add queue 1 ip from any to 10.84.252.0/24
в данном случае, по идее, на каждого из клиентов локальной сети должен выделяться отдельный канал в 512 Kbit/s, что в принципе и просиходит. НО. Если один из клиентов врубает торрент, то у всех остальных клинтов сразу резко подскакивают задержки времени прохождения пакетов (до 700-2000мс) и появляются потери пакетов. Как только торрент выключается - всё возвращается на круги своя. Я попробовал организовать то же самое ограничение вот таким методом:
i=11
while [ $i != 101 ]
do
    ipfw add pipe $i ip from any to 10.84.252.${i}
    ipfw pipe $i config bw 512Kbit/s
    i=$(($i+1))
done
Тут уже в явную создается 90 каналов на 90 клиентов и в подобной конфигурации вышеописанных проблем не наблюдается, если клиент запускает торрент, то задержек и потерь у других клиентов не возникает вообще. Но получается менее красиво, вместо 3 строк конфига получается 180 (для данного примера). Вопрос - почему в первом примере возникают у всех потери и высокие задержки.


Это был вопрос номер раз. И есть второй - по поводу самого значения ограничения скорости. В написанных мною примерах стоит значение ограничения 512Кбит/с, но, по какой то причине, какое бы значение там я не задавал - на деле, при замерах скорости, показывается результат ровно в 2 раза меньше указанного в конфиге. Т.е. задаю ограничение в 512Кбит/с - на деле 256, задаю 1Мбит/с - на деле 512Кбит/с, задаю 5Мбит - на деле выдает 2,5Мбит/с... и т.д. МОжно кончено в конфиге писать завышенные значения, но как то некрасиво, да и хочется понят отчего так происходит.

Заранее спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "ipfw + dummynet "  +/
Сообщение от sm00th1980 (ok) on 11-Май-11, 18:34 
я могу попробовать объяснить по поводу уменьшения в 2 раза скорости на пайпе.
Сам с этим столкнулся.

Пришёл к выводу - что скорость для пайпа рассчитывается суммарно для входящего и исходящего в него трафика. И причём каждому из них выдаётся по 50% жёстко судя по всему заданное значение для конструкции pipe. Это особенность видимо просто. Её типа нужно иметь ввиду при построении правил.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "ipfw + dummynet "  +/
Сообщение от Xaionaro (ok) on 22-Май-11, 18:07 
>[оверквотинг удален]
> Это был вопрос номер раз. И есть второй - по поводу самого
> значения ограничения скорости. В написанных мною примерах стоит значение ограничения 512Кбит/с,
> но, по какой то причине, какое бы значение там я не
> задавал - на деле, при замерах скорости, показывается результат ровно в
> 2 раза меньше указанного в конфиге. Т.е. задаю ограничение в 512Кбит/с
> - на деле 256, задаю 1Мбит/с - на деле 512Кбит/с, задаю
> 5Мбит - на деле выдает 2,5Мбит/с... и т.д. МОжно кончено в
> конфиге писать завышенные значения, но как то некрасиво, да и хочется
> понят отчего так происходит.
> Заранее спасибо.

Оно считается и на входе и на выходе. Добавьте флаг "in" или "out" к правилу. А так же советую добавить "via" и имя внешнего интерфейса

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "ipfw + dummynet "  +/
Сообщение от DeadLoco (ok) on 23-Май-11, 03:46 
> ipfw pipe 100 config bw 521 Kbit/s
> ipfw queue 1 config pipe 100 mask dst-ip 0xffffffff
> ipfw add queue 1 ip from any to 10.84.252.0/24
> в данном случае, по идее, на каждого из клиентов локальной сети должен
> выделяться отдельный канал в 512 Kbit/s, что в принципе и просиходит.

Нет, вот именно такого происходить и не должно.
Все клиенты из подсети попадают в один общий пайп с равными приоритетами и все клиенты получают равные доли от 512 кбит/с. Один пользователь выжрет все 512 в одно рыло. Два - по 256, четыре - по 128 и так далее. Но эта дележка не абсолютная-перманентная, а динамически-адаптивная. Поровну канал поделится лишь в том случае, если все клиенты качают одинаково интенсивно. Ну, например, если один качает торрент, а другой бровзает в нете, то нагрузки неодинаковые. Качальщик качает непрерывно, а серфер - только когда жмет на ссылки. В момент, когда серфер жмет на ссылку, он делит канал с качальщиком поровну. Как только его страница загрузилась, качальщик получит себе весь канал. До следующего клика серфера.

> НО. Если один из клиентов врубает торрент, то у всех остальных
> клинтов сразу резко подскакивают задержки времени прохождения пакетов (до 700-2000мс)
> и появляются потери пакетов. Как только торрент выключается - всё возвращается
> на круги своя.

Разумеется. Потому что 512 кбит/сек - это ОБЩАЯ полоса, а не индивидуальная. Кроме того, для гладкой работы шейпера в дамминет непременно нужно поднимать частоту таймера прерываний до 2-3 кГц. При штатных 100Гц элементарно переполняются буферы очередей и дропаются пакеты.

> но, по какой то причине, какое бы значение там я не
> задавал - на деле, при замерах скорости, показывается результат ровно в
> 2 раза меньше указанного в конфиге.

Потому что надо делать два пайпа - для входящих и для исходящих пакетов.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "ipfw + dummynet "  +/
Сообщение от DeadLoco (ok) on 25-Май-11, 02:20 
> i=11
> while [ $i != 101 ]
> do
>     ipfw add pipe $i ip from any to 10.84.252.${i}
>     ipfw pipe $i config bw 512Kbit/s
>     i=$(($i+1))
> done
> Но получается менее красиво, вместо 3 строк конфига получается 180

Пайпы могут быть динамическими в той же мере, что и очереди:

   ipfw pipe 100 config bw 512 Kbit/s mask src-ip 0xffffffff
   ipfw pipe 101 config bw 512 Kbit/s mask dst-ip 0xffffffff

   ipfw add pipe 100 all from 10.84.252.0/24 to any
   ipfw add pipe 101 all from any to 10.84.252.0/24

В результате вы получите два набора индивидуальных пайпов - входящих и исходящих.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру