Шейпер в linux просто

Linux раньше был гораздо сложнее чем сейчас, поэтому я любил BSD, но все меняется =). Не так давно я собрал себе на работе шлюз на базе ubuntu server 10.04 LTS в силу удобства и долгой поддержки, помимо фаервола в виде iptables мне был необходим шейпер. Честно сказать не ожидал, что это будет так сложно, в современных ядрах уже включен iproute2 и соответственно tc (trafik shaper), но настройка не так тривиальна как кажется в отличие от того же dummynet во bsd системах. Итак приступим к настройке

Можно настроить tc, но правила для меня оказались слишком сложны и я не стал разбираться, потому что нет ни времени ни желания, поэтому мы воспользуемся скриптом htb.init.

Первым делом скачиваем htb.init последняя версия 0.8.5. Далее перемещаем его в /etc/init.d и даем более адекватное название типа htb, еще нужно выставить chmod +x на него и в самом скрипте найти HTB_PATH и поменять там путь на адекватный типа /etc/htb(папку нужно тоже создать), все на этом установка скрипта  завершена и после создания конфигурационных файлов все будет работать.
Управлять можно только исходящим из интерфейса трафиком, это стоит учесть при составлении конфигурационных файлов.
Допустим eth0 смотрит в Интернет, а eth1 локальный интерфейс.
создаем необходимый минимум:
типа для «исходящего» трафика.
/etc/htb/eth0
DEFAULT=30
R2Q=100

/etc/htb/eth0-2.root
#Наша скорость интернет
RATE=4000Kbit
CEIL=4000Kbit

/etc/htb/eth0-2:10.www
RATE=128Kbit
CEIL=1024Kbit
LEAF=sfq
RULE=*:80
PRIO=10

/etc/htb/eth0-2:30.other
# default class for outgoing traffic
RATE=128Kbit
CEIL=2048Kbit
LEAF=sfq
PRIO=30

для водящего по аналогии.

Стоит отметить что это очень удобное деление, но в каждом конкретном случае стоит адаптироваться в зависимости от скорости, количества клиентов и важности трафика.

Вот описание параметров

DEFAULT=30 : указывает номер класса, куда попадает трафик не попавший ни под одно правило. Класс ‘по умолчанию’ задается без правила RULE. По умолчанию 0
R2Q=10 : точность шейпера. default 10
RATE=1Mbit : выделенная (гарантированная) пропускная способность очереди, задается в Kbit, Mbit или bps (bytes per second)
CEIL=3MBit : максимальная пропускная способность очереди. default CEIL=RATE
Для корректной работы скрипта, сумма всех RATE дочерних классов (очередей) не должна превышать RATE корневого класса, а значение CEIL в каждой очереди не должно превышать значение в корневом классе.

BURST= : default computed
CBURST=
: default computed
PRIO= : приоритет трафика очереди к другим очередям в классе. Чем меньше число, тем выше приоритет.default 0
LEAF=none : правило распределения внутри самой очереди. default «none»
LEAF=sfq — равномерное распределение между участниками очереди.
pfifo -, bfifo — …
MTU= : 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=[…/];[/][,[/]]
TIME=60123/18:00-06:00;256Kbit/10Kb,384Kbit
TIME=18:00-06:00;256Kbit

REALM=[srealm,][drealm] : по всей видимости именное обозначение направлений
REALM=russia,internet

Не знаю как это проверить командами, именно работоспособность, но например если поставить RATE=5Kbit
CEIL=5Kbit
в eth1 правиле где www 80 порт, то будет сразу видно как все медленно, на любой скорости, а это значит, что мы добились чего хотели =).

Прокомментировать

XHTML: Вы можете использовать эти тэги для форматирования текста: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>