LINUX.ORG.RU
ФорумAdmin

IPFW PIPES


0

1

Доброго времени суток.
Второй день бьюсь с ограничением скорости клиентам используя 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.

Опишу частный случай более подробно :

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
Такая ситуация будет продолжаться до тех пор пока 192.168.0.1 не докачает то что ему необходимо и например полностью опять же не освободит канал. 192.168.0.100 опять разгонится до 10 мегабит.

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

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

#IPFW
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=500
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET


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

Я не могу понять сколько труб здесь использовать.

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

Спасибо. Очень надеюсь на помощь.


Помимо pipes вам еще нужны такие параметры как «weight» и «queue» и возможно «type» (алгоритм). В мане есть информация по всем этим параметрам с примерами.

Так чтобы четко 300 кбит выделить не получится, для этого надо 2 пайпы делать, а это значит что торренты больше 9.7 мбит не получат. Логичнее сделать просто выше приоритет для 192.168.0.1.

Примерно так будет всё выглядеть -

ipfw pipe 1 config bw 10Mbit/s queue 20Kbyte/s
ipfw queue 1 config pipe 1 weight 100 mask all # выше приоритет
ipfw queue 2 config pipe 1 weight 1 mask all # ниже приоритет
ipfw add 55 queue 1 tcp from 192.168.0.1 to any # 192.168.0.1 в первое queue
ipfw add 65 queue 2 tcp from 192.168.0.100 to any # 192.168.0.100 во второе queue

FreeBSD ★★★ ()
Ответ на: комментарий от FreeBSD

Спасибо за оперативность ответа. Подскажите пожалуйста такой момент.

Пишу например

ipfw pipe 1 config bw 300Kbit/s

и это значит что от моего канала в 10 Mbit/s откушено 300 Kbit/s и остается на всех остальных 9700Kbit/s. Даже если я не создаю ipfw pipe 2 config bw 9700Kbit/s?

Я правильно понимаю?

А вот так бред (с учетом всего канала в 10 мегабит)?

#Traffic - 2400 Kbit/s - kazhdomu clientu

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

#Traffic - 10024 Kbit/s - na vseh clientov porovnu

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

#Ustanovka ogranichenii traffika

${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}

sss-man ()
Ответ на: комментарий от sss-man

я немного переделал ваш конфиг

ipfw pipe 1 config bw 10Mbit/s queue 20Kbyte/s

ipfw queue 1 config pipe 1 weight 100 mask all # выше приоритет

ipfw queue 2 config pipe 1 weight 1 mask all # ниже приоритет

ipfw add 55 queue 1 tcp table\(3\) to any # 192.168.0.1 в первое queue

ipfw add 65 queue 2 tcp from table\(4\) to any # 192.168.0.100 во второе queue

Получется что если любой клиент из table\(3\) ставит торент на полную закачку то все остальные остаются без трафика?

sss-man ()
Ответ на: комментарий от sss-man

> Получется что если любой клиент из table\(3\) ставит торент на полную закачку то все остальные остаются без трафика?

Нет. Вы не поняли как работает dummynet (pipes/queue). Суть в том, что «pipe» - это как бы виртуальный канал заданной ширины. То есть фактически ваши физические 10 мегабит можно поделить на меньшие каналы для определенных нужд. В вашем случае pipe может быть только один - то есть вы как бы декларируете что у вас 10 мегабит всего и в пределах этих 10 мегабит уже рулите трафиком по приоритетам - трафик с низким приоритетом становится в «очередь» (queue), а с высоким приоритетом отдается сразу. В случае с вашим последним постом - если клиенты из table(3) начнут качать торренты, то у клиентов из table(4) всё будет просто тормозить адски. По-этому вам нужно больше правил - например добавлять в «queue 1» только тот трафик, который должен отдаваться быстрее торрентов - 80 tcp, 25 tcp, 110 tcp, 22 tcp и т.д. и тогда торренты не будут проблемой.

FreeBSD ★★★ ()
Ответ на: комментарий от FreeBSD

с disable one_pass клиента можно гнать через любое кол-во труб ;-)

ipfw pipe 11 config bw 300Kbit/s
ipfw pipe 1 config bw 10Mbit/s queue 20Kbyte/s
ipfw queue 1 config pipe 1 weight 100 mask src-ip 0xffffffff # выше приоритет
ipfw queue 2 config pipe 1 weight 1 mask src-ip 0xffffffff # ниже приоритет
ipfw add 54 pipe 11 tcp from 192.168.0.1 to any
ipfw add 55 queue 1 tcp from 192.168.0.1 to any # 192.168.0.1 в первое queue
ipfw add 65 queue 2 tcp from 192.168.0.100 to any # 192.168.0.100 во второе queue

хм почему вы udp не шейпите, современный торрент клиенты («спасибо» utorrent) предпочитают свой uTP

и маску надо по ip

P.S. топикстартер пользуйтесь тэгом [code]

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Ну это я так для примера, топикстартер думаю сам разберется какие порты и протоколы шейпить =)

FreeBSD ★★★ ()
Ответ на: комментарий от hizel

>современный торрент клиенты («спасибо» utorrent) предпочитают свой uTP

немного оффтопа - у нас от uTP вешаются свичи(спасибо, говноdlink), посему на роутерах этот трафик у нас дропается...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

Спасибо всем большое за подробные адекватные ответы. Я очень благодарен вам. Наконец то врубился что же все таки этот pipe за зверь такой.

При канале инета в 10 мегабит

Вот так гут : [code] ipfw pipe 1 config bw 300Kbit/s ipfw pipe 2 config bw 9700Kbit/s ipfw add pipe 1 tcp from any to 192.168.0.1 to any via ${InetIFACE} ipfw add pipe 2 tcp from any to 192.168.0.100 to any via ${InetIFACE} [/code]

Вот так шляпа :)

[code] ipfw pipe 1 config bw 300Kbit/s ipfw pipe 2 config bw 10000Kbit/s ipfw add pipe 1 tcp from any to 192.168.0.1 to any via ${InetIFACE} ipfw add pipe 2 tcp from any to 192.168.0.100 to any via ${InetIFACE} [/code]

Единственной просьбой если у кого есть желание помочь то киньте пару конфигов действующего «боевого» роутера пожалуйста. В инете уж очень простоваты примеры конфигов. С примеров намного легче врубаться.

Особо заинтересовало от hizel

немного оффтопа - у нас от uTP вешаются свичи(спасибо, говноdlink), посему на роутерах этот трафик у нас дропается...

Если вас не затруднит то не могли бы вы поподробнее пожалуйста.

Выложите сюда пожалуйста или в асю 370608982. Можно на мыло sokol.a.a.2010@gmail.com. Спасибо вам огромнейшее.

sss-man ()
Ответ на: комментарий от sss-man

а что тут подробнее? uTP пакеты мелкие и их дохрена, прошивка на свичах - голимая, посему свичи тупо вешаются через час-два интенсивного uTP трафика. Поэтому в файрволах красуется вот такое правило(сильно не пинать, сперто где-то на просторах интернета):

iptables -A FORWARD -p udp -m string --hex-string "|7F FF FF FF AB|" --algo kmp --from 40 --to 44 -j DROP

Pinkbyte ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.