Ступор с Pipes

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
sokol
проходил мимо
Сообщения: 7
Зарегистрирован: 2011-08-28 14:04:04

Ступор с Pipes

Непрочитанное сообщение sokol » 2011-08-28 14:27:30

Доброго времени суток.
Второй день бьюсь с ограничением скорости клиентам используя ipfw + pipe. Задача состоит в следующем:
Имеется :
канал 10 мегабит/сек
client1 192.168.0.1
client2 192.168.0.100
Требуется :
выделить 192.168.0.1 скорость 300 Кбит/сек
выделить 192.168.0.100 скорость 10 Мегабит/сек
причем приоритет у 192.168.0.1 должен быть выше, т.е. например 192.168.0.1 может скачивать до 300 Кбит/сек, а все что осталось уже идет на 192.168.0.100.

Ось : FreeBSD 8.2 со всеми заплатками и обновлениями из исходного кода.
Ядро : GENERIC + IPFW

Добавлены следующие опции

Код: Выделить всё

#IPFW
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=500
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         DUMMYNET
Я не как не могу врубица как же все таки пайпы и очередь работает. Сколько все таки нужно труб? И например если зада ть
pipe 1 config bw 4000Kbit/sec
то это будет означать что от 10 Мегабит/сек будет откушено 4000 кбит/сек и на всех остальных останется
10000 - 4000 = 6000 Kbit/sec
или там происходит какая то балансировка например если pipe 1 не полностью нагружен то этот трафик можно задействовать.

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

Убедительная просьба : не надо писать, что я алень и man ipfw. Я полный самоучка и спросить мне не у кого. Каждый день приходится изобретать велосипед. Мануалы читал, но чтоб их понять надо знать как что устроено.

Спс.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: Ступор с Pipes

Непрочитанное сообщение bagas » 2011-08-28 15:56:03

Код: Выделить всё

${ipfw} pipe 1 config bw 22500Kbit/s queue 20
${ipfw} queue 1 config pipe 1 weight 50 mask dst-ip 0?00000000
${ipfw} queue 2 config pipe 1 weight 75 mask dst-ip 0?00000000
${ipfw} add queue 1 ip from any to 192.168.0.1
${ipfw} add queue 2 ip from any to 192.168.0.100
mask dst-ip 0?00000000 – одна очередь/скорость трубы на всех
Если VIP-абоненту (0.100) понадобились услуги – то пользак с адресом (0.1) автоматически подвигаются на задний план.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

sokol
проходил мимо
Сообщения: 7
Зарегистрирован: 2011-08-28 14:04:04

Re: Ступор с Pipes

Непрочитанное сообщение sokol » 2011-08-28 18:41:35

Уважаемый bagas, я благодарю за оперативность вашего отклика.
Ваш конфиг мне полностьтю понятен. Но здесь не учтено скорость трафика на клиента. А именно этот момент и является ключевым. Добавьте пожалуйста условие :

выделить 192.168.0.1 скорость 300 Кбит/сек
выделить 192.168.0.100 скорость 10 Мегабит/сек

Я не понимаю куда добавить это условие и сколько труб должно быть задействовано. Хотелось бы чтобы при простое client 1 (192.168.0.1 ) client 2 (192.168.0.100) мог бы загружать весь канал под себя. Спасибо.

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: Ступор с Pipes

Непрочитанное сообщение bagas » 2011-08-28 19:01:38

что тут не понятного , 1 ip будет получать пропускную способность в полном объеме , но если ip 100 понадобится пропускная способность, то ip 1 встает на задний план.
если первый вариант не устраивает то можно так.
можно еще так по таблицам, в каждую таблицу можно добавлять определенные ip.
mask dst-ip 0xffffffff – на каждого юзера своя очередь/скорость трубы

Код: Выделить всё

ipfw pipe 1 config bw 300Kbit/s mask dst-ip 0xffffffff
ipfw pipe 2 config bw 10024Kbit/s mask dst-ip 0xffffffff
ipfw add pipe 1 ip from any to table\(1,300\) via ${iface}
ipfw add pipe 2 ip from any to table\(2,10024\) via ${iface}
ipfw table 1 add 192.168.0.1 300
ipfw table 2 add 192.168.0.100 10024
понятно?
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

sokol
проходил мимо
Сообщения: 7
Зарегистрирован: 2011-08-28 14:04:04

Re: Ступор с Pipes

Непрочитанное сообщение sokol » 2011-08-28 19:32:38

Уважаемый bagas, Мне полностью понятны оба ваши конфига. Но это простые частные случаи , которые мне не подходят ( я не отрицаю что я алень, и теоретически пайпы малопонятны, но я насколько понимаю это немного не то). Смотрите какая ситуация ( кстати все айпишки у меня расположены в таблицах что соответствует вашему совету) :

192.168.0.100 стоит на скачке на торентах (к примеру) и кушает все свои выделенные 10 мегабит, то есть весь канал инета.
192.168.0.1 подает запрос куда нибудь че нить скачать и далее должно произойти следующее:
192.168.0.100 скинет скорость до 9700 кбит , а 192.168.0.1 сможет полностью загрузить выделенные для него 300 кбит
У 192.168.0.1 должен быть выше приоритет чем у 192.168.0.100 (это тоже понятно рулится через queue wight)
Такая ситуация будет продолжаться до тех пор пока 192.168.0.1 не докачает то что ему необходимо и например полностью опять же не освободит канал. 192.168.0.100 опять разгонится до 10 мегабит.

В вашем первом примере нет ограничения скорости для 192.168.0.1 в 300 кбит/с, а есть приоритеты.

${ipfw} pipe 1 config bw 22500Kbit/s queue 20
${ipfw} queue 1 config pipe 1 weight 50 mask dst-ip 0?00000000
${ipfw} queue 2 config pipe 1 weight 75 mask dst-ip 0?00000000
${ipfw} add queue 1 ip from any to 192.168.0.1
${ipfw} add queue 2 ip from any to 192.168.0.100

Во втором случае есть ограничения скорости , но как раз нет приоритетов.

ipfw pipe 1 config bw 300Kbit/s mask dst-ip 0xffffffff
ipfw pipe 2 config bw 10024Kbit/s mask dst-ip 0xffffffff
ipfw add pipe 1 ip from any to table\(1,300\) via ${iface}
ipfw add pipe 2 ip from any to table\(2,10024\) via ${iface}
ipfw table 1 add 192.168.0.1 300
ipfw table 2 add 192.168.0.100 10024

Так вот можно ли как то это все обьединить чтоб были и приоритеты и ограничения скорости?
Я еще раз очень благодарен за ответы. Спасибо

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: Ступор с Pipes

Непрочитанное сообщение bagas » 2011-08-28 20:15:30

Честно говоря вы меня запутали, я как понял вам жестко нужно выделить 300кило 1 и 10метров 100.
Сейчас мне лень думать, но если никто не ответит на ваш вопрос , постараяюсь завтра ответить.
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

sokol
проходил мимо
Сообщения: 7
Зарегистрирован: 2011-08-28 14:04:04

Re: Ступор с Pipes

Непрочитанное сообщение sokol » 2011-08-28 21:12:14

Уважаемый bagas, вопрос решен. Пару извилин все таки еще шевелятся в моей голове. Вот что получилось.

${IPFW} pipe 1 config bw 2400Kbit/s weight 100 mask dst-ip 0xffffffff
${IPFW} pipe 2 config bw 10024Kbit/s weight 1 mask dst-ip 0x00000000

${IPFW} add pipe 1 ip from any to table\(3\) in via ${InetIFACE}
${IPFW} add pipe 2 ip from any to table\(4\) in via ${InetIFACE}

В результате получается следующее (если конечно интересно) :
любой клиент из table\(4\) при старте активности любого клиента из table\(3\) начинает сбрасывать скорость и уступает канал до скорости 300 кбит/сек (10000 - 300 = 9700 Кбит/сек остается для table\(4\)). После того как клиент из table\(3\) закончит соединение (будь то скачка или еще чтото) то он уходит на задний план, а клиент из table\(4\) добирает весь оставшийся трафик который больше не востребован клиенту из table\(3\). Причем для table\(4\) канал в 10 мегабит/сек на всех, а для table\(3\) - каждому по 300 кбит/сек.

Единственным моментом для меня в конечном итоге остается "непонимание" опции queue. Если вам не составит труда то не могли бы вы привести пример использования queue хотя бы на пальцах. Еще более оценимо - пример из реальной жизни боевого сервера.

Опять же благодарю вас за ответы. Спасибо.