|
|
ВНИМАНИЕ: Използвайте форумите на сайта за дa зададете вашите въпроси.
Въпрос |
От: Kliment (kimby< at >abv[ точка ]bg) |
Дата: 07/12/2006 |
Имам следния проблем:
Искам да разделя входящия трафик в една мрежа, като
огранича за всяко IP да се използва точно определена
скорост. Задачата е следната: доставчикът ми доставя
определен bandwidth, който искам да разделя по равно между
потребителите в тази мрежа. Проблемът е, че не всички IP-та
са заети, а тези които са заети не винаги ще ползват
максимума на заделения им трафик. Т.е искам неизползваният
трафик от всички IP-та да се използва за нуждите на
другите, но при поискване за всеки потребител да има
определена мин. скорост.
За момента съм се спрял на HTB, но ако има други решения ще
Ви бъда благодарен да ги споделите! Мрежата е с маска /24.
Ето до къде съм я докарал, но не сработва както очаквам:
#!/bin/bash -x
tc qdisc add dev eth1 root handle 1: htb default 254
tc class add dev eth1 parent 1: classid 1:1 htb rate
1000kbps ceil 1000kbps
A=4
while [ $A -lt 255 ];
do
#echo $A
tc class add dev eth1 parent 1:1 classid 1:$A htb
rate 100kbps ceil 1000kbps
tc filter add dev eth1 protocol ip parent 1:0 prio 1
u32 match ip dst 192.168.0.$A flowid 1:$A
tc qdisc add dev eth1 parent 1:$A handle $A: sfq
perturb 10
let A=A+1
done
Както се досещате вътрешната мрежа в случая е 192.168.0.х, а
eth1 е интерфейса към нея. Благодаря Ви за вниманието! :)
|
Отговор #1 |
От: Aminohus (hus< at >kubrat __точка__ bg) |
Дата: 07/12/2006 |
Ами ако ти е толкова трудно по добре си сложи един Mikrotik
така ще ти е по лесно.
С Линукса също може ,ако маскираш адресите които да излизат
през един адрес (както в твоя случай) ползвай този шейпър:
#!/bin/bash
TC=/sbin/tc
$TC qdisc add dev eth0 root handle 1:0 cbq bandwidth
10Mbit avpkt 1000 cell 8
#User1 - Download 126Kbps
${TC} class add dev eth0 parent 1:0 classid 1:1 cbq rate
128KBit allot 1514 prio 5 avpkt 1000 $
${TC} filter add dev eth0 parent 1:0 protocol ip handle 1
fw flowid 1:1
iptables -A FORWARD -t mangle -d 192.168.0.1/32 -j MARK
--set-mark 1
#User 2 - Download 256kbps
${TC} class add dev eth0 parent 1:0 classid 1:2 cbq rate
256KBit allot 1514 prio 5 avpkt 1000 $
${TC} filter add dev eth0 parent 1:0 protocol ip handle 2
fw flowid 1:2
iptables -A FORWARD -t mangle -d 192.168.0.2/32 -j MARK
--set-mark 2
По същия начин добавяш потребители надолу!
Може също така и да ограничаваш изходящия трафик,като
добавиш по още два реда към скрипта за другия интерфейс.
|
Отговор #2 |
От: Kliment (kimby (a) abv __точка__ bg) |
Дата: 07/12/2006 |
Относно Mikrotik, зная за този вид ОС, но въпросния сървър
ми е нужен и за други цели (http, ftp и др), които не се
поддържат от чисто рутираща ОС, като гореспоменатата.
Относно даденото решение - мисля, че чрез тези команди
няма как отделните класове да споделят скоростта, която не
се използва от някой от тях (което всъщност е основната
функционалност на скрипта, който съм се опитал да създам)!
Какво ще кажете за грешката в използваните команди за HTB
трафик контрола? Проблемът е, че отново един от
потребителите консумира цялата скорост (особено когато се
използват peer-to-peer програми). Същевременно искам да
използвам целия наличен неизползван bandwidth, който да се
преразпределя по равно между активните потребители, при
положение че някои потребители не използват връзката в
момента. Очаквам съдействие.
|
Отговор #3 |
От: no1 (dean__dot__iliev< at >abv__dot__bg) |
Дата: 07/12/2006 |
Щом си се спрял на HTB , можеш да използваш опцията CEIL. За
повече информация прочети хтб.инит
Колкото до това да разделяш интернета по равно - направи си
едно скриптче, което брои компютрите в локалната мрежа.
Успех
|
Отговор #4 |
От: vaa |
Дата: 07/13/2006 |
Ще ти споделя как се оправих аз с това.
Използвам Слак 10.0, 30 машини маскирани ползват нет.
С програмата "tc".
Първо и играх да пиша самите правила с tc то, после и
iptables и set-mark и т.н., обаче не се получаха нещата
както исках.
Инсталирах си POM на iptabels ти важните за мен модули (
connlimint, ipp2p, CLASSIFY).
и такааа:
пиша си първо tc правила:
1. download from internet - eth1 e вътрешния интерфейс
"tc qdisc add dev eth1 root handle 11: cbq bandwidth 100
Mbit avpkt 1000 mpu 64"
( 100 Mbit na lan card - затова)
после си пишеш трафик правила:
"tc class add dev eth1 parent 11:0 classid 11:x cbq rate
128 Kbit wetght 1536 allot 1514 prio y avpkt 1000 bounded"
x - ти е число което си задваш 1,2,3,4,5 и т.н. зависи
колко правила и трафици искаш да си правиш.
y - ти е приоритета на това правило.
rate - гарантирана скорост.
wetght - масксимална скорост.
и после идва iptables i CLASSIFY
"iptables - t mangle -A POSTROUTING -o eth1 -d
192.168.0.XXX -j CLASSIFY --set-class 11:x"
192.168.0.xxx - адрес който искаш да има трафик правило
според класа 11:x, може и група адреси или цял клас.
друг пример:
"iptables - t mangle -A POSTROUTING -o eth1 -s
192.149.248.0/24 -d 192.168.0.0/24 -j CLASSIFY --set-class
11:x"
целия download от data.bg си го слагаш в трафик правило
което искаш.
същото може да се направи и аз upload да към интернет само
се играе с другия интерфейс - eth0.
s iptables може да си правиш каквито си искаш правила и
според тези правила да изпращаш ip тата към класове от
трафик който си си създал - и по mac, по порт, с модула
ipp2p - и peer-to-peer връзки, каквото се сетиш.
всичко работи супер.
с connlimit - ограниваш броя на конекциите.
с това имаш вече абсолютно пълен контрол на всичко което
минава, как минава м с каква скорост да отива при клиента и
да излиза от него към нета. т.н. през рутера.
|
<< SSH problem (3
) | Surround 7+1 (1
) >>
|
|
|
|
|