Jump to content

Recommended Posts

Posted (edited)

подскажите пожалуйста я правильно ограничил скорость для пользователей?

мне нужно сделать так что бы у каждого пользователя было не менее и не более 30килобит в сек

я сделал так:

---------------------------------------------------------------------------------------------

${fw} pipe 4 config bw 30Kbit/s

 

${fw} add 200 pipe 4 tcp from any to 192.168.1.3

${fw} add 200 pipe 4 tcp from any to 192.168.1.6

${fw} add 200 pipe 4 tcp from any to 192.168.1.16

${fw} add 200 pipe 4 tcp from any to 192.168.1.25

${fw} add 200 pipe 4 tcp from any to 192.168.1.44

${fw} add 200 pipe 4 tcp from any to 192.168.1.46

${fw} add 200 pipe 4 tcp from any to 192.168.1.49

${fw} add 200 pipe 4 tcp from any to 192.168.1.59

${fw} add 200 pipe 4 tcp from any to 192.168.1.63

${fw} add 200 pipe 4 tcp from any to 192.168.1.66

${fw} add 200 pipe 4 tcp from any to 192.168.1.69

${fw} add 200 pipe 4 tcp from any to 192.168.1.71

${fw} add 200 pipe 4 tcp from any to 192.168.1.153

${fw} add 200 pipe 4 tcp from any to 192.168.1.206

${fw} add 200 pipe 4 tcp from any to 192.168.1.231

${fw} add 200 pipe 4 tcp from any to 192.168.1.232

${fw} add 200 pipe 4 tcp from any to 192.168.1.234

${fw} add 200 pipe 4 tcp from any to 192.168.1.242

${fw} add 200 pipe 4 tcp from any to 192.168.1.244

----------------------------------------------------------------------------------------------------------------

я правильно сделал ? или у меня 30 килобит будут делиться на всех пользователей? мне нужно сделать так что бы если даже все пользователи что нить качали , скорость была у каждого 30 килобит в сек. А то у меня есть подозрения что 30 килобит делятся на всех. А то если начинают качать пять человек то получается что скорость на каждого по 6 килобит? или всё таки у каждого будет 30 килобит?

Edited by anclbob
Posted

Правильные у тя подозрения. Ты всех в 1 pipe запихнул. А pipe это как водопроводная труба диаметром 30Kb/s :) Вот и подумай. Кстати + ты ограничиваешь скачку народом, а вот исходящий у них будет реальным (т.е. скока смогут выжать). Удачи, делай для каждого свой pipe.

Posted

Выполнить задачу можно одним правилом (ну и еще одним для конфигурации пайпа), если использовать маску. О том, как это сделать описано в мануале.

Posted

В этом примере распределение с помощью маски. Т.е. в отдельности ip адресу я смогу сделать если для каждого пользователя создавать свой pipe.

А возник ещё вопрос. Вот допустим я создаю такой канал 128 килобит напрмиер и в него загоняю 4 пользователя. И задача стоит такая что бы у каждого пользователя скорость была не выше 56 килобит. Например если качаю 2е то помещаются в "трубу" 128 килобит и забивают её ровно на 112 килобит. А если например качают 4ро, то канал должен делиться поровну или как нибудь делиться между этими четырмя пользователями но что бы общая труба была не выше 128 килобит. Т.е. у каждого будет примерно по 32 килобита. Как такое организовать? возможно это вообще?

Posted

Как раз только читал об этом. На ссылки http://www.opennet.ru/tips/info/226.shtml - сделать общую трубу, см ниже обсуждение.

http://www.opennet.ru/base/net/ipfw_queue_mask.txt.html - равномрно разделить.

Теперь насчёт маски. Не путай маску IP и маску в пайпах, разные вещи. Смысл в том что например на разные dst-ip или на разные src-ip будет скорость по 32Kbit/s (например)...

Posted

Почитал но не совсем понял что такое src-ip, dst-ip, dst-addr, src-addr.

А создание общего тунеля как я понял создаётся просто при помощи нижестоящего правила?

 

и ещё не пойму разницу например в таких строках:

 

ipfw pipe 10 config mask dst-ip 0x000000ff bw 1024bit/s queue

и

ipfw pipe 10 config bw 1024bit/s

 

Много интересного по weight почитал более менее понятно стало. Но никак не вьеду как высчитывать значение queue. Например

вот в этой строке:

ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-addr 0xffffffff

почему queue = 20 ??? от чего это зависит.

 

И ещё может общими усилиями поможете...

Стоит следующая задача. Есть три группы тарифов: на скоростях 500 килобит, 128 килобит, и анлимиты на скоростях 128, 56 и 28 килобит.

Нужно сделать так что бы приоритет был только у первых 2х тарифов (500, 128), потому что они считаются по трафику. Т.е. что бы общая полоса делилась на эти тарифы равномерно. Общая пропускная способность инета 500 килобит. Пользователям которые сидят на 500 килобит отдавать весь канал когда они активны, 128 килобит тоже отдавать максимум 128 на каждого пользователя. Но в общей своей массе если одновременно выходит много пользователей на этих тарифах что бы там всё между ними делилось равномерно.

А анлимиты запихать на самый последний приоритет. Т.е. если канал забит вышеописанными тарифами, то скорость на анлимитах 10 килобит. А если ночью никого нет из приоритетных тарифов, то скорость должна повышаться на полную в зависимости от выбранного тарифа анлимита 128 или 56 или 28...

 

Вообщем вот так. Что подскажите?

Posted

Давай по порядку:

Маска = значение по которому разделяется народ src-ip = по ip отправителя

dst-ip аналогично по ip получателя

src-addr - железный адрес отправителя (mac)

dst-addr - железный адрес получателя (mac)

 

Разницы в том, что в первом случае pipe = общий на группу адресов с разными dst-ip

Во втором, pipe 1 для всех. Т.е. общее 1024

 

queue - длина твоей очереди. Вообщем надо подбирать под себя. Всё зависит от количества народа и от твоих потребностей. Хочешь надёжную связь, ставь queue большую, но при этом будут большие задержки, хочешь маленькие задержки (на взгляд пользователя, но не гарантированную доставку, ставь поменьше. По умолчанию вроде там 50 стоит)

 

Всё делается weight - весом. Чем больше вес и чела, тем больше его приоритет. Тем у кого одинаковый приоритет ставишь 1 вес, меньше, ставишь меньше. Тоже зависит от потребностей.

Posted (edited)

Спасибо за пояснение!

непонятно осталось только одно как queue выбирать всё таки... Ну щас попробую предположить

 

Например у меня всего 20 человек.

Из них 5 сидят на тарифе 500 килобит

10 на тарифе 128 килобит

и 5 на анлимитах (один на 128, 2 на 56 килобит и 2 на 28 кбит в сек)

делаем так:

общий канал 500 килобит. правда он может снижаться до 50...

делаем 4 трубочек pipe

##################################################

#!/bin/sh

fw="/sbin/ipfw -q"

##################################################

${fw} pipe 100 config bw 500Kbit/s queue 20

${fw} pipe 2 config mask dst-ip 0x000000ff bw 128Kbit/s queue

${fw} pipe 3 config mask dst-ip 0x000000ff bw 56Kbit/s queue

${fw} pipe 4 config mask dst-ip 0x000000ff bw 28Kbit/s queue

##################################################

${fw} queue 1 config pipe 100 weight 90 queue 5 mask dst-ip 0xffffffff

${fw} queue 2 config pipe 2 weight 80 queue 20 mask dst-ip 0xffffffff

${fw} queue 3 config pipe 2 weight 10 queue 1 mask dst-ip 0xffffffff

${fw} queue 4 config pipe 3 weight 10 queue 2 mask dst-ip 0xffffffff

${fw} queue 5 config pipe 4 weight 10 queue 2 mask dst-ip 0xffffffff

##################################################

${fw} add queue 1 ip from any to 192.168.1.1

${fw} add queue 1 ip from any to 192.168.1.2

${fw} add queue 1 ip from any to 192.168.1.3

${fw} add queue 1 ip from any to 192.168.1.4

${fw} add queue 1 ip from any to 192.168.1.5

#---------------------------------------------------------------------------------------

${fw} add queue 2 ip from any to 192.168.1.6

${fw} add queue 2 ip from any to 192.168.1.7

${fw} add queue 2 ip from any to 192.168.1.8

${fw} add queue 2 ip from any to 192.168.1.9

${fw} add queue 2 ip from any to 192.168.1.10

${fw} add queue 2 ip from any to 192.168.1.11

${fw} add queue 2 ip from any to 192.168.1.12

${fw} add queue 2 ip from any to 192.168.1.13

${fw} add queue 2 ip from any to 192.168.1.14

${fw} add queue 2 ip from any to 192.168.1.15

#-------------------------------------------------------------------------------------------

${fw} add queue 3 ip from any to 192.168.1.16

#------------------------------------------------------------------------------------------

${fw} add queue 4 ip from any to 192.168.1.17

${fw} add queue 4 ip from any to 192.168.1.18

#-----------------------------------------------------------------------------------------

${fw} add pipe 100 tcp from any to 192.168.0.0/16

#######################################################

 

как вот это всё будет работать?

не будет ли последняя строчка отменять все предыдушие правила? и загонять всех в один 500 килобитовый канал?

И как будут вести себя скорости у пользователей которые на queue 2 ? Если к примеру качаю 2 ИП адреса 1.6 и 1.7 и больше никого из 20 человек. Какие у них будут скорости? по 128 килобит или всётаки по 64 ???

мне нужно что бы по 128 ... как правильней всё это сделать?

Edited by anclbob
Posted

В /etc/sysctl.conf пишем net.inet.ip.fw.one_pass=0 (или sysctl -w net.inet.ip.fw.one_pass=0) сделал? А то у тя после 1го pipe будет заканчиваться прохождение последущих правил. Общую надо до личных. Т.е. сначала общий pipe а потом для каждого по pipу. Здесь ты зажимаешь входящий. Т.е. если кто-то фильм решит другу послать то забьёт тебе весь канал. А так вроде всё верно.

Posted

а пользователям которые на 128 килобит им будет выделяться общий канал на 128 или каждому?

Posted

А нафига те pipe с масками, если в queue используешь? :\

Каждому но не превышающий сумарно твой общий pipe

Posted

или если руководствоваться вот этой статьёй http://www.opennet.ru/base/net/freebsd_cir.txt.html

можно предложить чуть чуть другой вариант....

###########################################

#!/bin/sh

fw="/sbin/ipfw -q"

###########################################

${fw} pipe 1 config bw 500Kbit/s

${fw} pipe 2 config mask dst-ip 0x000000ff bw 128Kbit/s queue

${fw} pipe 3 config mask dst-ip 0x000000ff bw 56Kbit/s queue

${fw} pipe 4 config mask dst-ip 0x000000ff bw 28Kbit/s queue

${fw} pipe 5 config bw 100Mbit/s # :)

############################################

${fw} queue 1 config pipe 1 weight 100

${fw} queue 2 config pipe 2 weight 90

${fw} queue 3 config pipe 2 weight 2

${fw} queue 4 config pipe 3 weight 2

${fw} queue 5 config pipe 4 weight 2

${fw} queue 6 config pipe 5 weight 2

############################################

${fw} add pipe 1 ip from any to 192.168.1.1

${fw} add pipe 1 ip from any to 192.168.1.2

.........................................................................

###########################################

${fw} add pipe 2 ip from any to 192.168.1.6

${fw} add pipe 2 ip from any to 192.168.1.7

...........................................................................

##########################################

###unlimit###################################

${fw} add queue 3 ip from any to 192.168.1.16 # 10/128 килобит

# или такой вариант

${fw} add queue 6 ip from any to 192.168.1.16 # 10/128 килобит

${fw} add queue 4 ip from any to 192.168.1.17 # 10/56 килобит

${fw} add queue 4 ip from any to 192.168.1.18 # 10/56 килобит

${fw} add queue 5 ip from any to 192.168.1.19 # 10/28 килобит

${fw} add queue 5 ip from any to 192.168.1.20 # 10/28 килобит

###########################################

 

а если такой вариант?

 

и меня всё таки очень интересует вопрос...

если пользователи на 128 килобит загоняются в одну "трубу" 128 килобитную или всё таки при таком раскладе каждому выдаётся по 128 килобит (при ситуации если из 20 человек качают только 2 128 килобитных, какая у них скорсоть?)

Posted
А нафига те pipe с масками, если в queue используешь? :\

Каждому но не превышающий сумарно твой общий pipe

я не пойму почему каджому? мне тут писали что в один канал загоняются....

при вот таком виде

################################################

${fw} pipe 4 config bw 128Kbit/s

${fw} add 200 pipe 4 tcp from any to 192.168.1.3

${fw} add 200 pipe 4 tcp from any to 192.168.1.6

${fw} add 200 pipe 4 tcp from any to 192.168.1.16

################################################

 

не пойму почему вот в этом моём примере выдаётся каждому по 128 ?

###############################################

${fw} pipe 2 config mask dst-ip 0x000000ff bw 128Kbit/s queue

${fw} queue 2 config pipe 2 weight 100 queue 20

${fw} add queue 2 ip from any to 192.168.1.6

${fw} add queue 2 ip from any to 192.168.1.7

${fw} add queue 2 ip from any to 192.168.1.8

${fw} add queue 2 ip from any to 192.168.1.9

##################################################

почему сдесь каждому?

Posted

в 1м твоём примере общее у всех 128 во втором каждому. Т.к. различаются они по dst-ip.

Если есть маска разделяющая то каждому по трубе, если нет то всех в одну.

Posted (edited)
в 1м твоём примере общее у всех 128 во втором каждому. Т.к. различаются они по dst-ip.

Если есть маска разделяющая то каждому по трубе, если нет то всех в одну.

т.е. это абсолютно точно! что если я пишу маску то это каждому по трубе. И у меня пропадает необходимость писать каждому свою трубу.

ладненько сегодня буду тестить... напишу результаты

Edited by anclbob
Posted (edited)

Вообщем разочарован полностью ((

значит сделал вот такой конфиг для теста:

-------------------------------------------------------------------------------

#!/bin/sh

fw="/sbin/ipfw -q"

#############################################

${fw} pipe 1 config bw 500Kbit/s

${fw} pipe 2 config bw 500Kbit/s

#############################################

${fw} queue 1 config pipe 1 weight 100

${fw} queue 2 config pipe 2 weight 1

#############################################

${fw} add 11 queue 1 ip from any to 192.168.1.30

${fw} add 10 queue 2 ip from any to 192.168.1.206

--------------------------------------------------------------------------------

 

вообщем когда начинает качать 206й скорость у него 500 килобит, когда включается в канал 30й то скорость делится пополам.

Отчего это может быть? почему не уменьшается на минимум канал для 206го???

и что означает опция в ядре HZ=1000? может в этом дело.

Edited by anclbob
Posted

а как интересно пайп в пайп запихать?

например сделать трубу на 128 килобит и в неё три пользователя запихать, один не более 56 килобит другой 28 , а третий имеет право весь канал сжирать?

Posted
а как интересно пайп в пайп запихать?

например сделать трубу на 128 килобит и в неё три пользователя запихать, один не более 56 килобит другой 28 , а третий имеет право весь канал сжирать?

Никак. Пайпы каскадироваться не умеют.

 

Можно последовательным пропуском через несколько пип:

 

ipfw pipe 1 config bw 128Kbit/s

ipfw pipe 11 config bw 56Kbit/s

ipfw pipe 12 config bw 28Kbit/s

ipfw queue 1 config pipe 1 mask dst-ip 0x000000FF

 

ipfw add 1000 pipe 11 ip from any to ${client_56}

ipfw add 1100 pipe 12 ip from any to ${client_28}

ipfw add 1200 queue 1 ip from any to ${client_unlim}

ipfw add 1300 queue 1 ip from any to ${client_56}

ipfw add 1400 queue 1 ip from any to ${client_28}

 

 

СНАЧАЛА запихиваем клиентов в собственные пайпы с низкой скоростью,

ПОТОМ загоняем их в общий пайп очередями с одинаковым(по желанию - разным) весом

 

Почему сначала в отдельные пайпы? Потому что при разделении канала в общей пайпе абоненту может достаться большая пропускная способность, чем он реально заслуживает, и при этом он отъест пропускную способность у соседей, например юзеру, имеющему право только на 28к в общей пайпе достанется 64, и анлимному товарищу останется только 64к вместо 128-28=100.

 

При условии же предварительной обрезки трафика у членов общего пайпа 28-килобитный клиент будет заранее зарезан на 28 килобит, и "анлимщик" в общем пайпе получит свои честные 100 (считаем, что 56-килобитщик сейчас не качает).

 

Т.к. задача извращенческая, то и решать ее приходится извращенным способом. У нормальных провайдеров такие ситуации возникают редко. Единственное применение вижу только в случае подключения конторы, в которой директор самый крутой, а секретарше нефига расходовать канал на сайты знакомств... и решается это обычно приоритетами, а не отрезанием секретарше жесткого лимита.

Posted (edited)

а как интересно пайп в пайп запихать?

например сделать трубу на 128 килобит и в неё три пользователя запихать, один не более 56 килобит другой 28 , а третий имеет право весь канал сжирать?

 

ipfw add 1000 pipe 11 ip from any to ${client_56}

ipfw add 1100 pipe 12 ip from any to ${client_28}

ipfw add 1200 queue 1 ip from any to ${client_unlim}

ipfw add 1300 queue 1 ip from any to ${client_56}

ipfw add 1400 queue 1 ip from any to ${client_28}

 

 

СНАЧАЛА запихиваем клиентов в собственные пайпы с низкой скоростью,

ПОТОМ загоняем их в общий пайп очередями с одинаковым(по желанию - разным) весом

 

вы еаписали что сначала в собственные пайпы а они получается стоят на последнем месте? ведь файвол с большего начинает выполнять правила? или нет?

следоввало написать вот так:

ipfw add 1400 pipe 11 ip from any to ${client_56}

ipfw add 1300 pipe 12 ip from any to ${client_28}

ipfw add 1200 queue 1 ip from any to ${client_unlim}

ipfw add 1100 queue 1 ip from any to ${client_56}

ipfw add 1000 queue 1 ip from any to ${client_28}

------------------------------------------------------------------------

так?

 

и подскажите пожалуйста полную задачу как я выше описывал со всеми тарифами если не сложно!

Edited by anclbob

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.