TRACEROUTE(8)

НАЗВА
traceroute — виведення трасування пакетів маршрутизації для вузла мережі

КОРОТКИЙ ОПИС
traceroute [-46dFITUnreAV] [-f перший_ttl] [-g шлюз,...]
[-i пристрій] [-m макс_ttl] [-p порт] [-s адреса_джерела]
[-q кількість_запитів] [-N кількість_одночасних_запитів] [-t tos]
[-l мітка_потоку] [-w час_очікування] [-z очікування_надсилання] [-UL] [-D]
[-P протокол] [--sport=порт] [-M метод] [-O параметри_модуля]
[--mtu] [--back]
host [довжина_пакета]
traceroute6 [параметри]

ОПИС
traceroute створює трасування пакетів маршрутизації на основі даних IP-мережі на шляху до вказаного вузла. Програма використовує поле строку дії (TTL) IP-протоколу та намагається отримати відповідь TIME_EXCEEDED ICMP від кожного шлюзу на шляху до вузла.

traceroute6 є тим самим, що і traceroute -6

Єдиним обов'язковим параметром є назва або IP-адреса вузла призначення . Необов'язкова довжина_пакета визначає загальний розмір зондувального пакета (типовим є 60 байтів для IPv4 і 80 для IPv6). Вказаний розмір може бути у певних випадках проігноровано або збільшено до мінімального значення.

Ця програма намагається простежити маршрут, яким пакет IP проходить до вказаного вузла інтернету, надсилаючи зондувальні пакет із малим ttl (строком дії), а потім отримуючи відповідь «перевищено час» ICMP від шлюзу. Програма починає зондування із одиничного значення ttl і збільшує значення на одиницю, аж доки не буде отримано відповіді «порт недосяжний» ICMP (або скидання TCP), що означатиме, що досягнуто «вузла», або перевищення обмежень (таким типовим обмеженням є 30 переходів). Для кожного значення ttl буде надіслано три сигнали зондування (типово), і програма виведення дані щодо ttl, адреси шлюзу і часу проходження маршруту для кожного зондування. Разом із адресою може бути виведено, якщо надійшов запит, додаткові відомості. Якщо відповіді на зондування надходять з різних шлюзів, буде виведено адресу для кожної системи, яка надала відповідь. Якщо протягом певного часу очікування не буде отримано відповіді, для відповідного зондування буде вказано «*» (зірочку) у списку.

Після часу проходження може бути виведено деякі додаткові анотації: !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
    Використовувати для зондування ECHO ICMP

-T, --tcp
    Використовувати для зондування SYN TCP

-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
    Вказує максимальну кількість переходів (максимальне значення строку дії) під час зондування traceroute. Типовим значенням є 30.

-N кількість_одночасних_запитів, --sim-queries=кількість_одночасних_запитів
    Вказує кількість пакетів зондування, які буде надіслано одночасно. Одночасне надсилання декількох зондувань може значно пришвидшити роботу traceroute. Типовим є значення 16.
    Зауважте, що деякі маршрутизатори і вузли можуть використовувати дроселювання частоти ICMP. У такому випадку визначення надто великого числа може призвести до втрати деяких відповідей.

-n  Не намагатися пов'язати IP-адреси із назвами вузлів при показі.

-p порт, --port=порт
    Для трасування UDP визначає базовий номер порту призначення, який використовуватиме traceroute (номер порту збільшуватиметься з кожним зондуванням).
    Для трасування ICMP вказує початкове значення послідовності ICMP (також збільшується із кожним зондуванням).
    Для TCP та інших методів вказує просто (сталий) порт призначення, з яким слід встановити з'єднання.

-t tos, --tos=tos
    Для IPv4 встановити тип служби (TOS) та значення пріоритетності. Придатними значеннями є 16 (низька затримка) і 8 (висока продуктивність). Зауважте, що щоб скористатися деякими значенням пріоритетності TOS, вам знадобляться права надкористувача.
    Для IPv6 встановити значення керування передаванням.

-l мітка_потоку, --flowlabel=мітка_потоку
    Скористатися вказаною міткою_потоку для пакетів IPv6.

-w максимум[,тут,близько], --wait=максимум[,тут,близько]
    Визначає, як довго слід чекати на відповідь при зондуванні.
    Передбачено три (загалом) значення з рухомою крапкою, відокремлені комами (або символом похилої риски). Значення максимум визначає максимальний час (у секундах, типове значення 5.0), протягом якого слід чекати за будь-яких умов.
    Традиційна реалізація traceroute завжди очікує повні максимум секунд для будь-якого зондування. Але якщо у нас вже є якісь відповіді з переходу до того самого вузла або навіть від якогось переходу до наступного вузла, можна скористатися часом проходження такої відповіді як орієнтиром для визначення справжнього прийнятного проміжку часу очікування.
    Необов'язкове значення тут (типове значення 3.0) вказує коефіцієнт для множення часу проходження вже отриманої відповіді з переходу до того самого вузла. Значення-результат буде використано як час очікування на зондування, замість (але не більше) за максимум. Необов'язкове значення близько (типово, 10.0) вказує подібний коефіцієнт для відповіді від якогось наступного переходу. (Час для першого знайдено результату буде використано в обох випадках.)
    Спершу, ми шукатимемо перехід до того самого вузла (зондування, яке буде виведено першим). Якщо нічого не буде знайдено, шукати якийсь наступний перехід. Якщо нічого не буде знайдено, скористатися максимумом. Якщо значеннями тут і/або близько є нульовими, відповідне обчислення буде пропущено.
    Для тут і близько буде завжди використано нульові значення, якщо вказано лише максимум (для сумісності із попередніми версіями).

-q кількість_запитів, --queries=кількість_запитів
    Встановлює кількість пакетів зондування на один стрибок. Типовим значенням є 3.

-r  Обійти звичайні таблиці маршрутизації і надіслати дані безпосередньо до вузла в долученій мережі. Якщо вузол не перебуває у безпосередньо долученій мережі буде повернуто повідомлення про помилку. Цим параметром можна скористатися для зондування локального вузла через інтерфейс, який не має маршруту через нього.

-s адреса_джерела, --source=адреса_джерела
    Вибирає альтернативну адресу джерела. Зауважте, що вам слід вибрати адресу одного з інтерфейсів. Типово, буде використано адресу вихідного інтерфейсу.

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

-e, --extensions
    Показати розширення ICMP (rfc4884). Загальна форма є такою: КЛАС/ТИП: — а далі, шістнадцятковий дамп. Буде виведено оброблене значення MPLS (rfc4950) у такій формі: MPLS:L=label,E=exp_use,S=stack_bottom,T=TTL (додаткові об'єкти буде відокремлено /). Також буде показано відомості щодо інтерфейсу (rfc5837) у такій формі: {INC|SUB|OUT|NXT}:індекс,IP_адресаr,"name",mtu=MTU (усі чотири поля може бути пропущено).

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

-V --version
    Вивести дані щодо версії і завершити роботу.

Передбачено додаткові параметри для розширеного користування (зокрема альтернативних методів трасування тощо):

--sport=порт
    Вибирає порт джерела, яким слід скористатися. Неявним чином встановлює -N 1 -w 5 . Зазвичай, порти джерела (якщо такі використовують) вибирає операційна система.

--fwmark=позначка
    Встановити позначку брандмауера для вихідних пакетів (з версії ядра Linux 2.6.25).

-M метод, --module=назва
    Скористатися вказаним методом для дій traceroute. Типовим є традиційний метод 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=протокол
    Використати простий пакет вказаного протоколу для трасування маршруту. Типовим протоколом є 253 (rfc3692).

--mtu
    Визначити MTU уздовж трасованого шляху. Неявно використовує -F -N 1. Нове mtu буде виведено один раз у формі F=ЧИСЛО при першому зондуванні переходу, який потребує досягнення такого mtu. (Насправді, відповідне повідомлення ICMP «є потреба» буде надіслано під час попереднього переходу.)
    Зауважте, що деякі маршрутизатори можуть кешувати значення показаних відомостей щодо фрагментації. Таким чином, ви можете отримати остаточне значення mtu з ближчого переходу. Спробуйте вказати незвичне tos за допомогою -t — це може допомогти на одну спробу (потім дані може бути знову кешовано).
    Див. параметр -F, щоб дізнатися більше.

--back
    Вивести кількість зворотних переходів, коли, здається, вона відрізняється від переходів у прямому напрямку. Це число буде визначено у припущенні, що віддалені переходи надсилають пакети відповідей із встановленим початковим ttl 64, 128 або 255 (здається, це типова ситуація). Буде виведено як від'ємне значення у форматі «-ЧИСЛО».

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

  default
Традиційний давній метод трасування маршруту. Є типовим.

Пакети зондування є датаграмами udp із так званими «малоймовірними» портами призначення. «Малоймовірний» порт першого зондування — порт 33434. Далі, номер порту зростатиме на одиницю із кожним наступним зондуванням. Оскільки такі порти, зазвичай, не використовують, вузол призначення, зазвичай, повертає, як остаточну відповідь, «icmp не досягла порту». (Втім, нікому не відомо, що трапиться, якщо якась програма очікує на дані на цьому порту.)

Цей метод можуть використовувати непривілейовані користувачі.

  icmp -I
Найпоширеніший метод у сучасних умовах. Для зондування буде використано луна-пакети icmp.
Якщо ви можете скористатися ping(8) для вузла призначення, можна буде користуватися і трасуванням маршруту icmp.

Цим методом можна скористатися для непривілейованих користувачів з випуску ядра 3.0 (IPv4, для IPv6 з 3.11), де передбачено підтримку нових сокетів dgram icmp (або «ping»). Щоб уможливити використання таких сокетів, адміністратор має зробити так, щоб діапазон sysctl net/ipv4/ping_group_range відповідав будь-якій з груп користувача.
Параметри:

raw Використовувати лише сокети без обробки (традиційний спосіб).
    Цей спосіб буде типово використано першим (з міркувань сумісності), потім буде використано нові датаграми сокетів icmp, як резервні.

dgram
    Використовувати лише датаграми сокетів icmp.

  tcp -T
Відомий сучасний метод, призначено для обходу брандмауерів.
Використовувати сталий порт призначення (типовим є 80, http).

Якщо у шляху мережі є якісь фільтри, найімовірніше, буде відфільтровано усі «малоймовірні» порти (як для типового методу) або навіть луна-повідомлення icmp (як для icmp), і усе трасування маршруту буде зупинено на такому брандмауері. Щоб обійти фільтр мережі, нам слід використовувати лише дозволені комбінації протокол-порт. Якщо ми виконуємо трасування, скажімо, поштового сервера, ймовірно, його можна буде досягти за допомогою -T -p 25, навіть якщо використання -I не допомагає.

У цьому методі використано добре відому «напів відкриту методику», яка заважає програма на вузлі призначення бачити наше зондування взагалі. Зазвичай, буде надіслано tcp syn. Для портів, на яких не чекають на з'єднання, ми отримаємо скидання tcp і дію буде завершено. Для активних портів ми отримаємо tcp syn+ack, але відповімо скиданням tcp (замість очікуваного tcp ack). У такий спосіб віддалений сеанс tcp буде скинуто, навіть без повідомлення про це програми, яка очікує на з'єднання.

Для методу tcp передбачено двійко додаткових параметрів:

syn,ack,fin,rst,psh,urg,ece,cwr
    Встановлює вказані прапорці tcp для пакета зондування, у будь-якій комбінації.

flags=число
    Встановлює значення поля прапорців у заголовку tcp точно у значення число.

ecn Надіслати пакет syn із прапорцями tcp ECE і CWR (для явного сповіщення про перевантаження, rfc3168).

sack,timestamps,window_scaling
    Використати відповідний параметр заголовка tcp у вихідному пакеті зондування.

sysctl
    Використати поточні налаштування sysctl (/proc/sys/net/*) для параметрів заголовка tcp вище і ecn. Завжди типово встановлено, якщо не вказано нічого іншого.

fastopen
    Для початкового узгодження лише кук скористатися параметром tcp fastopen (якщо syn).

mss=[число]
    Скористатися значенням число (або незмінним) для параметра заголовка tcp maxseg (якщо використано syn) і визначити його обмеження на шляху трасування. Нове змінене значення mss буде виведено один раз у формі M=ЧИСЛО при першому зондуванні, при якому його буде виявлено. Зауважте, що деякі маршрутизатори можуть повертати надто короткий початковий фрагмент у повідомленні про вичерпання часу, роблячи перевірку неможливою. Крім того, відповіді можуть надходити у різному порядку. Усе це може призвести до розташування даних у різних частинах звіту (використання -N 1 може допомогти визначити порядок).

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

Типовими є параметри syn,sysctl.

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

  udp -U
Використати датаграму udp зі сталим портом призначення (типовим є 53, dns).
Призначено також для обходу брандмауера.

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

Цей метод можуть використовувати непривілейовані користувачі.

  udplite -UL
Використати датаграму udplite для зондування (зі сталим портом призначення, типовим є 53).

Цей метод можуть використовувати непривілейовані користувачі.
Параметри:

coverage=число
    Встановити для покриття надсилання udplite значення число.

  dccp -D
Використати для зондування пакети запитів DCCP (rfc4340).

У цьому методі використано ту саму «напів відкриту методику», яку використано для TCP. Типовим портом призначення є 33434.

Параметри:

service=число
    Встановити для коду служби DCCP значення число (типовим є значення 1885957735).

  raw -P протокол
Надіслати необроблений пакет протоколу протокол.
Не буде використано ніяких специфічних для протоколу заголовків, лише заголовок IP.
Неявним чином встановлюється -N 1 -w 5 .
Параметри:

protocol=протокол
    Використати IP-протокол протокол (типовим значенням є 253).

ПРИМІТКИ

Щоб пришвидшити роботу, зазвичай, програма надсилає декілька сигналів зондування одночасно. З іншого боку, це створює «зливу пакетів», особливо у напрямку відповідей. Маршрутизатори можуть дроселювати частоту відповідей icmp, отже деякі з відповідей можуть загубитися. Щоб уникнути цього, знизьте кількість одночасних зондувань, або навіть встановіть значення 1 (як у початковій реалізації traceroute), тобто -N 1

Завершальний вузол (ціль) може відкинути деякі з одночасних сигналів зондування і може навіть відповісти лише на останні з них. Це може призвести до зайвих переходів у стилі «здається прострочено» одразу перед завершальним переходом. Нами використано інтелектуальний алгоритм для автоматичного виявлення таких випадків, але якщо він не допомагає у вашому випадку, просто скористайтеся, знову ж таки, -N 1.

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

Щоб уникнути зайвого очікування, ми скористалися адаптивним алгоритмом для часів очікування (див. параметр -w, щоб дізнатися більше). Це може призвести до завчасного завершення строку дії пакета (особливо, якщо час відповіді часом відрізняється) і виведення «*» замість часу. У таких випадках вимкніть цей алгоритм за допомогою параметра -w із бажаним значенням часу очікування (наприклад, -w 5).

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

ДИВ. ТАКОЖ
ping(8), ping6(8), tcpdump(8), netstat(8)

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html). НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.