TRACEROUTE(1)

ИМЯ
traceroute - выводит маршрут прохождения пакетов к сетевому хосту

КРАТКИЙ ОБЗОР
traceroute [-46dFITUnreAV] [-f первое_ttl] [-g шлюз,...]
[-i интерфейс] [-m макс_ttl] [-p порт] [-s адрес_источника]
[-q количество_пакетов] [-N количество_одновременных_пакетов] [-t тип_сервиса]
[-l метка_потока] [-w время_ожидания] [-z интервал]
[-UL] [-P протокол] [--sport=порт] [-M метод] [-O опции_метода]
[--mtu] [--back]
хост [длина_пакета]
traceroute6 [опции]
tcptraceroute [опции]
lft [опции]

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

Команда traceroute6 эквивалентна команде traceroute -6

Команда tcptraceroute эквивалентна команде traceroute -T

Команда lft , the Layer Four Traceroute, выполняет TCP трассировку, подобно команде traceroute -T , но пытается обеспечить совместимость с одноимённой оригинальной реализацией "lft".

Требуемый параметр - имя или IP адрес назначения хост . Опциональный параметр длина_пакета - общий размер зондирующего пакета (по-умолчанию 60 байт для IPv4 и 80 для IPv6). Указанный размер может быть проигнорирован в некоторых случаях или увеличен к минимальному значению.

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

В заключение может быть отображены некоторые дополнительные аннотации: !H, !N, или !P (хост, сеть или протокол недоступны), !S (ошибка в маршруте источника), !F (необходима фрагментация), !X (взаимодействие административно запрещено), !V (нарушение приоритета хоста), !C (приоритет отсечён), или !<num> (ICMP код недоступности <num>). Если почти все процессы зондирования в результате содержат варианты недоступности, программа traceroute прекращается.

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

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

ОПЦИИ

--help
    Вывод справочной информации и выход.

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

-I  Использует ICMP ECHO для зондирования

-T  Использует TCP SYN для зондирования

-d  Включает отладку на уровне сокета (если ядро Linux поддерживает её).

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

-f первое_ttl
    Указывает стартовое значение TTL. По-умолчанию, 1.

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

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

-m макс_ttl
    Указывает максимальное количество хопов (значение max time-to-live), которое будет зондировать программа traceroute. По-умолчанию, 30.

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

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

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

-t тип_сервиса
    Для IPv4 установите значения Типа Сервиса (TOS) и Приоритета. Полезные значения: 16 (малая задержка) и 8 (высокая пропускная способность). Заметим, что для использования некоторых значений приоритета TOS мы должны быть суперпользователем.
    Для IPv6 установите значение Traffic Control.

-wвремя_ожидания
    Установите время (в секундах) для ожидания ответа от зондирования (по-умолчанию, 5 с.).

-q количество_пакетов
    Устанавливает число пакетов зондирования на один хоп. По умолчанию 3.

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

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

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

-e  Показать ICMP расширения (rfc4884). В общем виде, CLASS/TYPE: с указанием шестнадцатеричного дампа. MPLS (rfc4950) показывается в форме MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (больше объектов отделяются символом / ).

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

-V  Выводит версию программы и выходит.

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

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

--fwmark=маркер
    Установить маркер файрвола для исхлдящих пакетов (для ядра Linux 2.6.25 и старше).

-M метод
    Используйте указанный метод для выполнения программы traceroute. Используемый по-умолчанию традиционный udp метод имеет названия: default, icmp (-I) и tcp соответственно.
    Специфические для метода опции могут быть переданы с помощью параметра -O . Большинство методов имеют свои простые сочетания, (-I означает -M icmp и т.д.).

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

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

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

-P протокол
    Используйте raw пакет специфичного протокола для трассировки. Протокол по-умолчанию 253 (rfc3692).

--mtu
    Показывать MTU на всём пути трассировки. Подразумевает -F -N 1. Новое значение mtu выводится единожды в форме F=ЧИСЛ после первого хопа, которому нужно достигнуть такого значения mtu. (На самом деле, предыдущим хопом обычно посылается соответствующее icmp сообщение "frag needed").
    Заметим, что некоторые маршрутизаторы могут кэшировать однажды просмотренную информацию о фрагментации. Таким образом, мы можем получить окончательное значение mtu с ближайшего хопа. Попытайтесь указать необычный tos указанием опции -t, это может помочь при одиночной попытке (затем это может быть также кэшировано).
    См. опцию -F для дополнительной информации.

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

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

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

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

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

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

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

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

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

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

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

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

Для tcp метода существует несколько опций:

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

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

ecn Посылает syn пакет с tcp флагами ECE и CWR (для Explicit Congestion Notification, rfc3168).

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

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

mss=числ
    Использует значение числ для опции maxseg tcp заголовка (при использовании syn).

info
    Выводит tcp флаги окончательных tcp ответов при достижении целевого хоста. Позволяет определить, слушает ли приложение определённый порт и другие полезные вещи.

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

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

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

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

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

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

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

coverage=числ
    Установить значение посылки udplite в числ.

  raw -P протокол
Посылает raw пакет протокола proto.
Специфичные для протокола заголовки не используются, только IP заголовок.
Подразумевает -N 1.
Опции:

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

ПРИМЕЧАНИЯ

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

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

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

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

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

АВТОР ПЕРЕВОДА
Перевод на русский язык выполнил Вячеслав Чертов <aqua_marine@fastmail.fm>.