Ограничение канала (HTB Shaper)

Домашний интернет 30 Мбит/c. Уж никогда не думал, что его будет мало и придется делать приоритет определенного трафика. И так, имеем несколько компов, телевизор, телефоны, тв приставка и все это хозяйство желает интернета. Да и конечно куда без торрентов, ftp, vpn, iptv и прочего. Настраивать будем при помощи скрипта HTB.init
И так, начнем. Мы имеем интернет-шлюз работающий CentOS 6.2 с двумя интерфейсами  eth0(Локальная сеть), eth1(Интернет) и скрипт HTB.init. Скрипт настраивает пропускную способность канала с помощью утилит ip, tc. Управлять можно только исходящим из интерфейса трафиком, поэтому для eth0 будут правила для upload трафика пользователей, а для — eth1 — download трафика.
Сайт проекта: http://sourceforge.net/projects/htbinit/
Задача:
Разделить максимальную скорость для каждого клиента поровну. При загруженном канале, пропускную способность канала делить поровну.
Приоритет по трафику выстроим, исходя из списка ниже:

ssh — администрирование серверов
web — весь веб трафик
ftp — трафик с ftp сервера, находящегося на шлюзе
torrent (использую transmission и порт 51413)
не классифицируемый трафик

также хотелось бы, чтобы локальный трафик вообще не резался )

Подготавливаем
Скачиваем

wget https://xaxatyxa.ru/download/htb.init-v0.8.5.tar

Распаковываем

tar -xf htb.init-v0.8.5.tar

Скопируем в папку, где лежат все службы(демоны)

cp htb.init-v0.8.5 /etc/init.d/htb

Подправим пути. (Делается это только для удобства)

vi /etc/init.d/htb

Ищем строчки

### Default HTB_PATH & HTB_CACHE settings
HTB_PATH=${HTB_PATH:-/etc/sysconfig/htb}
HTB_CACHE=${HTB_CACHE:-/var/cache/htb.init}

И меняем

HTB_PATH=${HTB_PATH:-/etc/sysconfig/htb}

на

HTB_PATH=${HTB_PATH:-/etc/htb}

Создадим папку, где будут лежать конфигурационные файлы (если правили)

mkdir -p /etc/htb

Создадим папку, где будет лежать кеш

mkdir -p /var/cache/htb.init

Переходим в папку с конфигурационными файлами

cd /etc/htb/

Настраиваем правила для eth1 (трафик идущий в интернет):

echo -e "DEFAULT=100\n""R2Q=100" >> /etc/htb/eth1

R2Q — коэффициент, определяющий соотношение точности/скорости работы шейпера
DEFAULT — идентификатор класса, в который попадают пакеты, если они не попадают под другие правила.

Описываем ширину канала

echo -e "RATE=30Mbit\n""CEIL=30Mbit" >> /etc/htb/eth1-2.full30Mbit

Корневой класс интерфейса eth1. Ограничение максимальной скорости отдачи до 30 мегабит.

SSH-трафик

echo -e "RATE=128Kbit\n""CEIL=30Mbit\n""RULE=*:22\n""PRIO=1\n""BURST=100Kb" >> /etc/htb/eth1-2:10.ssh

RATE — гарантируемая скорость для клиента.
CEIL — максимальная скорость для клиента при свободном канале.
RULE — правило, задающее, какой трафик будет попадать в этот класс.
PRIO — приоритет трафика очереди к другим очередям в классе.
BURST — максимальный объем трафика, который будет передан на максимальной скорости перед тем, как перейти к передаче данных других классов

Веб-трафик

vi /etc/htb/eth1-2:20.web

Содержимое файла:

RATE=1Mbit
CEIL=30Mbit
BURST=15k
LEAF=sfq
RULE=*:80

RATE — гарантируемая скорость для клиента.
CEIL — максимальная скорость для клиента при свободном канале.
LEAF — указывает, что класс является одним из листов дерева, то есть в него попадает трафик, удовлетворяющий определенному правилу (RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса скорость распределялась равномерно между сессиями.
RULE — правило, задающее, какой трафик будет попадать в этот класс. В данном случае в класс попадает весь веб-трафик (80 порт).

FTP-трафик

vi /etc/htb/eth1-2:30.ftp

Содержимое файла:

RATE=128Kbit
CEIL=30Mbit
RULE=*:21
PRIO=1

Torrent-трафик

vi /etc/htb/eth1-2:30.torrent

Содержимое файла:

RATE=128Kbit
CEIL=30Mbit
RULE=*:51413
PRIO=1

Не классифицируемый трафик

echo -e "RATE=30Mbit\n""CEIL=30Mbit\n""LEAF=sfq" >> /etc/htb/eth1-2:100.default

Настраиваем правила для eth0 (трафик идущий в локальную сеть):

echo -e "DEFAULT=100\n""R2Q=100" >> eth0

Описываем ширину канала

echo -e "RATE=100Mbit" >> eth0-2.full100Mbit

Локальный трафик

vi /etc/htb/eth0-2:10.local

Содержимое файла:

RATE=1Kbit
CEIL=100Mbit
LEAF=sfq
# из локальной сети по внутреннему адресу шлюза
RULE=192.168.0.0/24,192.168.0.0/24
# из локальной сети по внешнему адресу шлюза
RULE=ВАШ_ВНЕШНИЙ_ИП/МАСКА,192.168.0.0/24
PRIO=10

SSH-трафик

echo -e "RATE=256Kbit\n""CEIL=30Mbit\n""LEAF=sfq\n""RULE=*:22\n""PRIO=10" >> eth0-2:20.ssh

Веб-трафик

vi /etc/htb/eth0-2:30.web

Содержимое файла:

RATE=1Mbit
CEIL=30Mbit
BURST=15k
LEAF=sfq
RULE=*:80

Не классифицируемый трафик

echo -e "RATE=1Kbit\n""CEIL=30Mbit\n""LEAF=sfq\n""PRIO=30" >> eth0-2:100.default

Проверить работу скрипта htb.init, можно просмотром конфигурации командами:

tc class show dev eth0
tc qdisc show dev eth0
tc class show dev eth1
tc qdisc show dev eth1

[download id=»73″ format=»1″]
[download id=»74″ format=»1″]

Share

You may also like...

2 комментария

  1. XaXaTyXa:

    Спасибо.
    Хотя я бы уже переписал. Что немного позже и сделаю 

  2. qw:

    Ага, прям так торрент трафик и перекрыл 😀

Добавить комментарий для XaXaTyXa Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *