Мониторинг сети Linux
Во многих случаях может понадобиться отследить нагрузку на сеть, посмотреть сколько данных передается и какие пользователи, программы или компьютеры занимают канал. Особенно часто такие задачи возникают перед системными администраторами, перед которыми стоит задача отслеживать работу сети целой компании. Но также это может быть полезно и обычным пользователям.
В этой статье мы рассмотрим как выполняется мониторинг сети Linux. Для этого можно использовать различные утилиты. Начиная от сетевых анализаторов, таких как Wireshark и tcpdump до более простых инструментов, таких как iptraf.
Как работает мониторинг сети?
Все данные, которые распространяются через интернет передаются в виде пакетов определенного размера. Данные разделяются на части определенного размера и из них составляются пакеты, которые будут отправлены в ядро системы а затем в сеть, где пройдут путь из многих компьютеров и маршрутизаторов пока достигнут цели. С помощью специального программного обеспечения мы можем отслеживать сколько пакетов и какого размера проходит через наш компьютер и неважно, были они созданы локальной программой или получены из сети.
Таким образом, очень просто можно узнать какая сейчас нагрузка на сеть, какие программы или сервисы создали пакеты, и даже что содержится в этих пакетах и что делает пользователь.
Мониторинг сети с помощью iptraf
sudo apt install iptraf
А в CentOS / Red Hat выполните:
sudo yum install iptraf
После установки утилиты для ее запуска просто наберите в терминале iptraf-ng:
Перед вами откроется интерактивный интерфейс на основе Ncurses, в котором необходимо выбрать нужное действие. Здесь доступны монитор пропускной способности сети, статистика по интерфейсу, статистика по сбоям и монитор локальной сети.
Обратите внимание на нижнюю часть окна, там отображается описание выбранного действия, а также находятся подсказки по горячим клавишам.Например, для просмотра сетевых соединений и статистики трафика для каждого из них выберите IP traffic moitor. Затем вам будет необходимо выбрать сетевой интерфейс, например, enp2s0:
Дальше вы увидите все IP адреса, с которыми сейчас выполняется взаимодействие. Здесь можно увидеть направление отправки пакетов, количество пакетов и общий объем переданных или полученных данных в байтах.
С помощью других пунктов меню можно посмотреть статистику по интерфейсу или статистику по работе локальной сети. Утилита даже может работать в неразборчивом режиме, чтобы собирать максимум данных про локальную сеть.


Затем нужно указать имя фильтра:
На следующем этапе вы можете расписать нужные параметры фильтрации:
Чтобы применить фильтр нужно выбрать Apply filter и выбрать имя фильтра из списка:
Теперь в любом пункте статистики будет отображаться только та информация, которая подходит под созданный фильтр.
Мониторинг трафика Linux чаще всего выполняется администраторами именно с помощью этой утилиты. Видео про использование утилиты:
Мониторинг сети с помощью других утилит
1. iftop
Утилита имеет более простой интерфейс и отображает намного меньше информации. Она выводит ip адреса отправителя и получателя, а также количество переданных или полученных данных за несколько последних секунд:
Установить программу в Ubuntu можно командной:
sudo apt install iftop
Хотя здесь отображается информация по каждому соединению, программа не может идентифицировать программу, которая создает пакеты.
2. nload
Для установки программы в Ubuntu используйте команду:
sudo apt install nload
3. nethogs
Программа, как и другие доступна из официальных репозиториев, поэтому у вас не возникнет проблем с установкой:
sudo yum install nethogs
4. bmon
Утилита bmon позволяет отображать достаточно подробно статистику по каждому сетевому интерфейсу. Она работает похоже на nload и выводит график кроме текстовой информации:
Для установки программы выполните:
sudo apt install bmon
5. Vnstat
Vnstat отличается от всех инструментов, рассмотренных выше. Программа работает постоянно в фоновом режиме и собирает информацию об использовании сети в лог файл. Далее можно посмотреть какой была нагрузка за определенный период. Для установки утилиты выполните:
sudo apt install vnstat
Далее необходимо запустить сервис, для этого выполните такую команду:
sudo systemctl start vnstat
Далее необходимо немного подождать, пока утилита соберет данные и можно просматривать статистику:
Видео про использование и настройку vnstat:
6. bwm-ng
Это еще одна утилита, очень простая в использовании, которая позволяет следить за сетевой нагрузкой в режиме реального времени. Отображаются все доступные сетевые интерфейсы в системе:
Для установки утилиты выполните такую команду:
sudo apt install bwm-ng
7. speedometer
Это еще один простой инструмент, который позволяет выполнить мониторинг сети и выводит данные в виде красивых графиков. Для установки программы выполните:
sudo pip install speedometer
Как видите, она есть в официальных репозиториев не всех дистрибутивов, зато вы можете установить программу из репозитория python.
8. netwatch
sudo apt install netdiag
9. ifstat
Утилита ifstat показывает пропускную способность сети, измеряя количество переданных и принятых пакетов. Вывод утилиты можно использовать и анализировать в других программах. Утилита не выводит информацию об ip адресах или других параметрах, а только скорость. Для установки используйте:
sudo apt install ifstat
10. trafshow
Это утилита, очень похожа на iftop, которая отображает не только скорость передачи, но и сами соединения. Здесь выводится информация по соединениях, размеры пакетов и протокол. Для установки программы наберите:
sudo apt install trafshow
Осталось запустить программу:
Выводы
В этой статье мы рассмотрели команду Iptraf, а также еще несколько полезных утилит, с помощью которых можно выполнять мониторинг сети linux на сервере или домашнем компьютере. Некоторые из этих инструментов можно использовать даже в корпоративной среде. В качестве альтернативы вы можете использовать инструменты с веб-интерфейсом. Некоторые из них перечислены в статье системы мониторинга Linux. А какие инструменты мониторинга используете вы? Напишите в комментариях!
18 команд для мониторинга пропускной способности сети на сервере Linux
Сетевой мониторинг в Linux
В этом посту упоминаются некоторые инструменты командной строки linux, которые можно использовать для мониторинга использования сети.
Эти инструменты контролируют трафик, проходящий через сетевые интерфейсы, и измеряют скорость передачи данных.
Входящий и исходящий трафик показаны отдельно.
Некоторые из команд показывают пропускную способность, используемую отдельными процессами.
Это позволяет легко обнаружить процесс, который перекрывает пропускную способность сети.
У инструментов есть разные механизмы генерации отчета о трафике.
Некоторые из таких инструментов, как nload, читают файл «/ proc / net / dev», чтобы получить статистику трафика, тогда как некоторые инструменты используют библиотеку pcap для захвата всех пакетов, а затем вычисляют общий размер для оценки нагрузки на трафик.
Вот список команд, отсортированных по их функциям.
1. Nload
Nload – это инструмент командной строки, который позволяет пользователям контролировать входящий и исходящий трафик отдельно.
Простая в использовании и не поддерживает множество опций.
Поэтому, если вам просто нужно быстро взглянуть на общее использование полосы пропускания без подробностей отдельных процессов, тогда nload будет удобен.
Пример использования nload на Kali Linux:
Установка Nload – Fedora и Ubuntu получают его в репозитории по умолчанию.
Пользователи CentOS должны получать nload из репозиториев Epel.
2. iftop
Iftop измеряет данные, протекающие через отдельные соединения сокетов, и работает таким образом, который отличается от Nload.
Iftop использует библиотеку pcap для захвата пакетов, перемещающихся на и от сетевого адаптера, а затем суммирует размер и подсчет, чтобы найти общую используемую пропускную способность.
Хотя iftop сообщает о пропускной способности, используемой отдельными подключениями, он не может сообщить имя / идентификатор процесса, участвующие в конкретном соединении сокетов.
Но, основываясь на библиотеке pcap, iftop может фильтровать трафик и сообщать об использовании полосы пропускания по выбранным хост-соединениям, как это определено фильтром.
Параметр n запрещает iftop резолвить IP-адреса на имена хостов, что вызывает дополнительный сетевой трафик.
Установка iftop – пользователи Ubuntu / Debian / Fedora получают его из репозитория по умолчанию. Пользователи CentOS получают его от Epel.
3. iptraf
Iptraf – это интерактивный и красочный монитор IP Lan.
Он показывает отдельные соединения и объем данных, передаваемых между хостами. Вот скриншот
fedora или centos (with epel)
4. nethogs
Nethogs – это небольшой инструмент «net top», который показывает полосу пропускания, используемую отдельными процессами, и сортирует список, в котором наиболее интенсивные процессы показанысверху.
В случае внезапного всплеска пропускной способности, быстро откройте nethogs и найдите ответственный процесс.
Nethogs сообщает PID, пользователю и пути к программе.
5. bmon
Bmon (Bandwidth Monitor) – это инструмент, подобный nload, который показывает нагрузку на все сетевые интерфейсы в системе. Результат также состоит из графика и раздела с деталями уровня пакета.
Установка Bmon – пользователи Ubuntu, Debian и Fedora могут установить из репозитория по умолчанию.
Пользователям CentOS необходимо настроить repoforge, поскольку он недоступен в Epel
fedora или centos (от repoforge)
6. slurm
Slurm – это еще один монитор сетевой нагрузки, который показывает статистику устройства вместе с графиком ascii.
Он поддерживает 3 разных стиля графиков, каждый из которых может быть активирован с помощью клавиш c, s и l.
Простая в функциях, slurm не показывает никаких дополнительных сведений о сетевой нагрузке.
7. tcptrack
Tcptrack похож на iftop и использует библиотеку pcap для захвата пакетов и вычисления различных статистических данных, таких как пропускная способность, используемая в каждом соединении.
Он также поддерживает стандартные фильтры pcap, которые могут использоваться для контроля определенных соединений.
Установка tcptrack – Ubuntu, Debian и Fedora используют его в репозиториях по умолчанию.
Пользователи CentOS должны получить его от RepoForge, поскольку он также не доступен в Epel.
8. Vnstat
Vnstat немного отличается от большинства других инструментов.
Он фактически запускает фоновый сервис / демон и постоянно фиксирует размер передачи данных.
Затем его можно использовать для создания отчета об истории использования сети.
Запуск vnstat без каких-либо опций просто покажет общий объем передачи данных, который произошел с момента запуска демона.
fedora или centos (от epel)
9. bwm-ng
Если размер консоли достаточно велик, bwm-ng также может рисовать гистограммы для трафика, используя режим вывода curses2.
Установить Bwm-NG – на CentOS bwm-ng можно установить с Epel.
fedora или centos (от epel)
10. cbm – Color Bandwidth Meter
Небольшой простой монитор пропускной способности, отображающий объем трафика через сетевые интерфейсы. Никаких дополнительных параметров, только статистика трафика отображается и обновляется в реальном времени.
11. speedometer
Еще один маленький и простой инструмент, который просто рисует привлекательные графики входящего и исходящего трафика через данный интерфейс.
ubuntu или для пользователей debian
12. Pktstat
Pktstat отображает все активные соединения в режиме реального времени и скорость передачи данных через них. Он также отображает тип соединения, т. Е. Tcp или udp, а также информацию о HTTP-запросах, если они задействованы.
13. Netwatch
Netwatch является частью набора инструментов netdiag, а также отображает соединения между локальным хостом и другими удаленными хостами и скорость передачи данных по каждому соединению.
14. Trafshow
Как и netwatch и pktstat, trafshow сообщает о текущих активных соединениях, их протоколе и скорости передачи данных для каждого соединения.
Он может отфильтровывать соединения, используя фильтры типа pcap.
Мониторинг только подключений tcp
15. Netload
Команда netload просто отображает небольшой отчет о текущей нагрузке на трафик и общее количество байт, переданных с момента запуска программы.
Больше нет функций. Это часть netdiag.
16. ifstat
Ifstat сообщает о пропускной способности сети.
Вывод находится в формате, который легко записывать и анализировать с помощью других программ или утилит.
Установить ifstat – пользователи Ubuntu, Debian и Fedora имеют его в репозиториях по умолчанию.
Пользователи CentOS должны получить его от Repoforge, так как его нет в Epel.
fedora, centos (Repoforge)
17. dstat
Dstat – это универсальный инструмент (написанный на языке python), который может отслеживать различные статистические данные системы и сообщать о них в режиме пакетнов или записывать данные в файл csv или аналогичный файл.
В этом примере показано, как использовать dstat для сообщения пропускной способности сети
18. collectl
Collectl сообщает системную статистику в стиле, подобном dstat, и, подобно dstat, он собирает статистику о различных системных ресурсах, таких как CPU, память, сеть и т. д.
Вот здесь простой пример того, как использовать его для отчета об использовании сети / пропускной способности
Заключение
Это были несколько удобных команд для быстрой проверки пропускной способности сети на вашем Linux-сервере.
Однако им необходимо, чтобы пользователь заходил на удаленный сервер через ssh.
В качестве альтернативы можно также использовать веб-инструменты мониторинга для одной и той же задачи.
Ntop и Darkstat – некоторые из основных сетевых средств мониторинга сети, доступных для Linux.
Помимо этого, это инструменты мониторинга уровня предприятия, такие как Nagios, которые предоставляют множество функций, чтобы не просто контролировать сервер, а всю инфраструктуру.
Ограничиваем входящий и исходящий трафик в 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.
Исходя из вышеизложенного, я ограничивал входящий к пользователю трафик на интерфейсе внутренней сети — eth0, а исходящий от пользователя трафик – на виртуальном интерфейсе ifb0.
Для того чтобы во время занятия пользователем всей полосы пропускания, ограниченной ему на шлюзе, для скачивания какого-нибудь большого объема данных и при этом мог нормально пользоваться ssh и чтобы у него работал ping – я использовал приоритезацию трафика.
Дисциплины, классы, фильтры
Как уже было мной отмечено, входящий к пользователям трафик будет ограничиваться на интерфейсе 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.
Ограничиваем входящий к пользователям трафик
Все манипуляции с трафиком будем проводить на интерфейсе 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.
После создания классов пришло время создания фильтров, которые будут классифицировать трафик по определенным критериям.
Есть несколько способов классифицировать трафик.
Самые удобные из них – это 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-трафика, он будет пропущен вне очереди, учитывая его приоритет.
Ограничиваем исходящий трафик
Для ограничения исходящего от пользователей трафика выполняются такие же действия как и для входящего, только в ход идет виртуальный интерфейс ifb0. Также нужно изменить назначение следования трафика: вместо dst 192.168.10.78 – нужно указать src 192.168.10.78 соответственно.
Автоматизация и принцип работы скриптов
Для начала, для автоматизации процесса ограничения скорости нужно создать файл, в котором будет перечислены адреса пользователей, для которых нужно устанавливать ограничения с указанием этих ограничений.
Файл представляет из себя поля, разделенный знаком табуляции либо пробелом со следующими значениями:
CLIENT – Имя пользователя. Нужно для удобства предоставления данных
IP – адрес пользователя в сети
DOWN – скорость потока данных к пользователю
CEIL – максимальная скорость входящего трафика к пользователю при доступности данной полосы у родительского класса
UP — скорость потока данных от пользователя
CEIL – то же, что и у CEIL для входящего трафика к пользователю
PROVIDER – какой из провайдеров используется для обслуживания запросов пользователя (при наличии нескольких)
ID – номер класса для пользователя. Подробнее о номерах классов ниже.
Также я использую несколько bash-скриптов.
#!/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″
# Подгружаем скрипты с описанием классов входящего и исходящего трафика
# Подгружаем скрипт с описанием фильтров
. /etc/rc.d/shape/rc.shape.filters
>
Далее код, который подгружается:
## UPLOAD CLASSES
#############################################################
# Создаем корневой обработчик очереди
$TC qdisc add dev ifb0 root handle 1: htb default 900
### ТАКИЕ ЖЕ ПРАВИЛА И ДЛЯ ИСХОДЯЩЕГО ТРАФИКА
Данные скрипты нужно положить в один каталог, Выполнить:
Я описал один из методов ограничения трафика. Утилита tc – очень мощная вещь в вопросах об ограничениях трафика. Рекомендую ознакомиться с документом: LARTC-HOWTO для более глубокого изучения данного вопроса.




























