Поиск и устранение неисправностей с сетевыми параметрами
Существует несколько хороших утилит, позволяющих искать неисправности в сети на уровне TCP/IP. Большинство из них выдает низкоуровневую информацию, поэтому для того чтобы пользоваться ими, нужно хорошо понимать принципы работы протоколов TCP/IP и маршрутизации.
Ниже приведены несколько примеров наиболее часто используемых команд:
Рассмотрим вышеописанные команды подробнее.
Проверка ARP-таблиц
В некоторых случаях бывает полезно просмотреть или изменить содержание ARP-таблицы, например, когда Вы подозреваете, что двойной адрес является причиной сетевой неустойчивости. Утилита arp была сделана для исправления подобных вещей. Синтаксис командной строки:
Аргумент hostname может быть как именем, так и IP адресом в стандарте dotted quad.
Первая строка отображает ARP-запись для IP-адреса, указанного хоста или всех известный хостов, если hostname не задается. Например, вызов arp на vlager может выдать:
Это показывает 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:
Запись proxy ARP может быть удалена:
Утилита ping
Проверка доступности компьютера
Утилита ping предназначена для того, чтобы при помощи отправки ICMP пакетов убедиться в работоспособности хоста. Команда ping посылает запрос (ICMP ECHO_REQUEST) конкретному компьютеру и фиксирует поступающие ответы (ICMP ECHO_RESPONSE). Её можно применять для работоспособности отдельных компьютеров и сегментов сети. В обработке ее запроса участвуют таблицы маршрутизации, физические компоненты сетей и сетевые шлюзы, поэтому для достижения успешного результата сеть должна быть в более или менее рабочем состоянии. Если команда не работает, можно быть совершенно уверенным в том, что более сложные средства тем более не функционируют. Однако это правило неприменимо в сетях, где брандмауэры блокируют эхо-запросы ICMP. Убедитесь в том, что брандмауэр не препятствует работе команды ping, прежде чем подозревать, что зондируемый компьютер игнорирует эту команду. В конце концов, отключите на короткое время брандмауэр для проверки работоспособности сети.
Если не задан аргумент «число пакетов», команда ping работает в бесконечном цикле. Чтобы прервать работу команды, нужно нажать специальную клавиатурную комбинацию <Ctrl+C>.
Например, пропингуем neoserver.ru (это имя хоста):
Информация о компьютере neoserver.ru включает его IP-адрес, порядковый номер ответного ICMP-пакета и полное время прохождения пакета. Полученные результаты свидетельствуют о том, что компьютер neoserer.ru работает и подключен к сети.
Min - минимальное время ответа хоста, кторому был отправлен запрос.
Avg - среднее время ответа хоста, кторому был отправлен запрос
Max - максимальное время ответа хоста, кторому был отправлен запрос.
Ещё вы увидите TTL - определяет максимальное количество хопов (то есть прыжок, участок между маршрутизаторами), которые пакет может пройти. Наличие этого параметра не позволяет пакету бесконечно ходить по сети.
В ОС Linux, как уже было сказано выше, команда ping без дополнительных параметров будет пинговать заданный хост бесконечно. Чтобы отправить, например, 10 запросов, необходимо добавить ключ -с:
В итоге, мы видим, что было отправлено 10 запросов и выведен результат.
Другие примеры задействования разных ключей:
Не резолвить имена адресов, выводить только ip-адреса
Завершение работы ping по заданному времени (тут 5 секунд)
Установить размер отправляемых пакетов в 1000 байт
Увеличить интервал времени пинга на 3 секунды
Утилиты dig и nslookup
Эти команды используются для устранения неполадок в сети и сбора информации о доменных именах.
Dig, сокращение от Domain Information Gopher — это утилита поиска DNS, используемая для проверки DNS-серверов и устранения неполадок, связанных с DNS-серверами.
Nslookup используется для обработки поиска DNS и отображает важную информацию, такую как записи MX, и IP-адрес, связанный с именем домена.
Как установить dig и nslookup в CentOS/RHEL
В Red Hat Linux/CentOS можно установить dig и nslookup с помощью команды dnf:
После успешной установки проверьте версию, используя команду приведённую ниже:
Как установить dig и nslookup в Debian/Ubuntu
В Debian и любых его производных, установка выполняется с помощью команды apt:
Чтобы проверить версию, выполните команду:
Использование команды dig
Команда dig может использоваться для запроса доменного имени и получения информации:
Команда отображает информацию узла, такую как версия утилиты команды dig, DNS-сервер и соответствующий IP-адрес.
Чтобы получить более конкретное представление и отображать только IP-адрес имени домена, добавьте аргумент “+short“, как показано ниже:
Для проверки MX записи доменного имени запустите:
Использование команды nslookup
Чтобы получить информацию о доменном имени с помощью утилиты nslookup, используйте следующую команду:
Утилита traceroute
Каждый пакет проходит на своем пути определенное количество узлов, пока достигнет своей цели. И, как мы уже знаем, каждый пакет имеет свое время жизни. Это количество узлов, которые может пройти пакет перед тем, как он будет уничтожен. Этот параметр записывается в заголовке TTL, каждый маршрутизатор, через который будет проходить пакет уменьшает его на единицу. При TTL=0 пакет уничтожается, а отправителю отсылается сообщение Time Exceeded.
Команда traceroute linux использует UDP пакеты. Она отправляет пакет с TTL=1 и смотрит адрес ответившего узла, дальше TTL=2, TTL=3 и так пока не достигнет цели. Каждый раз отправляется по три пакета и для каждого из них измеряется время прохождения. Пакет отправляется на случайный порт, который, скорее всего, не занят. Когда утилита traceroute получает сообщение от целевого узла о том, что порт недоступен трассировка считается завершенной.
Синтаксис утилиты не сложный:
Адресом узла может служить как IP адрес, так и доменное имя. Основные опции:
Для примера, выпоним трасировку к ресурсу yandex.ru:
В итоге, пакет прошел через 6 узлов перед тем, как дойти до указанного хоста. На каждый узел отправлялось по три пакета и для каждого из них было засечено время прохождения. И если на одном из узлов возникнет проблема, теперь вы будете знать на каком.
Иногда, вместо одного узла вы можете видеть звездочки. Это значит, что шлюзы либо не высылают нам ICMP с сообщением «time exceeded», либо у их сообщений слишком маленький TTL и оно нас не достигает. В точности нельзя сказать, что происходит на самом деле, но ясно, что по какой-то причине хост не захотел нам отвечать:
Бывает, что трассировка с помощью UDP не работает, это может произойти потому, что фаервол блокирует все лишние пакеты. Можно воспользоваться ICMP с помощью опции -I:
Рассмотреных выше простых примеров, вполне достаточно для первичной диагностики сети как для обычных пользователей, так и для начинающих администраторов.
Утилита MTR
MTR – это альтернатива программе traceroute. Объединяя функции ping и traceroute, mtr позволяет постоянно опрашивать удаленный сервер и отслеживать изменения задержки и производительности с течением времени.
Синтаксис утилиты также несложный:
Например:
Вывод похож на traceroute, но mtr имеет существенное преимущество – ее вывод постоянно обновляется. Это позволяет собирать средние показатели, а также отслеживать тенденции и изменения производительности сети. Как и с утилитой ping, mtr будет работать бесконечно. Чтобы прервать работу команды, нужно нажать специальную клавиатурную комбинацию <Ctrl+C>.
Пояснение вывода:
Полезные опции:
Также, рассмотрим утилиту, являющуюся своеобразной заменой команды ping:
Утилита Fping
Fping – это инструмент, аналогичный утилите ping, но гораздо более производительный в случае, когда нам нужно сделать пинг до нескольких узлов. С fping можно использовать файлы со списком адресов или даже указывать целые диапазоны сетей с маской.
Установка
В большинстве дистрибутивов Linux пакет fping можно установить из репозиториев:
Если нужно установить из исходного пакета, то используются следующие команды:
Готово! Теперь посмотрим, что мы сможем сделать с помощью fping
Пинг множества адресов
Используйте команду fping, а затем через пробел укажите нужные IP адреса
Пинг диапазона адресов
Используйте ключи –s и –g, после которых укажите первый и последний адрес диапазона.
Пинг целой подсети
Укажите маску подсети через слеш, чтобы пропинговать всю подсеть. Ключ –r 1 указывает на то, что будет одно повторение операции
Пинг с адресами из файла
Можно записать в файл список адресов (в нашем случае мы назвали его merionfping.txt), и зачитать из него адреса для пинга
Утилита iptraf
IPTraf – это консольная утилита мониторинга сети реального времени (IP LAN) с открытым исходным кодом для Linux. Она собирает разнообразную информацию, такую как мониторинг трафика IP, который проходит по сети, включая информацию о флагах TCP, данных ICMP, сбои трафика TCP/UDP, пакеты TCP-соединения и подсчеты byne. Она также собирает информацию общей и подробной статистики интерфейса TCP, UDP, IP, ICMP, no-IP, ошибок контрольной суммы IP, активности интерфейса и т.д.
Команда для скачивания утилиты:
Для запуска утилиты введите:
Утилита iftop
iftop — еще одна утилита для мониторинга системы с открытым исходным кодом на терминальной основе, которая отображает обновляемый список использования пропускной способности сети (исходные и целевые узлы), которые проходят через сетевой интерфейс вашей системы. iftop рассматривается для использования в сети, в то время как «top» рассматривается для использования с ЦП. iftop – это инструмент, который контролирует выбранный интерфейс и отображает текущее использование полосы пропускания между двумя хостами.
Для запуска утилиты введите:
Утилита speedtest-cli
Speedtest-cli - это простой клиент, написанный на Python, который мы сможем использовать для измерить двунаправленную пропускную способность нашего интернет-соединения и что для получения результатов он использует инфраструктуру speedtest.net.
Есть вероятность, что этот инструмент покажет нам противоречивые результаты при работе со Speedtest.net. Есть несколько концепций, которые следует учитывать в отношении этого потенциального фактора:
Speedtest.net перешел на использование тестов от чистый сокет вместо тестов на основе HTTP.
Это приложение написано на Python. Различные версии Python они будут выполнять одни части кода быстрее, чем другие.
Скорость и емкость процессора а память будет играть важную роль в несогласованности между Speedtest.net и даже другими машинами в той же сети.
Для начала, нужно установить speedtest-cli
Для того чтобы запустить утилиту без дополнительных параметров достаточно ввести:
В предыдущем варианте все значения были представлены в битах, если нам необходимо, мы можем получить информацию в байтах, для этого нужно использовать опцию --bytes:
Полезные команды Speedtest-cli
Speedtest-cli предлагает множество опций и настроек. Любой желающий может проконсультироваться и проверить их все, просто набрав в терминале:
В случае, если мы хотим или нуждаемся получить список всех скоростных серверов в порядке возрастания расстояния до нашей ситуации. Нам останется только написать следующую команду:
В этом случае вы должны смотреть на эти числа в крайнем правом углу предыдущего изображения. Мы сможем запустить тест с этого конкретного сервера, просто указав его идентификацию с помощью следующей команды:
Как мы только что видели, этот интересный инструмент под названием speedtest-cli можно использовать для проверки скорости нашего интернета с терминала. Он имеет большое количество функций и сделан на моем любимом языке Python. Я хочу уточнить, что это приложение не является надежным инструментом для отчетов о задержках. Задержка, которую покажет нам этот инструмент, не должна рассматриваться как ориентировочное значение задержки стиля. ICMP. Это относительное значение, используемое для определения сервера с наименьшей задержкой для тестирования скорости.
Утилита iperf
Утилита iperf - это генератор сетевого трафика, предназначенный для проверки скорости и пропускной способности сети. Программа кроссплатформена, и распространяется с открытым исходным кодом. Вы можете использовать её для проверки пропускной способности VPS серверов или для настройки и улучшения производительности сети.
Синтаксис и опции 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