Як використовувати команду traceroute в Linux

Інструмент traceroute в Linux дозволяє ідентифікувати ділянки мережевого маршруту, що працюють повільно, та допомагає усунути проблеми зі сповільненням з’єднання. Давайте розглянемо, як ним користуватися.

Принцип дії traceroute

Розуміння механізму роботи traceroute суттєво спрощує інтерпретацію отриманих результатів. Чим складніший шлях мережевого пакету до кінцевої точки, тим важче локалізувати джерела затримок.

Невелика локальна мережа (LAN) зазвичай є досить простою структурою, що включає мінімум один сервер та маршрутизатор (або два). Складність зростає у глобальній мережі (WAN), яка об’єднує різні локації через Інтернет. У цьому випадку мережевий пакет проходить через значну кількість обладнання, такого як маршрутизатори та шлюзи.

Заголовки метаданих у пакетах даних містять інформацію про їх розмір, джерело, призначення, протокол тощо. Специфікація протоколу визначає формат заголовка, що дозволяє розпізнати початок і кінець кожного поля та прочитати метадані.

traceroute використовує набір протоколів TCP/IP та надсилає пакети Протоколу дейтаграм користувача. Заголовок містить поле Time to Live (TTL), що представляє собою 8-бітове ціле число. Це число вказує на кількість переходів, а не на час.

Під час подорожі пакета від відправника до отримувача через маршрутизатори, кожен маршрутизатор зменшує значення лічильника TTL. Якщо значення TTL досягає одиниці, маршрутизатор, який отримав пакет, зменшує його до нуля. В такому випадку пакет відкидається і не надсилається далі, оскільки “час очікування минув”.

Маршрутизатор надсилає повідомлення Протоколу керування повідомленнями в Інтернеті (ICMP) Time Exceeded назад відправнику пакета, інформуючи його про закінчення часу життя пакета. Це повідомлення містить оригінальний заголовок і перші 64 біти даних оригінального пакета. Деталі цього процесу описано на шостій сторінці RFC 792.

Отже, traceroute відправляє пакет із значенням TTL рівним 1. Цей пакет досягне першого маршрутизатора і буде відкинутий. Від маршрутизатора буде отримано ICMP повідомлення про перевищення часу, яке traceroute використовує для фіксації часу проходження туди і назад.

Потім процес повторюється, але з TTL рівним 2, 3, і так далі. Процедура повторюється до досягнення кінцевого призначення, або до перевищення максимальної кількості переходів (30 за замовчуванням).

Проблеми з деякими маршрутизаторами

Деякі маршрутизатори мають недоліки. Замість відкидання пакетів з TTL рівним нулю, вони намагаються їх переслати і не відправляють повідомлення ICMP про перевищення часу.

Згідно з даними Cisco, деякі інтернет-провайдери (ISP) обмежують кількість повідомлень ICMP, які пересилають їх маршрутизатори.

Частина пристроїв налаштована так, що не відправляє пакети ICMP взагалі. Це часто робиться для захисту від розподілених атак відмови в обслуговуванні, таких як атака смурфа.

traceroute має стандартний тайм-аут для очікування відповідей, що становить 5 секунд. Якщо відповідь не отримана за цей час, запит припиняється, і відповіді від занадто повільних маршрутизаторів ігноруються.

Інсталяція traceroute

traceroute вже встановлений на Fedora 31, але на Manjaro 18.1 і Ubuntu 18.04 його потрібно інсталювати. Для встановлення на Manjaro використовуйте команду:

sudo pacman -Sy traceroute

Для встановлення traceroute на Ubuntu введіть:

sudo apt-get install traceroute

Застосування traceroute

Основна ціль traceroute – отримання відповіді від маршрутизатора на кожному кроці між комп’ютером та кінцевим пунктом призначення. Деякі маршрутизатори можуть бути “мовчунами”, інші ж можуть надати багато корисної інформації.

Для прикладу, виконаємо трасування до веб-сайту Замку Бларні в Ірландії, що є домом знаменитого Каменя Бларні. Згідно з легендою, поцілувавши цей камінь, можна отримати дар красномовства. Сподіваємося, що маршрутизатори на нашому шляху будуть достатньо “балакучими”.

Вводимо команду:

traceroute www.blarneycastle.ie

Перший рядок надає таку інформацію:

Адреса призначення та її IP.
Кількість переходів, які traceroute буде намагатись зробити перед відмовою.
Розмір UDP пакетів.

Решта рядків містять дані про кожен перехід. Ми бачимо, що між нашим комп’ютером та веб-сайтом Замку Бларні є 11 переходів. Останній перехід під номером 11, повідомляє про досягнення пункту призначення.

Формат кожного рядка переходу виглядає так:

Назва пристрою, або його IP-адреса, якщо пристрій не ідентифікує себе.
IP адреса.
Час, необхідний для кожного з трьох тестів. Зірочка означає, що відповідь на цей тест не отримана. Якщо пристрій взагалі не відповідає, ви побачите три зірочки без назви пристрою чи IP.

Розглянемо наші результати:

Перехід 1: Першим пунктом є маршрутизатор DrayTek Vigor в локальній мережі, звідки наші пакети потрапляють до Інтернету.
Перехід 2: пристрій не відповів. Можливо, він налаштований на ігнорування ICMP пакетів, або він був занадто повільним і не вклався у час очікування traceroute.
Перехід 3: пристрій відповів, але ми отримали тільки IP-адресу, а не назву. Зверніть увагу на зірочку, що означає втрату відповіді на один з трьох запитів, і може вказувати на втрату пакетів.
Переходи 4 і 5: більше анонімних переходів.
Перехід 6: тут багато тексту, оскільки кожен запит опрацьовував різний пристрій. Для кожного пристрою роздруковані довгі імена та IP-адреси. Це трапляється, коли ви стикаєтеся з “населеною” мережею з великою кількістю обладнання. Цей перехід знаходиться в межах великого провайдера у Великобританії. Було б дивно, якщо б один пристрій опрацював три наші запити.
Перехід 7: UDP пакети покинули мережу провайдера.
Перехід 8: ми знову отримали IP, але без назви. Всі тести пройшли успішно.
Переходи 9 і 10: ще два анонімні переходи.
Перехід 11: ми дісталися до сайту замку Бларні. Замок розташований в Корку, Ірландія, але за даними геолокації IP-адрес веб-сайт знаходиться в Лондоні.

Результати вийшли змішані: деякі пристрої відповіли, деякі без імен, а інші залишилися повністю анонімними.

Проте ми досягли пункту призначення, знаємо про 11 переходів, і час проходження пакетів в обидві сторони становив приблизно від 13 до 15 мілісекунд.

Приховування імен пристроїв

Як ми побачили, іноді імена пристроїв роблять вивід складним для читання. Щоб спростити аналіз, можна використовувати опцію -n (без відображення імен).

У нашому випадку команда виглядає так:

traceroute -n blarneycastle.ie

Це дозволяє легше виявляти великі затримки у часі, що можуть вказувати на вузькі місця.

Перехід 3 виглядає підозріло. Минулого разу він відповів двічі, цього разу лише один раз. Звичайно, ми не можемо на це вплинути.

Проте, при аналізі корпоративної мережі, цей вузол варто було б дослідити.

Налаштування тайм-ауту traceroute

Можливо, збільшення стандартного часу очікування (5 секунд) дозволить отримати більше відповідей. Використовуємо опцію -w (час очікування), щоб змінити його на 7 секунд (це значення з плаваючою комою).

Вводимо таку команду:

traceroute -w 7.0 blarneycastle.ie

Це не дає значного ефекту, отже, відповіді, ймовірно, втрачені. Ймовірно, анонімні переходи навмисне приховані.

Встановлення кількості тестів

За замовчуванням traceroute надсилає три UDP пакети на кожен перехід. Можна скористатись опцією -q (кількість запитів), щоб змінити це значення.

Для пришвидшення перевірки зменшимо кількість пакетів до одного:

traceroute -q 1 blarneycastle.ie

Це відправляє один запит на кожний перехід.

Встановлення початкового значення TTL

Можна встановити початкове значення TTL, відмінне від одиниці, і пропустити деякі переходи. Зазвичай TTL встановлюється на 1 для першого набору тестів, на 2 для наступного, і так далі. Якщо встановити значення 5, перший тест спробує перейти до 5-го, пропускаючи переходи 1-4.

Оскільки ми знаємо, що до веб-сайту Замку Бларні 11 переходів, введемо наступну команду для переходу відразу до 11-го:

traceroute -f 11 blarneycastle.ie

Це надає короткий звіт про стан з’єднання до кінцевого пункту призначення.

Обережність

traceroute – чудовий інструмент для дослідження мережевої маршрутизації, перевірки швидкості з’єднання, та виявлення вузьких місць. Аналогічна команда tracert є в Windows.

Не варто надсилати велику кількість UDP-пакетів на невідомі пристрої, а також включати traceroute в скрипти або неконтрольовані завдання.

Навантаження, яке інструмент може створити в мережі, може негативно вплинути на продуктивність. Якщо немає термінової потреби, краще використовувати його у неробочий час.