Сетевой дебаг — область, где у всех утилит одна работа и слегка разный синтаксис. netstat депрекейтнут в пользу ss. dig, host, nslookup пересекаются. route на macOS — не тот же route на Linux. Спрашивая по сути задачи, а не по утилите, обходим всю эту историю.
1. Слушающие порты
clai
$ clai покажи все слушающие TCP-порты с именем процесса→ ss -ltnpState Recv-Q Local Address:Port ProcessLISTEN 0 0.0.0.0:22 users:(("sshd",pid=812))LISTEN 0 127.0.0.1:5432 users:(("postgres",pid=1234))
2. Кто подключён к сервису
clai
$ clai кто сейчас подключён к моему postgres→ ss -tnp 'sport = :5432'ESTAB 10.0.1.12:54322 10.0.1.50:5432 users:(("postgres",pid=1234))
3. Почему DNS медленный
clai
$ clai проследи, почему DNS для example.com резолвится медленно→ dig +trace +stats example.com;; Query time: 312 msec;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
+stats — половина, которую никто не печатает. Разница между «знаю, что медленно» и «знаю, какой hop медленный».
4. Проверка MTU
clai
$ clai проверь MTU до 8.8.8.8→ ping -M do -c 3 -s 1472 8.8.8.81480 bytes from 8.8.8.8: ttl=58 time=12.4 ms
-M do ставит бит don't-fragment. Если 1472+8+20 = 1500 проваливается — эффективный MTU ниже стандартного.
5. Таблица маршрутов — читаемая
clai
$ clai покажи таблицу маршрутов в читаемом виде→ ip -4 route showdefault via 10.0.0.1 dev eth0 proto dhcp src 10.0.1.1210.0.0.0/16 dev eth0 proto kernel scope link src 10.0.1.12
См. также
- Убить процесс на порту — когда расследование «кто слушает» подсказывает, что остановить.
- Docker и Kubernetes one-liners — когда сетевая проблема внутри контейнеров, а не на хосте.