Когда сервис не открывается, то первое желание часто такое: сразу лезть в конфиги приложения, firewall, nginx, systemd и логи. Но иногда полезнее начать с более простого вопроса: а пакеты вообще доходят до сервера? Для этого есть старый добрый tcpdump. Он позволяет посмотреть сетевой трафик прямо на интерфейсе и быстро понять, видит ли сервер входящие пакеты. Например, пользователь говорит: «Не открывается сайт на 443 порту».
▪️ На сервере запускаем:
tcpdump -i any port 443
И просим пользователя повторить подключение. Если в выводе появились пакеты — до сервера что-то доходит. Если тишина — проблема может быть раньше:
• firewall перед сервером;
• security group;
• маршрутизация;
• NAT;
• балансировщик;
• неправильный IP;
• провайдерская фильтрация;
• подключение вообще идет не туда.
▪️ Чуть более точный вариант — смотреть только входящий TCP SYN:
tcpdump -i any 'tcp port 443 and tcp[tcpflags] & tcp-syn != 0'
SYN — это начало TCP-подключения. Если SYN приходит, значит клиент хотя бы пытается установить соединение с сервером. Можно сразу фильтровать по IP клиента:
tcpdump -i any host 203.0.113.10 and port 443
Так удобнее, если на сервере много трафика и общий вывод превращается в кашу.
Если нужно проверить SSH:
tcpdump -i any port 22
Если HTTP:
tcpdump -i any port 80
Если DNS:
tcpdump -i any port 53
Для UDP-сервисов тоже работает:
tcpdump -i any udp port 1194
▪️ Полезные ключи:
-n -Не резолвить имена. Вывод будет быстрее и чище.
-nn — Не резолвить ни имена, ни порты. Вместо https будет 443.
-v — Более подробный вывод.
-c 20 — Поймать 20 пакетов и завершиться.
▪️ Пример аккуратной команды для быстрой проверки:
tcpdump -i any -nn -c 20 host 203.0.113.10 and port 443
▪️ Еще один полезный сценарий — понять, отвечает ли сервер. Например, видим входящий SYN от клиента:
203.0.113.10.53044 > 10.0.0.5.443: Flags [S]
А следом должен быть ответ сервера:
10.0.0.5.443 > 203.0.113.10.53044: Flags [S.]
Если входящий SYN есть, но ответа нет — нужно смотреть локальный firewall, сервис, listen-порт или routing обратно. Проверяем, слушает ли порт:
ss -lntp | grep ':443'
Проверяем firewall:
iptables -S nft list ruleset
Если SYN приходит и SYN-ACK уходит, но клиент все равно не подключается — возможно, проблема на обратном пути.
▪️ Иногда полезно явно указать интерфейс вместо any:
ip a tcpdump -i eth0 -nn port 443
any удобен для быстрой диагностики, но конкретный интерфейс помогает понять, через какую сетевую карту реально идет трафик.
▪️ Можно сохранить дамп в файл и потом открыть его в Wireshark:
tcpdump -i any -nn host 203.0.113.10 -w capture.pcap
Это удобно, если проблему нужно передать сетевикам или разобрать позже.
