Поиск и устранение неисправностей с сетевыми параметрами

Существует несколько хороших утилит, позволяющих искать неисправности в сети на уровне TCP/IP. Большинство из них выдает низкоуровневую информацию, поэтому для того чтобы пользоваться ими, нужно хорошо понимать принципы работы протоколов TCP/IP и маршрутизации.

Ниже приведены несколько примеров наиболее часто используемых команд:

# руководство (справочная информация)
man <utility> # просмотр справочной информации по утилите
<utility> --help # просмотр справочной информации по утилите

# просмотр сетевых настроек сервера
ip a # IP адреса
ip n # ARP таблица
cat /etc/resolv.conf # конфигурация DNS
sudo netstat -tulpn # открытые порты (дырявый вариант)
sudo ss -tulpn # открытые порты (рекомендуемый вариант)

# диагностика сетевых проблем
nslookup <hostname> # проверка разрешения DNS имени
ping <host> # отправка ICMP пакетов до хоста
traceroute <host> # трассировка до хоста UDP пакетами
telnet <host> <port> # проверка доступности TCP порта на хосте
nmap <host> # сетевое сканирование хоста
nmap -p T:<port> <host> # проверка доступности TCP порта на хосте
nmap -p U:<port> <host> # проверка доступности UDP порта на хосте

Рассмотрим вышеописанные команды подробнее.

Проверка ARP-таблиц

В некоторых случаях бывает полезно просмотреть или изменить содержание ARP-таблицы, например, когда Вы подозреваете, что двойной адрес является причиной сетевой неустойчивости. Утилита arp была сделана для исправления подобных вещей. Синтаксис командной строки:

arp [-v] [-t hwtype] -a [hostname]
arp [-v] [-t hwtype] -s hostname hwaddr
arp [-v] -d hostname [hostname]

Аргумент hostname может быть как именем, так и IP адресом в стандарте dotted quad.

Первая строка отображает ARP-запись для IP-адреса, указанного хоста или всех известный хостов, если hostname не задается. Например, вызов arp на vlager может выдать:

# arp -a
IP address      HW type                 HW address
172.16.1.3      10Mbps Ethernet         00:00:C0:5A:42:C1
172.16.1.2      10Mbps Ethernet         00:00:C0:90:B3:42
172.16.2.4      10Mbps Ethernet         00:00:C0:04:69:AA

Это показывает Ethernet-адреса vlager, vstout и vale .

При использовании опции -t Вы увидите информацию только о том типе аппаратных средств, который укажете. Это могут быть: ether, ax25 или pronet для Ethernet 10Mbps, AMPR AX.25 и IEEE 802.5 token ring, соответственно.

Опция -s используется, чтобы добавить Ethernet-адрес хоста к ARP-таблицам. Аргумент hwaddr определяет адрес аппаратных средств, который по умолчанию предполагается Ethernet-адресом, указанным как шесть шестнадцатеричных байт, разделяемых двоеточиями. Вы можете также устанавливать адреса для других типов аппаратных средств, используя опцию -t.

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

Вызов arp с использованием ключа -d удаляет все ARP-записи, касающиеся данного хоста. Это может быть необходимо, чтобы вынудить интерфейс повторно получить Ethernet-адрес для данного IP. Это полезно, когда переконфигурированная система имеет неправильную ARP-информацию.

Опция -s может также использоваться, чтобы создать proxy ARP. Это специальная техника когда хост, скажем, gate действует как gateway для другого хоста, назовем его fnord, делая вид, что оба адреса относятся к тому же самому хосту, а именно, gate. Это делается так: на gate создается ARP-запись о fnord, которая указывает на его собственный Ethernet-интерфейс. Теперь, когда хост посылает ARP-запрос о fnord, gate будет возвращать ответ, содержащий собственный Ethernet-адрес. Спрашивающий хост будет посылать все пакеты gate, который перенаправит их к fnord.

Эта схема может быть необходима, например, когда Вы хотите работать с fnord с DOS-машины с нестандартным TCP, которое плохо работает с маршрутизацией. Когда Вы используете proxy ARP, DOS-машине будет казаться, что fnord находится в локальной подсети, так что ей не требуется что-либо знать относительно маршрутов и gateway.

Другое очень полезное применение proxy ARP, когда один из Ваших хостов действует как gateway к некоторому другому хосту только временно, например, по телефону. В предыдущем примере мы уже столкнулись с laptop vlite, который был связан с vlager через PLIP-связь только в небольшом промежутке времени. Конечно, это будет работать только, если адрес хоста, для которого Вы хотите обеспечить proxy ARP, находится в той же самой IP-подсети, что и Ваш gateway. Например, vstout мог бы быть proxy ARP для любого хоста из подсети Brewery ( 172.16.1.0), но не для хоста из подсети Winery (172.16.2.0).

Требуемые действия для обеспечения proxy ARP для fnord приведены ниже. Конечно, Ethernet-адрес должен быть от gate:

# arp -s fnord 00:00:c0:a1:42:e0 pub

Запись proxy ARP может быть удалена:

# arp -d fnord

Утилита ping

Проверка доступности компьютера

Утилита ping предназначена для того, чтобы при помощи отправки ICMP пакетов убедиться в работоспособности хоста. Команда ping посылает запрос (ICMP ECHO_REQUEST) конкретному компьютеру и фиксирует поступающие ответы (ICMP ECHO_RESPONSE). Её можно применять для работоспособности отдельных компьютеров и сегментов сети. В обработке ее запроса участвуют таблицы маршрутизации, физические компоненты сетей и сетевые шлюзы, поэтому для достижения успешного результата сеть должна быть в более или менее рабочем состоянии. Если команда не работает, можно быть совершенно уверенным в том, что более сложные средства тем более не функционируют. Однако это правило неприменимо в сетях, где брандмауэры блокируют эхо-запросы ICMP. Убедитесь в том, что брандмауэр не препятствует работе команды ping, прежде чем подозревать, что зондируемый компьютер игнорирует эту команду. В конце концов, отключите на короткое время брандмауэр для проверки работоспособности сети.

Если не задан аргумент «число пакетов», команда ping работает в бесконечном цикле. Чтобы прервать работу команды, нужно нажать специальную клавиатурную комбинацию <Ctrl+C>.

Например, пропингуем neoserver.ru (это имя хоста):

$ ping neoserver.ru
PING neoserver.ru (217.150.193.198) 56(84) bytes of data.
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=1 ttl=62 time=0.764 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=2 ttl=62 time=0.472 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=3 ttl=62 time=0.493 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=4 ttl=62 time=0.484 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=5 ttl=62 time=0.505 ms
^C
--- neoserver.ru ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4078ms
rtt min/avg/max/mdev = 0.472/0.543/0.764/0.113 ms

Информация о компьютере neoserver.ru включает его IP-адрес, порядковый номер ответного ICMP-пакета и полное время прохождения пакета. Полученные результаты свидетельствуют о том, что компьютер neoserer.ru работает и подключен к сети.

Min - минимальное время ответа хоста, кторому был отправлен запрос.

Avg - среднее время ответа хоста, кторому был отправлен запрос

Max - максимальное время ответа хоста, кторому был отправлен запрос.

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

В ОС Linux, как уже было сказано выше, команда ping без дополнительных параметров будет пинговать заданный хост бесконечно. Чтобы отправить, например, 10 запросов, необходимо добавить ключ :

$ ping -c 10 neoserver.ru
PING neoserver.ru (217.150.193.198) 56(84) bytes of data.
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=1 ttl=62 time=0.682 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=2 ttl=62 time=0.532 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=3 ttl=62 time=0.494 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=4 ttl=62 time=0.535 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=5 ttl=62 time=0.485 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=6 ttl=62 time=0.948 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=7 ttl=62 time=0.569 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=8 ttl=62 time=0.589 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=9 ttl=62 time=0.548 ms
64 bytes from www.neoserver.ru (217.150.193.198): icmp_seq=10 ttl=62 time=0.568 ms

--- neoserver.ru ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9151ms
rtt min/avg/max/mdev = 0.485/0.595/0.948/0.128 ms

В итоге, мы видим, что было отправлено 10 запросов и выведен результат.

Другие примеры задействования разных ключей:

Не резолвить имена адресов, выводить только ip-адреса

$ ping -n neoserver.ru

Завершение работы ping по заданному времени (тут 5 секунд)

$ ping -w 5 neoserver.ru

Установить размер отправляемых пакетов в 1000 байт

ping -s 1000 neoserver.ru

Увеличить интервал времени пинга на 3 секунды

ping -i 3 neoserver.ru

Утилиты dig и nslookup

Эти команды используются для устранения неполадок в сети и сбора информации о доменных именах.

Dig, сокращение от Domain Information Gopher — это утилита поиска DNS, используемая для проверки DNS-серверов и устранения неполадок, связанных с DNS-серверами.

Nslookup используется для обработки поиска DNS и отображает важную информацию, такую ​​как записи MX, и IP-адрес, связанный с именем домена.

Как установить dig и nslookup в CentOS/RHEL

В Red Hat Linux/CentOS можно установить dig и nslookup с помощью команды dnf:

# dnf install bind-utils

После успешной установки проверьте версию, используя команду приведённую ниже:

# dig -v

Как установить dig и nslookup в Debian/Ubuntu

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

# apt install dnsutils

Чтобы проверить версию, выполните команду:

# dig -v

Использование команды dig

Команда dig может использоваться для запроса доменного имени и получения информации:

1# dig sedicomm.com

Команда отображает информацию узла, такую как версия утилиты команды dig, DNS-сервер и соответствующий IP-адрес.

Чтобы получить более конкретное представление и отображать только IP-адрес имени домена, добавьте аргумент “+short“, как показано ниже:

# dig sedicomm.com +short2​362.138.24.100

Для проверки MX записи доменного имени запустите:

# dig sedicomm.com MX +short2​310 mx.yandex.net.

Использование команды nslookup

Чтобы получить информацию о доменном имени с помощью утилиты nslookup, используйте следующую команду:

# nslookup sedicomm.com

Утилита traceroute

Каждый пакет проходит на своем пути определенное количество узлов, пока достигнет своей цели. И, как мы уже знаем, каждый пакет имеет свое время жизни. Это количество узлов, которые может пройти пакет перед тем, как он будет уничтожен. Этот параметр записывается в заголовке TTL, каждый маршрутизатор, через который будет проходить пакет уменьшает его на единицу. При TTL=0 пакет уничтожается, а отправителю отсылается сообщение Time Exceeded.

Команда traceroute linux использует UDP пакеты. Она отправляет пакет с TTL=1 и смотрит адрес ответившего узла, дальше TTL=2, TTL=3 и так пока не достигнет цели. Каждый раз отправляется по три пакета и для каждого из них измеряется время прохождения. Пакет отправляется на случайный порт, который, скорее всего, не занят. Когда утилита traceroute получает сообщение от целевого узла о том, что порт недоступен трассировка считается завершенной.

Синтаксис утилиты не сложный:

$ traceroute опции адрес_узла

Адресом узла может служить как IP адрес, так и доменное имя. Основные опции:

-4 или -6 - использовать ipv4 или ipv6 протокол;
-I - использовать ICMP пакеты вместо UDP;
-T - использовать TCP пакеты вместо UDP;
-F - не фрагментировать пакеты;
-f - указать TTL с которого нужно начать;
-g - передавать пакет через указанный шлюз;
-i - передавать пакет через указанный интерфейс;
-m - максимальное количество узлов, через которые пройдет пакет;
-q - количество пакетов, отправляемых за раз, по умолчанию три;
-n - не узнавать доменные имена;
-p - указать порт вместо порта по умолчанию;
-w - установить время ожидания ответа от узла, по умолчанию полсекунды;
-r - использовать другой роутер вместо того, что указанный в таблице маршрутизации;
-z - минимальный интервал между пакетами;
-U - использовать UDP с увеличением номера порта;
-UL - использовать протокол UDPLITE;
-D - использовать протокол DCCP;
--mtu - указать размер пакета;
-P - протокол, доступны такие значения: raw, dccp, udplite, udp, tcpconn, tcp, icmp.

Для примера, выпоним трасировку к ресурсу yandex.ru:

$ traceroute yandex.ru
traceroute to yandex.ru (5.255.255.77), 30 hops max, 60 byte packets
 1  10.1.1.1 (10.1.1.1)  15.702 ms  17.697 ms  18.735 ms
 2  cat6509-vlan2.neocomms.ru (217.150.192.161)  4.262 ms  4.981 ms  6.249 ms
 3  cerber.neocomms.ru (217.150.192.49)  5.599 ms  6.904 ms  7.676 ms
 4  cat6509-vlan17.neocomms.ru (217.150.192.6)  8.367 ms  9.311 ms  10.586 ms
 5  jrm7i-ge-1-3-vlan17.neocomms.ru (217.150.192.1)  11.217 ms  12.124 ms  13.815 ms
 6  dante.yndx.net (195.208.208.93)  28.355 ms  24.533 ms  24.137 ms
 7  yandex.ru (5.255.255.77)  13.600 ms  13.294 ms  12.941 ms

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

Иногда, вместо одного узла вы можете видеть звездочки. Это значит, что шлюзы либо не высылают нам ICMP с сообщением «time exceeded», либо у их сообщений слишком маленький TTL и оно нас не достигает. В точности нельзя сказать, что происходит на самом деле, но ясно, что по какой-то причине хост не захотел нам отвечать:

$ traceroute neoserver.ru 
traceroute to neoserver.ru (217.150.193.198), 30 hops max, 60 byte packets
 1  core1.trkgok.net (91.207.88.1)  0.706 ms  0.745 ms  0.749 ms
 2  rumba.trkgok.net (91.207.88.101)  0.309 ms  0.306 ms  0.341 ms
 3  edgein.trkgok.net (91.207.88.113)  1.177 ms * *
 4  * * *
 5  * * *
 6  * kv-kh.ett.ua (80.93.127.141)  10.123 ms  10.333 ms
 7  fiord.net (62.140.239.185)  379.003 ms  378.168 ms  378.121 ms
 8  kiev-nt-b1-ae8-vlan3100.fiord.net (62.140.245.156)  9.381 ms  9.288 ms  9.441 ms
 9  msk-m9-b1-ae16-vlan3877.fiord.net (80.77.167.16)  19.811 ms  19.819 ms  19.744 ms
10  rim2000-gw.fiord.net (62.140.245.190)  41.311 ms  41.385 ms  41.128 ms
11  cerber-eth0-vlan17.neocomms.ru (217.150.192.3)  41.563 ms  41.941 ms  41.590 ms
12  cat6509-vlan27.neocomms.ru (217.150.192.56)  42.062 ms  41.732 ms  41.824 ms
13  neoserver.ru (217.150.193.198)  41.776 ms  41.670 ms  41.717 ms

Бывает, что трассировка с помощью UDP не работает, это может произойти потому, что фаервол блокирует все лишние пакеты. Можно воспользоваться ICMP с помощью опции -I:

$ traceroute neoserver.ru 
traceroute to neoserver.ru (217.150.193.198), 30 hops max, 60 byte packets
 1  core1.trkgok.net (91.207.88.1)  0.746 ms  0.732 ms  0.738 ms
 2  rumba.trkgok.net (91.207.88.101)  0.199 ms  0.209 ms  0.222 ms
 3  edgein.trkgok.net (91.207.88.113)  1.706 ms  2.341 ms  3.009 ms
 4  * * *
 5  80.93.125.173.ett.ua (80.93.125.173)  5.343 ms  3.689 ms  3.684 ms
 6  kv-kh.ett.ua (80.93.127.141)  9.459 ms  10.023 ms  9.435 ms
 7  fiord.net (62.140.239.185)  27.783 ms  26.769 ms  26.752 ms
 8  kiev-nt-b1-ae8-vlan3100.fiord.net (62.140.245.156)  9.440 ms  10.050 ms  9.931 ms
 9  msk-m9-b1-ae16-vlan3877.fiord.net (80.77.167.16)  19.906 ms  20.503 ms  20.519 ms
10  rim2000-gw.fiord.net (62.140.245.190)  42.009 ms  41.296 ms  41.687 ms
11  cerber-eth0-vlan17.neocomms.ru (217.150.192.3)  41.662 ms  41.676 ms  41.480 ms
12  cat6509-vlan27.neocomms.ru (217.150.192.56)  58.127 ms  48.170 ms  47.025 ms
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
$ sudo traceroute -I neoserver.ru 
traceroute to neoserver.ru (217.150.193.198), 30 hops max, 60 byte packets
 1  core1.trkgok.net (91.207.88.1)  0.706 ms  0.745 ms  0.749 ms
 2  rumba.trkgok.net (91.207.88.101)  0.309 ms  0.306 ms  0.341 ms
 3  edgein.trkgok.net (91.207.88.113)  1.177 ms * *
 4  * * *
 5  * * *
 6  * kv-kh.ett.ua (80.93.127.141)  10.123 ms  10.333 ms
 7  fiord.net (62.140.239.185)  379.003 ms  378.168 ms  378.121 ms
 8  kiev-nt-b1-ae8-vlan3100.fiord.net (62.140.245.156)  9.381 ms  9.288 ms  9.441 ms
 9  msk-m9-b1-ae16-vlan3877.fiord.net (80.77.167.16)  19.811 ms  19.819 ms  19.744 ms
10  rim2000-gw.fiord.net (62.140.245.190)  41.311 ms  41.385 ms  41.128 ms
11  cerber-eth0-vlan17.neocomms.ru (217.150.192.3)  41.563 ms  41.941 ms  41.590 ms
12  cat6509-vlan27.neocomms.ru (217.150.192.56)  42.062 ms  41.732 ms  41.824 ms
13  neoserver.ru (217.150.193.198)  41.776 ms  41.670 ms  41.717 ms

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

Утилита MTR

MTR – это альтернатива программе traceroute. Объединяя функции ping и traceroute, mtr позволяет постоянно опрашивать удаленный сервер и отслеживать изменения задержки и производительности с течением времени.

Синтаксис утилиты также несложный:

$ mtr опции адрес_узла

Например:

$ mtr neoserver.ru

Вывод похож на traceroute, но mtr имеет существенное преимущество – ее вывод постоянно обновляется. Это позволяет собирать средние показатели, а также отслеживать тенденции и изменения производительности сети. Как и с утилитой ping, mtr будет работать бесконечно. Чтобы прервать работу команды, нужно нажать специальную клавиатурную комбинацию <Ctrl+C>.

Пояснение вывода:

host  имя хоста;
Loss%  процент потерь пакетов;
Snt  количество отправленных пакетов;
Last  время задержки последнего отправленного пакета в миллисекундах;
Avg  среднее время задержки;
Best  минимальное время задержки;
Wrst  максимальное время задержки;
StDev  среднеквадратичное отклонение времени задержки;

Полезные опции:

-c <число> - Количество циклов проверки (количество отправленных пакетов по сути);
-r - Режим отчета. Программа выполнит указанное при помощи параметра -c количество циклов, выведет отчет и завершит свою работу;
-w - Режим расширенного отчета. Результат такой же, как и при использовании опции -r, но длинные имена хостов обрезаться не будут;
-s <количество-байт> - Установить размер пакетов для отправки; 
-n - Не использовать DNS для разрешения имен хостов и отображать вместо них IP-адреса;
-o «список-полей» -	Отображать только указанные поля и в таком порядке, в котором они были указаны;
-p - Выводить информацию построчно, без перерисовки экрана, с разделением полей пробелом. Этот формат удобен, если вы используете какую-то дополнительную программу-парсер или скрипт для анализа, которому передаются данные.
-a <IP-адрес> -	Указать адрес интерфейса, с которого будут отправляться пакеты;
-i <число-секунд> - Интервал между отправляемыми запросами;
-u	Использовать протокол UDP для отправки пакетов;
-4	Использовать только IPv4;
-6	Использовать только IPv6.

Также, рассмотрим утилиту, являющуюся своеобразной заменой команды ping:

Утилита Fping

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

Установка

В большинстве дистрибутивов Linux пакет fping можно установить из репозиториев:

# sudo apt install fping  		[ДляDebian/Ubuntu]
# sudo yum install fping  	[Для CentOS/RHEL]
# sudo dnf install fping  	[Для Fedora 22+]
# sudo pacman -S fping    	[Для Arch Linux]

Если нужно установить из исходного пакета, то используются следующие команды:

$ wget https://fping.org/dist/fping-4.0.tar.gz
$ tar -xvf fping-4.0.tar.gz
$ cd fping-4.0/
$ ./configure
$ make && make install

Готово! Теперь посмотрим, что мы сможем сделать с помощью fping

Пинг множества адресов

Используйте команду fping, а затем через пробел укажите нужные IP адреса

# fping 192.168.1.1 192.168.1. 192.168.1.3

192.168.1.1 is alive
192.168.1.1 is unreachable
192.168.1.3 is unreachable

Пинг диапазона адресов

Используйте ключи –s и –g, после которых укажите первый и последний адрес диапазона.

# fping -s -g 192.168.0.1 192.168.0.9

192.168.0.1 is alive
192.168.0.2 is alive
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.4
192.168.0.3 is unreachable
192.168.0.4 is unreachable

8      9 targets
       2 alive
       2 unreachable
       0 unknown addresses

       4 timeouts (waiting for response)
       9 ICMP Echos sent
       2 ICMP Echo Replies received
      2 other ICMP received

 0.10 ms (min round trip time)
 0.21 ms (avg round trip time)
 0.32 ms (max round trip time)
        4.295 sec (elapsed real time)

Пинг целой подсети

Укажите маску подсети через слеш, чтобы пропинговать всю подсеть. Ключ –r 1 указывает на то, что будет одно повторение операции

# fping -g -r 1 192.168.0.0/24

Пинг с адресами из файла

Можно записать в файл список адресов (в нашем случае мы назвали его merionfping.txt), и зачитать из него адреса для пинга

# fping < fping.txt

192.168.1.20 is alive
192.168.1.100 is alive

Утилита iptraf

IPTraf – это консольная утилита мониторинга сети реального времени (IP LAN) с открытым исходным кодом для Linux. Она собирает разнообразную информацию, такую ​​как мониторинг трафика IP, который проходит по сети, включая информацию о флагах TCP, данных ICMP, сбои трафика TCP/UDP, пакеты TCP-соединения и подсчеты byne. Она также собирает информацию общей и подробной статистики интерфейса TCP, UDP, IP, ICMP, no-IP, ошибок контрольной суммы IP, активности интерфейса и т.д.

Команда для скачивания утилиты:

apt-get install iptraf

Для запуска утилиты введите:

iptraf-ng

Утилита iftop

iftop — еще одна утилита для мониторинга системы с открытым исходным кодом на терминальной основе, которая отображает обновляемый список использования пропускной способности сети (исходные и целевые узлы), которые проходят через сетевой интерфейс вашей системы. iftop рассматривается для использования в сети, в то время как «top» рассматривается для использования с ЦП. iftop – это инструмент, который контролирует выбранный интерфейс и отображает текущее использование полосы пропускания между двумя хостами.

apt-get install iftop

Для запуска утилиты введите:

iftop

Утилита speedtest-cli

Speedtest-cli - это простой клиент, написанный на Python, который мы сможем использовать для измерить двунаправленную пропускную способность нашего интернет-соединения и что для получения результатов он использует инфраструктуру speedtest.net.

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

  • Speedtest.net перешел на использование тестов от чистый сокет вместо тестов на основе HTTP.

  • Это приложение написано на Python. Различные версии Python они будут выполнять одни части кода быстрее, чем другие.

  • Скорость и емкость процессора а память будет играть важную роль в несогласованности между Speedtest.net и даже другими машинами в той же сети.

Для начала, нужно установить speedtest-cli

apt-get install speedtest-cli

Для того чтобы запустить утилиту без дополнительных параметров достаточно ввести:

speedtest-cli

В предыдущем варианте все значения были представлены в битах, если нам необходимо, мы можем получить информацию в байтах, для этого нужно использовать опцию --bytes:

speedtest-cli --bytes

Полезные команды Speedtest-cli

Speedtest-cli предлагает множество опций и настроек. Любой желающий может проконсультироваться и проверить их все, просто набрав в терминале:

speedtest-cli --help

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

speedtest-cli --list

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

speedtest-cli --server 3155

Как мы только что видели, этот интересный инструмент под названием speedtest-cli можно использовать для проверки скорости нашего интернета с терминала. Он имеет большое количество функций и сделан на моем любимом языке Python. Я хочу уточнить, что это приложение не является надежным инструментом для отчетов о задержках. Задержка, которую покажет нам этот инструмент, не должна рассматриваться как ориентировочное значение задержки стиля. ICMP. Это относительное значение, используемое для определения сервера с наименьшей задержкой для тестирования скорости.

Утилита iperf

Утилита iperf - это генератор сетевого трафика, предназначенный для проверки скорости и пропускной способности сети. Программа кроссплатформена, и распространяется с открытым исходным кодом. Вы можете использовать её для проверки пропускной способности VPS серверов или для настройки и улучшения производительности сети.

apt-get install iperf3

Синтаксис и опции iperf

Поскольку утилита имеет как серверную часть так и клиентскую, надо рассматривать обе отдельно. Для запуска сервера используется такой синтаксис:

$ iperf3 -s опции

Для запуска клиента используется ключ -c, которому надо передать адрес сервера:

$ iperf3 -c адрес_сервера опции

Теперь давайте рассмотрим общие опции программы:

  • -p, --port - указать порт для сервера или к какому порту надо подключаться;

  • -f, --format - формат выводимых данных, доступны значения: k,m,g,t,K,M,G,T;

  • -i, --interval - интервал времени между выводами результата тестирования;

  • -F, --file - использовать данные из файла вместо генерации случайных данных;

  • -V, --verbose - вывод максимально подробной информации;

  • -J, --json - вывод в формате JSON;

  • --logfile - записывать информацию в лог файл;

  • --forceflush - очищать историю вывода перед выводом следующего результата тестирования;

  • -v, --version - версия программы.

Теперь разберемся с опциями только для серверной части:

  • -D, --daemon - запустить сервер в фоновом режиме;

  • -I, --pidfile - путь для записи PID файла процесса;

  • -1, --one-off - обработать только одно подключение клиента, а затем выйти.

У клиентской части опций чуть больше:

  • --sctp - использовать SCTP вместо TCP;

  • -u, --udp - использовать UDP вместо TCP;

  • --connect-timeout - таймаут для первого соединения с сервером в миллисекундах;

  • -b, --bitrate - битрейт, для UDP используется по умолчанию 1 Мбит/сек, для TCP не ограничено;

  • -t, --time - время одного теста в секундах, по умолчанию 10 секунд;

  • -R, --reverse - обратный тест, не клиент отправляет данные серверу, а сервер клиенту;

  • -P - количество потоков;

  • -w - размер окна TCP;

  • -4, --version4 - использовать только IPv4;

  • -6, --version6 - использовать только IPv6.

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

man iperf3

Теперь вы знаете как установить iperf, а также основные её опции, но на этом инструкция не заканчивается. Дальше давайте перейдем к примерам использования iperf3.

Как пользоваться iperf

Для примеров я буду использовать сервер с адресом 192.168.0.101. Адрес клиента не имеет значения. Сначала необходимо запустить серверную часть программы. Для этого выполните:

iperf3 -s

Вы можете сразу указать в каких единицах измерения хотите видеть результаты. Для этого используется опция -f. Доступны такие варианты:

  • k - килобиты;

  • m - мегабиты;

  • g - гигабиты;

  • K - килобайты;

  • M - мегабайты;

  • G - гигабайты;

  • T - терабайты.

Например:

iperf3 -s -f K

Аналогично для сервера можно задать порт с помощью опции -p. По умолчанию он работает на порту 5201:

ipref3 -s -p 4000

В любом случае, если на сервере установлен брандмауэр, то вам надо разрешить в нём подключение к порту 5201 или тому, который вы выбрали. Например, для ufw команда будет выглядеть так:

sudo ufw allow 5201

А для firewalld:

sudo firewall-cmd --permanent --add-port=5201/tcp sudo firewall-cmd --permanent --add-port=5201/udp sudo firewall-cmd --reload

И если вы хотите запустить программу в фоновом режиме, можете использовать опцию -D и перенаправить вывод в лог файл:

iperf3 -s -D --logfile /var/log/ipref.log

Убедится, что сервер запущен можно с помощью команды ss:

ss -tulpn | grep 5201

Обратите внимание на IP адрес, на котором слушает сервер, звездочка означает IPv4 соединения, а [::] - IPv6. Поэтому, возможно вам придется вручную указать откуда надо ждать подключений:

iperf3 -s -4 -D --logfile /var/log/ipref.log

Теперь к серверу можно подключаться. Для этого используйте опцию -c. Если вы меняли порт сервера, то здесь его надо указать с помощью опции -p:

iperf3 -c 127.0.0.1 -f

В данном примере тест выполняется 10 секунд. Чтобы понять какая сейчас у вас пропускная способность сети следует смотреть на колонку Bitrate. Обращайте внимание на строки под чертой, они отображают среднее значение. В данном примере было передано 7,33 ГБайта со скоростью 767721 килобайт в секунду.

По умолчанию утилита выводит промежуточный результат каждую секунду, вы можете изменить это поведение с помощью опции -i. Например, 5 секунд:

iperf3 -c 127.0.0.1 -f M -i

А общую продолжительность теста можно задать с помощью опции -t. Например, 30 секунд:

iperf3 -c 127.0.0.1 -f M -i 5 -t 30

По умолчанию клиент отправляет данные серверу. Вы можете использовать опцию -R, чтобы сервер отправлял данные клиенту:

iperf3 -c 127.0.0.1 -f K -R

Если вы хотите видеть вывод сервера на клиенте, достаточно использовать опцию --get-server-output:

iperf3 -c 127.0.0.1 -f K --get-server-output

С помощью опции -P можно указать количество параллельных потоков тестирования, например, два:

iperf3 -c 127.0.0.1 -f K -P 2

Чтобы использовать UDP пакеты вместо TCP используйте опцию -u:

iperf3 -c 127.0.0.1 -f K -u

Если вы хотите узнать скорость работы вашего сетевого провайдера и у вас нет сервера в сети, можете использовать один из публичных iperf серверов. Полный список таких серверов можно найти здесь. Например:

iperf3 -c speedtest.uztelecom.uz

Литература

Last updated