Модуль 08 — Диагностика сети

Не гадать, а проверять: от кабеля до приложения

Прогресс курса Модуль 8 из 9

Что вы освоите в этом модуле

01

Методика снизу вверх

Жалоба «не работает сайт» описывает симптом, а не причину. Причину ищут, проверяя уровни по порядку: каждый следующий опирается на предыдущий, и первая непройденная проверка указывает место поломки.

ШагПроверкаКомандаЕсли не прошла
1. ИнтерфейсЕсть линкip -br linkКабель, порт коммутатора, драйвер, Wi-Fi
2. АдресЕсть правильный адрес и маскаip -br addrDHCP (169.254 — нет ответа), статическая настройка
3. ШлюзШлюз задан и отвечаетip route, ping шлюза, ip neighНеверный шлюз, VLAN, маршрутизатор
4. Внешний адресОтвечает адрес в интернетеping 77.88.8.8, mtrNAT, провайдер, межсетевой экран
5. ИменаИмя разрешаетсяdig имя, getent hosts имяDNS-сервер, /etc/resolv.conf, /etc/hosts
6. ПортПорт службы открытnc -zv хост портСлужба не запущена, экран на сервере
7. ПриложениеСлужба отвечает правильноcurl -vСертификат, код 5xx, настройки приложения

Важно проверять с того же узла, где проблема, и сравнивать с узлом, где всё работает. Разница между ними — лучшая подсказка.

02

traceroute: путь пакета

traceroute отправляет пакеты с TTL = 1, 2, 3… Каждый маршрутизатор, на котором TTL обнулился, возвращает сообщение ICMP «время истекло» и тем самым называет себя. Так по шагам строится путь до цели.

$ traceroute -n -q1 -w1 77.88.8.8
traceroute to 77.88.8.8 (77.88.8.8), 12 hops max, 60 byte packets
 1  192.168.116.1  0.138 ms
 2  198.18.23.193  0.419 ms
 3  92.204.249.104  0.279 ms
 4  92.204.249.72  0.497 ms
 5  *
 6  62.115.195.218  3.504 ms
 7  *
 ...

Первый шаг — свой шлюз, дальше — сеть провайдера. * значит, что маршрутизатор не ответил за отведённое время. Это не обязательно потеря: многие маршрутизаторы не отвечают на такие запросы или отвечают с низким приоритетом. Тревожно, когда после звёздочек цель так и не достигнута, а у соседей по сети с другим маршрутом всё работает.

03

mtr: потери по участкам

mtr (пакет mtr-tiny) объединяет traceroute и ping: многократно опрашивает каждый узел пути и считает потери и задержки.

$ mtr -n -r -c 3 -m 8 77.88.8.8
HOST: debian                      Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.116.1              0.0%     3    0.2   0.4   0.2   0.6   0.2
  2.|-- 198.18.23.193              0.0%     3    0.6   0.6   0.5   0.6   0.1
  3.|-- 92.204.249.104             0.0%     3    0.5   1.7   0.5   4.1   2.0
  4.|-- 92.204.249.72              0.0%     3    0.5   0.6   0.5   0.7   0.1
  5.|-- 62.115.201.202            33.3%     3  350.5 362.3 350.5 374.2  16.7
  6.|-- 62.115.195.218             0.0%     3    3.7   3.7   3.6   3.7   0.0
  7.|-- 10.32.44.1                 0.0%     3   43.6  43.7  43.6  43.7   0.1
  8.|-- 10.1.4.1                   0.0%     3   43.5  43.5  43.4  43.5   0.1

Учимся читать. На шаге 5 — 33% потерь и 350 мс, но на шагах 6–8 потерь нет и задержка снова 3–43 мс. Значит, проблемы на пути нет: маршрутизатор 5 просто неохотно отвечает на диагностические запросы, а транзитный трафик пропускает нормально. Настоящая потеря видна, когда она начинается на каком-то узле и сохраняется на всех следующих. Скачок задержки с 3,7 до 43 мс на шаге 7 — переход в другой город: это физика расстояния, а не неисправность.

Для обращения к провайдеру сохраняйте отчёт mtr -rwc 100 адрес — 100 замеров с полными именами узлов, в обе стороны, если возможно. Это стандартный формат, с которым работают службы поддержки.
04

Проблемы MTU

Классическая история: по VPN открывается приглашение SSH и маленькие страницы, но большие страницы, загрузка файлов и git clone «зависают». Ping проходит. Причина — на пути участок с MTU меньше 1500 (туннель добавил свои заголовки), а сообщения ICMP «нужна фрагментация» где-то отфильтрованы. Маленькие пакеты проходят, большие исчезают без следа.

$ ping -c 1 -M do -s 1472 10.50.0.10     # 1500 байт — не проходит
1 packets transmitted, 0 received, 100% packet loss
$ ping -c 1 -M do -s 1372 10.50.0.10     # 1400 — проходит
1 packets transmitted, 1 received, 0% packet loss

Найдя наибольший проходящий размер, уменьшают MTU интерфейса туннеля (ip link set wg0 mtu 1400) или включают на маршрутизаторе подстройку TCP MSS. В выводе tracepath адрес MTU пути показывается автоматически.

05

Захват трафика и Wireshark

Когда команды не дают ответа, смотрят сами пакеты. На сервере без графики трафик записывают tcpdump в файл, переносят на свой компьютер (scp) и открывают в Wireshark:

$ sudo tcpdump -i ens18 -nn -w /tmp/web.pcap 'host 188.120.235.218 and tcp port 443'
# воспроизвести проблему, затем Ctrl+C
$ scp lab:/tmp/web.pcap .
Фильтр отображения WiresharkЧто покажет
tcp.flags.syn == 1 && tcp.flags.ack == 0Попытки соединений
tcp.flags.reset == 1Сбросы — отказы и обрывы
tcp.analysis.retransmissionПовторные отправки — признак потерь
dns, dns.flags.rcode != 0DNS-запросы, ответы с ошибкой
http.response.code >= 400Ошибки HTTP (для незашифрованного трафика)
tls.handshake.type == 1Начало TLS: имя сайта в поле SNI видно даже в HTTPS

В Wireshark каждый пакет раскрывается по уровням — Ethernet, IP, TCP, приложение, — ровно как в модели из модуля 01. Меню «Статистика → Диаграмма потоков» рисует обмен двух узлов во времени: рукопожатие, данные, повторы и сбросы видны сразу.

06

Типовые отказы

СимптомЧто проверитьЧастая причина
Адрес 169.254.x.xЖурнал DHCP-клиента, линкDHCP-сервер недоступен, другой VLAN
Соседи по сети пингуются, интернет — нетip route, ping шлюза, mtrНет маршрута по умолчанию, неверный шлюз, NAT
По IP работает, по имени — нетdig, /etc/resolv.confDNS-сервер недоступен или отвечает SERVFAIL
У одних пользователей открывается, у других нетИх адреса, резолверы, маршрутыРазные DNS (старый кэш после смены записи), разные VLAN
Connection refusedss -tlnp на сервереСлужба не запущена или слушает 127.0.0.1
Тайм-аут соединенияЭкран на сервере и по пути, tcpdump на сервереПорт закрыт межсетевым экраном, асимметричный маршрут
Маленькое работает, большое зависаетping -M do -s, tracepathMTU на туннеле
Ошибка сертификатаcurl -v, дата на клиенте, цепочкаПросрочен, другое имя, неизвестный корень
Сеть работает, но медленноmtr, ethtool, ss -tiПотери, порт на 100 Мбит/с, перегруженный канал
07

Отчёт о диагностике

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

Симптом:   с 10:40 у бухгалтерии (VLAN 10) не открывается nalog.gov.ru, у остальных — открывается.
Проверено: адреса и шлюз — в норме; ping 77.88.8.8 — проходит; dig www.nalog.gov.ru
           — SERVFAIL от 192.168.10.1, NOERROR от 77.88.8.8.
Причина:   DNS-кэш на маршрутизаторе VLAN 10 перестал отвечать после обновления.
Сделано:   перезапущена служба DNS на маршрутизаторе в 11:05.
Проверка:  dig от 192.168.10.1 — NOERROR, сайт открывается у трёх пользователей.
Дальше:    добавить второй DNS-сервер в настройки DHCP для VLAN 10.

Ключевые выводы модуля

Запомните главное

  • Диагностика снизу вверх: линк → адрес → шлюз → внешний адрес → DNS → порт → приложение
  • traceroute показывает путь; * — ещё не потеря
  • В mtr настоящая потеря начинается на узле и сохраняется до конца пути
  • «Маленькое работает, большое нет» — проверить MTU через ping -M do -s
  • Сомнения разрешает захват: tcpdump -w на сервере, разбор в Wireshark
  • Результат — отчёт: симптом, проверки, причина, действие, проверка, что дальше
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 07: HTTP Все модули Итоговый проект