traceroute − выводит маршрут прохождения пакетов к узлу сети
traceroute [−46dFITUnreAV] [−f начальное_ttl] [−g шлюз,...]
[−i интерфейс] [−m макс_ttl] [−p порт] [−s адрес_отправителя]
[−q количество_запросов] [−N количество_одновременных_пакетов] [−t тип_сервиса]
[−l метка_потока] [−w время_ожидания] [−z ожидание_отправки] [−UL] [−D]
[−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 (сработал приоритет отсечения), или !<число> (ICMP код недоступности <число>). Если почти все попытки зондирования свидетельствуют о недоступности, программа 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, который указывает промежуточным маршрутизаторам также не фрагментировать пакеты).
Изменяя размер зондирующего пакета с помощью параметра командной строки длина_пакета, можно вручную получить информацию о MTU каждого звена сети. Опция −−mtu (см. ниже) пытается выполнить это автоматически.
Заметим, что функции запрета фрагментации (например, −F или −−mtu) работают правильно только начиная с версии ядра Linux 2.6.22. До этой версии IPv6 фрагментируется всегда, а для IPv4 будет использоваться однажды обнаруженное значение mtu (из кэша маршрутов), которое может быть меньше действительного mtu устройства.
−f начальное_ttl, −−first=начальное_ttl
Указывает начальное значение TTL. По умолчанию − 1.
−g шлюз, −−gateway=шлюз
Указывает команде traceroute добавлять к отправляемому пакету опцию IP для маршрутизации отправителем, которая заставляет сеть маршрутизировать пакеты через указанный шлюз (на большинстве маршрутизаторов маршрутизация отправителем отключена по соображениям безопасности). В общем случае можно указать несколько шлюзов (разделённых запятыми). Для IPv6 позволена форма число,адрес,адрес..., где число − тип заголовка (по умолчанию − тип 2). Отметим, что тип заголовка 0 устарел (rfc5095).
−i интерфейс, −−interface=интерфейс
Указывает интерфейс, через который команда traceroute должна посылать пакеты. По умолчанию, интерфейс выбирается в соответствии с таблицей маршрутизации.
−m максимальное_ttl, −−max−hops=максимальное_ttl
Указывает максимальное количество звеньев (максимальное значение time−to−live − время жизни), которое будет зондировать программа traceroute. По умолчанию − 30.
−N одновременных_запросов, −−sim−queries=одновременных_запросов
Указывает количество одновременно посылаемых пакетов зондирования. Отправка нескольких пакетов одновременно может значительно
ускорить выполнение команды traceroute. Значение по умолчанию − 16.
Отмети, что некоторые маршрутизаторы и узлы могут использовать регулирование скорости ICMP. В этой ситуации указание слишком большого количества пакетов может
привести к потере некоторых ответов.
−n |
Не пытаться сопоставить IP−адресам их имена при их отображении. |
−p порт, −−port=порт
При трассировке UDP указывает базовый порт получателя, который будет использовать программа traceroute (номер порта
получателя будет увеличиваться при каждом зондировании).
При трассировке ICMP указывает начальное значение последовательности ICMP (также увеличивается при каждом зондировании).
При трассировке TCP и прочих указывает просто порт получателя (постоянный). При использовании обёртки tcptraceroute параметр −p указывает порт отправителя.
−t tos, −−tos=tos
Для IPv4 задаёт значение типа сервиса (TOS − Type of Service) и приоритета (Precedence). Полезные значения: 16 (малая задержка) и 8
(высокая пропускная способность). Отметим, что для использования некоторых значений приоритета TOS нужно быть суперпользователем.
Для IPv6 задаёт значение Traffic Control (управление трафиком).
−l метка_потока, −−flowlabel=метка_потока
Использовать указанную метку_потока для пакетов IPv6.
−w время_ожидания, −−wait=время_ожидания
Задаёт время ожидания (в секундах) ответа на зондирование (по умолчанию − 5.0 секунд).
−q количество_запросов, −−queries=количество_запросов
Устанавливает количество зондирующих пакетов для каждого звена. По умолчанию 3.
−r |
Игнорировать обычные таблицы маршрутов и отправлять пакеты к узлу через непосредственно подключенную сеть. Если узел не принадлежит к непосредственно подключённой сети, то возвращается ошибка. Эта опция может быть использована для проверки доступности локального узла через интерфейс, через который нет маршрута. |
−s адрес_отправителя, −−source=адрес_отправителя
Выбрать альтернативный адрес отправителя. Отметим, что нужно выбрать адрес одного из интерфейсов. По умолчанию используется адрес интерфейса, через который будут отправляться пакеты.
−z ожидание_отправки, −−sendwait=ожидание_отправки
Минимальный интервал между попытками зондирования (по умолчанию 0). Если значение больше 10, то это количество миллисекунд, иначе − это количество секунд (также доступны значения с плавающей запятой). Опция полезна, если некоторые маршрутизаторы используют ограничение скорости сообщений ICMP.
−e, −−extensions
Показать расширения ICMP (rfc4884). Общий вид CLASS/TYPE: с последующим шестнадцатеричным дампом. MPLS (rfc4950) отображается в виде MPLS:L=метка,E=используемые_биты_exp,S=дно_стека,T=TTL (дальнейшие объекты разделяются символом / ).
−A, −−as−path−lookups
Выполяет поиск пути к автономной системе в реестрах маршрутизации и выдаёт результаты сразу после соответствующих адресов.
−V, −−version
Вывести версию программы и завершить работу.
Существует несколько дополнительных опций, предназначенных для продвинутого использования (другие методы
трассировки и т.п.):
−−sport=порт
Выбрать используемый порт отправителя. Подразумевает −N 1. Обычно порты отправителя (если они используются в проверке) выбираются системой.
−−fwmark=метка
Установить метку пакетного фильтра для исходящих пакетов (начиная с ядра Linux версии 2.6.25).
−M метод, −−module=имя
Использовать указанный метод для операций трассировки маршрута. Используемый по умолчанию традиционный метод udp называется
default, icmp (−I) и tcp (−T) имеют имена icmp и tcp соответственно.
Специфические для метода опции могут быть переданы с помощью параметра −O . Большинство методов имеют сокращения (−I означает −M icmp
и т.п.).
−O опция, −−options=опции
Указывает специфичную для метода опцию. Несколько опций разделяются запятой (или указываются в отдельных опциях −O). Каждый метод может иметь свои специфические опции, а многие из них не имеют их вообще. Для вывода информации об имеющихся опциях воспользуйтесь −O help.
−U, −−udp
Использовать UDP для трассировки к определённому порту назначения (вместо увеличения значения порта при каждом зондировании). Порт по умолчанию − 53 (dns).
−UL |
Использовать UDPLITE для трассировки (порт по умолчанию − 53). |
−D, −−dccp
Использовать для зондирования запросы DCCP.
−P протокол, −−protocol=протокол
Использовать для трассировки 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 порт недоступен". (Никто не знает, что случится, если приложение всё же прослушивает такие порты).
Этот метод доступен для непривилегированных пользователей.
icmp −I
На данный момент − самый обычный метод, который использует для зондирования пакеты imcp echo.
Если можно осуществлять ping(8) узла−получателя, то можно осуществлять и трассировку icmp.
Этот метод может быть доступен непривилегированным пользователям начиная с ядра 3.0 (только IPv4), которое
поддерживает новые сокеты dgram icmp (или "ping"). Чтобы разрешить использование таких сокетов, системный администратор должен указать в sysctl
net.ipv4.ping_group_range диапазон, совпадающий с любой группой пользователей.
Опции:
raw |
Использовать только сокеты raw (традиционный способ). |
Этот метод используется первым по умолчанию (в целях совместимости), а если он недоступен − новые сокеты датаграмм icmp.
dgram |
Использовать только сокеты датаграмм icmp. |
tcp −T
Общеизвестный современный метод, предназначен для обхода пакетных фильтров.
Использует постоянный порт получателя (по умолчанию − 80, http).
Если по пути через сеть встречаются пакетные фильтры, то скорее всего любые "редко используемые" udp порты (используемые в методе default) или даже пакеты эхо icmp (используемые в 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.
dccp −D
Использовать для зондирования пакеты DCCP Request (rfc4340).
Этот метод использует ту же "полуоткрытую технику", которая используется для TCP. По умолчанию используется порт получателя 33434.
Опции:
service=число
Задать сервисный код DCCP равным указанному числу (по умолчанию − 1885957735).
raw −P протокол
Посылает raw пакет протокола proto.
Специфичные для протокола заголовки не используются, только заголовок IP.
Подразумевает −N 1.
Опции:
protocol=протокол
Использовать IP протокол протокол (по умолчанию − 253).
Для ускорения работы обычно выполняется несколько зондирований одновременно. Другими словами, создаётся "шторм пакетов", особенно в ответном направлении. Маршрутизаторы могут подавлять скорость ответов icmp и некоторые из ответов могут быть утеряны. Для избежания этого нужно уменьшить количество одновременных зондирований или даже задать его равным 1 (как в первоначальной реализации программы traceroute), т.е. указать −N 1.
Оконечный (целевой) узел может отбрасывать некоторые из одновременных зондирований и отвечать только на самые последние. Это может привести к сообщениям "looks like expired" − "возможно просрочен" ближе к оконечному звену. Для автоопределения таких ситуаций используется специальный алгоритм, но если он не справился, просто воспользуйтесь −N 1.
Для повышения стабильности можно замедлить работу программы, воспользовавшись опцией −z, например, указав −z 0.5 для полсекундной паузы между зондированиями.
Если некоторые звенья ничего не сообщают при любом используемом методе, то последний шанс получить хоть что−то − использовать команду ping −R (IPv4, и только для ближайших 8 звеньев).
ping(8), ping6(8), tcpdump(8), netstat(8)
Перевод на русский язык выполнил Вячеслав Чертов <aqua_marine@fastmail.fm>. Корр екция и обновление - Владимир Ступин <vladimir@stupin.su>.