URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 80884
[ Назад ]

Исходное сообщение
"QoS Инет+Локальные ресурсы"

Отправлено hertz , 24-Июн-08 17:48 
Помогите разобраться с интересной задачкой. Итак, есть шлюз с каналом в городскую сеть (в данном случае ADSL), для клиентов доступен как Интернет, так и локальные ресурсы городской сети. Маршрутизация настроена с использованием областей (realm), трафик интернет помечается зоной internet. Требуется:
1) трафик Интернет имеет больший приоритет перед трафиком к локальным ресурсам городской сети
2) и Интернет и "локальный" трафик должны быть приоретизированы

Вот примерный init.d скрипт, который я составил. Прошу наших гуру, найти касяки в нем. А также раскрыть мне глаза на поведение 1:20 класса: несмотря на то что полоса совершенно свободная (нет трафика по 1:10 классу), скорость просто отстой.

cat tc.vlan104
#!/sbin/runscript

#=============================
DEV="vlan104"
RATE_IFACE=1024
RATE_INET=1016

depend() {
    need net.vlan104
}
#=============================
RATE_NET=$(($RATE_IFACE-$RATE_INET))


start() {
ebegin "Start QoS ${DEV}"
#корневая дисциплина и класс
    tc qdisc add dev $DEV root handle 1: htb default 20
    tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATE_IFACE}kbit ceil ${RATE_IFACE}kbit

#дисциплина Интернет и класс
    tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${RATE_INET}kbit ceil ${RATE_INET}kbit
    tc qdisc add dev $DEV parent 1:10 handle 10: htb default 6

#6 подклассов Интернета
    tc class add dev $DEV parent 10: classid 10:1 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 0
    tc class add dev $DEV parent 10: classid 10:2 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 1
    tc class add dev $DEV parent 10: classid 10:3 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 2
    tc class add dev $DEV parent 10: classid 10:4 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 2
    tc class add dev $DEV parent 10: classid 10:5 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 3
    tc class add dev $DEV parent 10: classid 10:6 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 3

    tc qdisc add dev $DEV parent 10:1 handle 101: sfq perturb 10
    tc qdisc add dev $DEV parent 10:2 handle 102: sfq perturb 10
    tc qdisc add dev $DEV parent 10:3 handle 103: sfq perturb 10
    tc qdisc add dev $DEV parent 10:4 handle 104: sfq perturb 10
    tc qdisc add dev $DEV parent 10:5 handle 105: sfq perturb 10
    tc qdisc add dev $DEV parent 10:6 handle 106: sfq perturb 10

#дисциплина и класс Внутригорода
    tc class add dev $DEV parent 1:1 classid 1:20 htb rate ${RATE_NET}kbit ceil ${RATE_IFACE}kbit
    tc qdisc add dev $DEV parent 1:20 handle 20: htb default 6

#6 подклассов Внутригорода
    tc class add dev $DEV parent 20: classid 20:1 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 0
    tc class add dev $DEV parent 20: classid 20:2 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 1
    tc class add dev $DEV parent 20: classid 20:3 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 2
    tc class add dev $DEV parent 20: classid 20:4 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 2
    tc class add dev $DEV parent 20: classid 20:5 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 3
    tc class add dev $DEV parent 20: classid 20:6 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 3

    tc qdisc add dev $DEV parent 20:1 handle 201: sfq perturb 10
    tc qdisc add dev $DEV parent 20:2 handle 202: sfq perturb 10
    tc qdisc add dev $DEV parent 20:3 handle 203: sfq perturb 10
    tc qdisc add dev $DEV parent 20:4 handle 204: sfq perturb 10
    tc qdisc add dev $DEV parent 20:5 handle 205: sfq perturb 10
    tc qdisc add dev $DEV parent 20:6 handle 206: sfq perturb 10

#Фильтры Интернет
    tc filter add dev $DEV parent 1: protocol ip prio 1 route to internet flowid 1:10
    #ssh,telnet,dns,icmp,mimize-delay
    tc filter add dev $DEV parent 10: protocol ip prio 2 u32 match ip dport 22 0xfffe flowid 10:1
    tc filter add dev $DEV parent 10: protocol ip prio 3 u32 match ip dport 53 0xffff flowid 10:1
    tc filter add dev $DEV parent 10: protocol ip prio 4 u32 match ip protocol 1 0xff flowid 10:1
    tc filter add dev $DEV parent 10: protocol ip prio 5 u32 match ip tos 0x10 0xff flowid 10:1
    #www,syn
    tc filter add dev $DEV parent 10: protocol ip prio 6 u32 match ip dport 80 0xffff flowid 10:2
    tc filter add dev $DEV parent 10: protocol ip prio 7 u32 match ip dport 443 0xffff flowid 10:2
    tc filter add dev $DEV parent 10: protocol ip prio 8 u32 match ip protocol 6 0xff match u8 0x2 0xff at nexthdr+13 flowid 10:2
    #tos(maximize-throughput)
    tc filter add dev $DEV parent 10: protocol ip prio 9 u32 match ip tos 0x08 0xff flowid 10:3
    #udp,games
    tc filter add dev $DEV parent 10: protocol ip prio 10 u32 match ip protocol 17 0xff flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 11 u32 match ip dport 27015 0xfffc flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 12 u32 match ip dport 21000 0xfffe flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 13 u32 match ip dport 27960 0xffff flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 14 u32 match ip dport 16567 0xfffe flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 15 u32 match ip dport 28960 0xfffe flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 16 u32 match ip dport 7777 0xfffe flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 17 u32 match ip dport 6112 0xfffa flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 18 u32 match ip dport 18210 0xfffa flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 19 u32 match ip dport 18215 0xfffa flowid 10:4
    tc filter add dev $DEV parent 10: protocol ip prio 20 u32 match ip dport 13505 0xfffa flowid 10:4
    #SMTP,pop3,tos(minimize-cost)
    tc filter add dev $DEV parent 10: protocol ip prio 21 u32 match ip dport 25 0xffff flowid 10:5
    tc filter add dev $DEV parent 10: protocol ip prio 22 u32 match ip dport 110 0xffff flowid 10:5
    tc filter add dev $DEV parent 10: protocol ip prio 23 u32 match ip tos 0x04 0xff flowid 10:5
    #other (10:6)

#Фильтры Внутригород
    #ssh,telnet,dns,icmp,mimize-delay
    tc filter add dev $DEV parent 20: protocol ip prio 24 u32 match ip dport 22 0xfffe flowid 20:1
    tc filter add dev $DEV parent 20: protocol ip prio 25 u32 match ip dport 53 0xffff flowid 20:1
    tc filter add dev $DEV parent 20: protocol ip prio 26 u32 match ip protocol 1 0xff flowid 20:1
    tc filter add dev $DEV parent 20: protocol ip prio 27 u32 match ip tos 0x10 0xff flowid 20:1
    #www,syn
    tc filter add dev $DEV parent 20: protocol ip prio 28 u32 match ip dport 80 0xffff flowid 20:2
    tc filter add dev $DEV parent 20: protocol ip prio 29 u32 match ip dport 443 0xffff flowid 20:2
    tc filter add dev $DEV parent 20: protocol ip prio 30 u32 match ip protocol 6 0xff match u8 0x2 0xff at nexthdr+13 flowid 20:2
    #tos(maximize-throughput)
    tc filter add dev $DEV parent 20: protocol ip prio 31 u32 match ip tos 0x08 0xff flowid 20:3
    #udp,games
    tc filter add dev $DEV parent 20: protocol ip prio 32 u32 match ip protocol 17 0xff flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 33 u32 match ip dport 27015 0xfffc flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 34 u32 match ip dport 21000 0xfffe flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 35 u32 match ip dport 27960 0xffff flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 36 u32 match ip dport 16567 0xfffe flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 37 u32 match ip dport 28960 0xfffe flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 38 u32 match ip dport 7777 0xfffe flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 39 u32 match ip dport 6112 0xfffa flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 40 u32 match ip dport 18210 0xfffa flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 41 u32 match ip dport 18215 0xfffa flowid 20:4
    tc filter add dev $DEV parent 20: protocol ip prio 42 u32 match ip dport 13505 0xfffa flowid 20:4
    #SMTP,pop3,tos(minimize-cost)
    tc filter add dev $DEV parent 20: protocol ip prio 43 u32 match ip dport 25 0xffff flowid 20:5
    tc filter add dev $DEV parent 20: protocol ip prio 44 u32 match ip dport 110 0xffff flowid 20:5
    tc filter add dev $DEV parent 20: protocol ip prio 45 u32 match ip tos 0x04 0xff flowid 20:5
    #other (20:6)

eend 0
}

stop() {
ebegin "Stop QoS ${DEV}"
    tc qdisc del dev $DEV root
eend 0
}


Содержание

Сообщения в этом обсуждении
"QoS Инет+Локальные ресурсы"
Отправлено hertz , 24-Июн-08 19:38 
провел своё небольшое тестирование, которое показало, что без QoS приведенного выше, работает в разы (!!!) быстрее. Не пойму в чем касяк (

"QoS Инет+Локальные ресурсы"
Отправлено hertz , 24-Июн-08 21:59 
Насколько я понимаю не передаются излишки трафика от 1:10 к 1:20. Могут ли этому мешать наличие очередей 10: и 20: ?

"QoS Инет+Локальные ресурсы"
Отправлено hertz , 24-Июн-08 23:03 
Всем спасибо! Аж не успевал опробывать ваши советы ;)
Делать надо иначе (ввела в заблуждение фраза вычитанная в какой-то статье, что мол фильтры в HTB можно крепить только к дисциплинам, а оказалось что это чушь собачья). Надо было убрать 10: и 20: дисциплины, после этого выделение свободной полосы между 1:10 и 1:20 стало происходить нормально. Вот рабочий пример как это вышло у меня:

#!/bin/sh

#=============================
DEV="eth0"
RATE_IFACE=1024
RATE_INET=1016 #должно быть меньше RATE_IFACE, т.к. rate должен быть больше 0

#=============================
RATE_NET=$(($RATE_IFACE-$RATE_INET))


start() {
echo "Start QoS ${DEV}"
#корневая дисциплина и класс
    tc qdisc add dev $DEV root handle 1: htb
    tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATE_IFACE}kbit ceil ${RATE_IFACE}kbit

#дисциплина Интернет и класс
    tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${RATE_INET}kbit ceil ${RATE_INET}kbit

#6 подклассов Интернета
    tc class add dev $DEV parent 1:10 classid 1:11 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 0
    tc class add dev $DEV parent 1:10 classid 1:12 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 1
    tc class add dev $DEV parent 1:10 classid 1:13 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 2
    tc class add dev $DEV parent 1:10 classid 1:14 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 2
    tc class add dev $DEV parent 1:10 classid 1:15 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 3
    tc class add dev $DEV parent 1:10 classid 1:16 htb rate $(($RATE_INET/6))kbit ceil ${RATE_INET}kbit prio 3

    tc qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
    tc qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10
    tc qdisc add dev $DEV parent 1:13 handle 13: sfq perturb 10
    tc qdisc add dev $DEV parent 1:14 handle 14: sfq perturb 10
    tc qdisc add dev $DEV parent 1:15 handle 15: sfq perturb 10
    tc qdisc add dev $DEV parent 1:16 handle 16: sfq perturb 10

#дисциплина и класс Внутригорода
    tc class add dev $DEV parent 1:1 classid 1:20 htb rate ${RATE_NET}kbit ceil ${RATE_IFACE}kbit

#6 подклассов Внутригорода
    tc class add dev $DEV parent 1:20 classid 1:21 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 0
    tc class add dev $DEV parent 1:20 classid 1:22 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 1
    tc class add dev $DEV parent 1:20 classid 1:23 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 2
    tc class add dev $DEV parent 1:20 classid 1:24 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 2
    tc class add dev $DEV parent 1:20 classid 1:25 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 3
    tc class add dev $DEV parent 1:20 classid 1:26 htb rate $(($RATE_NET/6))kbit ceil ${RATE_IFACE}kbit prio 3

    tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
    tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
    tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
    tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
    tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
    tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10

#Фильтры Интернет
    tc filter add dev $DEV parent 1: protocol ip prio 1 route to internet flowid 1:10
    #ssh,telnet,dns,icmp,mimize-delay
    tc filter add dev $DEV parent 1:10 protocol ip prio 2 u32 match ip dport 22 0xfffe flowid 1:11
    tc filter add dev $DEV parent 1:10 protocol ip prio 3 u32 match ip dport 53 0xffff flowid 1:11
    tc filter add dev $DEV parent 1:10 protocol ip prio 4 u32 match ip protocol 1 0xff flowid 1:11
    tc filter add dev $DEV parent 1:10 protocol ip prio 5 u32 match ip tos 0x10 0xff flowid 1:11
    #www,syn
    tc filter add dev $DEV parent 1:10 protocol ip prio 6 u32 match ip dport 80 0xffff flowid 1:12
    tc filter add dev $DEV parent 1:10 protocol ip prio 7 u32 match ip dport 443 0xffff flowid 1:12
    tc filter add dev $DEV parent 1:10 protocol ip prio 8 u32 match ip protocol 6 0xff match u8 0x2 0xff at nexthdr+13 flowid 1:12
    #tos(maximize-throughput)
    tc filter add dev $DEV parent 1:10 protocol ip prio 9 u32 match ip tos 0x08 0xff flowid 1:13
    #udp,games
    tc filter add dev $DEV parent 1:10 protocol ip prio 10 u32 match ip protocol 17 0xff flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 11 u32 match ip dport 27015 0xfffc flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 12 u32 match ip dport 21000 0xfffe flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 13 u32 match ip dport 27960 0xffff flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 14 u32 match ip dport 16567 0xfffe flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 15 u32 match ip dport 28960 0xfffe flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 16 u32 match ip dport 7777 0xfffe flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 17 u32 match ip dport 6112 0xfffa flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 18 u32 match ip dport 18210 0xfffa flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 19 u32 match ip dport 18215 0xfffa flowid 1:14
    tc filter add dev $DEV parent 1:10 protocol ip prio 20 u32 match ip dport 13505 0xfffa flowid 1:14
    #SMTP,pop3,tos(minimize-cost)
    tc filter add dev $DEV parent 1:10 protocol ip prio 21 u32 match ip dport 25 0xffff flowid 1:15
    tc filter add dev $DEV parent 1:10 protocol ip prio 22 u32 match ip dport 110 0xffff flowid 1:15
    tc filter add dev $DEV parent 1:10 protocol ip prio 23 u32 match ip tos 0x04 0xff flowid 1:15
    #other (10:6)
    tc filter add dev $DEV parent 1:10 protocol ip prio 24 u32 match ip dst 0.0.0.0/0 flowid 1:16

#Фильтры Внутригород
    tc filter add dev $DEV parent 1: protocol ip prio 25 u32 match ip dst 0.0.0.0/0 flowid 1:20
    #ssh,telnet,dns,icmp,mimize-delay
    tc filter add dev $DEV parent 1:20 protocol ip prio 24 u32 match ip dport 22 0xfffe flowid 1:21
    tc filter add dev $DEV parent 1:20 protocol ip prio 25 u32 match ip dport 53 0xffff flowid 1:21
    tc filter add dev $DEV parent 1:20 protocol ip prio 26 u32 match ip protocol 1 0xff flowid 1:21
    tc filter add dev $DEV parent 1:20 protocol ip prio 27 u32 match ip tos 0x10 0xff flowid 1:21
    #www,syn
    tc filter add dev $DEV parent 1:20 protocol ip prio 28 u32 match ip dport 80 0xffff flowid 1:22
    tc filter add dev $DEV parent 1:20 protocol ip prio 29 u32 match ip dport 443 0xffff flowid 1:22
    tc filter add dev $DEV parent 1:20 protocol ip prio 30 u32 match ip protocol 6 0xff match u8 0x2 0xff at nexthdr+13 flowid 1:22
    #tos(maximize-throughput)
    tc filter add dev $DEV parent 1:20 protocol ip prio 31 u32 match ip tos 0x08 0xff flowid 1:23
    #udp,games
    tc filter add dev $DEV parent 1:20 protocol ip prio 32 u32 match ip protocol 17 0xff flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 33 u32 match ip dport 27015 0xfffc flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 34 u32 match ip dport 21000 0xfffe flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 35 u32 match ip dport 27960 0xffff flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 36 u32 match ip dport 16567 0xfffe flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 37 u32 match ip dport 28960 0xfffe flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 38 u32 match ip dport 7777 0xfffe flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 39 u32 match ip dport 6112 0xfffa flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 40 u32 match ip dport 18210 0xfffa flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 41 u32 match ip dport 18215 0xfffa flowid 1:24
    tc filter add dev $DEV parent 1:20 protocol ip prio 42 u32 match ip dport 13505 0xfffa flowid 1:24
    #SMTP,pop3,tos(minimize-cost)
    tc filter add dev $DEV parent 1:20 protocol ip prio 43 u32 match ip dport 25 0xffff flowid 1:25
    tc filter add dev $DEV parent 1:20 protocol ip prio 44 u32 match ip dport 110 0xffff flowid 1:25
    tc filter add dev $DEV parent 1:20 protocol ip prio 45 u32 match ip tos 0x04 0xff flowid 1:25
    #other (20:6)
    tc filter add dev $DEV parent 1:20 protocol ip prio 46 u32 match ip dst 0.0.0.0/0 flowid 1:26
}

stop() {
echo "Stop QoS ${DEV}"
    tc qdisc del dev $DEV root
}


case "$1" in
    start) start ;;
    stop) stop ;;
esac