Автор Тема: проблем с tc/htb  (Прочетена 1193 пъти)

tiran

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
проблем с tc/htb
« -: May 13, 2009, 16:18 »
Здравейте. Опитвам се да направя следното нещо: Имам прекаран интернето от кабел през pppoe който влиза в рутера (Debian 5) и от там се разпределя на задната мрежа. Искам да осигуря на всеки потребител от заната мрежа някакъв минимален трафик, за да не се получава ако някои пусне 1000 торента връзката на всики останали да се забавя под определена скорост. За сега се опитвам (не се смейте знам че съм писал глупости ама за първи път се опитвам да правя подобно нещо :) ) с следния скрипт:
tc qdisc del dev eth1 root
tc qdisc del dev eth1 ingress
tc qdisc del dev eth0 root
tc qdisc del dev eth0 ingress
tc qdisc add dev eth1 root handle 1: htb default 1
tc class add dev eth1 parent 1:0 classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev eth1 parent 1:1 classid 1:11 htb rate 4096kbps ceil 100mbit
tc class add dev eth1 parent 1:1 classid 1:12 htb rate 4096kbps ceil 100mbit
tc class add dev eth1 parent 1:1 classid 1:13 htb rate 4096kbps ceil 100mbit
tc filter add dev eth1 protocol ip parent 1:1 prio 1 u32 \
   match ip dst 192.168.2.2 flowid 1:11
tc filter add dev eth1 protocol ip parent 1:1 prio 1 u32 \
   match ip dst 192.168.2.3 flowid 1:12
tc filter add dev eth1 protocol ip parent 1:1 prio 1 u32 \
   match ip dst 192.168.2.7 flowid 1:13

Интернета влиза в eth0 през pppoe и излиза през eth1. Този скрипт съм го сложил в /etc/init.d/  и съм го регистрирал в inittab(то не че има смисъл то той нещо не работи :) ). Ако може някой да каже къде бъркам. Ако трябва нещо друго ще добавя. По-нататък ако го подкарам и ще се опитам да усигуря и някаква минимална скорост и навън. Мерси предварително.

Активен

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Re: проблем с tc/htb
« Отговор #1 -: May 13, 2009, 16:53 »
Потърси си htb-init или wondershaper

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

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Re: проблем с tc/htb
« Отговор #2 -: May 13, 2009, 19:16 »
Директивата ceil показва максималното количество връзка, което класът може да "захапе" или вземе назаем от родителския си клас. При теб всичките класове имат ceil 100 Mbit, т.е. на практика не са ограничени от към максимум.
Активен

tiran

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: проблем с tc/htb
« Отговор #3 -: May 13, 2009, 23:34 »
Идеята е не да ограничавам максималния трафик а да гарантирам някакъв минимален на всички потребители (т.е. да имат гарантирани по идея примерно 512kB/s които да си е за всеки поотделно и някои като пусне да сваля с 10000 конекции да им остават тези 512kB/s (които ако може колкото не им трябва от тях да си отиват на който му трябва ако може :) )). То по принцип го пробвам дали работи като задам на себе си примерно  rate 496kbps ceil 497kbps и пробвам да свалям нещо и като започне да сваля с няколко MB ми става ясно че нещо не е в ред. Иначе и аз гледах wondershaper ама толкова код нещо не го схванах :) пък и тои е само за 1 потребител за различните протоколи, портове .
edit: Това няма да стане така :( . rate не давало минимална скорост а максимална(=ceil). Някакви идеи как да се направи това,което искам?
« Последна редакция: May 14, 2009, 02:21 от tiran »
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Re: проблем с tc/htb
« Отговор #4 -: May 14, 2009, 09:43 »
Дай да видим дали филтрите сработват въобще:
tc -s -d class show dev eth1
Активен

tiran

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: проблем с tc/htb
« Отговор #5 -: May 14, 2009, 11:07 »
Филтрите ги промених и сработват. Просто съм объркал парен-та горе. Сега са
tc qdisc del dev eth1 root
tc qdisc del dev eth1 ingress
tc qdisc del dev eth0 root
tc qdisc del dev eth0 ingress
tc qdisc add dev eth1 root handle 1: htb default 1
tc class add dev eth1 parent 1: classid 1:1 htb rate 10000kbps ceil 10000kbps
tc class add dev eth1 parent 1: classid 1:11 htb rate 6096kbps ceil 10000kbps prio 1
tc class add dev eth1 parent 1: classid 1:12 htb rate 6096kbps ceil 10000kbps prio 1
tc class add dev eth1 parent 1: classid 1:13 htb rate 6096kbps ceil 10000kbps prio 1
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 \
   match ip dst 192.168.2.2 flowid 1:11
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 \
   match ip dst 192.168.2.3 flowid 1:12
tc filter add dev eth1  parent 1: protocol ip  prio 1 u32 \
   match ip dst 192.168.2.4/10 flowid 1:13

Сега съм сложил така да не ограничават трафика поне. Иначе работят вече, но просто шейпват рафика отгоре. Както и да е чудя се какго правят в интернет провайдерите да слагат гарантиран трафик за всеки потребител, а когато има свободен да с еразпределя между потребителите.
Ето и това
my:~# tc -s -d class show dev eth1
class htb 1:11 root prio 1 quantum 200000 rate 48768Kbit ceil 80000Kbit burst 1591b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 255 ctokens: 156

class htb 1:1 root prio 0 quantum 200000 rate 80000Kbit ceil 80000Kbit burst 1590b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 156 ctokens: 156

class htb 1:13 root prio 1 quantum 200000 rate 48768Kbit ceil 80000Kbit burst 1591b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 255 ctokens: 156

class htb 1:12 root prio 1 quantum 200000 rate 48768Kbit ceil 80000Kbit burst 1591b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 255 ctokens: 156
« Последна редакция: May 14, 2009, 11:12 от tiran »
Активен

ivanatora

  • Напреднали
  • *****
  • Публикации: 658
  • Distribution: Ubuntu 10.04
  • Window Manager: Fluxbox
    • Профил
    • WWW
Re: проблем с tc/htb
« Отговор #6 -: May 14, 2009, 14:37 »
Тук навсякъде виждам Sent 0 bytes, сигурен ли си че работят филтрите? Освен това виждам rate 80000 Kbit, а си задал 6096 Kbit... това други статистики ли са? :)
Виж тук http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm и си поиграй с параметъра burst.
Активен

tiran

  • Напреднали
  • *****
  • Публикации: 44
    • Профил
Re: проблем с tc/htb
« Отговор #7 -: May 14, 2009, 17:08 »
Не са други статистики, просто току що го бях пуснал скрипта и още нямаше трафик.
Интересно ми е дали общия трафик ще се разпределя не според броя конекции а равноправно като трафик сред class -совете с еднакъв приоритет. Тази статия съм я чел няколко пъти.
Смених малко конфигурацията на този ред така, че нещо даваше грешки в dmesg:
tc qdisc add dev eth1 root handle 1: htb default 1 r2q 1000

Това са статистики с малко трафик, за пове4е трафик довечера :)

my:~# tc -s -d class show dev eth1
class htb 1:11 root prio 1 quantum 6000 rate 48000Kbit ceil 80000Kbit burst 1590       b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 107482 bytes 1307 pkt (dropped 0, overlimits 0 requeues 0)
 rate 240bit 0pps backlog 0b 0p requeues 0
 lended: 1307 borrowed: 0 giants: 0
 tokens: 248 ctokens: 150

class htb 1:1 root prio 0 quantum 10000 rate 80000Kbit ceil 80000Kbit burst 1590       b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 1638 bytes 39 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 39 borrowed: 0 giants: 0
 tokens: 153 ctokens: 153

class htb 1:13 root prio 1 quantum 6000 rate 48000Kbit ceil 80000Kbit burst 1590       b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 3479 bytes 14 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 14 borrowed: 0 giants: 0
 tokens: 219 ctokens: 133

class htb 1:12 root prio 1 quantum 6000 rate 48000Kbit ceil 80000Kbit burst 1590       b/8 mpu 0b overhead 0b cburst 1590b/8 mpu 0b overhead 0b level 0
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 259 ctokens: 156
Активен