IPFW and DUMMYNET: динамический шейпинг

Протоколы, пинги, роутинг - ответы на вопросы как заставить сеть работать правильно
Аватара пользователя
dopey

 
Сообщения: 19
Зарегистрирован:
31 май 2005, 14:58

IPFW and DUMMYNET: динамический шейпинг

Сообщение dopey 21 ноя 2005, 20:12

Надо разделять канал между несколькими пользователями динамически, т.е.:

1) если только один юзверь забивает канал, тогда отдать его полностью
2) если начинают несколько качать, разделить жестко канал между всеми

пробовал такое:

#----------------------------------------------------
# configure bandwidth and weights (dynamic shaping)#
#----------------------------------------------------

#upload
ipfw pipe 1 config bw 640Kbit/s queue 40 gred 0.002/10/30/0.1
ipfw queue 1 config mask src-ip 0xffffffff pipe 1 queue 5 gred 0.002/10/30/0.1

#download
ipfw pipe 3 config bw 640Kbit/s queue 40 gred 0.002/10/30/0.1
ipfw queue 2 config mask dst-ip 0xffffffff pipe 3 queue 5 gred 0.002/10/30/0.1

#---------------------------------------------------------------
# assign each client its bandwidth priority (dynamic shaping) #
#---------------------------------------------------------------

#upload
ipfw add 100 queue 1 ip from 192.168.0.0/24 to any out via fxp0

#download
ipfw add 120 queue 2 ip from any to 192.168.0.0/24 in via fxp0

Результат плачевный. Даже если несколько юзверей открывают по одному соединению и качают, у всех скорость скачет сказочно. То есть не стоит ровно на определенной отметке. Еще хуже если юзвери открывают разное количество соединений, в смысле один качает через Internet Explorer, т.е. в одно соединение, а другой, например, запустил eDonkey и качает от 50 пиров одновременно. Так вот второй, который с eDonkey, практически отбирает весь канал у первого.

Задумал написать демона на Perl который бы следил за изменением счетчиков в IPFW и соответственно конфигурировал бы "на лету" DUMMYNET на жесткое разделение канала для каждого юзверя. Т.е. если счетчик по какому-либо IP адрессу не меняется, увеличить bw пайпов остальных юзверей и уменьшить до 1 KByte/s у данного юзверя.

Жесткое разделение это в смысле:

#----------------------------------------------------------------
# configure bandwidth for each user (hard limits on each user) #
#----------------------------------------------------------------

#upload
ipfw pipe 2 config bw 128Kbit/s queue 30 gred 0.002/10/30/0.1

#download
ipfw pipe 4 config bw 128Kbit/s queue 30 gred 0.002/10/30/0.1

#----------------------------------------------------------------
# assign each user its bandwidth (hard limits) #
#----------------------------------------------------------------

#upload
ipfw add 101 pipe 2 ip from 192.168.0.1 to any out via fxp0

#download
ipfw add 121 pipe 4 ip from any to 192.168.0.1 in via fxp0

Как вариант, очень просто можно было бы раздавать Инет через PPTP, на сервере поставить MPD и использовать set iface up-script и set iface down-script для запуска скрипта который игрался бы с bw и pipes. Только проблема в том что у меня не получается заставить работать нормально MPD. Здесь подробнее.

Думаю что извращятся никогда не поздно, надо сначала выяснить если возможно этого добиться простой настройкой pipes и queues?
The severity of the itch is inversely proportional to the ability to scratch it. :)

Вернуться в Настройка сети

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1