В статье описана трассировка маршрута по конкретному порту в Linux с помощью утилит traceroute, tcptraceroute и nmap для диагностики сетевых подключений.
1. Трассировка через TCP
Стандартная утилита traceroute по умолчанию использует UDP-пакеты на случайные высокие порты, которые часто блокируются межсетевыми экранами. Для проверки пути к веб-серверу, базе данных или SSH используйте флаг -T (TCP) и -p (порт). Требуются права root.
sudo traceroute -T -p 443 google.com
Примеры для других сервисов:
- SSH:
sudo traceroute -T -p 22 192.168.1.50 - MySQL:
sudo traceroute -T -p 3306 db.example.com
2. Трассировка через UDP
Для приложений, использующих протокол UDP (например, DNS), используйте флаг -U:
traceroute -U -p 53 8.8.8.8
3. Альтернативные инструменты
Если стандартный traceroute отсутствует или требуется специфическая диагностика, используйте следующие утилиты:
tcptraceroute
Специализированный инструмент только для TCP-трассировки. Часто работает стабильнее в сложных сетях.
sudo tcptraceroute example.com 443
nmap
Мощный сканер, позволяющий совместить проверку открытости порта и трассировку маршрута.
sudo nmap --traceroute -p 443 example.com
4. Практические советы
Диагностика потерь пакетов: Если трассировка обрывается на определенном узле, это не всегда означает проблему. Многие маршрутизаторы настроены не отвечать на ICMP или TTL-exceeded сообщения. Попробуйте сравнить результаты TCP и UDP трассировок.
Проверка MTU: Иногда проблема не в маршруте, а в размере пакета. Если ping проходит, а соединение по конкретному порту зависает, попробуйте уменьшить MTU на интерфейсе или использовать флаг -M do (Don’t Fragment) в ping для проверки пути.
ping -M do -s 1472 example.com
Если пакеты такого размера не проходят, постепенно уменьшайте значение -s, пока не найдете максимальный рабочий размер.

