Господа, написал скриптец для qos, работает, у меня нареканий пока нет, хотелось бы мнение профессионалов на данный продукт, верно ли, и может кто посоветует что можно было бы модифицировать дабы все шоколадно было! :)
Спасибо.
#!/bin/sh
$IF_INET='eth1'
#скорость в киболитах/сек на выгрузку
RATE_FULL='128'
#в процентах величина от полосы пропускания на выгрузку
PR_1='60'
PR_2='25'
PR_3='15'
percentage () {
res=$((${1}*${2}/100))
if [ $res -eq 0 ]; then
res=1
fi
echo $res
}
RATE_1=$(percentage $RATE_FULL $PR_1)
RATE_2=$(percentage $RATE_FULL $PR_2)
RATE_3=$(percentage $RATE_FULL $PR_3)
на сцылке изображен график то что я хочу сделать!
http://boss.creatures.spb.ru/htb.JPG
#Очистка цепочек
tc qdisc del dev $IF_INET root
iptables -t mangle -D POSTROUTING -o $IF_INET -j shaper_out
iptables -t mangle -F shaper_out
iptables -t mangle -X shaper_out
echo "Цепочки очищены"
#Создание правил
iptables -t mangle -N shaper_out
iptables -t mangle -I POSTROUTING -o $IF_INET -j shaper_out
tc qdisc add dev $IF_INET root handle 1: htb default 30
tc class add dev $IF_INET parent 1: classid 1:1 htb rate ${RATE_FULL}kbit
tc class add dev $IF_INET parent 1:1 classid 1:10 htb rate ${RATE_1}kbit ceil ${RATE_FULL}kbit prio 0
tc class add dev $IF_INET parent 1:1 classid 1:20 htb rate ${RATE_2}kbit ceil ${RATE_FULL}kbit prio 1
tc class add dev $IF_INET parent 1:1 classid 1:30 htb rate ${RATE_3}kbit ceil ${RATE_FULL}kbit prio 2
tc qdisc add dev $IF_INET parent 1:10 handle 10: htb default 102
tc class add dev $IF_INET parent 1:10 classid 1:100 htb rate ${RATE_1}kbit ceil ${RATE_FULL}kbit prio 0
tc class add dev $IF_INET parent 1:10 classid 1:101 htb rate ${RATE_2}kbit ceil ${RATE_FULL}kbit prio 1
tc class add dev $IF_INET parent 1:10 classid 1:102 htb rate ${RATE_3}kbit ceil ${RATE_FULL}kbit prio 2
tc qdisc add dev $IF_INET parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $IF_INET parent 1:30 handle 30: sfq perturb 10
#установка правил филтров
tc filter add dev $IF_INET parent 1: protocol ip handle 100 fw flowid 1:100
tc filter add dev $IF_INET parent 1: protocol ip handle 101 fw flowid 1:101
tc filter add dev $IF_INET parent 1: protocol ip handle 102 fw flowid 1:102
tc filter add dev $IF_INET parent 1: protocol ip handle 200 fw flowid 1:20
tc filter add dev $IF_INET parent 1: protocol ip handle 300 fw flowid 1:30
##################################
#Пишем фаревал, правила идут от общего к частному
#Привилегерованный пользователь
iptables -t mangle -A shaper_out -p all -s 192.168.0.10 -j MARK --set-mark 102
#Заурядный пользвователь
iptables -t mangle -A shaper_out -p all -s 192.168.0.11 -j MARK --set-mark 200
#Провинившийся пользователь
iptables -t mangle -A shaper_out -p all -s 192.168.0.12 -j MARK --set-mark 300
#www трафик пускаем во вторую очередь, возможно ему бы не помешало более низкий приоритет, но что то подсказывает мне что так потянет.
iptables -t mangle -A shaper_out -p tcp --dport 80 -j MARK --set-mark 101
#SSH будет уходить первым
iptables -t mangle -A shaper_out -p tcp --dport 22 -j MARK --set-mark 100
iptables -t mangle -A shaper_out -p tcp --sport 22 -j MARK --set-mark 100
#Почту загнал в средний приоритет
iptables -t mangle -A shaper_out -p tcp --dport 25 -j MARK --set-mark 200
iptables -t mangle -A shaper_out -p tcp --dport 110 -j MARK --set-mark 200
iptables -t mangle -A shaper_out -p tcp --dport 143 -j MARK --set-mark 200
#Просмотр правил.
echo "============================== [qdisc] ============================== "
tc -s qdisc show dev $IF_INET
echo "============================== [class] ============================== "
tc -s class show dev $IF_INET
echo "============================== [filter] ============================== "
tc -s filter show dev $IF_INET
echo "======================================================================="
iptables -t mangle -L shaper_out -v -n
echo "======================================================================="
server#