Rate this post

Данный материал очень пригодится тем людям, которые хотят настроить контроль трафика внутри компании, или в небольшом офисе. В частности, будет рассматриваться такой метод лимитирования, как шейпинг трафика на платформе CentOS 7. Итак, приступим.nnКоротко обрисуем проблему. Допустим, вы работаете за компьютером, как вдруг, скорость Интернет-соединения резко падает: сайты загружаются медленно, передача данных на сервер практически не сдвигается с места и т.д. А все потому, что один из пользователей вашей сети забирает львиную долю трафика себе.nnПричинами такого «прожорливого» поведения может быть все что угодно, начиная с вируса и заканчивая скачиванием фильма. Что же с этим делать? Во-первых, нужно создать стабильную сеть, в которой смогут работать все без исключения. А во-вторых, ограничить возможность выкачивать весь трафик всем пользователям.nnДля начала, нужно разобраться с самим лимитированием. Принцип прост: имеющийся объем трафика делим на всех участников в равной степени, чтобы никому не было обидно. Конечно, вы можете выделить более широкий канал особо нуждающимся пользователям. При этом, не нужно забывать про порты Web (80) и SMTP/POP3 (25,110), потому как они понадобятся всем для корректной работы сайтов и почтовых ящиков.nnЗадача ясна. Теперь нам понадобится инструмент, а именно — шейпер трафика. Почему именно он? Потому что он крайне полезен в условиях наличия низкоскоростного соединения. Если же вам повезло и у вас есть оптико-волоконный канал, то можете использовать любой другой удобный для вас инструмент. Простой пример: одно предприятие с каналом связи в 4 МБ и штатом в 500 сотрудников смогло эффективно и без потерь поделить трафик за счет одного лишь шейпера.nnМы будем работать, используя несколько стандартных скриптов для организации контроля, а именно:n

  • cbq.init – позволяет ограничить поток, базируясь на tc и cbq.
  • htb.init – позволяет создать правила, базируясь на tc и htb.
  • wondershaper – полностью копирует скрипт cbq.init, с одной лишь разницей: он настраивает ограничение для 1-го пользователя с привязкой к конкретному ПК под Linux.

Как вы уже поняли, мы будем проводить настройку на Linux системах. Начнем конкретизировать и перейдем к первому этапу. Сперва, нужно ограничить поток из локальной сети, смотрящей в мир. А затем разделить полученный трафик между всеми ПК. Пропускать запросы будем через шлюз, который и будет следить за лимитированием.nnnnС помощью такой реализации мы можем осуществлять контроль исключительно над исходящим трафиком. Но с помощью двух сетевых адаптеров это условие можно обойти. Для этого используется следующая схема: входящий трафик идет через enp0s8, а исходящий – через адаптер enp0s3. Шлюз настраивается за счет этой пары. Имея под рукой скрипт Wondershaper, можно ограничиться только ним, так как две сетевые платы размещаются на одном ПК.nnКонечно, можно настроить шлюз и за счет виртуального интерфейса ifb (imq). Мы будем замерять исходящий и входящий трафик с помощью доступных в Интернете сайтов. Так что, вы сможете повторить процедуру и проверить результат без особого труда. В случае с единственным ПК будем куда полезнее использовать специальное ПО для Linux speedtest-cli. Также учтите, что шейпер трафика использует kbps в качестве обозначения килобайтов, а kbit — килобитов.n

1. Замеряем скорость с помощью speedtest-cli

Данная утилита написана разработчиками сайта www.speedtest.net специально для Linux систем. Чтобы настроить его, следуйте инструкции:УстановкаnnnnЗапускnnnnРезультатnnn

2. Настройка с помощью скрипта CBQ.Init

В данном примере будем настраивать сеть с прицелом на следующий результат:n

  • Скорость входящего трафика: 5 Мбит
  • Скорость исходящего трафика: 5 Мбит
  • Адаптеры: enp0s3 — внешний, enp0s8 – внутренний

Как видите, у нас есть пара адаптеров и идентичный объем трафика для каждого из них. Допустим, что компьютеры подключены к сети и используют NAT. Для ограничения трафика используем CBQ.init. Для этого, создаем несколько файлов по пути /etc/sysconfig/cbq:nnТеперь ограничиваем исходящий трафик путем маркировки в iptables. Это поможет легче настроить сеть с помощью cbq:nnПереходим в каталог, где хранится файл с описанием скорости:nnИ создаем новый файл:nnnnА теперь настраиваем входящий трафик. Для этого создаем новый файл:nnnnСоздаем еще один файл:nnnnПроверяем работу на любой машине:nnПолучаем 40 Мбит. То, что нужно. Теперь посмотрим, что нам покажет специализированный сайт:nnС задачей справились! Осталось только настроить автозапуск для шейпера трафика:nnn

3. Настройка с помощью скрипта HTB.INIT

В данном примере будем настраивать сеть с прицелом на следующий результат:n

  • Скорость входящего трафика: 8 Мбит
  • Скорость исходящего трафика: 1 Мбит
  • Адаптеры: enp0s3 — внешний, enp0s8 – внутренний

Данный скрипт отлично подойдет для нашей задачи, так как он позволяет лимитировать входящий и исходящий трафик с помощью сетевой платы локальной сети, а также контролировать исходящие запросы, используя внешнюю плату шлюза.nnНаша есть будет брать Интернет из модема ADSL, который по умолчанию не позволяет превышать исходящий трафик. Итак, нужно настроить шейпинг трафика равномерно для каждого подключенного к сети ПК. Для начала, необходимо указать зависимость:nnnnНастраиваем автозагрузкуnnnnФормируем каталог под файлы конфигурации:nnПереходим в него:nnНастроим входящий трафик в первую очередь, обращаясь к плате enp0s8. Для этого, создадим файл корня enp0s8:nnПрописываем следующее:nnСтоит отметить, что данная строка позволяет учитывать весь трафик, который считается вне шейпера.nnnnПрописываем следующее:nnДанная строка показывает системе имеющуюся скорость адаптера.nnnnnnnnnnОбратите внимание на запятую в конце. Она используется для обозначения шейпинга исходящего трафика. Если же не указать запятую, то система воспримет эту строку в качестве лимитирования входящего трафика.nnnnnnnnnnВ итоге мы получаем разделение 8 Мбит между всеми ПК, которые работают в сети 10.168.50.0/24. Этот метод удобен тем, что он позволяет предоставить пользователю весь имеющийся трафик, если он работает в сети один. Наглядный результат:nnnnТеперь переходим к ограничению исходящего трафика. Для этого формируем файл:nnИ прописываем в нем:nnnnnnnnnnВ результате получаем нужное нам ограничение. Принцип работы аналогичен шейпингу входящего трафика. Скриншот:nnОбратите внимание, что мы не ставили ограничение на работу локальной сети, так как в нашем случае это не имеет никакого смысла. Осталось лишь настроить систему контроля:nnКак только вы запустите скрипт, вы получите сообщение об ошибке следующего содержания:nnНе пугайтесь, так как это не критично и никак не помешает стабильной работе.nТакже не забывайте иногда чистить кэш с помощью простой команды:n

4. Настройка с помощью скрипта Wondershaper для единичного ПК с одной платой

В данном примере будем настраивать сеть с прицелом на следующий результат:n

  • Скорость входящего трафика: 5 Мбит
  • Скорость исходящего трафика: 10 Мбит
  • Адаптеры: enp0s3 — внешний

Мы уже описывали принцип работы данного скрипта, поэтом не будет откладывать в дело в долгий ящик. Сразу к делу!nnУстановка скриптаnnnnСинтаксис следующий:nnНапример:nn50000 – это входящий трафик объемом в 5 Мбит, а 10000 – это исходящий трафик объемом в 1 Мбит. В итоге, мы получаем:nnКак видите, объем входящего трафика составляет 417 Кб, что нам и нужно. Не стоит пугаться, так как скрипт может выдать несколько странных сообщений. Вот несколько из них:nnnnСкрипт позволяет использовать еще несколько дополнительных возможностей. В частности:n

  • wondershaper [интерфейс] – позволяет вывести текущее состояние
  • wondershaper [clear] – полностью удаляет все созданные правила

Найти скрипт можно в директории /sbin/wondershaper.