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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
_kirill_
ст. сержант
Сообщения: 311
Зарегистрирован: 2007-05-11 9:41:21
Откуда: Tashkent
Контактная информация:

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

Непрочитанное сообщение _kirill_ » 2010-06-16 10:05:56

Всем здравствуйте!
Никак не получается поделить правильно канал между пользователями.
Есть следующий конфиг:

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

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

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

Хостинговая компания 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/

Аватара пользователя
baton4eg
сержант
Сообщения: 274
Зарегистрирован: 2009-10-11 14:36:35
Контактная информация:

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

Непрочитанное сообщение baton4eg » 2010-06-19 12:34:53

$cmd pipe 1 config bw 1700Kbit/s сюда вот это -> mask dst-ip 0xffffffff не надо добавлять?

Ещё у вас нигде ИСХОДЯЩИЙ канал не прописан, видимо у вас задача рулить входящий канал?
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!" (c)
"Я ем руками, она вилкой и ножом, я бью вилкой и ножом, она руками" (с)

receptor
мл. сержант
Сообщения: 106
Зарегистрирован: 2010-05-02 12:59:03

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

Непрочитанное сообщение receptor » 2010-06-19 18:11:24

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

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

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

Артем72
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-06-19 17:03:50

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

Непрочитанное сообщение Артем72 » 2010-06-19 23:23:08

имхо не верно не регулировать в одну сторону (даже если канал симметричный, забитый исходящий (торренты, например) сделает сервис тупым, и реально неуправляемым и тд). Я пару лет назад потерял много времени, пытаясь настроить правильное деление полосы между 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

_kirill_
ст. сержант
Сообщения: 311
Зарегистрирован: 2007-05-11 9:41:21
Откуда: Tashkent
Контактная информация:

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

Непрочитанное сообщение _kirill_ » 2010-06-22 6:07:41

Всем спасибо за ответы, но вопрос пока не решен. Артем, Вы можете ответить, что значит маска со значением 0x000000ff?

Артем72
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-06-19 17:03:50

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

Непрочитанное сообщение Артем72 » 2010-06-22 21:31:24

Да, конечно. Это очень полезная штука (маска), которая автоматом создает свой пайп каждому клиенту без лишних правил и трат ресурсов. Вот так у меня выглядит интересующий Вас фрагмент 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 не висит

_kirill_
ст. сержант
Сообщения: 311
Зарегистрирован: 2007-05-11 9:41:21
Откуда: Tashkent
Контактная информация:

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

Непрочитанное сообщение _kirill_ » 2010-06-23 7:41: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 не висит
Что то я не совсем понял. Чем отличается маска 0x000000ff от 0xffffffff? Как я понял последняя, также создает пайп для каждого пользователя.

Артем72
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-06-19 17:03:50

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

Непрочитанное сообщение Артем72 » 2010-06-23 9:04:57

В пределах /24 сети и 0x000000ff работает

_kirill_
ст. сержант
Сообщения: 311
Зарегистрирован: 2007-05-11 9:41:21
Откуда: Tashkent
Контактная информация:

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

Непрочитанное сообщение _kirill_ » 2010-06-30 12:10:29

пришел к выводу что это сделать не реально средствами дамминет.

ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

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

Непрочитанное сообщение ivan__ » 2010-06-30 13:39:23

Это и весь твой конфиг?

Артем72
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-06-19 17:03:50

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

Непрочитанное сообщение Артем72 » 2010-07-01 10:54:58

_kirill_ писал(а):пришел к выводу что это сделать не реально средствами дамминет.
Точнее сложно. А dummynet + ipcad + корректирующий скрипт в cron мои задачи решает, о чем и писал.

_kirill_
ст. сержант
Сообщения: 311
Зарегистрирован: 2007-05-11 9:41:21
Откуда: Tashkent
Контактная информация:

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

Непрочитанное сообщение _kirill_ » 2010-07-01 11:12:33

на этом форуме такое никто никогда не делал? может кто нить помоч?

ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

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

Непрочитанное сообщение ivan__ » 2010-07-01 11:26:39

_kirill_ писал(а):на этом форуме такое никто никогда не делал? может кто нить помоч?
Выложи полный конфиг, а не огрызок.

Артем72
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-06-19 17:03:50

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

Непрочитанное сообщение Артем72 » 2010-07-01 11:55:46

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

ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

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

Непрочитанное сообщение ivan__ » 2010-07-01 12:13:16

Артем72 писал(а):Вся суть в том, что на интерфейс, смотрящий в канал прова, повешен ipcad, перловый скрипт сдергивает с него дамп ежеминутно, запускаясь по крону.
А где этот интерфейс в конфиге?

Артем72
проходил мимо
Сообщения: 9
Зарегистрирован: 2010-06-19 17:03:50

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

Непрочитанное сообщение Артем72 » 2010-07-01 12:25:21

А где этот интерфейс в конфиге?
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: