Ограничение скорости HTB.init
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, т.е. накладываются ее более жесткие ограничения.
Параметры
- DEFAULT=30 : указывает номер класса, куда попадает трафик не попавший ни под одно правило. Класс 'по умолчанию' задается без правила RULE (но это не значит, что туда будет автоматом попадать все, наоборот, в эту очередь ничего не пойдет). default 0
- R2Q=10 : точность шейпера. default 10
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.
- DCACHE=no : Не знаешь не трогай. default «no»
- RATE=5Mbit : выделенная (гарантированная) пропускная способность очереди, задается в Kbit, Mbit или bps (bytes per second)
- CEIL=6MBit : максимальная пропускная способность очереди. default CEIL=RATE
Для корректной работы скрипта, сумма всех RATE дочерних классов (очередей) не должна превышать RATE корневого класса, а значение CEIL в каждой очереди не должно превышать значение в корневом классе.
- BURST=<bytes> : default computed
- CBURST=<bytes> : default computed
- PRIO=<number> : приоритет трафика очереди к другим очередям в классе. Чем меньше число, тем выше приоритет.default 0
- LEAF=none : правило распределения внутри самой очереди. default «none»
LEAF=sfq - равномерное распределение между участниками очереди.
pfifo -, bfifo - …
- MTU=<bytes> : default «1600»
- RULE= : правила, определяющий трафик, который должен проходить через данную очередь. В одном файле могут присутствовать сразу несколько правил.
RULE=[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]
Если трафик попадает по условиям в очередь -2:10 (например где правило задано по маске),
то дальше он уже не будет проверят условия в -2:20 (где допустим будет описано правило с конкретно этим ip), -2:30
- MARK=101 : трафик имеющий метку.
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 : временные параметры
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=[srealm,][drealm] : по всей видимости именное обозначение направлений
REALM=russia,internet
Подготовка скрипта
Ubuntu
Скачать скрипт с сайта или прямой ссылкой
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
Gentoo
Размаскировать (актуально для ~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
При тестах правило очередь -2:20 должна была отнимать весь трафик от -2:30.all, но реально делились почти пополам.
eth1-2:20.voip
RATE=2Mbit CEIL=2Mbit
Описание HTB DRR TBF методов
http://xgu.ru/wiki/QoS_%D0%B2_Linux
http://www.drivermania.ru/articles/delim-internet-ili-qos-na-mikrotik.html
Обсуждение
tc -s class show dev eth1
Вот ещё бы по протам показали, как например урезать FTP, HTTPS. Было был намного приятнее :)
Пример для ssh — создаем файл eth0-2:10.ssh. В имени файла через двоеточие указан id родительского класса 2 и id текущего класса — 10. Идентификаторы для класса вы можете выбирать произвольно.
Взято отсюда