Hello!
Remélem megszán engem egy hozzáértő emberke, aki a kisujjából kiráz egy ilyet. Átnyálaztam nem tudom hány gugli találatot, meg tc/cbq dokumentációt, példát, mégsem találtam meg, amire szükségem lenne (gondolom kb 2 parancs...)
Egy adott tcp porton szeretném a kimenő sávszélességet limitálni x KB/sec-re, minden egyéb forgalmat hagyva háborítatlanul továbbmenni. Összesen ennyi, köszi!
- 2146 megtekintés
Hozzászólások
A legegyszerűbb szerintem az osztály alapú qdisc. Ha beletanulsz biztos szeretni fogod.
Nem olvastam át teljesen, és nem vagyok profi a témában, de remélem segítettem valamit, és itt megosztod a tapasztalatod :)
- A hozzászóláshoz be kell jelentkezni
Bocsi, ezt meg kifelejtettem :) HTB
- A hozzászóláshoz be kell jelentkezni
Nem tudom, nézted-e ezt. Nem a legfrissebb, de sokféle példa és leírás van benne, talán segít.
- A hozzászóláshoz be kell jelentkezni
Hú, örök hála.
9.5.4.4, komplett példa. Azért két sornál kicsit hosszabb :)
Köszi mindkettőtöknek!
- A hozzászóláshoz be kell jelentkezni
Bár ha végigolvasod az egészet (nem árt, sok hasznos tanács van benne), azt ajánlják hogy inkább htb-t használj cbq helyett, mivel a cbq-t nem éppen a linux kernelhez tervezték. Htb-t egyszerűbb konfigolni és a teljesítménye is jobb talán mint cbq-nak.
- A hozzászóláshoz be kell jelentkezni
Holnapig ugyan nem tudok belenyúlni a "célgép"-be, de megnézem, van-e a kernelemben HTB támogatás. Tényleg sokkal egyszerűbb a kód, csak én megörültem, hogy jé, itt a megoldás, nem is olvastam tovább a doksit.
Ha tudja a kerne, mindeképp htb, ha nem, akkor majd ha legközelebb cserélnem kell...
- A hozzászóláshoz be kell jelentkezni
signup
- A hozzászóláshoz be kell jelentkezni
Én iptables-sel + tc-vel csinálom. Nagyjából úgy, ahogy itt leírják: http://www.howtoforge.com/forums/archive/index.php/t-5421.html
Annak idején én egy másik how-to alapján csináltam, de azt most nem találom.
- A hozzászóláshoz be kell jelentkezni
Itt egy egyszerű megoldás ami ugyan nem KB/sec hanem csomag/sec, de hátha jó ez is neked.
iptables -A OUTPUT -p tcp --dport 80 -m limit --limit 10/sec -j "amit akarsz"
Természetesen a "sec" helyet lehet hour , min ...stb is.
- A hozzászóláshoz be kell jelentkezni
iptables -A OUTPUT -p tcp --dport 80 -m limit --limit 10/sec -j "amit akarsz"
Itt a --limit-burst 5, mert ez a default. Vagyis másodpercenként 10 alkalommal 5 csomag = 50
Egyébként jó lehet ez is, ha feltételezed, hogy egy csomag "átlagos" mérete 1500 byte és ennek megfelelően limitálsz.
"amit akarsz" mondjuk legyen ACCEPT, utána pedig
iptables -A OUTPUT -p tcp --dport 80 -j DROP
- A hozzászóláshoz be kell jelentkezni
Ezzel csak annyi a baj, hogy amíg el nem érem a limitet, addig korlátozás nélkül futnak ki a csomagok a teljes sávszélességen, aztán pedig teljesen megszűnik a csomagok áramlása. De ettől még nekem a router, majd a modem FIFO tárolójában ugyanúgy fel fognak torlódni az ACK-k, nem?
- A hozzászóláshoz be kell jelentkezni
Ezzel csak annyi a baj, hogy amíg el nem érem a limitet, addig korlátozás nélkül futnak ki a csomagok a teljes sávszélességen
Ez igaz. De értelmezd úgy, hogy
1db csomag/sec == 1,4KByte/sec(1500byte, ez lehet a max mérete egy csomagnak)
Ha mondjuk 20KB/s-et akarsz = 14 csomag/sec /-m limit --limit 14/sec --limit-burst 1/
Mondjuk ez 14 csomagot rögtön kienged, majd a másodperc fennmaradó idejében semmit. Talán optimálisabb így (15 csomagra)
-m limit --limit 3/sec --limit-burst 5
aztán pedig teljesen megszűnik a csomagok áramlása. De ettől még nekem a router, majd a modem FIFO tárolójában ugyanúgy fel fognak torlódni az ACK-k, nem?
Szerintem így nem.
- A hozzászóláshoz be kell jelentkezni
Végülis az előnyei miatt a htb-s megoldást néztem ki magamnak, ám van vele egy kis gond. Írtam egy scriptet:
#!/bin/bash
tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit burst 15k
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 2kbit ceil 2kbit burst 5k
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 2kbit ceil 2kbit burst 5k
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 2kbit ceil 2kbit burst 5k
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 128kbit ceil 100mbit burst 15k
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 5511 0xffff flowid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 5512 0xffff flowid 1:20
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip sport 5513 0xffff flowid 1:30
SSH-n keresztül próbálom megetetni a gépemmel. A futtatás közben bedöglik az ssh kapcsolat, sőt, még a pingre sem reagál a gépezet. Marad egy reset. Mit rontottam el?
Köszi a segítséget.
- A hozzászóláshoz be kell jelentkezni
Az uccsó 3 sort sajnos nem ismerem.
Viszont azt megnézhetnéd, hogy a középső 4-hez megvan-e a megfelelő 4 "handle" az iptables-ben is?
- A hozzászóláshoz be kell jelentkezni
Kössz! Nem volt meg... látszik milyen hülye vagyok az egészhez.
Az adsl bandwidth management howto alapján most épp itt tart a script:
#!/bin/bash
tc qdisc add dev eth0 root handle 1: htb default 26
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 50mbit ceil 100mbit prio 0
tc class add dev eth0 parent 1:1 classid 1:21 htb rate 1kbit ceil 16kbit prio 1
tc class add dev eth0 parent 1:1 classid 1:22 htb rate 1kbit ceil 16kbit prio 2
tc class add dev eth0 parent 1:1 classid 1:23 htb rate 1kbit ceil 16kbit prio 3
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev eth0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev eth0 parent 1:23 handle 23: sfq perturb 10
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev eth0 parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -I POSTROUTING -o eth0 -j MYSHAPER-OUT
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5511 -j MARK --set-mark 21
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 5511 -j MARK --set-mark 21
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5512 -j MARK --set-mark 22
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 5512 -j MARK --set-mark 22
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5513 -j MARK --set-mark 23
iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 5513 -j MARK --set-mark 23
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 5511 -j MARK --set-mark 21
iptables -t mangle -A MYSHAPER-OUT -p udp --sport 5511 -j MARK --set-mark 21
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 5512 -j MARK --set-mark 22
iptables -t mangle -A MYSHAPER-OUT -p udp --sport 5512 -j MARK --set-mark 22
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 5513 -j MARK --set-mark 23
iptables -t mangle -A MYSHAPER-OUT -p udp --sport 5513 -j MARK --set-mark 23
iptables -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 20
(A szűrési feltételeket már kétségbeesésemben szaporítottam így meg.) A parent class biztos hogy jó, ha oda mondjuk 64K-t írok, le is korlátozza annyira a teljes forgalmat, ám ha 100mbit-re állítom, akkor az 5511, 5512, 5513-as portokon nem áll meg 2kbitnél, hanem megeszi az egész elérhető sávszélt. Pedig a ceil miatt nem szabadna neki. Vagy én tudom rosszul?
- A hozzászóláshoz be kell jelentkezni
Hali!
En egy kicsit mas iranyba vinnelek. Nem hiszem hogy ez a legoptimalisabb, de mindenkeppen egyszeru.
En savszelesseg korlatozast a cbqinit -tel csinaltam par eve. Eleg egyszeru volt, bar kicsit zavart, hogy hibas konfig eseten hibajelzes nelkul siman nem mukodott. Talan le is olte az osszes kommunikaciot. Ha azonban egyszer belottem, ment mint a kisangyal.
Itt megtalalod: itten
- A hozzászóláshoz be kell jelentkezni
HTB az eredeti témában felvetett problémára kb. ágyúval verébre. A TBF teljesen jó erre a célra.
Ja és még valami. Hacsak lehet, ne szórakozz az iptables-el. Egyszerű tc filter parancsokkal meg lehet fogni rengeteg dolgot.
- A hozzászóláshoz be kell jelentkezni
Na de ha sötét vagyok hozzá, azzal esek neki, amiről írnak a neten :D
- A hozzászóláshoz be kell jelentkezni
De ha olvasgatsz a témában akkor nem leszel hozzá sötét. Máris sokat tanultál nem?
Vagy neten talált parancsokat kopipasztéztél?!
- A hozzászóláshoz be kell jelentkezni
[off]
copy-paste ezt :)
cat /vmlinuz > /dev/audio
[/off]
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
- A hozzászóláshoz be kell jelentkezni
Igen, már így is elég sokat tanultam, a kár csak az, hogy a végeredmény elméletben jó, gyakorlatban meg nem. A linkeket egyébként szintén köszönöm. Nem copypasteeztem, hanem megnéztem a példakódot, meg a hozzá való magyarázatot, és megpróbáltam átírni úgy, hogy nekem megfelelően menjen a dolog.
Egyébként egyáltalán nem vagyok informatikus, és a "gyerekkorom" windowssal telt el, a linux az valami misztikus köd volt előttem. Szóval még igencsak tanuló fázisban vagyok :)
- A hozzászóláshoz be kell jelentkezni
Pont ezért ajánlottam a TBF-et. Nem kell a hierarchián gondolkozni, egyszerű.
Ha nagyon nem megy, kipróbálok neked egy-két varázslatot, s elmondom. De nem ma, mert most éppen egy HTB-s megoldást bütykölök.
- A hozzászóláshoz be kell jelentkezni
Na akkor én is mondok egy új dolgot: http://tcng.sourceforge.net/
Ezzel emberibb nyelven tudsz tc configot írni, amit aztán átfordíttathatsz vele tc kódra.
- A hozzászóláshoz be kell jelentkezni