>http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm Мануал это конечно хорошо, буду вкуривать.
Вот та реализация которая работает сейчаc при коннекте пользователя по VPN.
#!/bin/sh
IF=$1
IP=$2
if [ -f /var/run/radattr.$1 ]
then
SPEED=`/bin/awk '/PPPD-Downstream-Speed-Limit/ {print $2}' /var/run/radattr.$IF`
SPEEDIN=18048kbit # Скорость внутренней сети от абонента
SPEEDOUT=10096kbit # Скорость внутренней сети к абоненту
SPEEDSRV=10096kbit # Скорость серверов от абонента
SPEEDMIN=1kbit # минимальная гарантированная скорость
tc qdisc del dev $IF root handle 1: htb default 90 # сброс настроек интерфейса
tc qdisc add dev $IF root handle 1: htb default 90 # инициализация интерфейса
tc class add dev $IF parent 1: classid 1:90 htb rate "$SPEED"kbit"" burst 2 # задание скорости на Интернет
tc class add dev $IF parent 1: classid 1:10 htb rate $SPEEDIN burst 2 # задание скорости на внутреннюю сеть
tc class add dev $IF parent 1: classid 1:20 htb rate $SPEEDSRV burst 2 # заданние скорости серверов
tc class add dev $IF parent 1: classid 1:120 htb rate $SPEEDMIN burst 2 # минимальная гарантированная скорость(для блокировки трафика)
#ФИЛЬТРЫ
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 10.13.0.0/16 flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 89.113.xx.yy/22 flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.16.0.0/16 flowid 1:120
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 10.13.0.0/16 match ip dst $IP flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 89.113.xx.yy/22 match ip dst $IP flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.16.0.0/16 match ip dst $IP flowid 1:120
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.2/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.3/32 flowid 1:10 ###VPN GATE###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.4/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.5/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.6/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.61/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.7/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 89.113.yyy.85/28 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 89.113.yyy.84/28 flowid 1:20
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.2/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.3/32 match ip dst $IP flowid 1:10 ###VPN GATE###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.4/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.5/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.6/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.61/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.7/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 89.113.yyy.84/28 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 89.113.yyy.85/28 match ip dst $IP flowid 1:20
###
###DOWN
ID=`echo "select users.id FROM users INNER JOIN ip_groups ON users.login=ip_groups.uname WHERE ip_groups.is_deleted=0 AND users.is_deleted=0 AND ip=inet_aton('$IP') order by users.id;" | mysql -u init -pinit UTM5 -h 172.18.1.2 | sed '$!d'`
#FLT=`tc filter show dev eth1 | grep "flowid 1:$ID" | awk {'print $1'}`
#if [ $FLT="filter" ]
#then
#exit 0
#else
tc qdisc add dev eth1 root handle 1: htb default 90
tc class add dev eth1 parent 1: classid 1: htb rate 100Mbit burst 2 # Общая ширина WAN
tc class add dev eth1 parent 1:1 classid 1:$ID htb rate "$SPEED"kbit"" burst 2 # задание скорости на Интернет
tc filter add dev eth1 parent 1: protocol ip prio 10 u32 match ip src $IP match ip dst 0.0.0.0/0 flowid 1:$ID # Загоняем абонента в класс
#echo "---" >> /netup/modules/tc.log
#fi
###OLD
#/sbin/tc qdisc add dev $IF handle ffff: ingress
###LAN
#/sbin/tc filter add dev $IF parent ffff: protocol ip prio 50 u32 match ip dst 89.113.147.85/28 police rate ${SPEEDIN}kbit burst 12k drop flowid :1
###INET
#/sbin/tc filter add dev $IF parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${SPEED}kbit burst 12k drop flowid :1
fi
Здесь вопрос такой:
Как удалить конкретный класс и фильтр
делаю так:
tc class del dev eth1 parent 1:1 classid 1:$ID htb rate "$SPEED"kbit"" burst 2
tc filter del dev eth1 parent 1: protocol ip prio 10 u32 match ip src $IP match ip dst 0.0.0.0/0 flowid 1:$ID
У меня удаляются классы и фильтры ВСЕХ пользователей