Когда сервер недоступен или работает медленно — нужно знать, где искать проблему. Вот полный арсенал команд для диагностики сети на VPS.
1. ping — базовая проверка доступности
# Проверить доступность хоста
ping google.com
# IPv6 ping
ping6 google.com
# Отправить 5 пакетов и остановить
ping -c 5 8.8.8.8
# Пинг с размером пакета 1400 байт (проверка MTU)
ping -s 1400 -c 3 google.com
2. traceroute / tracepath — маршрут пакетов
# Стандартный traceroute
traceroute google.com
# Использовать ICMP (как ping)
traceroute -I google.com
# Traceroute по IPv6
traceroute6 google.com
# tracepath — без прав root
tracepath google.com
3. mtr — лучший инструмент для диагностики потерь
# Установка
sudo apt install mtr -y
# Интерактивный режим (обновляется в реальном времени)
mtr google.com
# Отчёт в одну страницу (удобно для тикетов в поддержку)
mtr --report google.com
# 100 пакетов, только числа
mtr -r -c 100 -n google.com
4. ss и netstat — открытые порты и соединения
# Все открытые TCP-порты (слушающие)
ss -tlnp
# Все соединения (TCP + UDP)
ss -tunap
# Устаревший netstat (аналог)
netstat -tlnp
# Посмотреть кто слушает порт 80
ss -tlnp | grep :80
# или
lsof -i :80
5. nmap — сканирование портов
# Установка
sudo apt install nmap -y
# Сканировать свои открытые порты
sudo nmap -sS -O localhost
# Проверить доступность порта на удалённом хосте
nmap -p 80,443,22 192.168.1.1
# UDP-сканирование
sudo nmap -sU -p 53,123 google.com
6. tcpdump — перехват пакетов
# Весь трафик на интерфейсе eth0
sudo tcpdump -i eth0
# Только HTTP-трафик на порту 80
sudo tcpdump -i eth0 port 80
# Трафик от конкретного IP
sudo tcpdump -i eth0 src 192.168.1.100
# Сохранить в файл для анализа в Wireshark
sudo tcpdump -i eth0 -w /tmp/capture.pcap
Шпаргалка: что когда использовать
| Проблема | Инструмент |
|---|---|
| Сайт недоступен | ping → traceroute → mtr |
| Порт не слушает | ss -tlnp, lsof -i |
| Пакеты теряются | mtr --report google.com |
| Нужно знать маршрут | traceroute / ip route |
| Открытые порты сервера | nmap localhost |
| Отладка конкретного сервиса | tcpdump port N |
💡 mtr для поддержки: Когда пишете тикет о проблемах с сетью — всегда прикладывайте вывод
mtr --report google.com и mtr --report YOUR_SERVER_IP (обе стороны). Это даёт полную картину.Типичные ошибки и что они означают
| Сообщение | Причина |
|---|---|
| ping: connect: Network is unreachable | На сервере нет маршрута по умолчанию — обычно после ручной правки таблицы маршрутизации или сбоя DHCP на интерфейсе |
| traceroute: command not found | Пакет traceroute не входит в минимальный образ Debian/Ubuntu по умолчанию — нужно установить его отдельно |
| bind: Address already in use | Порт уже занят другим процессом; какой именно — покажет ss -tlnp | grep :PORT, а не nmap |
| tcpdump: You don't have permission to capture on that device | Команда запущена без sudo — захват пакетов требует прав CAP_NET_RAW, обычного пользователя недостаточно |
| nmap изнутри показывает порт открытым, а снаружи — закрытым | Файрвол (ufw/iptables) блокирует входящие соединения снаружи, но разрешает трафик с localhost — типичная путаница при самодиагностике |
| mtr показывает 100% loss только на одном из промежуточных хопов | Многие роутеры провайдера намеренно депрайоритизируют ICMP на транзитных узлах — это не реальная потеря пакетов, ориентируйтесь на loss у последнего хопа (цели) |
Когда этих инструментов недостаточно
- Нужен непрерывный мониторинг с историей и алертами, а не разовый снимок — эти команды дают срез момента, для истории нужен отдельный сервис вроде Zabbix или Prometheus
- Проблема на уровне приложения, а не сети (медленный SQL-запрос, утечка памяти) — сетевые утилиты покажут связность и открытый порт, но не причину задержки внутри бэкенда
- Нужно содержательно анализировать зашифрованный TLS-трафик — tcpdump перехватит пакеты, но без приватного ключа сервера содержимое HTTPS так и останется зашифрованным
- Диагностика нужна для сети клиента, а не сервера — с сервера видна только его сторона маршрута, а проблема часто лежит в сети провайдера самого клиента
Собираем диагностику в один отчёт
Для тикета в поддержку удобнее приложить один файл со всеми результатами сразу, а не пересказывать симптомы словами в свободной форме. Постоянный мониторинг вместо разовых снимков разбирают статьи про Netdata и про связку Grafana и Prometheus.
# Собрать базовую диагностику в один файл одной командой
{
echo "--- ping ---"; ping -c 4 8.8.8.8
echo "--- route ---"; ip route show
echo "--- listening ports ---"; ss -tlnp
echo "--- mtr ---"; mtr --report -c 20 8.8.8.8
} > /tmp/netdiag-$(date +%Y%m%d-%H%M).txt