Ограничение пропускной ширины канала (шейпинг) средствами 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

Валерий Кулик
http://efsol.ru/solutions/data-protection.html

Комментариев нет:

Отправить комментарий