Связаться по:
[email protected]

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Разбираем шейпинг трафика на CentOS 7

5/5 - (2 голоса)

Данный материал очень пригодится тем людям, которые хотят настроить контроль трафика внутри компании, или в небольшом офисе. В частности, будет рассматриваться такой метод лимитирования, как шейпинг трафика на платформе CentOS 7. Итак, приступим.

Коротко обрисуем проблему. Допустим, вы работаете за компьютером, как вдруг, скорость Интернет-соединения резко падает: сайты загружаются медленно, передача данных на сервер практически не сдвигается с места и т.д. А все потому, что один из пользователей вашей сети забирает львиную долю трафика себе.

Причинами такого «прожорливого» поведения может быть все что угодно, начиная с вируса и заканчивая скачиванием фильма. Что же с этим делать? Во-первых, нужно создать стабильную сеть, в которой смогут работать все без исключения. А во-вторых, ограничить возможность выкачивать весь трафик всем пользователям.

Для начала, нужно разобраться с самим лимитированием. Принцип прост: имеющийся объем трафика делим на всех участников в равной степени, чтобы никому не было обидно. Конечно, вы можете выделить более широкий канал особо нуждающимся пользователям. При этом, не нужно забывать про порты Web (80) и SMTP/POP3 (25,110), потому как они понадобятся всем для корректной работы сайтов и почтовых ящиков.

Задача ясна. Теперь нам понадобится инструмент, а именно — шейпер трафика. Почему именно он? Потому что он крайне полезен в условиях наличия низкоскоростного соединения. Если же вам повезло и у вас есть оптико-волоконный канал, то можете использовать любой другой удобный для вас инструмент. Простой пример: одно предприятие с каналом связи в 4 МБ и штатом в 500 сотрудников смогло эффективно и без потерь поделить трафик за счет одного лишь шейпера.

Мы будем работать, используя несколько стандартных скриптов для организации контроля, а именно:

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

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

С помощью такой реализации мы можем осуществлять контроль исключительно над исходящим трафиком. Но с помощью двух сетевых адаптеров это условие можно обойти. Для этого используется следующая схема: входящий трафик идет через enp0s8, а исходящий – через адаптер enp0s3. Шлюз настраивается за счет этой пары. Имея под рукой скрипт Wondershaper, можно ограничиться только ним, так как две сетевые платы размещаются на одном ПК.

Конечно, можно настроить шлюз и за счет виртуального интерфейса ifb (imq). Мы будем замерять исходящий и входящий трафик с помощью доступных в Интернете сайтов. Так что, вы сможете повторить процедуру и проверить результат без особого труда. В случае с единственным ПК будем куда полезнее использовать специальное ПО для Linux speedtest-cli. Также учтите, что шейпер трафика использует kbps в качестве обозначения килобайтов, а kbit — килобитов.

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

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

Установка

Запуск

Результат

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

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

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

Как видите, у нас есть пара адаптеров и идентичный объем трафика для каждого из них. Допустим, что компьютеры подключены к сети и используют NAT. Для ограничения трафика используем CBQ.init. Для этого, создаем несколько файлов по пути /etc/sysconfig/cbq:

Теперь ограничиваем исходящий трафик путем маркировки в iptables. Это поможет легче настроить сеть с помощью cbq:

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

И создаем новый файл:

А теперь настраиваем входящий трафик. Для этого создаем новый файл:

Создаем еще один файл:

Проверяем работу на любой машине:

Получаем 40 Мбит. То, что нужно. Теперь посмотрим, что нам покажет специализированный сайт:

С задачей справились! Осталось только настроить автозапуск для шейпера трафика:

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

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

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

Данный скрипт отлично подойдет для нашей задачи, так как он позволяет лимитировать входящий и исходящий трафик с помощью сетевой платы локальной сети, а также контролировать исходящие запросы, используя внешнюю плату шлюза.

Наша есть будет брать Интернет из модема ADSL, который по умолчанию не позволяет превышать исходящий трафик. Итак, нужно настроить шейпинг трафика равномерно для каждого подключенного к сети ПК. Для начала, необходимо указать зависимость:

Настраиваем автозагрузку

Формируем каталог под файлы конфигурации:

Переходим в него:

Настроим входящий трафик в первую очередь, обращаясь к плате enp0s8. Для этого, создадим файл корня enp0s8:

Прописываем следующее:

Стоит отметить, что данная строка позволяет учитывать весь трафик, который считается вне шейпера.

Прописываем следующее:

Данная строка показывает системе имеющуюся скорость адаптера.

Обратите внимание на запятую в конце. Она используется для обозначения шейпинга исходящего трафика. Если же не указать запятую, то система воспримет эту строку в качестве лимитирования входящего трафика.

В итоге мы получаем разделение 8 Мбит между всеми ПК, которые работают в сети 10.168.50.0/24. Этот метод удобен тем, что он позволяет предоставить пользователю весь имеющийся трафик, если он работает в сети один. Наглядный результат:

Теперь переходим к ограничению исходящего трафика. Для этого формируем файл:

И прописываем в нем:

В результате получаем нужное нам ограничение. Принцип работы аналогичен шейпингу входящего трафика. Скриншот:

Обратите внимание, что мы не ставили ограничение на работу локальной сети, так как в нашем случае это не имеет никакого смысла. Осталось лишь настроить систему контроля:

Как только вы запустите скрипт, вы получите сообщение об ошибке следующего содержания:

Не пугайтесь, так как это не критично и никак не помешает стабильной работе.
Также не забывайте иногда чистить кэш с помощью простой команды:

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

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

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

Мы уже описывали принцип работы данного скрипта, поэтом не будет откладывать в дело в долгий ящик. Сразу к делу!

Установка скрипта

Синтаксис следующий:

Например:

50000 – это входящий трафик объемом в 5 Мбит, а 10000 – это исходящий трафик объемом в 1 Мбит. В итоге, мы получаем:

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

Скрипт позволяет использовать еще несколько дополнительных возможностей. В частности:

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

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

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

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.