Автор Тема: Проблем с FlatTC  (Прочетена 4956 пъти)

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #15 -: Dec 04, 2008, 00:40 »
Ти хубаво си я сложил, ама нищо друго не казваш - имаш ли още този проблем, дебъга, който ти поисках по-горе и т.н. :)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #16 -: Dec 04, 2008, 00:44 »
./tc.add 40 1 512 1024 128 256 1.2 1.2

Щом коефициента за БГ и Международен е дробно число значи в моя случай rate=.$bgmin ми е 512 за БГ и ceil=$bgmax/$bg_coeff, но забелижи 1-во стойностите не са в Kbit а в bit и ceil-a би трябвало да ми е равен на rate-a а той е по-голям ..... пробвах да го намаля с по-голямо дробно число почти достигнах стойностите на rate-a, но и така не стана 

Дробните коефициенти са за съотношението на download към upload (върхови стойности - ceil), съответно за  BG/INT - т.е. дефинираш асиметрията на канала.

От кода на tc.add:
Код
GeSHi (Perl):
  1. $bgmax_ul = int($bgmax/$bg_coeff);
  2. $intmax_ul = int($intmax/$int_coeff);

И да - стойностите на параметрите за tc.add са в KBit, както е oписано в INSTALL файла.
« Последна редакция: Dec 04, 2008, 00:54 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #17 -: Dec 04, 2008, 00:53 »
Цитат
3.4. Контрол на трафика на потребител:

      Пример:

      ./tc.add 6 1 100 200 300 400 1.1 1.2

   * първият параметър е ИП-ти на потребителя;
   * вторият параметър е идентификаторът на мрежата към която принадлежи потребителя (Кбит);
   * третият параметър е долна граница на скоростта на БГ трафика (Кбит);
   * четвъртият параметър е горна граница на скоростта на БГ трафика;
   * петият параметър е долна граница на скоростта на международния трафик (Кбит);
   * шестият параметър е горна граница на скоростта на международния трафик (Кбит);
   * седмият и осмият параметри (дробни числа) са отношенията download/upload съответно за БГ/международен;
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

BuSteR

  • Напреднали
  • *****
  • Публикации: 26
    • Профил
Re: Проблем с FlatTC
« Отговор #18 -: Dec 04, 2008, 00:55 »
Какво имаш в предвид дебъга ? резултата от това "iptables -t mangle -nxvL FORWARD" ли. Не съм толкова навътре в материята , ще ме прощаваш :) ,ако ми кажеш стъпка по-стъпка ще ти paste резултатите ...за вригите в mangle таблицата малко по-горе paste-нах изхода oт iptables -t mangle -n -L.
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #19 -: Dec 04, 2008, 00:58 »
Основният въпрос е - след като сложи IPMARK версията работи ли вече както трябва системата?
Ако си пипал по файловете на FlatTC пакета - какво точно си пипал?
И "xv" параметрите към iptables -nxvL ми дават по-ясна предтава за това как се движат пакетите през отделните правила.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

BuSteR

  • Напреднали
  • *****
  • Публикации: 26
    • Профил
Re: Проблем с FlatTC
« Отговор #20 -: Dec 04, 2008, 01:06 »
Ами абсолютно същото е като при IPCLASSIFY версията единстевенното, което съм променил е,че си пограх с тези редове в fw.init
# Local traffic is considered BG
`$ipt -t mangle -A FORWARD -i $INT_ETH -o $EXT_ETH -j BG_IN`;
`$ipt -t mangle -A FORWARD -i $EXT_ETH -o $INT_ETH -j BG_OUT`;

в момента са проемнени от

`$ipt -t mangle -A FORWARD -i $INT_ETH -o $INT_ETH -j BG_IN`;
`$ipt -t mangle -A FORWARD -i $INT_ETH -o $INT_ETH -j BG_OUT`;

и другото е, че взимам сорса с бг мрежите от http://ipacct.com/ просто съм променил update_bgnets да взима мрежите от там, но не вярвам това да е проблем за ъплоад-а

ами...ето и изхода от iptables -nxvL

Chain INPUT (policy ACCEPT 1336 packets, 379182 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy DROP 406 packets, 44044 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
   11270  2333390 ACCEPT     all  --  eth1   eth1    0.0.0.0/0            0.0.0.0/0           
  980051 482959412 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           set FW_192_168_0_0 src
 1152504 1270370619 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           set FW_192_168_0_0 dst

Chain OUTPUT (policy ACCEPT 718 packets, 118846 bytes)
    pkts      bytes target     prot opt in     out     source               destination         



iptables -t mangle -nxvL
Chain PREROUTING (policy ACCEPT 2424957 packets, 1983024149 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 1854 packets, 465085 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 2423093 packets, 1982557215 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
 2423091 1982557123 MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK set 0x1
 1111170 563846489 TRAF_OUT   all  --  eth1   eth0    0.0.0.0/0            0.0.0.0/0           
 1299002 1416034100 TRAF_IN    all  --  eth0   eth1    0.0.0.0/0            0.0.0.0/0           
 1111170 563846489 BG_IN      all  --  eth1   eth0    0.0.0.0/0            0.0.0.0/0           
 1299001 1416034060 BG_OUT     all  --  eth0   eth1    0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 1091 packets, 180824 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 2423699 packets, 1982686689 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
   18420   895916 TCPMSS     tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
    7163   346744 TCPMSS     tcp  --  *      eth1    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
       0        0 TCPMSS     tcp  --  *      eth2    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU

Chain BG_IN (2 references)
    pkts      bytes target     prot opt in     out     source               destination         
 1210149 1372019291 IPMARK     all  --  *      *       0.0.0.0/0            192.168.0.0/24      IPMARK dst ip and 0xff or 0x10500

Chain BG_OUT (2 references)
    pkts      bytes target     prot opt in     out     source               destination         
  981942 483010166 IPMARK     all  --  *      *       192.168.0.0/24       0.0.0.0/0           IPMARK src ip and 0xff or 0x10600

Chain INT_IN (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
   88836 44011041 IPMARK     all  --  *      *       0.0.0.0/0            192.168.0.0/24      IPMARK dst ip and 0xff or 0x10700

Chain INT_OUT (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
  129185 80826592 IPMARK     all  --  *      *       192.168.0.0/24       0.0.0.0/0           IPMARK src ip and 0xff or 0x10800

Chain TRAF_IN (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
 1210150 1372019340 BG_IN      all  --  *      *       0.0.0.0/0            0.0.0.0/0           set BG_NETS src
   88837 44011090 INT_IN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1

Chain TRAF_OUT (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
  981945 483010531 BG_OUT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           set BG_NETS dst
  129190 80827219 INT_OUT    all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1
« Последна редакция: Dec 04, 2008, 01:15 от BuSteR »
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #21 -: Dec 04, 2008, 09:34 »
Ами абсолютно същото е като при IPCLASSIFY версията единстевенното, което съм променил е,че си пограх с тези редове в fw.init
# Local traffic is considered BG
`$ipt -t mangle -A FORWARD -i $INT_ETH -o $EXT_ETH -j BG_IN`;
`$ipt -t mangle -A FORWARD -i $EXT_ETH -o $INT_ETH -j BG_OUT`;

в момента са проемнени от

`$ipt -t mangle -A FORWARD -i $INT_ETH -o $INT_ETH -j BG_IN`;
`$ipt -t mangle -A FORWARD -i $INT_ETH -o $INT_ETH -j BG_OUT`;

Тия редове или ги махаш или ги оставяш както са си - това което правиш е абсолютно неправилно.
Идеята им е да маркираш локалния трафик (т.е. този който е на вътрешния интерфейс) между отделните мрежи (прим. 192.168.0.0/24 и 192.168.1.0/24). Не знам защо си решил, че трябва да ги променяш...
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

BuSteR

  • Напреднали
  • *****
  • Публикации: 26
    • Профил
Re: Проблем с FlatTC
« Отговор #22 -: Dec 04, 2008, 11:16 »
Не просто експериментирах различни варианти, всичко в моента си е както по скрипта ти, но явно няма да го разнищим тоя проблем.
edit: iptables - t mangle -xvnL ми казва, че през Chain BG_OUT и Chain INT_OUT минават пакети, но все се чудя, защо ceil-а на tc class-a ми на eth0 съответно за BG_OUT и INT_OUT ми е по-голям от rate-a при този вариант с коефицент 1:16 примерно: ./tc.add 40 1 128 2048 256 512 1.16 1.2

tc class show dev eth0
class htb 1:828 parent 1:25 leaf 828: prio 4 rate 256000bit ceil 426000bit burst 1631b cburst 128Kb
class htb 1:3 root rate 100000Kbit ceil 100000Kbit burst 14087b cburst 14087b
class htb 1:15 parent 1:3 rate 5000Kbit ceil 5000Kbit burst 2224b cburst 2224b
class htb 1:25 parent 1:3 rate 2000Kbit ceil 2000Kbit burst 1849b cburst 1849b
class htb 1:628 parent 1:15 leaf 628: prio 5 rate 128000bit ceil 1765Kbit burst 1615b cburst 512Kb

Нали това е въпросния ceil за BG_OUT 1765Kbit по формулата би трябвало да е 2048:16=128.
« Последна редакция: Dec 04, 2008, 11:27 от BuSteR »
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #23 -: Dec 04, 2008, 14:19 »
Я си кажи направо какви искаш да са:

BG_DOWNLOAD
       rate:
       ceil:

BG_UPLOAD
       rate:
       ceil:

INT_DOWNLOAD
       rate:
       ceil:

INT_UPLOAD
       rate:
       ceil:

;)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

BuSteR

  • Напреднали
  • *****
  • Публикации: 26
    • Профил
Re: Проблем с FlatTC
« Отговор #24 -: Dec 04, 2008, 15:34 »
BG_DOWNLOAD 3 групи

   1-ва    rate:8000
              ceil:16000

   2-ра   rate:6400 
             ceil:12800

   3-та   rate:6000
            ceil:12000

BG_UPLOAD - 3 групи

   1-ва  rate:256
            ceil:512

   2-ра  rate:160
            ceil:320

   3-та  rate:128
            ceil:256

INT_DOWNLOAD - 3 групи
       
   1-ва  rate: 1600
            ceil: 3200

   2-ра  rate: 1000
            ceil: 2000

   3-та  rate: 880
           ceil: 1760

INT_UPLOAD - 3 групи

   1-ва  rate:100
            ceil:200

   2-ра  rate:80
            ceil:160

   3-та  rate:80
           ceil:160


 Това са - 1-ва , 2-ра и 3-та група с отделен шейп.
   
                     

Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #25 -: Dec 04, 2008, 16:32 »
Трябва да пипнеш малко сорса (tc.add и tc.change) - там където изчислявам upload-а определям само ceil-a, трябва да добавиш подобни редове и за rate-a, тъй като в момента rate-a за upload и download е един и същ, само ceil-a е различен. Или направо махни тези коефициенти и си добави още 4 параметъра - за upload-а.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #26 -: Dec 04, 2008, 16:37 »
За да ти се изясни докрай картинката, в момента имаш:
Код
GeSHi (Bash):
  1. tc.add C_subnet_number sub_ip bg_min bg_max int_min int_max bg_coeff int_coeff

Тогава се получава:

BG_DOWNLOAD
       rate: bg_min
       ceil: bg_max

BG_UPLOAD
       rate: bg_min
       ceil: bg_max/bg_coeff

INT_DOWNLOAD
       rate: int_min
       ceil: int_max

INT_UPLOAD
       rate: int_min
       ceil: int_max/int_coeff

Заради голямата асиметрия на твоя канал се получават тези разминавания м/у rate и ceil.
« Последна редакция: Dec 04, 2008, 16:39 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

BuSteR

  • Напреднали
  • *****
  • Публикации: 26
    • Профил
Re: Проблем с FlatTC
« Отговор #27 -: Dec 04, 2008, 17:30 »
Така ето какво се получи:
Код:
#!/usr/bin/perl

require "config.pl";
require "functions.pl";

if ($#ARGV < 7)
{
    print "Not enough paramters. Stopping  ...\n";
    exit;
}

($ip, $subnet, $bgmin, $bgmax, $intmin, $intmax, $bgrate, $bgceil, $intrate, $intceil) = @ARGV;

if ($subnet < 1)
{
        print "ERROR: Subnet ID must be greater than 0. \n";
        exit;
}


$ip = $ip + 0x400*$subnet;

$id = sprintf("%X", $ip + 0x100);
$class_bg_dl = "tc class add dev $INT_ETH parent 1:10 classid 1:0".$id." htb rate ".$bgmin."Kbit ceil ".$bgmax."Kbit prio 5 $
$qdisc_bg_dl = "tc qdisc add dev $INT_ETH parent 1:0".$id." handle ".$id." sfq perturb 10";
$id = sprintf("%X", $ip + 0x200);
$class_bg_ul = "tc class add dev $EXT_ETH parent 1:15 classid 1:0".$id." htb rate ".$bgrate."Kbit ceil ".$bgceil."Kbit prio $
$qdisc_bg_ul = "tc qdisc add dev $EXT_ETH parent 1:0".$id." handle 0".$id." sfq perturb 10";
                                                       

$id = sprintf("%X", $ip + 0x300);
$class_int_dl = "tc class add dev $INT_ETH parent 1:20 classid 1:0".$id." htb rate ".$intmin."Kbit ceil ".$intmax."Kbit prio$
$qdisc_int_dl = "tc qdisc add dev $INT_ETH parent 1:0".$id." handle ".$id." sfq perturb 10";
$id = sprintf("%X", $ip + 0x400);
$class_int_ul = "tc class add dev $EXT_ETH parent 1:25 classid 1:0".$id." htb rate ".$intrate."Kbit ceil ".$intceil."Kbit pr$
$qdisc_int_ul = "tc qdisc add dev $EXT_ETH parent 1:0".$id." handle ".$id." sfq perturb 10";
       
       
`$class_bg_ul`;
`$qdisc_bg_ul`;

`$class_int_ul`;
`$qdisc_int_ul`;

`$class_bg_dl`;
`$qdisc_bg_dl`;

`$class_int_dl`;
`$qdisc_int_dl`;
                           

Ето и изода от:
Код:
tc class show dev eth0
class htb 1:828 parent 1:25 leaf 828: prio 4 rate 80000bit ceil 160000bit burst 1609b cburst 128Kb
class htb 1:3 root rate 100000Kbit ceil 100000Kbit burst 14087b cburst 14087b
class htb 1:15 parent 1:3 rate 5000Kbit ceil 5000Kbit burst 2224b cburst 2224b
class htb 1:25 parent 1:3 rate 2000Kbit ceil 2000Kbit burst 1849b cburst 1849b
class htb 1:628 parent 1:15 leaf 628: prio 5 rate 128000bit ceil 256000bit burst 1615b cburst 512Kb
   

Сега всичко с tc-то си е ОК, но все още няма промяна при upload канала ...пълни си го на max.                                     


Код:
iptables -xvnL -t mangle 
Chain PREROUTING (policy ACCEPT 577228 packets, 471407811 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 2046 packets, 244196 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 574999 packets, 471153080 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
  574996 471152607 MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK set 0x1
  299252 250037560 TRAF_OUT   all  --  eth1   eth0    0.0.0.0/0            0.0.0.0/0           
  274401 221046064 TRAF_IN    all  --  eth0   eth1    0.0.0.0/0            0.0.0.0/0           
    1342    68943 BG_IN      all  --  eth1   eth1    0.0.0.0/0            0.0.0.0/0           
    1342    68943 BG_OUT     all  --  eth1   eth1    0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 1496 packets, 294648 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 576205 packets, 471407108 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
   20510  1102288 TCPMSS     tcp  --  *      eth0    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
    2237   113320 TCPMSS     tcp  --  *      eth1    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
       0        0 TCPMSS     tcp  --  *      eth2    0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU

Chain BG_IN (2 references)
    pkts      bytes target     prot opt in     out     source               destination         
  182521 215534868 IPMARK     all  --  *      *       0.0.0.0/0            192.168.0.0/24      IPMARK dst ip and 0xff or 0x10500

Chain BG_OUT (2 references)
    pkts      bytes target     prot opt in     out     source               destination         
  135463 63101761 IPMARK     all  --  *      *       192.168.0.0/24       0.0.0.0/0           IPMARK src ip and 0xff or 0x10600

Chain INT_IN (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
   93176  5574977 IPMARK     all  --  *      *       0.0.0.0/0            192.168.0.0/24      IPMARK dst ip and 0xff or 0x10700

Chain INT_OUT (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
  163873 186933733 IPMARK     all  --  *      *       192.168.0.0/24       0.0.0.0/0           IPMARK src ip and 0xff or 0x10800

Chain TRAF_IN (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
  181179 215465925 BG_IN      all  --  *      *       0.0.0.0/0            0.0.0.0/0           set BG_NETS src
   93176  5574977 INT_IN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1

Chain TRAF_OUT (1 references)
    pkts      bytes target     prot opt in     out     source               destination         
  135359 63094051 BG_OUT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           set BG_NETS dst
  163874 186935183 INT_OUT    all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1
« Последна редакция: Dec 04, 2008, 17:51 от BuSteR »
Активен

BuSteR

  • Напреднали
  • *****
  • Публикации: 26
    • Профил
Re: Проблем с FlatTC
« Отговор #28 -: Dec 04, 2008, 19:30 »
Човек цялата работа беше заради това:
".$int_class_param;
".$bg_class_param;

т.е. cburst-а, за временно ускорение на съответните класове

И в случая коефицентите са махнати както по-горе съм paste-нал скрипта при мен.
Сега остава само да видя къде по скрипта ходят  ".$int_class_param; ".$bg_class_param;, че нещо като ги махна от config.pl и tc.add, tc.change и ми изревава целия firewlall, инъче тествах го ъплоада стига максимални граници и после пада до зададените стойности, след като умре времето на cburst-а.

Благодаря ти много за помощта !!!
Ако някой се сблъска със същия проблем тази тема би му била полезна.
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Проблем с FlatTC
« Отговор #29 -: Dec 04, 2008, 20:26 »
Код
GeSHi (Perl):
  1. $int_class_param = "cburst 128Kb"; # Some additional TC params (read the HTB manual)
  2. $bg_class_param = "cburst 512Kb";
Тези стойности са сравнително малки, но при браузване на страници има голям ефект.
Съветвам те все пак да ги използваш, като ги коригираш по твое усмотрение - най-вече спрямо upload канал ти, защото е доста по-тесен ;).
« Последна редакция: Dec 04, 2008, 20:28 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P