Skip to content

This article is available in Russian. An English version is on the way.Open the Russian page

Диагностика сети: ping, mtr, ss, curl, dig

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

Level
Intermediate
Reading time
3 min read
Updated
Tested on
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Contents
  1. Инструменты
  2. ping: есть ли связь
  3. mtr: где теряются пакеты
  4. Как прислать трассировку в тикет
  5. ss: слушает ли служба порт
  6. curl: что отвечает сайт
  7. dig: куда указывает домен
  8. Частые ошибки

Сетевые проблемы удобно разбирать по слоям: доходят ли пакеты до сервера, слушает ли программа порт, пропускает ли фаервол, правильно ли настроен DNS. Для каждого слоя — своя команда.

Инструменты

bash
$ apt install -y mtr-tiny traceroute dnsutils netcat-openbsd curl

На macOS mtr ставится через Homebrew (brew install mtr), в Windows вместо него есть pathping и WinMTR.

ping: есть ли связь

bash
$ ping -c 10 203.0.113.10

Смотрите на packet loss и разброс времени (mdev). Потери в несколько процентов уже заметны для SSH и игр.

mtr: где теряются пакеты

mtr совмещает traceroute и ping: показывает каждый узел по пути и потери на нём.

bash
$ mtr -rwc 100 203.0.113.10
  • Потери на промежуточном узле, которые не доходят до последней строки, обычно не проблема: маршрутизаторы часто ограничивают ответы на ICMP.
  • Если потери начинаются на каком-то узле и сохраняются до конца — проблема на этом участке или раньше.
  • Резкий рост задержки между соседними узлами бывает нормальным, если узлы в разных странах.

Как прислать трассировку в тикет

Сделайте две трассировки — от вас до сервера и от сервера до вас (ваш IP можно узнать на сервере в выводе команды who или на любом сайте определения IP). Запускайте в момент, когда проблема проявляется, и вставьте текст целиком, а не скриншот:

bash
$ mtr -rwc 100 203.0.113.10 > mtr-to-server.txt$ mtr -rwc 100 198.51.100.7 > mtr-to-client.txt

ss: слушает ли служба порт

bash
$ ss -tulpn

Адрес 0.0.0.0 или [::] означает, что порт доступен на всех интерфейсах; 127.0.0.1 — только локально. Если нужного порта в списке нет, служба не запущена или слушает другой порт.

Проверить доступность порта снаружи — с вашего компьютера:

bash
$ nc -vz 203.0.113.10 443

curl: что отвечает сайт

bash
$ curl -sv -o /dev/null https://example.com$ curl -I --resolve example.com:443:203.0.113.10 https://example.com

Первая команда покажет TLS-рукопожатие, сертификат и заголовки ответа. Вторая обращается к конкретному IP в обход DNS — удобно, чтобы проверить новый сервер до переключения домена.

dig: куда указывает домен

bash
$ dig +short example.com A$ dig +short example.com AAAA$ dig @1.1.1.1 example.com A

Если публичный резолвер уже возвращает новый IP, а ваш компьютер — старый, дело в кэше. Он очистится по истечении TTL записи.

Частые ошибки

  • Служба слушает только 127.0.0.1 — поменяйте адрес привязки в её настройках, если к ней нужен доступ снаружи (и закройте фаерволом, если не нужен).
  • Порт слушается, но снаружи закрыт — правило фаервола (ufw status) или, для Docker, публикация порта только на 127.0.0.1.
  • Исходящие соединения на порты 25, 465 и 587 закрыты во всей сети — это ожидаемо, см. статью про почту.

Read to the end and the article counts toward your learning progress.

  • сеть
  • ping
  • mtr
  • traceroute
  • порты
  • dns

Was this article helpful?