TRACEROUTE(1)

НАИМЕНОВАНИЕ
traceroute - вывод маршрута пакетов до сетевого узла

СИНТАКСИС
traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
[-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos]
[-l flow_label] [-w waittimes] [-z sendwait] [-UL] [-D]
[-P proto] [--sport=port] [-M method] [-O mod_options]
[--mtu] [--back]
host [packet_len]
traceroute6 [options]
tcptraceroute [options]
lft [options]

ОПИСАНИЕ
Утилита traceroute отслеживает маршрут пакетов, принятых из сети IP, к данному хосту. Она использует поле time to live (TTL) протокола IP и пытается получить ответ ICMP TIME_EXCEEDED от каждого шлюза на пути к хосту.

traceroute6 is equivalent to traceroute -6

tcptraceroute is equivalent to traceroute -T

Трассировщик четвертого уровня lft, выполняет трассировку по протоколу TCP, подобную traceroute -T, но пытается обеспечить совместимость с исходной своей реализацией, также называемой "lft".

Единственным обязательным параметром является название или IP-адрес получателя host. Необязательный параметр packet_len`gth - это общий размер зондирующего пакета (по умолчанию 60 байт для IPv4 и 80 для IPv6). В некоторых ситуациях указанный размер может быть проигнорирован или увеличен до минимального значения.

Эта программа пытается отследить маршрут, по которому IP-пакет будет следовать к какому-либо интернет-узлу, запуская пробные пакеты с небольшим ttl (временем жизни), а затем прослушивая ICMP-ответ "time exceeded" ("время превышено") от шлюза. Мы начинаем наши тесты с ttl, равным единице, и увеличиваем его на единицу, пока не получим сообщение ICMP "port unreachable" или TCP reset ("порт недоступен" или сброс TCP), что означает, что мы добрались до "хоста" или достигли максимального значения (которое по умолчанию равно 30 hops (переходов). При каждой настройке ttl отправляются три пробных пакета (по умолчанию) и выводится строка, показывающая время жизни ttl, адрес шлюза и время прохождения каждого пакета в оба конца. По запросу за адресом может следовать дополнительная информация. Если ответы на запрос поступают с разных шлюзов, будет напечатан адрес каждого отвечающего шлюза. Если в течение определенного времени ожидания ответа нет, то для этого запроса будет выведен символ "*" (звездочка).

По истечении времени ожидания могут быть выведены некоторые дополнительные сведения: !H, !N или !P (host, network or protocol unreachable - хост, сеть или протокол недоступны), !S (source route failed - ошибка исходного маршрута), !F (fragmentation needed - требуется фрагментация), !X (communication administratively prohibited - связь запрещена в административном порядке), !V (host precedence violation - нарушение приоритета хоста), !C (precedence cutoff in effect - фактическое отключение приоритета) или !<num> (ICMP unreachable code - код недоступности ICMP <num>). Если почти все проверки приведут к какой-либо недостижимости, то утилита traceroute прекратит проверку и завершит работу.

Мы не хотим, чтобы хост назначения обрабатывал пробные пакеты UDP, поэтому для порта назначения задано маловероятное значение (вы можете изменить его с помощью флажка -p). Для трассировки ICMP или TCP такой проблемы нет (для TCP мы используем метод полуоткрытия, который предотвращает просмотр наших пробных пакетов приложениями на целевом хосте).

В современной сетевой среде традиционные методы трассировки маршрутов не всегда применимы из-за широкого использования брандмауэров. Такие брандмауэры фильтруют "маловероятные" UDP-порты или даже эхо-сигналы ICMP. Чтобы решить эту проблему, реализованы некоторые дополнительные методы трассировки (включая tcp), смотрите раздел СПИСОК ДОСТУПНЫХ МЕТОДОВ ниже. Такие методы пытаются использовать определенный протокол и порт источника/назначения, чтобы обойти брандмауэры (которые будут восприниматься брандмауэрами как начало разрешенного типа сетевого сеанса).

ОПЦИИ

--help
    Показать справку и завершить работу.

-4, -6
    Явно принудительно выполните трассировку по протоколу IPv4 или IPv6. По умолчанию программа попытается разрешить заданное название и автоматически выберет соответствующий протокол. Если при вычислении названия хоста будут возвращены адреса как IPv4, так и IPv6, то traceroute будет использовать IPv4.

-I, --icmp
    Использовать для пробования ICMP ECHO

-T, --tcp
    Использовать для пробования TCP SYN

-d, --debug
    Включить отладку на уровне сокета (если это поддерживается ядром Linux)

-F, --dont-fragment
    Не фрагментировать пробные пакеты. (Для IPv4 также устанавливается бит DF, который указывает промежуточным маршрутизаторам также не фрагментировать удаленно).

    Изменяя размер зондирующего пакета с помощью параметра командной строки packet_len, вы можете вручную получить информацию о MTU отдельных сетевых переходов. Опция --mtu (см. ниже) пытается сделать это автоматически.

    Примечание. Нефрагментированные функции (такие как -F или --mtu) работают корректно только с версии ядра Linux 2.6.22. До этой версии IPv6 всегда был фрагментирован, IPv4 мог использовать только обнаруженный конечный mtu (из кэша маршрутов), который может быть меньше фактического mtu устройства.

-f first_ttl, --first=first_ttl
    Указывает, с какого TTL начинать. По умолчанию используется значение 1.

-g gateway, --gateway=gateway
    Указывает traceroute добавить к исходящему пакету опцию IP-маршрутизации источника, который указывает сети направить пакет через указанный шлюз gateway (большинство маршрутизаторов отключили маршрутизацию источника по соображениям безопасности). Как правило, допускается использование нескольких шлюзов gateway (через запятую). Для IPv6 допустим формат num,addr,addr..., где num - это тип заголовка маршрута (по умолчанию используется тип 2). Обратите внимание, что заголовок маршрута типа 0 теперь устарел (rfc5095).

-i interface, --interface=interface
    Указывает интерфейс, через который traceroute должна отправлять пакеты. По умолчанию интерфейс выбирается в соответствии с таблицей маршрутизации.

-m max_ttl, --max-hops=max_ttl
    Указывает максимальное количество переходов (максимальное значение времени жизни), которое будет проверяться с помощью traceroute. Значение по умолчанию равно 30.

-N squeries, --sim-queries=squeries
    Определяет количество пробных пакетов, отправляемых одновременно. Одновременная отправка нескольких пробных пакетов может значительно ускорить работу traceroute. Значение по умолчанию - 16.
    Примечание. Некоторые маршрутизаторы и хосты могут использовать регулирование скорости ICMP. В такой ситуации указание слишком большого числа может привести к потере некоторых ответов.

-n  Не пытаться сопоставлять IP-адреса с названиями хостов при их отображении.

-p port, --port=port
    Для трассировки UDP указывать базовый порт назначения, который будет использоваться в traceroute (номер порта назначения будет увеличиваться при каждом запросе).
    Для трассировки ICMP задает начальное значение последовательности ICMP (также увеличиваемое для каждой пробы).
    Для TCP и других устройств указывается только (постоянный) порт назначения для подключения. При использовании оболочки tcptraceroute, -p указывает исходящий порт.

-t tos, --tos=tos
    Для IPv4 задать тип сервиса (TOS) и значение приоритета. Используемыми значениями являются 16 (низкая задержка) и 8 (высокая пропускная способность). Обратите внимание, что для использования некоторых значений приоритета TOS вы должны быть суперпользователем.
    Для IPv6, устанавливается значение управления трафиком.

-l flow_label, --flowlabel=flow_label
    Использовать, указанное в flow_label значение для пакетов IPv6.

-w max[,here,near], --wait=max[,here,near]
    Определяет, как долго следует ждать ответа на запрос.

    Существует три (в общем случае) значения с плавающей точкой, разделенных запятой (или косой чертой). Значение Max указывает максимальное время ожидания (в секундах, по умолчанию 5.0) в любом случае.

    Традиционная реализация traceroute всегда ждала целых max секунд для любого запроса. Но если у нас уже есть какие-то ответы от same перехода или даже от какого-то next перехода, то мы можем использовать время отправки такого ответа в оба конца в качестве подсказки, чтобы определить фактическое разумное количество времени ожидания.

    Необязательное значение here (по умолчанию 3.0) определяет коэффициент для умножения времени прохождения в оба конца уже полученного ответа от переходов same. Полученное значение используется в качестве пробы для проверки вместо (но не более) max. Необязательное значение near (по умолчанию 10.0) определяет аналогичный коэффициент для ответа от некоторого next перехода. (В обоих случаях используется время первого найденного результата).

    Сначала мы ищем переход same (для пробы, которая с этого момента будет выведена первой). Если ничего не найдено, то ищем некоторый переход next. Если ничего не найдено, используем max. Если here и/или near имеют нулевые значения, то соответствующее вычисление пропускается.
    Значения Here и near всегда равны нулю, если указано только значение max (для совместимости с предыдущими версиями).

-q nqueries, --queries=nqueries
    Устанавливает количество пробных пакетов за один переход. Значение по умолчанию равно 3.

-r  Обход обычных таблиц маршрутизации и отправка непосредственно на хост в подключенной сети. Если хост не подключен к сети напрямую, возвращается сообщение об ошибке. Эту опцию можно использовать для проверки связи с локальным хостом через интерфейс, через который нет маршрута.

-s source_addr, --source=source_addr
    Выбирает альтернативный исходящий адрес. Примечание. Вы должны выбрать адрес одного из интерфейсов. По умолчанию используется адрес исходящего интерфейса.

-z sendwait, --sendwait=sendwait
    Минимальный интервал времени между пробами (по умолчанию 0). Если значение больше 10, то оно указывает число в миллисекундах, в противном случае это количество секунд (также допускаются значения с плавающей запятой). Полезно, когда некоторые маршрутизаторы используют ограничение скорости передачи сообщений ICMP.

-e, --extensions
    Показать расширения ICMP (rfc4884). Общая форма - CLASS/TYPE:, за которым следует шестнадцатеричный дамп. MPLS (rfc4950) отображается в разобранном виде в виде: MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (больше объектов, разделенных символом / ). Информация об интерфейсе (rfc5837) также отображается в разобранном виде в следующем виде: {INC|SUB|OUT|NXT}:index,IP_addr,"name",mtu=MTU (все четыре поля могут отсутствовать).

-A, --as-path-lookups
    Выполнить поиск пути AS в реестрах маршрутизации и отобразить результаты непосредственно после соответствующих адресов.

-V, --version
    Вывести версию и завершить работу.

Существуют дополнительные опции, предназначенные для расширенного использования (например, альтернативные методы трассировки и т.д.):

--sport=port
    Выбирает исходящий порт для использования. Подразумевает -N 1 -w 5 . Обычно исходящие порты (если применимо) выбираются системой.

--fwmark=mark
    Установить флажок брандмауэра для исходящих пакетов (начиная с версии ядра Linux 2.6.25).

-M method, --module=name
    Используйте указанный метод для операций трассировки маршрута. Традиционный udp-метод по умолчанию имеет название default, icmp (-I) и tcp (-T) имеют названия icmp и tcp, соответственно.
    Опции, зависящие от метода, могут быть переданы с помощью -O . У большинства методов есть свои простые сокращения, (-I means -M icmp, и.т.д).

-O option, --options=options
    Указывает какую-либо опцию, относящийся к конкретному методу. Несколько опций разделяются запятой (или используйте несколько символов "B" в командной строке). У каждого метода могут быть свои специфические опции, а у многих их вообще нет. Чтобы отобразить информацию о доступных опциях, используйте -O help.

-U, --udp
    Использовать UDP для определенного порта назначения для трассировки (вместо увеличения порта для каждого запроса). Порт по умолчанию - 53 (dns).

-UL Использовать для трассировки UDPLITE (порт по умолчанию - 53).

-D, --dccp
    Использовать для проб запросы DCCP.

-P protocol, --protocol=protocol
    Использовать необработанный пакет указанного протокола для трассировки. По умолчанию - протокол 253 (rfc3692).

--mtu
    Найти MTU по отслеживаемому пути. Подразумевает -F -N 1. Новый mtu выводится один раз в виде F=NUM при первой проверке перехода, для достижения которого требуется такой mtu. (На самом деле, соответствующее icmp-сообщение "frag needed" обычно отправляется предыдущим переходом).

    Обратите внимание, что некоторые маршрутизаторы могут кэшировать единожды просмотренную информацию о фрагментации. Таким образом, вы можете получить окончательный mtu при более близком переходе. Попробуйте указать необычный tos через -t , это может помочь для одной попытки (тогда его можно будет также кэшировать там).
    Смотрите -F для дополнительной информации.

--back
    Вывести количество обратных переходов, если оно отличается от прямого направления. Это число рассчитывается в предположении, что удаленные переходы отправляют ответные пакеты с начальным значением ttl, равным либо 64, либо 128, либо 255 (что, по-видимому, является обычной практикой). Оно выводится как отрицательное значение в виде '-NUM' .

СПИСОК ДОСТУПНЫХ МЕТОДОВ
В общем, конкретный метод трассировки, возможно, придется выбирать с помощью -M name, но у большинства методов есть свои простые переключатели командной строки (вы можете увидеть их после названия метода, если они есть).

  default
Традиционный, старый метод трассировки. Используется по умолчанию.

Пробные пакеты представляют собой дейтаграммы udp с так называемыми "маловероятными" портами назначения. "Маловероятный" порт первого пробного пакета равен 33434, затем для каждого следующего пробного пакета он увеличивается на единицу. Поскольку ожидается, что порты не будут использоваться, конечный узел обычно возвращает "icmp unreach port" в качестве окончательного ответа. (Однако никто не знает, что происходит, когда какое-либо приложение прослушивает такие порты).

Этот метод разрешен для непривилегированных пользователей.

  icmp -I
На данный момент это самый обычный метод, который использует эхо-пакеты icmp для пробирования.
Если вы можете выполнить ping(8) на целевом хосте, также применима трассировка icmp.

Этот метод может быть разрешен для непривилегированных пользователей начиная с версии ядра 3.0 (IPv4, для IPv6 начиная с версии 3.11), которая поддерживает новые сокеты dgram icmp (или "ping" ). Чтобы разрешить такие сокеты, системный администратор должен предоставить net/ipv4/ping_group_range диапазон sysctl, соответствующий любой группе пользователей.
Опции:

raw Использовать только необработанные сокеты (традиционный способ).
    Сначала этот способ используется по умолчанию (из соображений совместимости), затем в качестве запасного варианта используются новые icmp-сокеты dgram.

dgram
    Использовать только icmp-сокеты dgram.

  tcp -T
Хорошо известный современный метод, предназначенный для обхода брандмауэров.
Использует постоянный порт назначения (по умолчанию - 80, http).

Если в сетевом пути присутствуют какие-либо фильтры, то, скорее всего, будут отфильтрованы любые "маловероятные" udp-порты (как для метода default) или даже эхо-сигналы icmp (как для метода icmp), и вся трассировка просто остановится на таком брандмауэре. Чтобы обойти сетевой фильтр, мы должны использовать только разрешенные комбинации протоколов и портов. Если мы отследим какой-нибудь, скажем, почтовый сервер, то, скорее всего, -T -p 25 сможет до него добраться, даже если -I не сможет.

В этом методе используется хорошо известная "полуоткрытая технология", которая не позволяет приложениям на целевом хосте вообще видеть наши запросы. Обычно отправляется tcp syn. Для непрослушиваемых портов мы получаем tcp reset, и все готово. Для активных портов прослушивания мы получаем tcp syn+ack, но в ответ получаем tcp reset (вместо ожидаемого tcp ack), таким образом, удаленный tcp ack прерывается даже без уведомления приложения.

Есть несколько вариантов для метода tcp:

syn,ack,fin,rst,psh,urg,ece,cwr
    Устанавливает указанные флажки tcp для пробного пакета в любой комбинации.

flags=num
    Устанавливает для поля flags в заголовке tcp точное значение num.

ecn Отправить syn-пакет с флажками tcp ECE и CWR (для явного уведомления о перегрузке, rfc3168).

sack,timestamps,window_scaling
    Использовать соответствующую опцию заголовка tcp в исходящем контрольном пакете.

sysctl
    Использовать текущую настройку sysctl (/proc/sys/net/*) для опций заголовка tcp, указанных выше, и ecn. Всегда устанавливать по умолчанию, если больше ничего не указано.

fastopen
    Использовать опцию fastopen tcp (когда syn) только для первоначального согласования файлов cookie.

mss=[num]
    Использовать значение num (или без изменений) для опции заголовка maxseg tcp (когда syn) и обнаруживать его привязку к отслеживаемому пути. Новый измененный mss выводится один раз в виде M=NUM при первом обнаружении. Примечание. Некоторые маршрутизаторы могут возвращать слишком короткий исходный фрагмент в сообщении о превышении времени, что делает проверку невозможной. Кроме того, ответы могут приходить в другом порядке. Все это может привести к более позднему размещению отчета (использование -N 1 может помочь в упорядочивании).

info
    Вывод флажков tcp и поддерживаемых опций окончательных tcp-ответов при достижении целевого хоста. Позволяет определить, прослушивает ли приложение порт и другие полезные вещи. Поддерживаемые опции tcp - это все, что может быть установлено с помощью -T -O, т.е. mss, sack, timestamps, window_scaling and fastopen, с аналогичным форматом вывода (значение для mss и просто присутствие для других).

Значение опции по умолчанию - syn,sysctl.

  tcpconn
Первоначальная реализация метода tcp, простая с помощью вызова connect(2), который полностью открывает сеанс tcp. Не рекомендуется для обычного использования, поскольку это всегда влияет на целевое приложение (и может привести к путанице).

  udp -U
Использовать дейтаграмму udp с постоянным портом назначения (по умолчанию 53, dns).
И также попытался обойти брандмауэр.

Примечание. В отличие от методаtcp, соответствующее приложение на целевом хосте always получает наши запросы (со случайными данными), и большинство из них могут быть легко перепутаны. Однако в большинстве случаев он не отвечает на наши пакеты, поэтому мы никогда не увидим финальный переход в трассировке. (К счастью, кажется, что по крайней мере серверы dns отвечают чем-то недовольным).

Этот метод разрешен для непривилегированных пользователей.

  udplite -UL
Использовать дейтаграмму udplite для проб (с постоянным портом назначения, по умолчанию 53).

Этот метод разрешен для непривилегированных пользователей.
Опции:

coverage=num
    Установить покрытие отправки udplite на num.

  dccp -D
Использовать для проб пакеты запросов DCCP (rfc4340).

В этом методе используется та же "полуоткрытая технология", что и в протоколе TCP. Порт назначения по умолчанию - 33434.

Опции:

service=num
    Установить для служебного кода DCCP значение num (по умолчанию - 1885957735).

  raw -P proto
Отправить необработанный пакет протокола proto.
Заголовки, относящиеся к конкретному протоколу, не используются, используется только IP-заголовок.
Implies -N 1 -w 5 .
Опции:

protocol=proto
    Использовать протокол IP proto (по умолчанию - 253).

ПРИМЕЧАНИЯ

Чтобы ускорить работу, обычно одновременно отправляется несколько запросов. Однако, это создает "бурю запросов", особенно в направлении ответа. Маршрутизаторы могут снижать скорость ответов icmp и некоторые ответы могут быть потеряны. Чтобы избежать этого, уменьшите количество одновременных проб или даже установите их равными 1 (как в начальной реализации traceroute), т.е. -N 1

Конечный (целевой) хост может отбросить некоторые из одновременных запросов и даже ответить только на самые последние. Это может привести к появлению дополнительных переходов "looks like expired" вблизи конечного перехода. Мы используем интеллектуальный алгоритм для автоматического определения такой ситуации, но если это не поможет в вашем случае, то просто используйте также -N 1.

Для еще большей стабильности вы можете замедлить работу программы с помощью опции -z, например, используйте -z 0.5 для паузы в полсекунды между пробами.

Чтобы избежать дополнительного ожидания, мы используем адаптивный алгоритм для тайм-аутов (см. опцию -w для получения дополнительной информации). Это может привести к преждевременному истечению срока действия (особенно если время отклика отличается в разы) и выводу "*" вместо времени. В таком случае отключите этот алгоритм, указав -w только с желаемым временем ожидания (например, -w 5).

Если некоторые переходы ничего не сообщают для каждого метода, то последний шанс что-то получить - это использовать команду ping -R (IPv4, и только для ближайших 8 переходов).

СМОТРИТЕ ТАКЖЕ
ping(8), ping6(8), tcpdump(8), netstat(8)

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Aleksandr Felda <isk8da@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (debian-l10n-russian@lists.debian.org).