Обсуждение статьи тематического каталога: Подробнее об использовании pipe-s в IPFW (ipfw limit pipe queue traffic shaper limit freebsd)Ссылка на текст статьи: http://www.opennet.me/base/net/ipfw_pipe.txt.html
Всё хорошо, только лучше ещё использовать GRED - будут меньше потери и скорость не будет прыгать туда / сюда. Ну и размеры очередей пакетов подобрать.
как правильно GRED и размер очереди подобрать. каким алгоритмом руководствоваться
>Всё хорошо, только лучше ещё использовать GRED - будут меньше потери и
>скорость не будет прыгать туда / сюда. Ну и размеры очередей
>пакетов подобрать.
А можно с этого места поподробнее? :)
>>Всё хорошо, только лучше ещё использовать GRED - будут меньше потери и
>>скорость не будет прыгать туда / сюда. Ну и размеры очередей
>>пакетов подобрать.
>А можно с этого места поподробнее? :)Может кому пригодится про red и Gred
http://freebsd-r16.narod.ru/freebsd/shaper.html
From: Александр
Subject: Re: Подробнее об использовании pipe-s в IPFW
>
> Я не согласен с этим:
>
> >Оба пользователя непрерывно качают примерно одинаковый поток данных.
> >Один из них начал качать раньше. Когда появился второй, то система
> >начала ограничивать поток для первого до 110/2=55 Кбит/с. Считая что
> >второму также будет отведено 55Кбит/с, однако из-за того что реальная
> >пропускная способность канала 80Кбит/с, то второму пользователю будет
> >предоставлено всего 80-55=25Кбит/с. Кроме того возможно система будет
> >считать, что второй пользователь не использует выделенный ему канал и
> >давать еще больший приоритет первому, чтобы довести общий поток до>
> >110Кбит/с.
>
> в примерах
> ipfw queue 1 config pipe 1 weight 50 queue 20
> weight 50 - не означает деления канала на части,
> а говорит о приоритете, то есть если у двух очередей одинаков приоритет
> то пакеты из этих очередей будут выходить по очереди и канал
> действительно будет делится поровну.
>
> поэтому если канал реально 80Кбит/с а pipe на 110Кбит/с
> вырисовывается другая картина.
> если первый пользователь начал раньше качать то его очередь
> единственная и он полностью подгребает канал под себя.
> если начинает качать второй юзер (подразумевается что приоритеты
> очередей у них одинаковы и не обьязательно 50) то пакеты из очередей
> выходят равномерно,
> а значит скорость делится поровну 80/2=40Кбит/с.
>
> скорость pipe больше чем реальная нужно ставить тогда когда нужно не
> ограничить
> скорость а распределить по приоритетам.
> Я например не зажимаю никого, а всем даю одинаковый приоритет чтоб никто
> не смог
> большим количеством сессий подгребать под себя канал
>Возможно я не прав в своих рассуждениях и в этом ответе есть истина. Хотя я часто встречал в описаниях pipe примеры, где преднамеренно устанавливалась скорость pipe меньшая, чем скорость потока на 5%. И обуславливалось это запасом пропускной способности канала для тех, кто имеет бОльший приоритет.
Всё хорошо и я согласен с твоими рассуждениями о разбивке по приоритетам очередей, а не по скорости канала. Но проведение эксперимента этого не подтверждает:
-два пользователя имеют разные приоритеты созданных для них очередей (причем разность велика - 5 и 50);
-качают с одного сайта с толстым каналом разные файлы;
-скорость pipe не ограничена и результирующий поток ограничивается только шириной канала.
В результате скорость закачки у обоих примерно одинакова. Иногда больше у одного, иногда у другого.
При изменении условия ограничения pipe до значения меньшего, чем пропускная способность канала, получаем совсем иную картину - начинают работать приоритеты очередей.Как это иначе объяснить, чем я описал, не знаю.
а еще я сделал вот так:maska="0xffffffff"
${ipfw} pipe 1 config bw 80Kbit/s queue 20
${ipfw} queue 1 config pipe 1 weight 90 mask dst-ip $maska queue 20
${ipfw} queue 2 config pipe 1 weight 20 mask dst-ip $maska queue 20${ipfw} queue 11 config pipe 1 weight 90 mask src-ip $maska queue 20
${ipfw} queue 21 config pipe 1 weight 20 mask src-ip $maska queue 20
ipfw add queue 11 tcp from $int_net to any in recv $int_if tcpflags fin
ipfw add queue 11 tcp from $int_net to any in recv $int_if tcpflags syn
ipfw add queue 11 tcp from $int_net to any in recv $int_if tcpflags rst
ipfw add queue 11 tcp from $int_net to any in recv $int_if tcpflags psh
ipfw add queue 1 tcp from any to $int_net out xmit $int_if tcpflags fin
ipfw add queue 1 tcp from any to $int_net out xmit $int_if tcpflags syn
ipfw add queue 1 tcp from any to $int_net out xmit $int_if tcpflags rst
ipfw add queue 1 tcp from any to $int_net out xmit $int_if tcpflags pshэто чтобы пакеты инициализации-завершения проходили как можно быстрее. Остальной трафик во второй очереди
ipfw add queue 21 tcp from $int_net to any in recv $int_if
ipfw add queue 2 tcp from any to $int_net out xmit $int_if
Может кто нибуть знает как еще можно ускорить загрузку HTML страниц, ограничив при этом в этот момент качальщиков?
Про прокси - понятно, а вот при помощи IPFW как?
Кстати на основе этих правил очень хорошо организовывается "Анлим".
делаем 3 очереди в одном канале с приоритетами 60,30,10.
60 тем кто очень мало качает, 10 наглым выкачивальщикам всего инета а остальным 30. прекрастно работает.
Сумма цмфр дает 100 (%) :)
почему pipe создается только один ?
ведь сириус-128 позволяет одновременно как отсылать 115кбит (теоритически, практически около 96кбит) так и принимать столько-же...
а если нужно просто зделать приоретизацию трафика без ограничения по скорости то как быть?
"Для себя я нашел следующее решение.
Создаем две очереди для входящего и исходящего трафика
ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff
ipfw queue 11 config pipe 1 weight 50 queue 20 mask src-addr 0xffffffff"
у меня заработало только с dst-ip и src-ip
Действительно все делится поровну очень удачно. Часик потратил на вычисление длины очереди, но работает классно. Мне ндравится! :)
У меня тоже заработало только с dst-ip и src-ip
Почему не работает с dst-addr и src-addr (ipfw ругается ошибками и вырубает начисто сеть) кто-нибудь сможет подсказать?
Часик потратил на вычисление длины очереди,
но работает классно. Мне ндравится! :)расскажи как вычислял?
Вот интересно...а как проверить работают-ли правила?
на ввод комманды ipfw pipe show ответ вот какой
00001: 128.000 Kbit/s 0 ms 25 sl. 0 queues (1 buckets) droptail
mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
...оно и понятно...а где очереди или еще что-то... не пойму....
>Вот интересно...а как проверить работают-ли правила?
>на ввод комманды ipfw pipe show ответ вот какой
>00001: 128.000 Kbit/s 0 ms 25 sl.
>0 queues (1 buckets) droptail
>mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
>...оно и понятно...а где очереди или еще что-то... не пойму....пакеты непоподают в шейпер, или канал\очередь заданы неправильно, например неверная маска
ну конфиг у меня вот какой
у меня 2-е подсети
192.168.20.0/24 моя
192.168.2.0/24 арендаторы
хочу отдать им 30% а себе 70%
делаю вот что...
определяю общий pipe...
ipfw pipe 1 config bw 128Kbit/s queue 20
далее создаю 4-е очереди =
ipfw queue 3 config pipe 1 weight 70 queue 25 mask dst-addr 255.255.255.0
ipfw queue 31 config pipe 1 weight 70 queue 25 mask src-addr 255.255.255.0
ipfw queue 11 config pipe 1 weight 30 queue 25 mask src-addr 255.255.255.0
далее создаю очереди для каждой подсети....
ipfw add queue 3 ip from 192.168.20.0/24 to any
ipfw add queue 31 ip from 192.168.20.0/24 to any #
ipfw add queue 11 ip from any to 192.168.2.0/24
>далее создаю 4-е очереди =
>ipfw queue 3 config pipe 1 weight 70 queue 25 mask dst-addr
>255.255.255.0
>ipfw queue 31 config pipe 1 weight 70 queue 25 mask src-addr
>255.255.255.0
>ipfw queue 11 config pipe 1 weight 30 queue 25 mask src-addr
>255.255.255.0
>далее создаю очереди для каждой подсети....
>ipfw add queue 3 ip from 192.168.20.0/24 to any
>ipfw add queue 31 ip from 192.168.20.0/24 to any #
>ipfw add queue 11 ip from any to 192.168.2.0/24ipfw queue 3 config pipe 1 weight 70 queue 25 mask src-ip 0xffffffff
ipfw queue 31 config pipe 1 weight 70 queue 25 mask dst-ip 0xffffffff
ipfw queue 11 config pipe 1 weight 30 queue 25 mask dst-ip 0xffffffffipfw add queue 3 ip from 192.168.20.0/24 to any
ipfw add queue 31 ip from any to 192.168.20.0/24
ipfw add queue 11 ip from any to 192.168.2.0/24гдето так
когда так прописал, ipfw s возвращает
06200 141 11082 queue 3 ip from 192.168.20.0/24 to any
06300 0 0 queue 31 ip from any to 192.168.20.0/24
06400 0 0 queue 11 ip from any to 192.168.2.0/24почему-то не считаетвходящие пакеты в мою подсеть и не считает пакеты в арендаторскую...
может я как-то не верно прописал арендаторскую подсеть...in2="192.168.2.0"
inet="192.168.20.0"
inet="192.168.20.0"
inet="192.168.20.0"
#
ip2="xl1"
in2="192.168.2.0"
in2="192.168.2.0"$fwcmd add allow all from $in2:$im2 to any via $ip2
$fwcmd add allow all from any to $in2:$im2
#create NAT
$fwcmd add divert natd all from $in2:$im2 to any out via $oif
$fwcmd add divert natd all from any to $oip in via $oif
#close my net
$fwcmd add deny all from 192.168.2.0/24 to 192.168.20.0/24 via $iif
$fwcmd add deny all from 192.168.20.0/24 to 192.168.2.0/24 via $iif
$fwcmd add deny all from 192.168.2.0/24 to 192.168.20.0/24 via $ip2$fwcmd add deny all from 192.168.20.0/24 to 192.168.2.0/24 via $ip2шет какой-то
>когда так прописал, ipfw s возвращает
>06200 141 11082 queue 3 ip from 192.168.20.0/24 to
>any
>06300 0 0
>queue 31 ip from any to 192.168.20.0/24
>06400 0 0
>queue 11 ip from any to 192.168.2.0/24
>
>почему-то не считаетвходящие пакеты в мою подсеть и не считает пакеты в
>арендаторскую...
>может я как-то не верно прописал арендаторскую подсеть...
>
>in2="192.168.2.0"
>inet="192.168.20.0"
>inet="192.168.20.0"
>inet="192.168.20.0"
>#
>ip2="xl1"
>in2="192.168.2.0"
>in2="192.168.2.0"
>
>$fwcmd add allow all from $in2:$im2 to any via $ip2
>$fwcmd add allow all from any to $in2:$im2
>#create NAT
>$fwcmd add divert natd all from $in2:$im2 to any out via $oif
>
>$fwcmd add divert natd all from any to $oip in via $oif
>
>#close my net
>$fwcmd add deny all from 192.168.2.0/24 to 192.168.20.0/24 via $iif
>$fwcmd add deny all from 192.168.20.0/24 to 192.168.2.0/24 via $iif
>$fwcmd add deny all from 192.168.2.0/24 to 192.168.20.0/24 via $ip2
>$fwcmd add deny all from 192.168.20.0/24 to 192.168.2.0/24 via $ip2
>
>шет какой-тоэто что ? :)
>когда так прописал, ipfw s возвращает
>06200 141 11082 queue 3 ip from 192.168.20.0/24 to
>any
>06300 0 0
>queue 31 ip from any to 192.168.20.0/24
>06400 0 0
>queue 11 ip from any to 192.168.2.0/24
>
>почему-то не считаетвходящие пакеты в мою подсеть и не считает пакеты в
>арендаторскую...
>может я как-то не верно прописал арендаторскую подсеть...
>
>in2="192.168.2.0"
>inet="192.168.20.0"
>inet="192.168.20.0"
>inet="192.168.20.0"
>#
>ip2="xl1"
>in2="192.168.2.0"
>in2="192.168.2.0"
>
>$fwcmd add allow all from $in2:$im2 to any via $ip2
>$fwcmd add allow all from any to $in2:$im2
>#create NAT
>$fwcmd add divert natd all from $in2:$im2 to any out via $oif
>
>$fwcmd add divert natd all from any to $oip in via $oif
>
>#close my net
>$fwcmd add deny all from 192.168.2.0/24 to 192.168.20.0/24 via $iif
>$fwcmd add deny all from 192.168.20.0/24 to 192.168.2.0/24 via $iif
>$fwcmd add deny all from 192.168.2.0/24 to 192.168.20.0/24 via $ip2$fwcmd add deny
>all from 192.168.20.0/24 to 192.168.2.0/24 via $ip2
>
>шет какой-тоа ты попробуй пострадать и
06200 141 11082 queue 3 ip from 192.168.20.0/24 to any
06300 0 0 queue 31 ip from any to 192.168.20.0/24
06400 0 0 queue 11 ip from any to 192.168.2.0/24
засунуть перед натом
может быть поможет, хотя не уверен. ну а попытка не пытка :-)
Почему в 6.1 , ipfw не понимает src-addr, dst-addr, они эквивалентны src-ip, dst-ip ?
>Почему в 6.1 , ipfw не понимает src-addr, dst-addr, они эквивалентны src-ip,
>dst-ip ?да
Еще вопрос, в каком месте должны находится правила PIPE ? До основных правил или после? Например я каким-то юзерам разрешаю доступ, каким-то запрещаю и т.п. PIPE правило должно находится перед всем этим?
описания queue и pipe в любом месте, самиже добавления ipfw add queue или ipfw add pipe в зависимости от логики правил, обычно для исходящего трафика до NAT, а для входящего после NAT.
хотя резать входящий обычно неимеет смысла.
А как сделать шейп на каждый IP в сети. Например:
имеются сети 192.168.0.х, 192.168.1.x. Надо каждому IP из одной сети дать шейп на 128 Кбит, из другой - 256 Кбит. Или только прописав пайп на каждый IP?С уважением Владислав
в статье об этом написано, перечитай
Разделение полосы 10 мегабит на всехipfw pipe 3 config bw 10Mbit/s
ipfw queue 3 config pipe 3 weight 50 mask dst-ip 0xffffffff
ipfw queue 4 config pipe 3 weight 50 mask src-ip 0xffffffff
ipfw add queue 3 ip from any to 192.168.0.0/24
ipfw add queue 4 ip from 192.168.0.0/24 to any
Это для асиметричного линка 10 мегабит. По крайней мере если исходить из этой статьи.
Ежели пример по каким либо причинам нерабочий, пожалуйста, подправьте.
Правильно ли настроен firewall? Цель: дать 2Мбита для пользователей с IP из сети 172.16.200.0/24ipfw pipe 1 config bw 2048Kbit/s
ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-ip 0xffffffff
ipfw queue 11 config pipe 1 weight 50 queue 20 mask src-ip 0xffffffff
00041 queue 11 ip from 172.16.200.0/24 to any
00050 divert 8668 ip from any to 91.205.128.6 in via em1
00060 divert 8668 ip from 172.16.0.0/16 to any via em1
00061 queue 1 ip from any to 172.16.200.0/24
sysctl net.inet.ip.fw.one_pass=0# типа так
ipfw pipe 1 config bw 2048Kbit/s queue 1 # out
ipfw pipe 2 config bw 2048Kbit/s queue 20 # in
# если 2 мегабита на in и out общий то pipe 1 есесенно использоватьipfw queue 1 config pipe 1 weight 50 queue 20 mask src-ip 0xffffffff # out
ipfw queue 2 config pipe 2 weight 50 queue 20 mask dst-ip 0xffffffff # inipfw add queue 1 ip from 172.16.200.0/24 to any out via em1
ipfw nat 1 config if em1 log same_ports
ipfw add nat 1 ip from 172.16.200.0/24 to any out via em1
ipfw add nat 1 ip from any to any in via em1ipfw add queue 2 ip from any to 172.16.200.0/24 in via em1
ipfw add allow ip from any to any
ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffffне работает.
ipfw: unrecognised option ``dst-addr''
ошибка
ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-ip 0xffffffff
Подскажите плиззз, мне надо просто выдать в своей подсети каждому айпи по 5Мб/s как это реализовать?