#!/bin/bash DEV=$1 LINKSPEED=$3 echo $LINKSPEED # Установите эти значения несколько ниже реальных скоростей для входящего (DOWNLINK) # и исходящего (UPLINK) трафика. В килобитах в секунду DOWNLINK=300 UPLINK=300 # Очистка существующих дисциплин для исходящего и входящего трафика соответственно tc qdisc del dev $DEV root 2> /dev/null > /dev/null tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null ###### Исходящий трафик # Установка корневой дисциплины HTB с направлением трафика по умолчанию в дисциплину 1:20: /sbin/tc qdisc add dev $DEV root handle 1: htb default 20 # Ограничение суммарной скорости исходящих данных. Это предотвратит создание очереди # в модеме которая может создавать неуправляемые задержки: /sbin/tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 15k # Класс данных с высоким приоритетом 1:10: # с ограничением скорости для Skype в 24кбит/с и начальным всплеском в 1 кбайт /sbin/tc class add dev $DEV parent 1:1 classid 1:10 htb rate 24kbit burst 1k prio 1 # Класс данных по умолчанию. Получает скорость чуть меньше максимальной # и имеет ниже приоритет: /sbin/tc class add dev $DEV parent 1:1 classid 1:20 htb rate 1kbit \ ceil $[9*$UPLINK/10]kbit burst 4k prio 2 # Установка дисциплины Stochastic Fairness для обоих классов: /sbin/tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10 /sbin/tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10 # Ограничение скорости исходящего трафика для Skype (порт 34184) /sbin/tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip sport 34184 0xffff flowid 1:10 # Остальные данные попадают в класс по умолчанию, т.е. в 1:20 ########## Входящий трафик ############# # Замедлим скорость загрузки до значения, несколько меньшего реальной скорости загрузки # с тем, чтобы предотвратить создание очереди у провайдера. # Можно попробовать разные значения, чтобы узнать, какое ограничение подойдёт лучше # Обычно провайдеры устанавливают *огромные* очереди, # чтобы гарантировать высокую скорость больших загрузок. # # Установка дисциплины для входящих данных: /sbin/tc qdisc add dev $DEV handle ffff: ingress # Ограничение скорости входящего трафика для Skype (порт 34184) /sbin/tc filter add dev $DEV protocol ip parent ffff: prio 50 u32 match ip dport 34184 0xffff \ police rate 24kbit burst 1k drop flowid :1 # Фильтруем *всё*, что приходит (0.0.0.0/0), отбрасываем то, # что приходит слишком быстро /sbin/tc filter add dev $DEV protocol ip parent ffff: prio 51 u32 match ip src \ 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1