> nano /root/bin/burst.sh
#!/bin/bash
# set -x
TC=/sbin/tc
# variablen
ext_dev=eth0
# bw_up muss etwas kleiner sein als der wirkliche upstream, sonst bringt alles nix
bw_up=768kbit
case $1 in
start)
# wenn schon konfiguriert => alles loeschen
if [ -n "`$TC qdisc show dev $ext_dev`" ]
then
$TC qdisc del dev $ext_dev root
fi
# root qdisc (queuing discipline) anlegen
$TC qdisc add dev $ext_dev root handle 1: htb default 30 r2q 6
# root class anlegen
$TC class add dev $ext_dev parent 1: classid 1:1 htb rate $bw_up burst 2k prio 0
# jetzt 4 klassen anlegen
# (die summe der rates darf nicht groesser sein als die rate des parents)
# 1) tcp acks (pakete <= 64byte) haben höchste Priorität
$TC class add dev $ext_dev parent 1:1 classid 1:10 htb rate 20kbit ceil 80kbit quantum 3333 prio 0
# 2) bevorzugter Traffic
$TC class add dev $ext_dev parent 1:1 classid 1:20 htb rate 75kbit ceil $bw_up quantum 12500 prio 1
# 3) Die Standardklasse
$TC class add dev $ext_dev parent 1:1 classid 1:30 htb rate 20kbit ceil $bw_up quantum 3333 prio 2
# 4) benachteiligter traffic (z.b. edonkey)
$TC class add dev $ext_dev parent 1:1 classid 1:40 htb rate 10kbit ceil 112kbit quantum 1666 prio 3
# jetzt werden die Filter angelegt, die die pakete je nach markierung durch
# iptables in die einzelnen klassen lenken
$TC filter add dev $ext_dev parent 1: prio 0 protocol ip handle 10 fw flowid 1:10
$TC filter add dev $ext_dev parent 1: prio 1 protocol ip handle 20 fw flowid 1:20
$TC filter add dev $ext_dev parent 1: prio 2 protocol ip handle 30 fw flowid 1:30
$TC filter add dev $ext_dev parent 1: prio 3 protocol ip handle 40 fw flowid 1:40
exit 0
;;
stop)
$TC qdisc del dev $ext_dev root &> /dev/null
exit 0
;;
esac
echo "usage: $0 [start|stop]”
exit 1
> crontab -e
# burst traffic on working days
0 8 * * 1-5 /root/bin/burst.sh start
0 20 * * 1-5 /root/bin/burst.sh stop
Referenz