Rozdělení pásma pomocí HTB

eloc

Rozdělení pásma pomocí HTB
« kdy: 31. 03. 2011, 22:14:47 »
Zdravim, chtěl bych se zeptat. Mám router s linuxem debian 6. Připojen internet na eth2. Nastavenou maškarádu pro ostatní porty eth0 a eth1 /sbin/iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

pomocí programu tc z balíku iproute2 se snažím přerozdělovat pásmo Bohužel mi to funguje jenom pro upload. Pokud mám nastavení:

tc qdisc add dev eth2 root handle 1:0 htb
tc class add dev eth2 parent 1:0 classid 1:1 htb rate 512kbit ceil 1024kbit

iptables označím pakety(192.168.1.100 je pc z eth0)

iptables -t mangle -A POSTROUTING -s 192.168.1.100 -j MARK --set-mark 7

a pak přiřadím filter

tc filter add dev eth2 parent 1:0 protocol ip handle 7 fw flowid 1:1

tak se omezí upload a vše funguje perfektně.

Ale pokud bych chtěl omezit download a analogicky označit pakety pro download (

iptables -t mangle -A POSTROUTING -d 192.168.1.100 -j MARK --set-mark 7

) tak to nefunguje.

Pouze pokud toto vše nastavím na zařízení eth0 eth1 eth3 tak se omezí download ovšem nelze pak sdílet konektivitu. Nehledě na to že na routeru mám například sambu, která by asi pak nejela plnou LAN rychlostí. Takže bych potřeboval toto omezení aplikovat pouze na rozhraní eth2, které vede do internetu. Ještě doplním že na každém eth rozhraní mám jinou síť. Děkuji za pomoc.


Onehalf

Re: Rozdělení pásma pomocí HTB
« Odpověď #1 kdy: 01. 04. 2011, 09:53:20 »
Pro omezení downloadu si musíš vytvořit novou frontu na vnitřním rozhraní, tedy na eth0 a eth1, potom ti to bude fungovat. Nebo použít IMQ, ale to nevím v jakým je stavu, naposled jsem se o něj zajímal před 5lety :D

eloc

Re: Rozdělení pásma pomocí HTB
« Odpověď #2 kdy: 01. 04. 2011, 14:39:34 »
Ale když mám 4 další rozhraní a použil bych na ně zvlášť další fronty, tak by nemohli společně sdílet zbylé pásmo, jde totiž vybrat jenom jedno rozhraní v tc qdisc. Přemýšlel jsem, že bych nějak potřeboval vytvořit virtuální rozhraní na které bych přeroutoval příchozí pakety z eth2 a na něm po té nastavil společně pro všechny jednotnou politiku a z něho by se dále přeroutovalo do eth0 eth1 eth3 a eth4. Bohužel nevím jak na to.

Onehalf

Re: Rozdělení pásma pomocí HTB
« Odpověď #3 kdy: 01. 04. 2011, 15:38:53 »
IMHOto právě řeší IMQ, nejdřív si vytvoříš IMQ:

/sbin/ip link set imq0 up

naroutuješ na něj data z fyzickejch rozhraní:

/usr/sbin/iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0
/usr/sbin/iptables -t mangle -A PREROUTING -i eth1 -j IMQ --todev 0
/usr/sbin/iptables -t mangle -A PREROUTING -i eth2 -j IMQ --todev 0
...

a pak si na něj vytvoříš fronty...

/sbin/tc qdisc add dev imq0 root handle 1: htb default 2
/sbin/tc class add dev imq0 parent 1: classid 1:1 htb rate 80000Kbit
/sbin/tc class add dev imq0 parent 1: classid 1:2 htb rate 80000Kbit
/sbin/tc class add dev imq0 parent 1:1 classid 1:10 htb rate 256kbit ceil 384kbit
/sbin/tc class add dev imq0 parent 1:1 classid 1:20 htb rate 512kbit ceil 648kbit

viz http://www.linuximq.net/usage.html

je k tomu teda potřeba patchnout kernel.
Jinej způsob mě nenapadá...