Нет трафик для линукс

Мониторинг (измерение) потребляемого траффика в Linux

Однажды мне потребовалось измерить количество трафика, которое «пожирает» некоторое приложение. Один из способов такого измерения — это установить прокси. Но что, если не хочется ставить прокси-сервер. Мне вот не хотелось. В поисках других способов я сначала перерыл Хабр, потом интернет. Так как я в своё время потратил на это много времени, то сейчас я создаю эту заметку, чтобы у других такой проблемы не возникло.

ВАЖНО:
Этот метод работает, если мы знаем по какому адресу (адресам) обращается наше приложение, или же с какого/каких портов.

Пошаговая инструкция

1. iptraf

iptraf — это небольшая программа, которая умеет мониторить всю сетевую активность компьютера.
Исходники и бинарники можно загрузить с сайта iptraf.

В случае Ubuntu установить iptraf можно выполнив команду:
sudo apt-get install iptraf

2. Запускаем!

В терминале пишем: iptraf

3. Настраиваем

Надо включить логирование (иначе программа ограничиться выводом на экран). Делается это, очевидно, в разделе «Configure».

4. Запуск мониторинга

Уходим из настроек, жмём «IP traffic monitor» и выбираем путь к файлу, куда будем логировать сетевую активность.

После этого мы должны увидеть такую картину:

Это всё, что нужно! Почти.

5. Анализ

Как я уже упоминал выше, нужно знать, по какому адресу/порту обращается наше приложение (трафик которого мы высчитываем).
Например, если мы хотим посчитать сколько трафика «стоит» час радио last.fm, мы должны определить следующее:
приложение last.fm обращается к адресам вроде таких:
195.24.* (last.fm не обращается к одному адресу, а обращается к диапазону адресов).
Чтобы вытащить из лога (который писался час) количество трафика, которое было съедено, я написал небольшую «программку» на java, которая этот трафик и считает:

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

Источник

Мониторинг пропускной способности и скорости сети в Linux

Вкратце: в этой статье мы перечислим некоторые утилиты с открытым исходным кодом для мониторинга сетевого трафика, пропускной способности и скорости интернета в Linux.

Мониторинг скорости интернета может оказаться ключевым шагом в диагностике вашего соединения и способен помочь вам обнаружить возможные проблемы. Это также поможет вам устранить неполадки с подключением интернета и найти узкие места.

Инструменты для мониторинга интернет-трафика и скорости сетевого соединения в Linux

Я представляю вам различные утилиты, которые помогут мониторить скорость вашего интернет соединения. Также я добавил инструкции по установке для дистрибутивов на основе Ubuntu/Debian, также данные утилиты могут быть легко установлены и в других дистрибутивах.

Неважно, если вы новичок, который хочет простых, работающих решений, или гуру, желающий получить как можно больше информации о сети, предпочитаете ли вы программы с графическим интерфейсом (GUI) или командной строкой (CLI), я помогу вам найти необходимую утилиту для определенной задачи.

1. NetSpeed ​​- расширение оболочки GNOME для пользователей ПК

NetSpeed — это расширение оболочки GNOME, которое отображает суммарные скорости загрузки и скачивания на панели gnome. При нажатии на него выводятся отдельные значения в выпадающем списке.

Это применимо, только если вы используете рабочую среду GNOME. Если еще не знакомы, прочитайте руководство, чтобы узнать, как использовать расширения GNOME Shell .

2. Fast — тестировщик скорости интернета от Netflix

Fast — это CLI-утилита с открытым исходным кодом, работающая на сервисе Netflix fast.com . Хотя код самого сайта не является открытым исходным кодом, Netflix объяснил, как он работает здесь . Fast — это идеальный инструмент для тех, кто хочет проверить скорость скачивания простым способом.

После установки вы можете запустить утилиту, напишите:

И через несколько секунд вы еще раз получите свой результат

Скорость интернета на дисплее snap Fast

3. speedtest-cli: проверка скорости загрузки и скачивания

speedtest-cli — это интерфейс командной строки с открытым исходным кодом для тестирования пропускной способности интернета с использованием speedtest.net (код самой страницы не является открытым). Это быстрый и легкий инструмент для проверки скорости загрузки и скачивания.

speedtest-cli доступен в большинстве дистрибутивов и может быть легко установлен с помощью менеджера пакетов. В Debian/Ubuntu вы можете написать следующую команду:

Установили — запустите, просто напишите:

Через несколько секунд вы получите информацию о том, какой сервер использовался для проверки вашего соединения, а также сведения о скорости вашего интернет соединения. Прочтите man speedtest, чтобы узнать о дополнительных возможностях (например, не выполнять тест скачивания командой no-download ).

4. NetHogs — проверка использования пропускной способности для каждой программы

NetHogs — это простая утилита с открытым исходным кодом, которая запускается в терминале. Вместо того, чтобы разбивать трафик по протоколу или подсети, он группирует полосы пропускания по процессам. Это очень полезно для нахождения PID зависшей программы или просто для просмотра того, что съедает вашу пропускную способность. Он опирается в основном на команду /proc , поэтому большинство функций доступно только для Linux.

К счастью, NetHogs входит во многие дистрибутивы. Это означает, что вы можете установить и удалить его с помощью обычного менеджера пакетов. В Debian/Ubuntu вы можете написать такую команду:

Чтобы запустить ее, напишите:

Удобно, что вы можете указать устройства после команды (например, sudo nethogs eth0 ). Также есть дополнительные параметры, такие как: выбор интервала для частоты обновления ( -d ), информация о версии ( -V ), режим трассировки ( -t ) и некоторые другие, о них вы можете прочитать в мануале (man nethogs ).

5. nload — мониторинг интернет-трафика в режиме реального времени

nload — консольное приложение с открытым исходным кодом, которое позволяет вам отслеживать сетевой трафик и использование полосы пропускания в режиме реального времени. Он визуализирует входящий и исходящий трафик с помощью графиков, а также предоставляет дополнительную информацию (общий объем передаваемых данных, минимальное/максимальное использование сети и др.). Это простой в использовании инструмент, который иногда очень помогает.

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

Для запуска напишите:

Вы можете посмотреть его различные параметры в мануале ( man nload ).

Читайте также:  Red room with no doors or windows

6. CBM — измеритель полосы пропускания с цветным интерфейсом

CBM — очень простая утилита, которая отображает (в цвете) сетевой трафик на всех подключенных устройствах очень лаконично.

CBM — немного устаревшая программа, которую можно найти в большинстве дистрибутивов. Поэтому устанавливать и удалять ее с помощью менеджера пакетов очень просто.

Запустить CBM так же просто, как и установить. Пишем:

Команды отображаются в нижней части вашего терминала, чтобы вы могли легко их выбрать.

7. iPerf — тестирование производительности сети между двумя хостами

iPerf — это инструмент, используемый для измерения и настройки производительности сети, который может производить стандартизированные измерения производительности для любой сети. Он имеет функциональные возможности клиента и сервера и может создавать потоки данных для измерения пропускной способности, потери данных и других параметров между двумя узлами сети в одном или обоих направлениях. Существует две версии: исходная iPerf (iPerf2) и не совместимая с предыдущей версия iPerf3.

Самый простой способ установить (или удалить) iPerf или iPerf3 — использовать менеджер пакетов. Например, в Ubuntu таким образом:

Далее запускаем нужную вам версию:

Примечание. Для всех дальнейших примеров, если вы используете iPerf3, просто замените все случаи iperf на iperf3 .

Однако при этом будут отображаться только ваши параметры. Чтобы запустить iPerf , вам нужно минимум 2 устройства: один для работы в качестве клиента и один для работы в качестве сервера . Для сервера напишите:

Это откроет устройство для прослушивания через порт 5001. Чтобы подключиться к другому устройству и запустить тест, используйте команду:

Где server_address — это, конечно, адрес сервера, к которому вы пытаетесь подключиться. Это может быть либо IP-адрес , либо что-то вроде ping.online.net . У команды iPerf3 есть список серверов для тестирования. Рекомендуется прочитать Топ-31 лучших игр для Linux, в которые можно играть бесплатно

iPerf — это широко используемый инструмент, который имеет множество конкретных применений и специальных возможностей. Я не буду вдаваться в них, поскольку это выходит за рамки этой статьи. Тем не менее, вы можете почитать о них в мануале ( man iperf / man iperf3 ) или в этой документации .

8. vnStat — логгер сетевого трафика

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

Как и многие другие сетевые инструменты, vnStat входит в большинство хранилищ дистрибутивов. Это означает, что вы можете очень легко установить (и удалить) его, используя менеджер пакетов.

Чтобы использовать его в обычном виде, напишите:

vnStat также предлагает вам расширенные возможности, такие как возможность использования базы данных (их импорт или экспорт данных в файл). Вы можете прочесть об этом в мануале ( man vnstat ). Больше примеров можно найти на официальном сайте .

9. iftop — «топ» использования сети

iftop — это бесплатный программный инструмент мониторинга c командной строкой и открытым исходным кодом, который выводит часто обновляемый список сетевых подключений между парой хостов. Соединения могут быть упорядочены по разным параметрам, но по умолчанию они упорядочены в зависимости от использования пропускной способности, при этом отображаются только «верхние» потребители пропускной способности.

Заключение

В этой статье я рассказал вам о нескольких инструментах, которые вы можете использовать для мониторинга различной статистики, касающейся производительности вашей сети. Существует инструмент, который подходит для всех, но вы можете выбрать тот, который соответствует вашим конкретным потребностям. Я надеюсь, что эта статья была хорошим введением в мир интернет-мониторинга.

Какой ваш любимый инструмент и как вы его используете? Дайте нам знать в разделе комментариев!

Источник

Ограничиваем входящий и исходящий трафик в Linux

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

Какие есть способы ограничения трафика?

Для того, чтобы ответить на этот вопрос нужно определиться для чего этот трафик ограничивать вообще.
Взяв за основу мою сеть из, примерно, 50 рабочих мест, которые выходят в интернет через шлюз, под управлением ОС Ubuntu и некоторые из пользователей пользуются локальными ресурсами на этом сервере по протоколу SMB.
Моя цель ограничить пользователям скорость передачи данных в Интернет со справедливым разделением полосы пропускания между ними.

Исходя из моих задач, для ограничения полосы пропускания можно использовать следующие методы:
1. Ограничение с помощью прокси-сервера Squid.
Данный метод позволяет довольно гибко контролировать весь www,ftp трафик пользователей с возможностью гибкого ограничения скорости пропускания.
2. Использование traffic control из iproute2.
Очень гибкий и оптимальный метод ограничения трафика, но не предоставляющий контроля над WWW трафиком, как в предыдущем методе.
3. Конечно возможно ограничить скорость путём использования модуля –m limit для iptables – но считаю это неприемлемым.

В общем я решил остановиться на методе ограничения трафика с помощью пакета iproute2.

Как уже упоминал, я использую сервер: OS Ubuntu 10.04, ядро 2.6.32-30. В сервере 3 интерфейса: eth0 – внутренняя сеть, eth1 — провайдер 1, eth2 – провайдер 2.

Задача: ограничить скорость входящего и исходящего трафика пользователей с приоритезацией трафика по классам, исходя из некоторых условий. Локальный трафик не ограничивать.

Представим ситуацию, когда пользователь установил соединение с youtube.com и смотрит какой-нибудь ролик в HD-качестве. Основная часть трафика направляется от сервера, в данном случае youtube.com к пользователю. Учитывая, что весь трафик проходит через наш шлюз, мы можем повлиять на скорость передачи этого трафика путем установки шейпера трафика на интерфейсе внутренней сети.
Похожая ситуация происходит, когда пользователь загружает фотоотчет о проведенном отпуске, состоящий из 300 фотографий в разрешении 5000х3500 пикселей на какой-нибудь сервис хранения фотографий в интернете.

Естественно, что при отсутствии системы ограничения трафика этот пользователь займёт весь канал и остальным пользователям не будет предоставлена нормальная скорость работы с Интернет. Но мы не может ограничить скорость отправки данных пользователем на внешнем интерфейсе сервера, т.к. для доступа пользователей в Интернет используется NAT, а, учитывая, что шейпинг трафика выполняется после преобразования адресов, то на внешнем интерфейсе сервера уже не будет пакетов с внутренними адресами сети.

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

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

Читайте также:  Запрет перезагрузки windows 10 после обновления

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

Для того чтобы во время занятия пользователем всей полосы пропускания, ограниченной ему на шлюзе, для скачивания какого-нибудь большого объема данных и при этом мог нормально пользоваться ssh и чтобы у него работал ping – я использовал приоритезацию трафика.

Я расставил следующие приоритеты трафика:

  1. icmp
  2. udp,ssh
  3. tcp sport 80
  4. остальной неклассифицированный трафик

Чем ниже параметр – тем выше приоритет трафика.

Дисциплины, классы, фильтры

Как уже было мной отмечено, входящий к пользователям трафик будет ограничиваться на интерфейсе eth0, а исходящий от пользователей – на виртуальном интерфейсе ifb0.

Для инициализации интерфейса ifb0 нужно сначала загрузить модуль управления интерфейсом:
/sbin/modprobe ifb
После успешной загрузки модуля нужно включить интерфейс:
/sbin/ip link set dev ifb0 up
Затем, после того, как интерфейс будет поднят, нужно организовать переадресацию всего исходящего трафика от пользователей на этот интерфейс:
/sbin/tc qdisc add dev eth0 ingress
/sbin/tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Теперь можно смело начинать строить классы и фильтры для входящего к пользователям трафика на интерфейсе eth0, а исходящего – на интерфейсе ifb0.

Для ограничения трафика используется следующий принцип:

  1. На интерфейсе создается, так называемый корневой обработчик очереди
  2. К этой дисциплине прикрепляется класс, который одержит информацию о максимальной пропускной способности данных, которые в этот класс попадут
  3. Добавляется фильтр, который, с помощью определенных параметров, относит каждый пакет к тому или иному классу

Классы могут быть вложенными. То есть, если класс 1: описывает максимальную пропускную способность в 1Мбит, то класс 1:1, который является его подклассом, не может превысить ограничения по скорости его родителя.

Ограничиваем входящий к пользователям трафик

Все манипуляции с трафиком будем проводить на интерфейсе eth0.

Для начала создадим корневой обработчик очереди на интерфейсе:
/sbin/tc qdisc add dev eth0 root handle 1: htb default 900

Тем самым мы привязали корневой обработчик очереди к интерфейсу eth0, присвоили ему номер 1: и указали на использование планировщика HTB с отправкой всего неклассифицированного трафика в класс с номером 900.

Затем создадим дочерний класс 1:1 с шириной канала, равной скорости интерфейса:
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit burst 15k
Все последующие классы будут подклассами только что созданного нами класса. Это дает нам более точную приоритезацию и обработку скорости потока данных.

Создадим класс для локального трафика, адресом назначения или исходным адресом которого будет являться внутренний адрес сервера. Это нужно для удобства пользования ресурсами сервера, такими как SSH, SMB, FTP, WWW и так далее. Скорость, описанная классом – 50Mbit, но в случае, если скорость потока родительского класса не меньше 100Mbit, то разрешаем использовать 80Mbit, в качестве максимальной скорости передачи данных.
/sbin/tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k

Далее создаем класс, скорость которого будет равно ширине полосы пропускания, которую нам предоставляет провайдер. В моем случае – это 15Mbit.
/sbin/tc class add dev eth0 parent 1:1 classid 1:100 htb rate 15Mbit burst 15k

Даже если провайдер предоставляет большую скорость, к примеру 18Mbit, я рекомендую снижать эту скорость для шейпера на 1-2 Mbit для более «мягкого» ограничения трафика.
Далее создадим класс, в который будут отправляться все пакеты данных, которые не попадут ни в один из созданных ранее классов.
/sbin/tc class add dev eth0 parent 1:1 classid 1:900 htb rate 56Kbit ceil 128Kbit

Для каждого пользователя я создавал отдельный подкласс, с выделенной полосой пропускания, а затем создавал подклассы этого класса для приоритезации трафика:
/sbin/tc class add dev eth0 parent 1:100 classid 1:101 htb rate 4Mbit ceil 6Mbit

Данной командой мы указали на создание класса с номером 1:101, который является подклассом класса с номером 1:100 и указали пропускную способность класса в 4Mbit, а в случае свободной полосу пропускания у родительского класса, разрешить максимальное прохождение данных по классу на скорости 6Mbit.

Далее создаем подклассы для приоритезации трафика:
# PRIO 1 -> icmp traffic — самый низкий приоритет
/sbin/tc class add dev eth0 parent 1:101 classid 1:102 htb rate 33kbit ceil 6Mbit prio 1
# PRIO 2 -> udp, ssh
/sbin/tc class add dev eth0 parent 1:101 classid 1:103 htb rate 33kbit ceil 6Mbit prio 2
# PRIO 3 -> tcp sport 80 – WWW трафик из мира
/sbin/tc class add dev eth0 parent 1:101 classid 1:104 htb rate 33kbit ceil 6Mbit prio 3
# PRIO 4 -> unclassified traffic – трафик, который не попал под условия, указанные в предыдущих классах
/sbin/tc class add dev eth0 parent 1:101 classid 1:105 htb rate 33kbit ceil 6Mbit prio 4

После создания классов пришло время создания фильтров, которые будут классифицировать трафик по определенным критериям.

Есть несколько способов классифицировать трафик.
Самые удобные из них – это u32 классификаторы, позволяющие классифицировать пакеты исходя из адреса назначения или отправителя, используемого протокола, номера порта и так далее, и классификаторы на основе меток iptables. Для использования последних необходимо сначала маркировать пакеты при помощи iptables в цепочке PREROUTING, на основе каких-либо условий, а затем при помощи tc направлять пакеты с соответствующей меткой в нужные классы.

Я предпочел использовать u32 классификатор.

Присваиваем icmp-трафику самый низкий приоритет и отправляем его в класс 1:102
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.10.78 \
match ip protocol 1 0xff flowid 1:102

UDP и SSH трафик отправляем в класс 1:103
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.10.78 \
match ip protocol 17 0xff flowid 1:103
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.10.78 \
match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:103

WWW-трафик, пришедший с tcp-порта 80 отправляем в класс 1:104
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst 192.168.10.78 \
match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:104

Трафик, не соответствующий ни одному из условий отправляем в класс 1:105
/sbin/tc filter add dev eth0 protocol ip parent 1:0 prio 4 u32 match ip dst 192.168.10.78 flowid 1:105

Приоритезация работает по такому принципу, что каждому классу выделяется по минимальной полосе пропускания с возможностью заимствования у родительского класса максимальной полосы пропускания, в зависимости от приоритета трафика, поэтому, если класс будет забит WWW-трафиком с tcp-порта 80, при прохождении icmp пакета с более низким приоритетом, чем у WWW-трафика, он будет пропущен вне очереди, учитывая его приоритет.

Читайте также:  Обновление windows 10 fall creators update

Ограничиваем исходящий трафик

Для ограничения исходящего от пользователей трафика выполняются такие же действия как и для входящего, только в ход идет виртуальный интерфейс ifb0. Также нужно изменить назначение следования трафика: вместо dst 192.168.10.78 – нужно указать src 192.168.10.78 соответственно.

Автоматизация и принцип работы скриптов

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

Файл представляет из себя поля, разделенный знаком табуляции либо пробелом со следующими значениями:
CLIENT – Имя пользователя. Нужно для удобства предоставления данных
IP – адрес пользователя в сети
DOWN – скорость потока данных к пользователю
CEIL – максимальная скорость входящего трафика к пользователю при доступности данной полосы у родительского класса
UP — скорость потока данных от пользователя
CEIL – то же, что и у CEIL для входящего трафика к пользователю
PROVIDER – какой из провайдеров используется для обслуживания запросов пользователя (при наличии нескольких)
ID – номер класса для пользователя. Подробнее о номерах классов ниже.
Также я использую несколько bash-скриптов.

root@steel:/etc/rc.d/shape# cat ./rc.shape

#!/bin/bash
. /etc/init.d/functions
/sbin/modprobe ifb
/sbin/ip link set dev ifb0 up

TC=»/sbin/tc»
DEV_P1_DOWN=»eth0″
DEV_P1_UP=»ifb0″

stop() <
$TC qdisc del dev $DEV_P1_DOWN root
$TC qdisc del dev $DEV_P1_UP root
$TC qdisc del dev $DEV_P1_DOWN ingress
>
start() <
# Удаляем все обработчики на интерфейсе
$TC qdisc del dev $DEV_P1_DOWN root
$TC qdisc del dev $DEV_P1_UP root
$TC qdisc del dev $DEV_P1_DOWN ingress

## Перенаправляем весь исходящий от пользователей трафик на виртуальный интерфейс ifb0
$TC qdisc add dev $DEV_P1_DOWN ingress
$TC filter add dev $DEV_P1_DOWN parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $DEV_P1_UP

# Подгружаем скрипты с описанием классов входящего и исходящего трафика

# Весь трафик, который следует на шлюз или от него ограничиваем в 50Мбит с максимумом в 80Мбит.
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 1 u32 match ip dst 10.0.0.1 flowid 1:10
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 1 u32 match ip src 10.0.0.1 flowid 1:10

# Подгружаем скрипт с описанием фильтров
. /etc/rc.d/shape/rc.shape.filters
>

Далее код, который подгружается:

root@steel:/etc/rc.d/shape# cat ./rc.shape.down.classes

#!/bin/bash
## DOWNLOAD CLASSES
##########################################################
# Создаем корневой обработчик очереди
$TC qdisc add dev $DEV_P1_DOWN root handle 1: htb default 900

# Описание классов для входящего к пользователям трафика
$TC class add dev $DEV_P1_DOWN parent 1: classid 1:1 htb rate 100Mbit burst 15k

# Локльный трафик (SERVER -> CLIENTS)
$TC class add dev $DEV_P1_DOWN parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k

# Трафик от провайдера (SERVER -> CLIENTS)
$TC class add dev $DEV_P1_DOWN parent 1:1 classid 1:100 htb rate 15Mbit burst 15k

# Неклассифицированный трафик будет отправлен в этот класс (SERVER -> CLIENTS)
$TC class add dev $DEV_P1_DOWN parent 1:1 classid 1:900 htb rate 128Kbit ceil 128Kbit

root@steel:/etc/rc.d/shape# cat ./rc.shape.up.classes
#!/bin/bash

## UPLOAD CLASSES
#############################################################
# Создаем корневой обработчик очереди
$TC qdisc add dev ifb0 root handle 1: htb default 900

# Описание классов для исходящего от пользователей трафика
$TC class add dev ifb0 parent 1: classid 1:1 htb rate 100Mbit burst 15k
# Локальный трафик (CLIENTS -> SERVER)
$TC class add dev $DEV_P1_UP parent 1:1 classid 1:10 htb rate 50Mbit ceil 80Mbit burst 15k

# Трафик к провайдеру (CLIENTS -> SERVER)
$TC class add dev $DEV_P1_UP parent 1:1 classid 1:100 htb rate 5Mbit burst 15k
# Неклассифицированный трафик будет отправлен в этот класс (CLIENTS -> SERVER)
$TC class add dev $DEV_P1_UP parent 1:1 classid 1:900 htb rate 128Kbit ceil 128Kbit

root@steel:/etc/rc.d/shape# cat ./rc.shape.filters
#!/bin/bash
# читаем построчно файл “users”
while read LINE
do
set — $LINE
if [[ $1 =

# создаем отдельный подкласс для пользователя
$TC class add dev $DEV_P1_DOWN parent 1:100 classid 1:$<8>1 htb rate $CLIENT_DOWN_RATE ceil $CLIENT_DOWN_CEIL

# PRIO 1 -> icmp traffic
$TC class add dev $DEV_P1_DOWN parent 1:$<8>1 classid 1:$<8>2 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 1

# PRIO 2 -> udp, ssh
$TC class add dev $DEV_P1_DOWN parent 1:$<8>1 classid 1:$<8>3 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 2

# PRIO 3 -> tcp sport 80
$TC class add dev $DEV_P1_DOWN parent 1:$<8>1 classid 1:$<8>4 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 3

# PRIO 4 -> unclassified traffic
$TC class add dev $DEV_P1_DOWN parent 1:$<8>1 classid 1:$<8>5 htb rate 33kbit ceil $CLIENT_DOWN_CEIL prio 4

# фильтруем icmp-пакеты в ранее созданный нами класс для icmp-трафика с приоритетот 1
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 1 u32 match ip dst $CLIENT_IP \
match ip protocol 1 0xff flowid 1:$<8>2

# фильтрация udp
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 2 u32 match ip dst $CLIENT_IP \
match ip protocol 17 0xff flowid 1:$<8>3
# ssh
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 2 u32 match ip dst $CLIENT_IP \
match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:$<8>3
# WWW, sport 80
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 3 u32 match ip dst $CLIENT_IP \
match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:$<8>4
# самый высокий приоритет – трафику, не попавшему под предыдущие фильтры
$TC filter add dev $DEV_P1_DOWN protocol ip parent 1:0 prio 4 u32 match ip dst $CLIENT_IP flowid 1:$<8>5

### ТАКИЕ ЖЕ ПРАВИЛА И ДЛЯ ИСХОДЯЩЕГО ТРАФИКА

$TC class add dev $DEV_P1_UP parent 1:100 classid 1:$<8>1 htb rate $CLIENT_UP_RATE ceil $CLIENT_UP_CEIL
# PRIO 1 -> icmp traffic
$TC class add dev $DEV_P1_UP parent 1:$<8>1 classid 1:$<8>2 htb rate 1kbit ceil $CLIENT_UP_CEIL prio 1
# PRIO 2 -> udp, ssh
$TC class add dev $DEV_P1_UP parent 1:$<8>1 classid 1:$<8>3 htb rate 1kbit ceil $CLIENT_UP_CEIL prio 2
# PRIO 3 -> unclassified traffic
$TC class add dev $DEV_P1_UP parent 1:$<8>1 classid 1:$<8>4 htb rate 1kbit ceil $CLIENT_UP_CEIL prio 3
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 1 u32 match ip src $CLIENT_IP \
match ip protocol 1 0xff flowid 1:$<8>2
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 2 u32 match ip src $CLIENT_IP \
match ip protocol 17 0xff flowid 1:$<8>3
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 2 u32 match ip src $CLIENT_IP \
match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:$<8>3
$TC filter add dev $DEV_P1_UP protocol ip parent 1:0 prio 3 u32 match ip src $CLIENT_IP flowid 1:$<8>4

Данные скрипты нужно положить в один каталог, Выполнить:

chmod +x ./rc.shape

Я описал один из методов ограничения трафика. Утилита tc – очень мощная вещь в вопросах об ограничениях трафика. Рекомендую ознакомиться с документом: LARTC-HOWTO для более глубокого изучения данного вопроса.

Источник

Оцените статью