Категорії
Linux

Шейпер под линукс

Для тех, кто работал с шейпером под FreeBSD (ipfw, pf) настройка шейпера под линукс может вызвать шок: чего только стоят правила в стиле tc! Для облегчения была написана утилита htb, которая по сути является конвертором “простых” переменных/правил в правила в стиле tc.

Тестовый стенд: Centos linux 6.3.

0) Введение

У нас в сервере 1 сетевой интерфейс (который будет внешним) и ещё один виртуальный tun0 (будет считаться внутренним). Пользователи через openvpn будут подключаться к этому серверу и выходить через него в интернет. Соответственно так же будет настроен NAT на eth0.

1) Установка

HTB представляет собой обычный shell-скрипт, поэтому переходим в папку /etc/init.d и скачиваем туда скрипт, например, с этого адреса:

#cd /etc/init.d
#wget http://ras.pl.ua/pub/linux/htb.init
#mv -f ./htb.init ./htb
#chmod 755 ./htb
#chkconfig htb on
#mkdir /etc/htb

Открываем файл /etc/init.d/htb и приводим в нём строку к виду:

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

2) Настройка

Правила шейпера строятся на основе файлов, которые нужно создавать в каталоге /etc/htb, отсюда их будет читать htb и строить правила для утилиты tc. Переходим в каталог /etc/htb и следуем инструкциям

– внутренний интерфейс tun0 (входящий трафик)

Создадим основные файлы для интерфейса tun0 такого содержания:

DEFAULT=9
R2Q=100

Этот файл указывает номер класса в который попадет весь не классифицированный трафик и точность шейпера, чем меньше значение R2Q тем меньше погрешности в плюс или минус по скорости, в Kbit/sec.
Далее создаём файл tun0-2.root описания корневого класса интерфейса такого содержания (указывается физическая скорость интерфейса, в данном случае это 100 мегабит)

RATE=100Mbit

Теперь непосредственно сами правила для компьютеров сети. Создаём файл tun0-2:5:1006 такого содержания (максимальная скорость на один компьютер 10 мегабит, гарантированная — 1 мегабит (можно ставить и одинаковые цифры)):

CEIL=10Mbit
RATE=1Mbit
PRIO=5
LEAF=sfq
RULE=10.11.0.6

Для каждого хоста нужно создать отдельно файл и указать в нём правильный IP-адрес.

А так же правило (скорость 1 мбит) для всего остального трафика (создаём файл tun0-2:9.default такого содержания)

RATE=1Mbit
PRIO=5
LEAF=sfq

– внешний интерфейс eth0 (исходящий трафик)

Создадим основные файлы для интерфейса eth0 такого содержания:

DEFAULT=9
R2Q=100

Этот файл указывает номер класса в который попадет весь не классифицированный трафик и точность шейпера, чем меньше значение R2Q тем меньше погрешности в плюс или минус по скорости, в Kbit/sec.
Далее создаём файл eth0-2.root описания корневого класса интерфейса такого содержания (указывается физическая скорость интерфейса, в данном случае это 100 мегабит)

RATE=100Mbit

Теперь непосредственно сами правила для компьютеров сети. Так как исходящий трафик у нас натится (SNAT, MASQUERADE) в один внешний IP-адрес, не получится строить правила на основе IP-адресов. Поэтому будут использованы метки, которые будут ставиться фаерволом (iptables), об этом ниже. Таких правил нужно создать по количеству компьютеров в сети, опять же последняя цифра это 1000 + последний октет IP-адреса, метка (MARK) имеет такое же значение. Создаём файл eth0-2:5:1006 такого содержания (максимальная скорость на один компьютер 10 мегабит, гарантированная — 1 мегабит (можно ставить и одинаковые цифры)):

CEIL=10Mbit
RATE=1Mbit
PRIO=5
LEAF=sfq
MARK=1006

Для каждого хоста нужно создать отдельно файл и указать в нём правильный IP-адрес.

А так же правило (скорость 1 мбит) для всего остального трафика (создаём файл eth0-2:9.default такого содержания)

RATE=1Mbit
PRIO=5
LEAF=sfq

Так же нужно добавить правила в файервол для меток пакетов:

iptables -t mangle -A PREROUTING -s 10.11.0.6 -j MARK --set-mark 1006

Аналогично создать правила для остальных адресов.

3) Запуск.

После того, как все файлы настроек созданы, переходим к компиляции и запуску htb:

#/etc/init.d/htb compile
#/etc/init.d/htb start

При последующих перезапусках, используйте restart, вместо start. Для отключения шейпера – используйте stop.

Примечание.

Возможно htb будет ругаться на команду find, тогда уберите ‘-dept 1‘ из скрипта /etc/init.d/htb (в 2-х местах). Обязательно после каждого изменения сначала compile, потом restart.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff