Страница 1 из 1

dummynet, деление поровну

Добавлено: 2010-06-16 10:05:56
_kirill_
Всем здравствуйте!
Никак не получается поделить правильно канал между пользователями.
Есть следующий конфиг:

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

cmd="/sbin/ipfw"

priv="192.168.1.11"
priv2="192.168.1.12"

$cmd pipe 1 config bw 1700Kbit/s

$cmd queue 1 config pipe 1 weight 30 mask dst-ip 0xffffffff
$cmd queue 2 config pipe 1 weight 20 mask dst-ip 0xffffffff
$cmd queue 3 config pipe 1 weight 50 mask dst-ip 0xffffffff

$cmd add 11 queue 3 all from not 192.168.0.0/16 to $priv
$cmd add 12 skipto 20 all from not 192.168.0.0/16 to $priv

$cmd add 13 queue 2 all from not 192.168.0.0/16 to $priv2
$cmd add 14 skipto 20 all from not 192.168.0.0/16 to $priv2

$cmd add 15 queue 1 all from not 192.168.0.0/16 to 192.168.0.0/16
$cmd add 16 skipto 20 all from not 192.168.0.0/16 to 192.168.0.0/16

$cmd add 20 count all from 127.0.0.1 to 127.0.0.1

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

Re: dummynet, деление поровну

Добавлено: 2010-06-19 12:34:53
baton4eg
$cmd pipe 1 config bw 1700Kbit/s сюда вот это -> mask dst-ip 0xffffffff не надо добавлять?

Ещё у вас нигде ИСХОДЯЩИЙ канал не прописан, видимо у вас задача рулить входящий канал?

Re: dummynet, деление поровну

Добавлено: 2010-06-19 18:11:24
receptor
baton4eg писал(а):$cmd pipe 1 config bw 1700Kbit/s сюда вот это -> mask dst-ip 0xffffffff не надо добавлять?

Ещё у вас нигде ИСХОДЯЩИЙ канал не прописан, видимо у вас задача рулить входящий канал?
Ненадо добавлять.

Эти правила и есть на ИСХОДЯЩИЙ трафик, а входящий никак не шейпится.

Re: dummynet, деление поровну

Добавлено: 2010-06-19 23:23:08
Артем72
имхо не верно не регулировать в одну сторону (даже если канал симметричный, забитый исходящий (торренты, например) сделает сервис тупым, и реально неуправляемым и тд). Я пару лет назад потерял много времени, пытаясь настроить правильное деление полосы между 300'ми пользователями. Ничего путного с weight для думминет, и подставками для altq не родил. И вот уже 2 года в кроне стоит простой перловый скрипт, который читает из ipcad набежавший траф канала за минуту, и корректирует пайп думминета на каждого. У меня крон дергает шел-скрипт, который до этого "написал" перловый скрипт, типа этого:

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

#!/bin/sh
/sbin/ipfw pipe 11 config mask dst-ip 0x000000ff bw 1102Kbit/s delay -100ms
/sbin/ipfw pipe 12 config mask src-ip 0x000000ff bw 957Kbit/s delay -100ms

Re: dummynet, деление поровну

Добавлено: 2010-06-22 6:07:41
_kirill_
Всем спасибо за ответы, но вопрос пока не решен. Артем, Вы можете ответить, что значит маска со значением 0x000000ff?

Re: dummynet, деление поровну

Добавлено: 2010-06-22 21:31:24
Артем72
Да, конечно. Это очень полезная штука (маска), которая автоматом создает свой пайп каждому клиенту без лишних правил и трат ресурсов. Вот так у меня выглядит интересующий Вас фрагмент rc.firewall

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

# INPUT
ipfw pipe 11 config mask dst-ip 0x000000ff bw 1700Kbit/s delay -100ms
ipfw add 200 pipe 11 ip from any to 10.0.0.0/24 in via rl2

# OUTPUT
ipfw pipe 12 config mask src-ip 0x000000ff bw 1500Kbit/s delay -100ms
ipfw add 210 pipe 12 ip from 10.0.0.0/24 to any in via rl3
Нужно иметь ввиду - это конфиг для прозрачного фильтрующего бриджа, т.е. у него ни на rl2, ни на rl3 NAT не висит

Re: dummynet, деление поровну

Добавлено: 2010-06-23 7:41:24
_kirill_
Артем72 писал(а):Да, конечно. Это очень полезная штука (маска), которая автоматом создает свой пайп каждому клиенту без лишних правил и трат ресурсов. Вот так у меня выглядит интересующий Вас фрагмент rc.firewall

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

# INPUT
ipfw pipe 11 config mask dst-ip 0x000000ff bw 1700Kbit/s delay -100ms
ipfw add 200 pipe 11 ip from any to 10.0.0.0/24 in via rl2

# OUTPUT
ipfw pipe 12 config mask src-ip 0x000000ff bw 1500Kbit/s delay -100ms
ipfw add 210 pipe 12 ip from 10.0.0.0/24 to any in via rl3
Нужно иметь ввиду - это конфиг для прозрачного фильтрующего бриджа, т.е. у него ни на rl2, ни на rl3 NAT не висит
Что то я не совсем понял. Чем отличается маска 0x000000ff от 0xffffffff? Как я понял последняя, также создает пайп для каждого пользователя.

Re: dummynet, деление поровну

Добавлено: 2010-06-23 9:04:57
Артем72
В пределах /24 сети и 0x000000ff работает

Re: dummynet, деление поровну

Добавлено: 2010-06-30 12:10:29
_kirill_
пришел к выводу что это сделать не реально средствами дамминет.

Re: dummynet, деление поровну

Добавлено: 2010-06-30 13:39:23
ivan__
Это и весь твой конфиг?

Re: dummynet, деление поровну

Добавлено: 2010-07-01 10:54:58
Артем72
_kirill_ писал(а):пришел к выводу что это сделать не реально средствами дамминет.
Точнее сложно. А dummynet + ipcad + корректирующий скрипт в cron мои задачи решает, о чем и писал.

Re: dummynet, деление поровну

Добавлено: 2010-07-01 11:12:33
_kirill_
на этом форуме такое никто никогда не делал? может кто нить помоч?

Re: dummynet, деление поровну

Добавлено: 2010-07-01 11:26:39
ivan__
_kirill_ писал(а):на этом форуме такое никто никогда не делал? может кто нить помоч?
Выложи полный конфиг, а не огрызок.

Re: dummynet, деление поровну

Добавлено: 2010-07-01 11:55:46
Артем72
По сути это и есть полный конфиг шейпера, за бортом остались типовые deny для опасных icmp и виндового мусора. Вся суть в том, что на интерфейс, смотрящий в канал прова, повешен ipcad, перловый скрипт сдергивает с него дамп ежеминутно, запускаясь по крону. Далее тот же скрипт читает портянку дампа и подсчитывает сколько метров набежало за минуту в одну и в другую сторону, и если набежало больше чем дает пров по договору+5%(запас на пиковые) - уменьшает пайп на 3% (придавливая всех клиентов одновременно и равномерно), если меньше - увеличивает на 3% (поднимая скорость одновременно всем и каждому). Так и болтается постоянно туда=сюда. INPUT OUTPUT раздельно.

Re: dummynet, деление поровну

Добавлено: 2010-07-01 12:13:16
ivan__
Артем72 писал(а):Вся суть в том, что на интерфейс, смотрящий в канал прова, повешен ipcad, перловый скрипт сдергивает с него дамп ежеминутно, запускаясь по крону.
А где этот интерфейс в конфиге?

Re: dummynet, деление поровну

Добавлено: 2010-07-01 12:25:21
Артем72
А где этот интерфейс в конфиге?
rl3

Скрип приводить смысла не вижу(не в обиду), его размер 26 килобайт, на нем довольно сложная статистика расчитывается, завязано на скульную БД. Писал его на коленке быстрее-быстрее. Так что теперь чем его разбирать, проще заново написать :sorry:
основные моменты приведу:
снимаем дамп с ipcad:

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

system "/usr/bin/rsh localhost cle ip acco > /usr/BILLING/trash.txt";
system "/usr/bin/rsh localhost sh ip acco checkpoint > /usr/BILLING/point.txt";

разбираем дамп и набиваем массивы, тут вам парсилка такая навороченная не пригодится :

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

$line = "";
open (P, "/usr/BILLING/point.txt");
while ($line = <P>) {
if ($line =~ /\./) {
($tr, $fromaddr, $toaddr, $tr, $bytes) = split (/\s+/, $line);
  if (($fromaddr =~ /^10./) & ($toaddr =~ /^10./)) { goto gonext }
  if (($fromaddr =~ /^255./) or ($toaddr =~ /.255$/)) { goto gonext }
 
if ($fromaddr =~ /^10.0/) {  
$upload{$fromaddr} = $upload{$fromaddr} + $bytes;
$upsum = $upsum + $bytes;
}  
if ($toaddr =~ /^10.0/) { 
$download{$toaddr} = $download{$toaddr} + $bytes;
$downsum = $downsum + $bytes;
}
#print "$fromaddr - $toaddr - $bytes\n";
}
gonext:
}
close (P);
ну и создаем то, что вносит изменения в пайпы:

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

$pushline11 = "/sbin/ipfw pipe 11 config mask dst-ip 0x000000ff bw ".$down_now."Kbit/s delay -100ms";
$pushline12 = "/sbin/ipfw pipe 12 config mask src-ip 0x000000ff bw ".$up_now."Kbit/s delay -100ms";

$upsum = int($upsum);
$downsum = int($downsum);

open (A, ">/usr/BILLING/PIPE.sh");
print A "#!/bin/sh\n\n";
print A "$pushline11\n";
print A "$pushline12\n";
print A "\n";
print A "#### \t BASE \t REAL \t CLIENT\n";
print A "#\n";
print A "# UP \t $uband \t $upsum \t $u($uuser) --> $up_now\n";
print A "# DOWN \t $dband \t $downsum \t $d($duser) --> $down_now\n";
print A "#   ";
close (A);

system ("/usr/BILLING/PIPE.sh");
Повторяю: просто вариант, много лишнего, много некрасивого, но что-то использовать можно :roll: