[[Ограничение скорости HTB.init]]

Ограничение скорости 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
Так что, говорить о реальной работе RATE не приходится, главное ограничение CEIL во всех случаях работает безотказно.





Обсуждение

lexa, 2009/06/30 13:36

tc -s class show dev eth1

Dmitry, 2010/03/11 14:40

Вот ещё бы по протам показали, как например урезать FTP, HTTPS. Было был намного приятнее :)

xamster, 2011/01/13 20:47

Пример для ssh — создаем файл eth0-2:10.ssh. В имени файла через двоеточие указан id родительского класса 2 и id текущего класса — 10. Идентификаторы для класса вы можете выбирать произвольно.

# class for outgoing ssh
RATE=128Kbit
CEIL=2Mbit
RULE=*:22
PRIO=1
BURST=100Kb
Взято отсюда

Ваш комментарий. Вики-синтаксис разрешён:
90 -3 = ?
 
howto/htb.txt · Последние изменения: 2012/06/03 21:52 (внешнее изменение)
Gentoo Linux Driven by DokuWiki