Доброго времени суток.
Есть сетка из примерно 1000 абонентов, сервер на CentOS. В последнее время стал забиваться канал на 2-4 часа в день. Было принято решение - задать приоритеты абонентскими классам: с небольшой скоростью - высокий приоритет, средней - средний приоритет, с большой - низкий приоритет.
Часть скрипта для tc:
#!/bin/bash
ipset -N blocked iphash
#
tc qdisc del dev em2 root
#
tc qdisc add dev em2 root handle 1: htb default 100
#
tc class add dev em2 parent 1: classid 1:1 htb rate 1000mbit
# Дефолтный класс//100//===============================================================
tc class add dev em2 parent 1:1 classid 1:100 htb rate 512Kbit ceil 600mbit prio 10
#======================================================================================
tc class add dev em2 parent 1:1 classid 1:10 htb rate 1mbit ceil 200mbit prio 1
# Интернет //20//======================================================================
tc class add dev em2 parent 1:1 classid 1:20 htb rate 100mbit ceil 600mbit prio 1
# Управление оборудованием //30//======================================================
tc class add dev em2 parent 1:1 classid 1:30 htb rate 1mbit ceil 20mbit prio 0
# ТВ //40//============================================================================
tc class add dev em2 parent 1:1 classid 1:40 htb rate 10mbit ceil 300mbit prio 0
#==============ФИЛЬТРЫ=================================================================
# Корневой фильтр======================================================================
tc filter add dev em2 parent 1:0 pref 10 protocol ip u32
# ===========внутренние ресурсы=======================================================
tc filter add dev em2 protocol ip parent 1: pref 10 u32 match ip src 1.2.3.4 flowid 1:10
tc filter add dev em2 protocol ip parent 1: pref 10 u32 match ip src 10.10.0.0/16 match ip dst 1.2.3.5 flowid 1:10
# сетка управления оборудованием=======================================================
tc filter add dev em2 protocol ip parent 1: pref 10 u32 match ip dst 9.8.7.6/24 flowid 1:30
# тв в 40 класс========================================================================
tc filter add dev em2 protocol ip parent 1: pref 10 u32 match ip src 88.22.6.222/27 flowid 1:40
tc filter add dev em2 protocol ip parent 1: pref 10 u32 match ip src 99.111.66.55/28 flowid 1:40
# ========хэш-таблица 10: для абонентов================================================
tc filter add dev em2 parent 1:0 pref 10 handle 10: protocol ip u32 divisor 256
tc filter add dev em2 parent 1:0 protocol ip pref 10 u32 match ip dst 0.0.0.0/0 hashkey mask 0xff at 16 link 10:
часть скрипта, который создает класс абонента:
if [[ $speed<20000000&&$speed!=0 ]]
then cprio=0
elif [[ $speed>=20000000&&$speed!=0&&$speed<50000000 ]]
then cprio=1
elif [[ $speed>=50000000&&$speed!=0&&$ ]]
then cprio=2
fi
class_num=`cat $scr_dir/ip/$ip.sh|grep '#class='|sed 's/#class=//'`
tc class change dev em2 parent 1:20 classid 1:$class_num htb rate 256kbit ceil $speed prio $cprio
echo "#class=$class_num" > $scr_dir/ip/$ip.sh
echo "tc class add dev em2 parent 1:20 classid 1:$class_num htb rate 256kbit ceil $speed" >> $scr_dir/ip/$ip.sh
echo "tc filter replace dev em2 protocol ip parent 1:0 pref 10 u32 ht 10:$hexip: match ip dst $ip/32 flowid 1:$class_num" >> $scr_dir/ip/$ip.sh
Хватит ли выставления приоритетов, что бы абоненты с большими скоростями не задавили других абонентов при загрузке канала, и не останутся ли они без скорости, или возможен еще какой-либо вариант решения данной задачи?