в свое время написал такой скрип в надежде что будет выполняться задача по ограничению трафика таким образом, чтобы не «зажимало» телефонию, но хоть и указана скорость ниже пропускной способности, но как то получается, что на интерфейсе (внешнем) вижу скорость в 2 раза выше в пиках (есть как транзитный трафик, так и трафик локальных процессов)
$ sudo cat /etc/init.d/tc
#!/bin/bash
### BEGIN INIT INFO
# Provides: tc
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: TC SHAPER
# Description: TC SHAPER
### END INIT INFO
DEV=eth0.41
RATE=9500kbit
status() {
echo
tc -s qdisc ls dev $DEV
echo
tc -s class ls dev $DEV
exit
}
monitor() {
watch tc -s -d class show dev $DEV
}
start() {
tc qdisc add dev $DEV root handle 1: htb default 20
tc class add dev $DEV parent 1: classid 1:1 htb rate $RATE
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 2mbit ceil 3mbit prio 10
tc class add dev $DEV parent 1:1 classid 1:20 htb rate 2mbit ceil $RATE prio 20
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
U32="tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 0x11 0xff"
$U32 match ip tos 0x68 0xff flowid 1:10
$U32 match ip tos 0xb8 0xff flowid 1:10
}
stop() {
tc qdisc del dev $DEV root
}
case "$1" in
status)
status
;;
monitor)
monitor
;;
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|status|monitor}"
exit 1
esac