Автор Тема: Tc, qos  (Прочетена 1292 пъти)

lod

  • Напреднали
  • *****
  • Публикации: 76
  • Distribution: (K)Ubuntu/FreeBSD
  • Window Manager: Gnome/KDE
  • LPIC-3, CCNP, MCT, MCSE, VW Golf Driver
    • Профил
Tc, qos
« -: Aug 31, 2008, 22:23 »
здравейте, искам да огранича скоростта на торентите. интернет скоростта ми е 10МБит/с, pppoe, и ограничението което се опитвам да направя е на вътрешният интерфейс, като целият трафик без торенти искам да ми е 96Мбит/с, а торентите 4Мбит/с. попаднах на предишни статии тук и от други места и скалъпих един скрипт, но не мога да си намеря грешката и защо не се получава, ако можете да ми помогнете да намеря къде греша. идеята ми е на три таблици, като последните 2 са за торенти и разпределям трафика на входящ и изходящ, да са независими и да не могат да пипат от другите траблици.
това ми е скрипта:
dev=eth0                              
RATE1=96mbit                          
RATE2=4mbit                            
PRIO1="prio 5"                        
PRIO2="prio 0"                        
OPTION="allot 1514 maxburst 20 avpkt 1000"
OPTION2=bounded                          
policy=cbq                                


case $policy in
cbq)          
tc qdisc add dev $dev root handle 1: cbq bandwidth 100Mbit avpkt 1000

tc class add dev $dev parent 1: classid 1:1 cbq bandwidth 100Mbit rate 100Mbit \
allot 1514 weight 100Mbit prio 8 maxburst 20 avpkt 1000                        

#all trafic
tc class add dev $dev parent 1:1 classid 1:10 cbq bandwidth 100Mbit \
rate $RATE1 $OPTION $PRIO1 $OPTION2
#torrents up
tc class add dev $dev parent 1:1 classid 1:11 cbq bandwidth 100Mbit \
rate $RATE2 $OPTION $PRIO2 $OPTION2
#torrents down
tc class add dev $dev parent 1:1 classid 1:12 cbq bandwidth 100Mbit \
rate $RATE2 $OPTION $PRIO2 $OPTION2
;;
htb)
tc qdisc add dev $dev root handle 1: htb default 10

tc class add dev $dev parent 1: classid 1:1 htb rate 100Mbit

#all trafic
tc class add dev $dev parent 1:1 classid 1:10 htb rate $RATE1 ceil 100Mbit
#torrents up
tc class add dev $dev parent 1:1 classid 1:11 htb rate $RATE2 bounded
#torrents down
tc class add dev $dev parent 1:1 classid 1:12 htb rate $RATE2 bounded
;;
esac
tc qdisc add dev $dev parent 1:10 sfq quantum 1514b perturb 15
tc qdisc add dev $dev parent 1:11 sfq quantum 1514b perturb 15
tc qdisc add dev $dev parent 1:12 sfq quantum 1514b perturb 15

tc filter add dev $dev protocol ip parent 1:0 prio 5 handle 1 fw flowid 1:10
tc filter add dev $dev protocol ip parent 1:0 prio 0 handle 2 fw flowid 1:11
tc filter add dev $dev protocol ip parent 1:0 prio 0 handle 3 fw flowid 1:12

това са ми правилата в iptables за mangle:

qos_unpriv=1024:65535

        for i in tcp udp; do
$ipt -t mangle -A PREROUTING -i eth0  -p $i --dport ${qos_unpriv} -j MARK --set-mark 2
$ipt -t mangle -A POSTROUTING -o eth0  -p $i --sport ${qos_unpriv} -j MARK --set-mark 3
$ipt -t mangle -A PREROUTING -i eth0 -p $i --dport 1:1024 -j MARK --set-mark 1
$ipt -t mangle -A POSTROUTING -o eth0 -p $i --sport 1:1024 -j MARK --set-mark 1
        done

благодаря предварително



Активен

Warstomp

  • Напреднали
  • *****
  • Публикации: 344
  • Distribution: Debian, Ubuntu
    • Профил
Tc, qos
« Отговор #1 -: Sep 01, 2008, 08:20 »
Цитат (lod @ Авг. 31 2008,23:23)
интернет скоростта ми е 10МБит/с, ............ искам да ми е 96Мбит/с

10 или 100 ти е?
Активен

lod

  • Напреднали
  • *****
  • Публикации: 76
  • Distribution: (K)Ubuntu/FreeBSD
  • Window Manager: Gnome/KDE
  • LPIC-3, CCNP, MCT, MCSE, VW Golf Driver
    • Профил
Tc, qos
« Отговор #2 -: Sep 01, 2008, 09:01 »
скоростта ми е 10мбит, по - точно 8, но достигам 10 '<img'>
но тъйкато правя ограничението на вътрешен интерфейс където скоростта ми е 100мбит/с в едната посока, не искам да ги губя. ползвам разни неща по рутера и е досадно да прехвърлям файлове с 300кб/с
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Tc, qos
« Отговор #3 -: Sep 01, 2008, 10:23 »
На първо време може да се опрости до известна степен, разкарваме маркирането с iptables и flowid филтрите направо си караме с u32 филтри:

За портовете 1024-65535:

65535-1024=64511 (0xfbff)
0xfbff XOR 0xffff = 0x0400
1024 = 0x0400 (hex)
=> (за 1024-65535, tcp/udp):

tc filter add dev $dev protocol ip parent 1:0 prio 0 u32 match sport 0x0400 0x0400 flowid 1:11

за 0-1024, tcp/udp:

1024-0=1024 (0x0400)
0x0400 XOR 0xffff = 0xfbff
=>

tc filter add dev $dev protocol ip parent 1:0 prio 5 u32 match sport 0x0000 0xfbff flowid 1:10
Активен

"Knowledge is power" - France is Bacon

lod

  • Напреднали
  • *****
  • Публикации: 76
  • Distribution: (K)Ubuntu/FreeBSD
  • Window Manager: Gnome/KDE
  • LPIC-3, CCNP, MCT, MCSE, VW Golf Driver
    • Профил
Tc, qos
« Отговор #4 -: Sep 01, 2008, 10:26 »
хм, това е интересен подход, не го знаех.. благодаря много!!!! ще пробвам и с него, но за да бъда нахален до край, ако някой може да ми помогне да го направя с iptables.



Активен

Gaara

  • Напреднали
  • *****
  • Публикации: 631
  • Distribution: Debian
  • Window Manager: E17
    • Профил
Tc, qos
« Отговор #5 -: Sep 01, 2008, 11:12 »
Има две великолепни статии на VladSun, които много ще ти помогнат, ако знаеш какво точно правиш. Използването на IPMARK или IPCLASSIFY ще ти направят живота доста по-лесен.

По отношение на трафика ти във вътрешната ти мрежа, то просто създай един user chain и трафика, който ти е от вътрешната мрежа, го прекарай оттам, като му зададеш default класа или не му задаваш нищо '<img'>
Активен

Last night, Darth Vader came down from planet Vulcan and told me that if you don't install Debian, he'd melt your brain.