Команда tracepath: проверка хопов и MTU пути вместо traceroute
На сервере Linux маршрут (хопы), по которому пакеты идут до цели, и MTU пути можно проверить командой tracepath без прав root. На сервере AlmaLinux 9 без установленного traceroute мы ограничили число хопов до 10 и проверили маршрут до example.com: до четвёртого хопа были видны время ответа и MTU пути 1500, а следующие шесть хопов не ответили.
Вывод ниже получен на сервере AlmaLinux 9.8 (учётная запись root), а версия traceroute и состояние пакета проверены на сервере Debian 12 (обычная учётная запись). IPv6-адреса первого хопа и промежуточных маршрутизаторов заменены примерами адресов для документации, а время ответа и значения pmtu оставлены как есть.
1️⃣ Как пользоваться командой tracepath
tracepath принимает одно имя или IP-адрес цели, отправляет UDP-пакеты и выводит ответившие хопы по одной строке в порядке TTL. По умолчанию максимальное число хопов — 30, его можно изменить опцией -m.
Для example.com мы добавили -m 10, чтобы проверить маршрут только до десятого хопа.
tracepath -n -m 10 example.com 1?: [LOCALHOST] 0.006ms pmtu 9001
1: fe80::1%eth0 0.077ms pmtu 1500
1: 2001:db8:a::5b 2.627ms asymm 8
2: 2001:db8:a::52 1.473ms asymm 12
3: 2001:db8:b::1e 19.653ms asymm 9
4: 2001:db8:c:: 3.642ms asymm 11
5: no reply
6: no reply
7: no reply
8: no reply
9: no reply
10: no reply
Too many hops: pmtu 1500
Resume: pmtu 1500 Этот сервер отправлял пакеты на IPv6-адрес example.com, и до четвёртого хопа выводилось время ответа. С пятого хопа шли строки no reply, поэтому строка reached, означающая, что цель достигнута за десять хопов, не появилась, а выполнение заняло около 18 секунд.
Запуск к той же цели без -m не завершился за 30 секунд. Для маршрутов со множеством неотвечающих хопов число проверяемых хопов уменьшают опцией -m.
Версию установленного tracepath проверяют опцией -V; на этом сервере tracepath был из iputils 20210202.
tracepath -Vtracepath from iputils 202102022️⃣ Как читать вывод tracepath
Каждая строка вывода показывает по порядку номер хопа, ответивший адрес и время приёма-передачи. Там, где меняется MTU пути, добавляется pmtu, а если у прямого и обратного пути разное число хопов — asymm. Вот что смотреть в каждой строке.
| Вывод | Назначение |
|---|---|
| 1?: | Поле номера хопа — ? добавляется к номеру, угаданному из-за того, что TTL не удалось получить из ответа |
| [LOCALHOST] | Строка самого сервера, пока пакет ещё не ушёл в сеть |
| 0.077ms | Время приёма-передачи до этого хопа |
| pmtu 1500 | MTU пути (байты), изменившийся в этой точке, — появляется только при изменении |
| asymm 8 | Разница в числе хопов между прямым и обратным путём — официальное руководство называет это значение ненадёжным |
| no reply | Хоп, не ответивший на пакет, отправленный с этим TTL |
| reached | Строка, где цель достигнута |
| Too many hops | Остановка после проверки числа хопов, заданного опцией -m |
| Resume: pmtu … hops … back … | MTU всего пути, число хопов до цели и оценка числа обратных хопов |
В выводе для example.com pmtu в первой строке [LOCALHOST] был 9001 и на первом хопе сменился на 1500. То, что строка TTL 1 выводится дважды с другим адресом, тоже соответствует примеру из официального руководства. Руководство объясняет, что если первый пакет отклоняется на первом хопе из-за MTU пути, та же строка TTL появляется ещё раз.
Когда цель достигнута, в конце строки добавляется reached, а последняя строка Resume показывает число хопов до цели. При отправке на 127.0.0.1 reached появился за один хоп, а строка Resume была [pmtu 65535 hops 1 back 1].
tracepath -n 127.0.0.1 1: 127.0.0.1 0.047ms reached
Resume: pmtu 65535 hops 1 back 1 Если маршрут закончился на Too many hops без reached, значит, в пределах хопов, заданных опцией -m, ответа от цели не было. На маршруте до example.com за десять хопов reached тоже не появился, поэтому в строке Resume остался только pmtu без числа хопов.
3️⃣ Опции tracepath
У tracepath всего восемь опций: -4, -6, -n, -b, -l, -m, -p и -V; при запуске без цели этот список выводится как справка по использованию. Без опций ответившие адреса преобразуются в имена: при отправке на localhost в поле хопа появился localhost.
tracepath localhost 1?: [LOCALHOST] 0.003ms pmtu 65536
1: localhost 0.048ms reached
1: localhost 0.030ms reached
Resume: pmtu 65536 hops 1 back 1 [tracepath -n] выводит только IP-адреса, не преобразуя их в имена. С -n для того же localhost поле хопа сменилось на IPv6-адрес ::1, и маршрут до example.com, запущенный с -n, тоже показал в поле хопа только адреса.
tracepath -n localhost 1?: [LOCALHOST] 0.005ms pmtu 65536
1: ::1 0.039ms reached
1: ::1 0.010ms reached
Resume: pmtu 65536 hops 1 back 1 -b выводит имя и адрес вместе. С -b для 127.0.0.1 адрес появился в скобках после имени: [localhost (127.0.0.1)].
tracepath -b 127.0.0.1 1: localhost (127.0.0.1) 0.050ms reached
Resume: pmtu 65535 hops 1 back 1 -m задаёт максимальное число проверяемых хопов и принимала значения от 0 до 255. С -m 0 сразу вывелись только строки Too many hops и Resume без строк хопов, а значение 256 было отклонено с сообщением [out of range].
tracepath -m 0 127.0.0.1 Too many hops: pmtu 65535
Resume: pmtu 65535 -l — длина первого отправляемого пакета; по умолчанию 65535 байт для IPv4 и 128000 байт для IPv6. С -l 1500 для 127.0.0.1 pmtu в строке Resume сменился с 65535 на 1500.
tracepath -l 1500 -n 127.0.0.1 1: 127.0.0.1 0.028ms reached
Resume: pmtu 1500 hops 1 back 1 -p задаёт первый UDP-порт назначения. Результат с -p 33434 для 127.0.0.1 был таким же, как без этой опции.
| Опция | Копировать | Описание |
|---|---|---|
| -n | Выводить только IP-адреса, не преобразуя в имена | |
| -b | Выводить имя и адрес вместе | |
| -mчисло хопов | Задать максимальное число проверяемых хопов, по умолчанию 30 | |
| -lдлина | Задать длину первого пакета, по умолчанию IPv4 65535, IPv6 128000 | |
| -V | Вывести версию и выйти |
| Опция | Копировать | Описание |
|---|---|---|
| -4 | Отправляет только на IPv4-адреса | |
| -6 | Отправляет только на IPv6-адреса | |
| -pПорт | Задать первый UDP-порт назначения |
4️⃣ Чем tracepath отличается от traceroute
На серверах, где traceroute установить нельзя, маршрут проверяют командой tracepath вместо traceroute. На проверенном сервере AlmaLinux 9.8 пакета traceroute не было, а tracepath входит в пакет iputils и запустился без отдельной установки.
rpm -q traceroutepackage traceroute is not installedНа сервере Debian 12 было наоборот: traceroute 2.1.2 был установлен, а пакет iputils-tracepath с tracepath — нет.
traceroute --versionModern traceroute for Linux, version 2.1.2
Copyright (c) 2016 Dmitry Butskoy, License: GPL v2 or any laterapt-cache policy iputils-tracepathiputils-tracepath:
Installed: (none)
Candidate: 3:20221126-1+deb12u1Как видно по этим двум серверам, набор команд зависит от дистрибутива, поэтому сначала проверьте, какая из них есть на сервере, к которому вы подключены. tracepath не требует прав root и запускается под любой учётной записью, которая может отправлять UDP-пакеты. Исполняемый файл tracepath на сервере AlmaLinux 9.8 тоже имел права rwxr-xr-x без дополнительных возможностей (capability).
| Параметр | tracepath | traceroute |
|---|---|---|
| Сервер AlmaLinux 9.8 | Входит в пакет iputils, запускается сразу | Не установлен |
| Сервер Debian 12 | Пакет iputils-tracepath не установлен | traceroute 2.1.2 установлен |
| Отправляемые пакеты | UDP | По умолчанию UDP, -I — ICMP, -T — TCP |
| Вывод на хоп | Одна строка | По умолчанию три отправки, три значения времени (меняется опцией -q) |
| Число опций | Восемь: -4 -6 -n -b -l -m -p -V | Больше 20 только на первом экране --help |
Если нужно смотреть маршрут по ICMP или TCP либо отправлять по несколько раз на хоп, чтобы сравнить время, придётся установить и использовать команду traceroute. На серверах, где установка затруднена или где нужно видеть и MTU пути, подходит tracepath.
🔲 Симулятор команды tracepath
В симуляторе ниже можно снова посмотреть маршрут до example.com, меняя только число хопов, или самостоятельно ввести -n, -b, -m и -l для localhost и 127.0.0.1 и сравнить результаты.
🔢 FAQ & рекомендуемые материалы
Брандмауэр
Установка FirewallD в Linux и настройка демона
Установка и настройка демона FirewallD, который управляет правилами брандмауэра через зоны и службы.
Сеть · Настройка
Команда netstat и команда ifconfig в Linux
Команды netstat и ifconfig показывают открытые порты, состояние соединений и сведения о сетевых интерфейсах.
Сеть · DNS
Команда nslookup
Команда nslookup спрашивает у DNS-сервера, в какой IP-адрес разрешается доменное имя.
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.