LINUX.ORG.RU
ФорумAdmin

Приоритеты трафика HTB

 


0

1

Привет! Подскажите в чем загвоздка! Есть сеть, клиенты через pppoe, все это дело заворачивается на imq и там htb делает свое дело.

1:11 это icmp,dns 1:12 это web 1:13 все остальное

Для тестов speedtest.net загнал в 1:11

Все классифицуруется и попадет в нужные классы.

$TC qdisc del root dev $imq_download
$TC qdisc add dev $imq_download root handle 1: htb

$TC class add dev $imq_download parent 1: classid 1:1 htb rate 95 mbit prio 0

$TC class add dev $imq_download parent 1:1 classid 1:11 htb rate 1mbit ceil 95mbit prio 1
$TC class add dev $imq_download parent 1:1 classid 1:12 htb rate 1mbit ceil 95mbit prio 5
$TC class add dev $imq_download parent 1:1 classid 1:13 htb rate 1mbit ceil 95mbit prio 10

$TC qdisc add dev $imq_download parent 1:11 handle 11: sfq perturb 10
$TC qdisc add dev $imq_download parent 1:12 handle 12: sfq perturb 10
$TC qdisc add dev $imq_download parent 1:13 handle 13: sfq perturb 10

$TC filter add dev $imq_download parent 11: protocol all handle 11 flow hash keys dst divisor 1024
$TC filter add dev $imq_download parent 12: protocol all handle 12 flow hash keys dst divisor 1024
$TC filter add dev $imq_download parent 13: protocol all handle 13 flow hash keys dst divisor 1024

Проблема в чем, если я со своего компа качаю торрент и делаю тесты на speedtest.net, торрент проседает отдавая скорость speedtest.net все окей, если качаю на другой машине торрент и в это время делаю замеры speedtest.net, то скорость делится между нами. А хотелось бы преимущества перед торрентом. Подскажите где туплю?


гм, а «свой комп» от «другой машины» чем отличается?

а весь трафик в imq_download попадает? tcpdump-ом можно посмотреть прямо на imq-интерфейсе.

В imq ты загоняешь через iptables, нафига еще фильтры ? Там же CLASSIFY есть. Это намного проще чем этот адский язык фильтров.

vel ★★★★★
()
Ответ на: комментарий от vel

гм, а «свой комп» от «другой машины» чем отличается?

Да ни чем две windows тачки, подключены по pppoe к этому шлюзу.

а весь трафик в imq_download попадает? tcpdump-ом можно посмотреть прямо на imq-интерфейсе.

Да вот так его загоняю.

iptables -w -t mangle -A POSTROUTING -o ppp+ -d 10.0.0.0/16 -j IMQ --todev 1
tcpdump -i imq1 молчит почему-то. Хотя трафик действительно есть.
#ifconfig imq1
imq1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:16000  Metric:1
          RX packets:3603708962 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3607355996 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:11000
          RX bytes:4266483790707 (3.8 TiB)  TX bytes:4270167278599 (3.8 TiB)

Ну это фильтры отвечающие за равномерную балансировку скорости между всеми. А трафик да, загоняется в классы через CLASSIFY очень удобно.

Что посоветуете для приоритетов трафика? Пробовал hfsc на imq, default класс указал, но трафик всеравно дропался, отставил пока.

fet4
() автор топика
Ответ на: комментарий от fet4
# tc -s -d class show dev imq1 classid 1:2
class htb 1:2 root rate 95Mbit ceil 95Mbit linklayer ethernet burst 1579b/1 mpu 0b overhead 0b cburst 1579b/1 mpu 0b overhead 0b level 7
 Sent 99631889006 bytes 87591884 pkt (dropped 0, overlimits 0 requeues 0)
 rate 30889Kbit 2647pps backlog 0b 0p requeues 0
 lended: 69899436 borrowed: 0 giants: 0
 tokens: -773 ctokens: -773
fet4
() автор топика
Ответ на: комментарий от fet4

про 1:2 нифига не понял. Про него в исходном посте ничего небыло.

трафик с «соседней машины» в какой класс попадает?

про «tcpdump -i imq1» - не работает, видимо с чем-то перепутал.

vel ★★★★★
()
Ответ на: комментарий от vel

Сори запутал, конструкция вообще такая. Так называемый «root class» это корневой класс для каждого из аплинков и в каждом из них есть свои 3-класса «services class -> root class» для тех самых приоритетов.

Для DOWNLOAD

#!/bin/bash

. /usr/net-conf/vars

echo "flush & add qdisc"
$TC qdisc del root dev $imq_download
$TC qdisc add dev $imq_download root handle 1: htb

echo "root class"
for i in 1 2 3 4 5 6 7; do
$TC class add dev $imq_download parent 1: classid 1:$i htb rate $rate_isp prio 0
done

echo "services class -> root class"
for i in 1 2 3 4 5 6 7; do
$TC class add dev $imq_download parent 1:$i classid 1:${i}1 htb rate $rate_min ceil $rate_isp prio 1
$TC class add dev $imq_download parent 1:$i classid 1:${i}2 htb rate $rate_min ceil $rate_isp prio 5
$TC class add dev $imq_download parent 1:$i classid 1:${i}3 htb rate $rate_min ceil $rate_isp prio 10
done

echo "qdisc services class"
for i in 1 2 3 4 5 6 7; do
$TC qdisc add dev $imq_download parent 1:${i}1 handle ${i}1: sfq perturb 10
$TC qdisc add dev $imq_download parent 1:${i}2 handle ${i}2: sfq perturb 10
$TC qdisc add dev $imq_download parent 1:${i}3 handle ${i}3: sfq perturb 10
done

echo "balancing services class"
for i in 1 2 3 4 5 6 7; do
$TC filter add dev $imq_download parent ${i}1: protocol all handle ${i}1 flow hash keys dst divisor 1024
$TC filter add dev $imq_download parent ${i}2: protocol all handle ${i}2 flow hash keys dst divisor 1024
$TC filter add dev $imq_download parent ${i}3: protocol all handle ${i}3 flow hash keys dst divisor 1024
done


exit 0

Для UPLOAD

#!/bin/bash

. /usr/net-conf/vars

echo "flush & add qdisc"
$TC qdisc del root dev $imq_upload
$TC qdisc add dev $imq_upload root handle 1: htb

echo "root class"
for i in 1 2 3 4 5 6 7; do
$TC class add dev $imq_upload parent 1: classid 1:${i}0 htb rate $rate_isp prio 0
done

echo "services class -> root class"
for i in 1 2 3 4 5 6 7; do
$TC class add dev $imq_upload parent 1:${i}0 classid 1:${i}01 htb rate $rate_min ceil $rate_isp prio 1
$TC class add dev $imq_upload parent 1:${i}0 classid 1:${i}02 htb rate $rate_min ceil $rate_isp prio 5
$TC class add dev $imq_upload parent 1:${i}0 classid 1:${i}03 htb rate $rate_min ceil $rate_isp prio 10
done

echo "qdisc services class"
for i in 1 2 3 4 5 6 7; do
$TC qdisc add dev $imq_upload parent 1:${i}01 handle ${i}01: sfq perturb 10
$TC qdisc add dev $imq_upload parent 1:${i}02 handle ${i}02: sfq perturb 10
$TC qdisc add dev $imq_upload parent 1:${i}03 handle ${i}03: sfq perturb 10
done

echo "balancing services class"
for i in 1 2 3 4 5 6 7; do
$TC filter add dev $imq_upload parent ${i}01: protocol all handle ${i}01 flow hash keys dst divisor 1024
$TC filter add dev $imq_upload parent ${i}02: protocol all handle ${i}02 flow hash keys dst divisor 1024
$TC filter add dev $imq_upload parent ${i}03: protocol all handle ${i}03 flow hash keys dst divisor 1024
done


exit 0

CLASSIFY и заворот на imq

#!/bin/bash

. /usr/net-conf/vars

echo "classify for imq1"

for i in 1 2 3 4 5 6 7; do

 next_if=isp${i}_if
 next_if2=${!next_if}

$IPT -w -t mangle -N class_imq1_isp$i
$IPT -w -t mangle -A class_imq1_isp$i -j CLASSIFY --set-class 1:${i}3
$IPT -w -t mangle -A class_imq1_isp$i -p icmp -j CLASSIFY --set-class 1:${i}1
$IPT -w -t mangle -A class_imq1_isp$i -p tcp -m multiport --sport 22,53,953 -j CLASSIFY --set-class 1:${i}1
$IPT -w -t mangle -A class_imq1_isp$i -p tcp -m multiport --dport 22,53,953 -j CLASSIFY --set-class 1:${i}1
$IPT -w -t mangle -A class_imq1_isp$i -p udp -m multiport --sport 22,53,953 -j CLASSIFY --set-class 1:${i}1
$IPT -w -t mangle -A class_imq1_isp$i -p udp -m multiport --dport 22,53,953 -j CLASSIFY --set-class 1:${i}1
$IPT -w -t mangle -A class_imq1_isp$i -p tcp -m multiport --sport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}2
$IPT -w -t mangle -A class_imq1_isp$i -p tcp -m multiport --dport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}2
$IPT -w -t mangle -A class_imq1_isp$i -p udp -m multiport --sport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}2
$IPT -w -t mangle -A class_imq1_isp$i -p udp -m multiport --dport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}2
$IPT -w -t mangle -A class_imq1_isp$i -m set --match-set $speedtest_list src -j CLASSIFY --set-class 1:${i}1

 $IPT -w -t mangle -A FORWARD -i $next_if2 -o $clients_if -d $clients_ippool -j class_imq1_isp$i

done

echo "classify for imq0"

for i in 1 2 3 4 5 6 7; do

 next_if=isp${i}_if
 next_if2=${!next_if}

 $IPT -w -t mangle -N class_imq0_isp$i
 $IPT -w -t mangle -A class_imq0_isp$i -j CLASSIFY --set-class 1:${i}03
 $IPT -w -t mangle -A class_imq0_isp$i -p icmp -j CLASSIFY --set-class 1:${i}01
 $IPT -w -t mangle -A class_imq0_isp$i -p tcp -m multiport --sport 22,53,953 -j CLASSIFY --set-class 1:${i}01
 $IPT -w -t mangle -A class_imq0_isp$i -p tcp -m multiport --dport 22,53,953 -j CLASSIFY --set-class 1:${i}01
 $IPT -w -t mangle -A class_imq0_isp$i -p udp -m multiport --sport 22,53,953 -j CLASSIFY --set-class 1:${i}01
 $IPT -w -t mangle -A class_imq0_isp$i -p udp -m multiport --dport 22,53,953 -j CLASSIFY --set-class 1:${i}01
 $IPT -w -t mangle -A class_imq0_isp$i -p tcp -m multiport --sport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}02
 $IPT -w -t mangle -A class_imq0_isp$i -p tcp -m multiport --dport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}02
 $IPT -w -t mangle -A class_imq0_isp$i -p udp -m multiport --sport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}02
 $IPT -w -t mangle -A class_imq0_isp$i -p udp -m multiport --dport 80,443,110,25,143,220 -j CLASSIFY --set-class 1:${i}02
 $IPT -w -t mangle -A class_imq0_isp$i -m set --match-set $speedtest_list dst -j CLASSIFY --set-class 1:${i}01

 $IPT -w -t mangle -A FORWARD -o $next_if2 -i $clients_if -s $clients_ippool -j class_imq0_isp$i

done


echo "imq device"

for i in 1 2 3 4 5 6 7; do

 next_if=isp${i}_if
 next_if2=${!next_if}

 $IPT -w -t mangle -A POSTROUTING -o $next_if2 -j IMQ --todev 0

done

$IPT -w -t mangle -A POSTROUTING -o $clients_if -d $clients_ippool -j IMQ --todev 1

exit 0

Тестовые машины были в одном «root class» т.е. в одном аплинке.

про «tcpdump -i imq1» - не работает, видимо с чем-то перепутал.

Да не, все правильно ввожу. Глухо. или как надо?

fet4
() автор топика
Ответ на: комментарий от fet4

про «tcpdump -i imq1» - не работает, видимо с чем-то перепутал.

Это я перепутал.

гм. tl;dr короче, я бы тупо добавил пару правил

iptables -t raw -A PREROUTING -s <ip_соседней машины> -m quota --quota 1500 -j TRACE
iptables -t raw -A PREROUTING -d <ip_соседней машины> -m quota --quota 1500 -j TRACE
и посмотрел какие правила они проходят при обращении к посторонним ресурсам (BT) с соседней машины.

vel ★★★★★
()
Ответ на: комментарий от vel

А какие еще параметры htb могут повлиять на то как будут уступать друг другу классы в приоритетах между собой?

fet4
() автор топика
Ответ на: комментарий от fet4

Пишут везде что mtu ≤ quantum ≤ 60000. У меня quantum 200000 rate 90Mbit расчитывается автоматически.

fet4
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.