Hierachical Token Bucket
htb.init - это скрипт, который с помощью утилит ip, tc настраивает пропускную способность канала.
Адрес проекта HTB.init
Шейпер может ограничивать только ИСХОДЯЩИЙ трафик, распределяя его по разным очередям. Очередь имеет такие параметры как :
Пакеты, не помещающиеся в очередь, отбрасываются. Данные из очереди выдаются на интерфейс и далее к клиенту.
Каждый конфигурационный файл описывает очередь, это заложено в самом названии файла, которое имеет формат
$HTB_PATH/<ifname>-<clsid>(:<clsid>).<description>
$HTB_PATH/<Имя интерфейса>-<Номер класса>(:<Номер дочернего класса>).<Комментарий>clsid - задается цифровыми значениями от 0x2 до 0xFFFF (записывается без приставки 0x)
Сам интерфейс описывается файлом только с именем ifname. Например eth0 и имеет идентификатор класса clsid=0.
eth0-2 - основной (корневой) класс с clsid=2
eth0-2:3 - класс очереди clsid=3, унаследует ограничения от родительского clsid=2
eth0-2:3:4 - класс очередь clsid=4, унаследует ограничения от родительского clsid=3 и 2, т.е. накладываются ее более жесткие ограничения.
This allows you to set coefficient for computing DRR (Deficit Round Robin) quanta. The default value of 10 is good for rates from 5-500kbps and should be increased for higher rates.
Для корректной работы скрипта, сумма всех RATE дочерних классов (очередей) не должна превышать RATE корневого класса, а значение CEIL в каждой очереди не должно превышать значение в корневом классе.
LEAF=sfq - равномерное распределение между участниками очереди.
pfifo -, bfifo - …
RULE=[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]
iptables -t mangle -A PREROUTING -s 192.168.0.1 -j MARK –set-mark 101
iptables -t mangle -A PREROUTING -s 192.168.0.1 -j RETURN
TIME=[<dow><dow>.../]<from>-<till>;<rate>[/<burst>][,<ceil>[/<cburst>]]
TIME=60123/18:00-06:00;256Kbit/10Kb,384Kbit
TIME=18:00-06:00;256Kbit
REALM=russia,internet
Скачать скрипт с сайта или прямой ссылкой
wget http://sunet.dl.sourceforge.net/sourceforge/htbinit/htb.init-v0.8.5
Установить права
sudo chown root:root htb.init-v0.8.5 && sudo chmod 755 htb.init-v0.8.5
Переместим скрипт в папку /etc/init.d/
sudo mv htb.init-v0.8.5 /etc/init.d/htb.init
Добавить скрипт а автозагрузку
sudo update-rc.d htb.init defaults
Отредактировать параметр HTB_PATH, указывающий папку с конфигурационными файлами
sudo nano /etc/init.d/htb.init
htb.init
... HTB_PATH=${HTB_PATH:-/etc/htb} ...
sudo mkdir -p /etc/htb
Подготовка закончена
sudo /etc/init.d/htb.init stats
Размаскировать (актуально для ~amd64)
echo "net-misc/htbinit" >> /etc/portage/package.keywords
Установка
emerge net-misc/htbinit -av
Автозагрузка
rc-update add htbinit default
Выделить пропускную полосу 512Кбит/с для Asterisk 192.168.0.200.
На сервере-шлюзе
eth0 - интернет 2Мбит/с
eth1 - локальная сеть 100Мбит/с
Конфиг ограничение скорости скачивания из интернета
eth1
DEFAULT=30 R2Q=100
eth1-2.root
# Скорость корневого класса 100Мбит, так как других классов тут не будет RATE=100Mbit
eth1-2:10.local
# Правило для локального трафика RATE=1Kbit CEIL=100Mbit LEAF=sfq # Если из локальной сети обращаются по внутреннему адресу к шлюзу, не ограничивать RULE=192.168.0.0/24,192.168.0.0/24 # Если из локальной сети обращаются по внешнему адресу к шлюзу, не ограничивать RULE=82.24.110.14/32,192.168.0.0/24 PRIO=10
eth1-2:20.voip
# Гарантированная скорость 512Кbit, для трафика проходящего к 192.168.0.200 RATE=512Kbit CEIL=2Mbit LEAF=sfq RULE=*,192.168.0.200 PRIO=1
eth1-2:30.all
# Правило по умолчанию. Оставшийся трафик будет интернет трафиком. RATE=1Kbit CEIL=1536Kbit LEAF=sfq PRIO=10
eth1-2:20.voip
RATE=2Mbit CEIL=2Mbit
Обсуждение
tc -s class show dev eth1
Вот ещё бы по протам показали, как например урезать FTP, HTTPS. Было был намного приятнее :)
Пример для ssh — создаем файл eth0-2:10.ssh. В имени файла через двоеточие указан id родительского класса 2 и id текущего класса — 10. Идентификаторы для класса вы можете выбирать произвольно.
Взято отсюда