Date: Wed, 07 Apr 2004 17:33:15 +0600
From: Ivan Voytas <ivan_voytas@atlantm.com>
Newsgroups: ftn.ru.unix.bsd
Subject: Деление между пользователями канала поровну используя ipfw
> есть канал в 128кбит. нужно его делить динамически поровну между юзерами,
> которые в данный момент пользуются этим каналом. как такое сделать
> правильно при помощи ipfw?
аналог WFQ:
add queue 10 ip from 192.168.0.0/24 to any xmit ppp0
queue 10 config mask src-ip 0xffffffff pipe 10
pipe 10 config bw 128Kbit/s
add queue 20 ip from any to 192.168.0.0/24 to any recv ppp0 in
pipe 20 config bw 128Kbit/s
queue 20 config mask dst-ip 0xffffffff pipe 20
Еще в целях уменьшения задержек можно опционально покрутить длину queue и
pipe. Hу и red/gred по вкусу.
Только большой вопрос, что писать в bw. 128 ли? Кто-нибудь знает, будут ли
пакеты пропадать при переполнении очереди выходного интерфейса? Или они
будут скапливаться в пайпах?
> есть канал в 128кбит. нужно его делить динамически поровну между юзерами,
> которые в данный момент пользуются этим каналом. как такое сделать
> правильно при
> помощи ipfw?
Пусть клиенты сидят на серых адресах 192.168.0.0/16, а трафик приходит через
fxp0, тогда динамическая раздача поровну симметричных 128KBit/s будет
выглядеть примерно так:
ipfw pipe 1 config bw 128Kbit/s queue 80Kbytes
ipfw queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
ipfw add 5000 queue 10 all from 192.168.0.0/16 to any out via fxp0
<... между 5000 и 10000 должен стоять divert natd для этих сетей ...>
ipfw pipe 2 config bw 128Kbit/s queue 80Kbytes
ipfw queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
ipfw add 10000 queue 20 all from any to 192.168.0.0/16 in via fxp0
From: Ivan Voytas <ivan_voytas@atlantm.com>
> ipfw pipe 1 config bw 128Kbit/s queue 80Kbytes
> ipfw queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
> ipfw add 5000 queue 10 all from 192.168.0.0/16 to any out via fxp0
Здесь не нужен weight.
queue - 80Kbytes у пайпа - это 5сек задержки в одну сторону на 128Кбит/с.
В итоге при загруженном канале и одном пользователе имеем 20сек на пинг.
При 10 пользователях имеем 80Kbytes/(128 / 8 / 10Kbytes/s) = 50c на одном
только queue. То есть пинг 110сек :-)
Hеработоспособно в принципе.
Я бы даже наоборот сделал - pipe config queue 10 (или 5, или вообще 1, если
ничему не противоречит) и queue config queue 10.
Причем именно в пакетах, а не килобайтах.
From: Slava Vovk <vovk@km.ua>
>> пилообразность и дропы убираются gred'om, но добится от него результатов
>> можно только на больших очередях, где пинг заоблачный.
>
> Заоблачный - это сколько? Я делал длину очереди равную скорости в
> (Кбит/с)/10 пакетов. Плюс gred. Вроде все нормально было.
add 10000 queue 10 ip from 195.135.200.244/30 to any out
queue 10 config mask src-ip 0xffffffff pipe 10 queue 100 gred 0.002/10/30/0.1
pipe 10 config bw $total64 queue 10
add 10010 queue 20 ip from any to 195.135.200.244/30 in
queue 20 config mask dst-ip 0xffffffff pipe 20 queue 100 gred 0.002/10/30/0.1
pipe 20 config bw $total64 queue 10
пинг при закачке до 22-25 сек.
установки gred'a 0.002/10/30/0.1, взяты из этой конфы, кто-то приводил пример
с месяц назад.
это наиболее "нормальный" WFQ, который мне удалось получить, правда очередь
на пайп меньше 10 я не делал.
а начинал я играться с 5 пакетов на очередь, поэксперементировал данными с
http://ee.tamu.edu/~zzlarry/vprm_red.html, но там похоже нужно апроксимировать
данные под мою скорость.
> Попробуй увеличивать длину очереди и уменьшать длину пайпа одновременно.
> Вплоть до 50-100 на queue и 1-2-5 на pipe.
>
сейчас попробую плавно поуменьшать очередь на пайп, посмотрим.
>> ipfw -q pipe 1 config bw 16Kbit/s queue 80Kbytes
>> ipfw -q queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
>> ipfw -q add queue 10 all from 192.168.0.0/16 to any out via ep0
>>
>> ipfw -q add divert 8668 ip from any to any via ep0
>>
>> ipfw -q pipe 2 config bw 16Kbit/s queue 80Kbytes
>> ipfw -q queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
>> ipfw -q add queue 20 all from any to 192.168.0.0/16 in via ep0
>>
>> что я не правильно сделал?
DP> flush сделал? Похоже, что эти правила просто дописались в конец
DP> общего списка, после allow. Если счетчик на последней строчке нулевой,
DP> то так и есть.
нет. все нормально прописано.
вот как выглядит /etc/rc.local
ipfw -q pipe 1 config bw 16Kbit/s queue 80Kbytes
ipfw -q queue 10 config pipe 1 weight 50 queue 80Kbytes mask src-ip 0x0000ffff
ipfw -q add queue 10 all from 192.168.0.0/16 to any out via ep0
ipfw -q add divert 8668 ip from any to any via ep0
ipfw -q pipe 2 config bw 16Kbit/s queue 80Kbytes
ipfw -q queue 20 config pipe 2 weight 50 queue 80Kbytes mask dst-ip 0x0000ffff
ipfw -q add queue 20 all from any to 192.168.0.0/16 in via ep0
ipfw -q add allow ip from any to any via lo0
ipfw -q add deny ip from any to 127.0.0.0/8
ipfw -q add deny ip from 127.0.0.0/8 to any
ipfw -q add allow ip from any to any
Zombie# ipfw show
00100 1255 85480 queue 10 ip from 192.168.0.0/16 to any out xmit ep0
00200 508 79234 divert 8668 ip from any to any via ep0
00300 508 79234 queue 20 ip from any to 192.168.0.0/16 in recv ep0
00400 0 0 allow ip from any to any via lo0
00500 0 0 deny ip from any to 127.0.0.0/8
00600 0 0 deny ip from 127.0.0.0/8 to any
00700 1804 178293 allow ip from any to any
65535 1 56 deny ip from any to any
флэшгет качает на максимально возможной скорости.
870 Прочтений • [Деление между пользователями канала поровну используя ipfw (freebsd ipfw bandwidth traffic link shaper queue qos)] [08.05.2012] [Комментариев: 0]