Ограничение пропускной ширины канала (шейпинг) средствами Linux

В последнее время, грань между рабочим/домашним компьютером стирается. Все эти облака, концепции BYOD (bring your own device), а так же тотальное покрытие 3G/4G делает пользователей не разборчивыми в своих желаниях. И если, он нашел интересное видео, то почему бы его не скачать на телефон, что бы просмотреть со смартфона, стоя в пробке? Но корпоративные каналы не всегда могут поспевать за такими “потребностями” пользователей.

В поисках решения для типовых систем Linux (CentOS, Debian) мы натолкнёмся на упоминания встроенной утилиты tc (traffic control) или lartc (Linux Advanced Routing & Traffic Control). Однако изучение и написание правил для них займёт достаточное время, а для достижения результата в кратчайшие сроки мы рекомендуем воспользоваться разработкой htbinit.

Скачиваем с скрипт для запуска, прописываем в системе как сервис, и в автозагрузку.

wget http://sourceforge.net/projects/htbinit/files/HTB.init/0.8.5/htb.init-v0.8.5/download
mv htb.init-v0.8.5 /etc/init.d/htb.init
chmod 755 /etc/init.d/htb.init
chkconfig —add htb.init
chkconfig htb.init on

Теперь переходим к настройкам. Как и было сказано, настройки просты и понятны даже новичкам. Так же стоит отметить, что скрипт ограничивает трафик только в исходящем направлении. Теперь определяемся с названием интерфейса, на котором будем ограничивать трафик. Сами настройки шейпера и все правила буду храниться в нескольких файлах. Название файла содержит название интерфейса, приоритет и комментарий. В самом же файле указываем ограничения скорости, прирост, а так же порты, трафик идущий на которые будет ограничен.

mkdir -p /etc/sysconfig/htb
cd /etc/sysconfig/htb

Создадим корневой файл eth0:

vi eth0
DEFAULT=20

Здесь строчка DEFAULT=20 задает параметр, по которому будет учитываться трафик не попадающий ни под одно правило шейпера.
Теперь создадим файл, который будет описывать максимальную скорость этого интерфейса:

vi eth0-2.full20mbit
RATE=20Mbit
CEIL=20Mbit

Здесь RATE описывает гарантированную пропускную способность, а CEIL описывает максимальную доступную скорость.
А теперь давайте займемся самими ограничениями (нарезкой канала).
Создадим файл eth0-2:10.ssh:

vi eth0-2:10.ssh
RATE=128Kbit
CEIL=20Mbit
RULE=*:22
PRIO=1
BURST=128Kb

Здесь мы даем гарантированную ширину канала в 128Кбит для сервиса ssh.
Параметр RATE как раз описывает эту скорость. Как и выше было написано, CEIL — это максимальная доступная скорость, если канал не нагружен.
Параметр RULE описывает порт, который нужно контролировать (наш сервис ssh).
Приоритет задается параметром PRIO, у нас он имеет наивысшее значение.
Создадим файл eth0-2:11.web:

vi eth0-2:10.web
RATE=256Kbit
CEIL=20Mbit
RULE=*:3128
LEAF=sfq
PRIO=1

Здесь параметр LEAF=sfq отвечает за равномерное распределение канала между участниками локальной сети: всем достанется поровну.

vi eth0-2:20.default
RATE=256Kbit
CEIL=20Mbit
LEAF=sfq
PRIO=5

Теперь займемся адаптером локальной сети eth1, здесь нет ограничений.

vi eth1-2.full100mbit
RATE=100Mbit
CEIL=100Mbit
vi eth1-2:10.localnet
RATE=10Kbit
CEIL=100Mbit
LEAF=sfq
RULE=192.168.50.0/24
PRIO=10

Последний шаг — запуск системы контроля трафика с помощью следующей команды:

service htb compile

В итоге мы получаем легко читаемый конфиг. Теперь выполним команду для проверки наших правил. Если всё ок — применяем, а если будут вопросы — пишите тут: с радостью ответим.

service htb start

 

Валерий Кулик

Автор: Виктор Лукаш