Траблшутинг сети: mtr, tcpdump, ss
Траблшутинг сети: mtr, tcpdump, ss
Сетевые проблемы — одни из самых неприятных для диагностики. «Сайт не открывается», «база данных не отвечает», «пакеты теряются» — каждое из этих сообщений требует системного подхода. Хорошая новость: в Linux есть отличный набор инструментов, которые позволяют найти проблему быстро и точно.
mtr: трассировка маршрута в реальном времени
mtr (Matt's Traceroute) объединяет ping и traceroute в один интерактивный инструмент. Он непрерывно отправляет пакеты и показывает статистику потерь и задержек на каждом хопе.
# Установка
apt install mtr -y
# Запуск
mtr 8.8.8.8
# Режим отчёта (удобно для логирования)
mtr --report --report-cycles 100 8.8.8.8
На что смотреть в выводе mtr:
- Loss% — процент потерь. Если потери только на одном хопе, но дальше всё хорошо — это часто просто ограничение ICMP на роутере, не реальная проблема
- Avg — средняя задержка. Резкий рост на конкретном хопе указывает на узкое место
- StDev — стандартное отклонение. Высокое значение говорит о джиттере — нестабильности задержки
tcpdump: перехват пакетов
tcpdump — незаменимый инструмент для анализа трафика на уровне пакетов. Позволяет увидеть реальный обмен данными между хостами.
# Весь трафик на интерфейсе eth0
tcpdump -i eth0
# Трафик от/к конкретному хосту
tcpdump -i eth0 host 192.168.1.100
# Только TCP-трафик на порту 443
tcpdump -i eth0 tcp port 443
# Сохранить в файл для анализа в Wireshark
tcpdump -i eth0 -w /tmp/capture.pcap
# Читать сохранённый файл
tcpdump -r /tmp/capture.pcap
# Показать содержимое пакетов в ASCII
tcpdump -i eth0 -A port 80
# Подробный вывод с временными метками
tcpdump -i eth0 -nn -vv host 192.168.1.100
Полезные фильтры:
# TCP SYN-пакеты (новые соединения)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0'
# Пакеты с RST (сброс соединения)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0'
# DNS-трафик
tcpdump -i eth0 port 53
ss: состояние сокетов и соединений
ss — современная замена netstat, работает быстрее и показывает больше информации.
# Все TCP-соединения
ss -t
# Все слушающие порты
ss -tlnp
# Соединения с конкретным портом
ss -t dst :443
# UDP-сокеты
ss -u
# Статистика по сокетам
ss -s
# Соединения с фильтром по состоянию
ss -t state established
# Показать процесс, владеющий сокетом
ss -tlnp | grep :80
Состояния TCP-соединений:
ESTABLISHED— активное соединениеTIME_WAIT— соединение закрыто, ждёт таймаута (норма)CLOSE_WAIT— удалённая сторона закрыла соединение, локальная нет (часто баг в приложении)SYN_SENT— попытка установить соединение
Дополнительные инструменты
ip — управление сетевыми интерфейсами и маршрутами:
ip addr show # Список интерфейсов и адресов
ip route show # Таблица маршрутизации
ip neigh show # ARP-таблица
nmap — сканирование портов:
# Проверить открытые порты хоста
nmap -sT 192.168.1.100
# Быстрое сканирование популярных портов
nmap -F 192.168.1.0/24
nc (netcat) — быстрая проверка доступности порта:
# Проверить, открыт ли порт
nc -zv 192.168.1.100 5432
# Простой тест пропускной способности
nc -l 9999 > /dev/null &
dd if=/dev/zero | nc 192.168.1.100 9999
Алгоритм диагностики
- Проверьте физический уровень —
ip link show, индикаторы на порту коммутатора - Проверьте IP-связность —
pingдо шлюза, до удалённого хоста - Проверьте маршрутизацию —
ip route show,mtrдо проблемного хоста - Проверьте порт —
nc -zv host port,ss -tlnpна сервере - Перехватите трафик —
tcpdumpдля анализа реального обмена пакетами
Следуя этому алгоритму от простого к сложному, большинство сетевых проблем можно локализовать за несколько минут.
Отличная подборка. Ещё советую добавить в арсенал
iperf3для измерения реальной пропускной способности между двумя хостами — очень помогает когда подозреваешь деградацию канала.