Шейпер в 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=
CBURST=
PRIO=
LEAF=none : правило распределения внутри самой очереди. default «none»
LEAF=sfq — равномерное распределение между участниками очереди.
pfifo -, bfifo — …
MTU=
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 порт, то будет сразу видно как все медленно, на любой скорости, а это значит, что мы добились чего хотели =).