Traceroute установка kali linux

Команда traceroute Linux

Не всегда сеть работает так, как от нее требуется, иногда определенный компьютер в вашей локальной сети компании, или удаленный может не отвечать. Казалось бы, все работает, все подключено, но похоже на каком-то из узлов, на пути от вашего компьютера, до нужного случается ошибка.

Утилита ping позволяет только определить наличие проблемы, что узел не отвечает, но как узнать где обрывается соединение? Для этого применяется утилита traceroure. В этой небольшой инструкции мы рассмотрим как пользоваться traceroute linux, как понимать ее вывод и определить где же все-таки проблема. Но сначала рассмотрим, как работает traceroute.

Как работает traceroute?

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

Каждый пакет проходит на своем пути определенное количество узлов, пока достигнет своей цели. Причем, каждый пакет имеет свое время жизни. Это количество узлов, которые может пройти пакет перед тем, как он будет уничтожен. Этот параметр записывается в заголовке TTL, каждый маршрутизатор, через который будет проходить пакет уменьшает его на единицу. При TTL=0 пакет уничтожается, а отправителю отсылается сообщение Time Exceeded.

Команда traceroute linux использует UDP пакеты. Она отправляет пакет с TTL=1 и смотрит адрес ответившего узла, дальше TTL=2, TTL=3 и так пока не достигнет цели. Каждый раз отправляется по три пакета и для каждого из них измеряется время прохождения. Пакет отправляется на случайный порт, который, скорее всего, не занят. Когда утилита traceroute получает сообщение от целевого узла о том, что порт недоступен трассировка считается завершенной.

Утилита Traceroute

Перед тем как перейти к примерам работы с утилитой давайте рассмотрим ее синтаксис и основные опции. Синтаксис вызова очень прост:

$ traceroute опции адрес_узла

В качестве адреса может использоваться ip адрес или доменное имя. Рассмотрим основные опции:

  • -4 или -6 — использовать ipv4 или ipv6 протокол;
  • -I — использовать ICMP пакеты вместо UDP;
  • -T — использовать TCP пакеты вместо UDP;
  • -F — не фрагментировать пакеты;
  • -f — указать TTL с которого нужно начать;
  • -g — передавать пакет через указанный шлюз;
  • -i — передавать пакет через указанный интерфейс;
  • -m — максимальное количество узлов, через которые пройдет пакет;
  • -q — количество пакетов, отправляемых за раз, по умолчанию три;
  • -n — не узнавать доменные имена;
  • -p — указать порт вместо порта по умолчанию;
  • -w — установить время ожидания ответа от узла, по умолчанию полсекунды;
  • -r — использовать другой роутер вместо того, что указанный в таблице маршрутизации;
  • -z — минимальный интервал между пакетами;
  • -U — использовать UDP с увеличением номера порта;
  • -UL — использовать протокол UDPLITE;
  • -D — использовать протокол DCCP;
  • —mtu — указать размер пакета;
  • -P — протокол, доступны такие значения: raw, dccp, udplite, udp, tcpconn, tcp, icmp.

Это не все опции утилиты, но все основные, которыми вы будете пользоваться. Дальше перейдем практике того, как выполняется трассировка сети Linux.

Примеры трассировки сети в Linux

Например, выполним трассировку до сервера losst.ru:

sudo traceroute losst.ru

Как видите, пакет прошел через 6 узлов перед тем, как дойти до цели. На каждый узел отправлялось по три пакета и для каждого из них было засечено время прохождения. И если на одном из узлов возникнет проблема, теперь вы будете знать на каком.

Читайте также:  Nexus 3 mac os �� ����� ����������

У вас, наверное, возник вопрос, почему время прохождения для некоторых узлов такое долгое? Ведь если выполнить ping, то общее время будет намного меньше. Дело в том, что время засекается для пути пакета туда и обратно. От запроса до ответа. Это раз, но еще нужно учитывать что маршрутизаторы дают высший приоритет для приходящих пакетов, когда для сервисных задержки могут быть более длинными.

Еще, вместо одного узла вы можете видеть звездочки traceroute. Это еще не значит, что он не работает. Это означает что всего лишь он не захотел нам отвечать. Давайте проверим еще что-нибудь, например, публичный DNS google:

sudo traceroute 8.8.8.8

Здесь уже больше узлов, и такая же ситуация со звездочками. Если бы на пути к серверу возникла ошибка, мы бы это увидели. Например, узел 195.153.14.1 нам не ответил и мы смогли отследить запрос только до 212.162.26.169.

sudo traceroute 195.153.14.1

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

sudo traceroute history.pl

sudo traceroute -I history.pl

Но трассировка может использоваться не только для обнаружения обрыва в цепочке маршрутизаторов. У нее еще есть достаточно интересное применение по исследованию сети. Например, вы можете попытаться определить использование подсетей провайдером. Отправим три запроса на разные адреса:

sudo traceroute losst.ru
$ sudo traceroute history.pl
$ sudo traceroute habrahabr.ru

Затем сравните выводы этих команд. Вы увидите, что начальные IP адреса одинаковые. Мы можем сделать вывод, что наш роутер 192.168.1.1 подключен к локальной сети провайдера 195.5.8.0/24, которая, в свою очередь, подключена к сети 10.50.50.0/24 откуда уже получает доступ к внешней сети.

Выводы

В этой статье мы рассмотрели как работает команда traceroute linux, а также как выполняется трассировка сети linux. Эти функции больше нужны системным администраторам, но и обычным пользователям тоже иногда могут пригодиться.

Источник

Утилиты Traceroute и Tracert

Traceroute — это утилита, которая позволяет проследить маршрут следования данных до удалённого адресата в сетях TCP/IP. В Linux используется команда Traceroute, а в Windows — Tracert. При помощи этих команд можно увидеть путь пакета данных от вашего компьютера до целевого сервера или сайта.

Как работают Tracert и Traceroute

Когда вы пытаетесь открыть сайт, браузер отправляет сообщение (запрос) серверу, на котором этот сайт находится. Сообщение на своём пути проходит через маршрутизаторы. Они решают, куда дальше передать сообщение, чтобы гарантированно его доставить адресату. В трассировке маршрутизаторы ещё называют хопами (хоп — прыжок) или узлами. Количество узлов, через которые на своём пути пройдёт запрос, можно узнать при помощи утилит Tracert и Traceroute. Узлы, которые не являются целевыми для запроса, называют транзитными.

Утилита Traceroute формирует UDP-датаграмму (сообщение, которое нужно доставить целевому серверу), упаковывает её в IP-пакет и передаёт первому транзитному узлу. В заголовке такого IP-пакета есть поле TTL (Time To Live) — время жизни пакета. Оно определяет количество хопов, через которые пакет может пройти. На каждом узле TTL уменьшается на единицу. Если на пути к удалённому адресату время жизни пакета станет равно 0, маршрутизатор отбросит пакет и отправит источнику ICMP-сообщение об ошибке «Time Exceeded» (время истекло).

Этот принцип лежит в основе работы утилит Tracert и Traceroute, однако между ними есть отличия. Рассмотрим каждую утилиту отдельно.

Tracert отправляет на хост назначения ICPM-запрос «Echo Request» с TTL=1. Первый маршрутизатор, который получит запрос, проверяет, кому он предназначен. Если маршрутизатор не является целевым хостом, он уменьшает TTL на 1, отбрасывает пакет и отправляет ICMP-сообщение источнику, так как время жизни теперь равно 0. В этом сообщении маршрутизатор указывает информацию о себе и причину дропа пакета. Получив сообщение, Tracert запоминает этот маршрутизатор как первый хоп (прыжок) и отправляет следующий пакет, но уже с TTL=2. Первый хоп успешно обрабатывает новый пакет, уменьшает время его жизни на 1 и передаёт дальше. Следующий маршрутизатор тоже выполняет проверку хоста назначения и, если пакет предназначен не ему, уменьшает TTL, отбрасывает пакет и отправляет ICMP-сообщение источнику. Tracert запоминает второй хоп, снова увеличивает TTL на 1 и отправляет следующий пакет. Эти действия будут повторяться до тех пор, пока пакет не достигнет целевого хоста. Когда запрос попадёт к целевому хосту, этот хост в ответ направит ICMP «Echo Reply». Источник воспримет это как завершение трассировки.

Читайте также:  Настройка windows 10 для ssd nvme

Утилита Traceroute вместо ICMP-запроса отправляет 3 UDP-пакета на определенный порт целевого хоста и ожидает ответа о недоступности этого порта. Первый пакет отправляется с TTL=1, второй с TTL=2 и так далее, пока запрос не попадёт адресату. Отличие от Tracert в том, как Traceroute понимает, что трассировка завершена. Так как вместо ICMP-запроса он отправляет UDP-запрос, в каждом запросе есть порт отправителя (Sourсe) и порт получателя (Destination). По умолчанию запрос отправляется на закрытый порт 34434. Когда запрос попадёт на хост назначения, этот хост отправит ответ о недоступности порта «Destination port unreachable» (порт назначения недоступен). Это значит, что адресат получил запрос. Traceroute воспримет этот ответ как завершение трассировки.

Если Tracert работает по протоколу ICMP, то какой протокол используется командой Traceroute? По умолчанию используется протокол UDP, но traceroute может отправить и ICMP-запрос «Echo Request», как Tracert. Такой способ пригодится, если хоп не отвечает на UDP-пакет.

Источник

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Трассировка сетей со сложной топологией. Выявление NAT

На HackWare.ru уже есть подробная статья о методах и программах трассировки, она называется «Трассировка сетевого маршрута» (кстати, рекомендуется начать знакомство с неё). В этой статье вновь будут затронуты вопросы трассировки. Но суть не столько в новом инструменте или в новом методе, суть в том, что весьма вероятно, что показываемые традиционными инструментами маршруты неправильны.

Чтобы пояснить, что я имею в виду, вот так выглядит типичная трассировка от моего компьютера до хоста SuIP.biz:

Но на самом деле, топология сети, по которой пакет может проходить от моего компьютера до SuIP.biz, выглядит примерно так:

Разница очевидна — в некоторых точках имеется до пяти альтернатив узлов, через которые в действительности пройдёт сетевой пакет.

Всё дело в балансировщиках нагрузки и роутерах с функцией балансировки нагрузки. В результате показываемые традиционными средствами маршруты могут содержать такие ошибки как:

  • пропуск узлов
  • неверные пути (когда два узла, находящиеся в разных маршрутах, показываются как последовательные)

Подробно обьяснение, как это происходит, дано в статье (на английском): https://paris-traceroute.net/about/

Трассировка ECMP

Сети сейчас намного сложнее чем раньше, и может быть множество путей между двумя сетевыми объектами (такими как ваш телефон, ваш ноутбук, какой-то удалённый сервер и т. д.). Этот способ маршрутизации пакетов называется ECMP или Equal-Cost MultiPath и используется для увеличения пропускной способности и надёжности сети.

Запуск обычной трассировки в сети с поддержкой ECMP может вызвать головную боль, поэтому существуют такие инструменты, как paris-traceroute.

Equal-cost multi-path routing

Многопутевая маршрутизация с равными затратами (ECMP) — это стратегия маршрутизации, при которой пересылка пакетов к следующему хопу при единичном пункте назначения может происходить через несколько «лучших путей» которые соединены с начальным узлом и для которых вычислена метрика маршрутизации. Многопутевая маршрутизация может использоваться в сочетании с большинством протоколов маршрутизации, поскольку это решение для каждого хопа ограничено одним маршрутизатором. Это может существенно увеличить пропускную способность посредством балансировки нагрузки трафика по нескольким путям; однако могут возникнуть серьёзные проблемы при его развёртывании на практике.

Читайте также:  Как узнать сколько циклов зарядки windows

Упрощённо говоря, путь пакета из точки A в точку F можно представить следующим образом:

Пакет может пройти по маршруту B-D или C-E.

Обычный traceroute отправляет много пакетов, но не может заставить их все идти по одному и тому же маршруту. Поэтому разные пакеты могут быть отправлены по разным маршрутам и сообщения об истечении срока жизни пакета могут прийти от узлов из разных путей.

То, как могут идти пакеты, показано чёрными стрелками, а путь, который могут показать обычные инструменты маршрутизации, показан красными:

Всё ещё хуже, когда два равнозначных по оценки метрики маршрутов имеют различные длины:

Команда, которая создала Paris-traceroute, изобрела технику, которая использует хеширование потока ECMP для проверки всех возможных путей. Dublin Traceroute делает то, что может сделать Paris-traceroute, плюс ещё немного.

Одной из таких дополнительных функций является способ обнаружения NAT. Dublin Traceroute подделывает IP-идентификатор в тестовом пакете и анализирует ответы, чтобы обнаружить все встреченные NAT. Это новый алгоритм, которого нет в других решениях по построению карт сетей, несмотря на то, что IP-идентификатор не является новым для задач, связанных с NAT. Например, Paris-traceroute использует IP ID чтобы определить, является ли петля в traceroute следствием устройства NAT, для этого используется IP-идентификатор пакета ответа, объяснение смотрите в статье Стивена Белловина «A technique for Counting NATted Hosts».

Paris-traceroute уже обнаруживает устройства NAT, но на самом деле это совсем другое: Paris-traceroute может сказать вам, является ли переход, который появляется как петля в traceroute, из-за NAT или нет; в то время как Dublin Traceroute может сказать вам, есть ли NAT после данной точки, а также может определить несколько NAT.

Как установить Dublin Traceroute

Dublin Traceroute имеет библиотеку и инструмент командной строки, которые устанавливаются довольно легко. Но также имеется Python версия, которая умеет делать трассировку и дополнительно умеет рисовать графики маршрутов используя полученные данные. Для включения этих функций на вашей системе нужно установить разные зависимости — как это сделано показано ниже.

Если вам нужна только возможность делать трассировку и вас не интересуют графики, то вы можете ограничиться установкой пакета dublin-traceroute.

Для установки Dublin Traceroute в Kali Linux выполните команды:

Для установки Dublin Traceroute в BlackArch выполните команды:

Как выполнить трассировку многопутевого маршрута

Чтобы выполнить трассировку с поиском всех маршрутов запустите команду вида:

Например, для трассировки мультимаршрутов до хоста suip.biz:

Пример вывода (только первые два экрана — информации на самом деле ещё больше):

Вам могут пригодиться следующие опции:

Чтобы начертить график маршрутов на основании полученных данных:

Пример построенных маршрутов показан в начале статьи.

Если вы использовали опцию -o и указали другое имя файла для сохранения результатов, то впишите его вместо trace.json.

Ещё один пример трассировки мальтимаршрутов:

Поддержка IPv6

Программа Dublin Traceroute написана на C++ и Python. Поддержка IPv6 по утверждению автора программы есть, но (внезапно) в версии, которая написана на языке Go. Исходный код на Go лежит в том же репозитории, что и C++, но нигде не написано, как выполнить установку и насколько полно реализована поддержка.

Возможно, полная поддержка IPv6 будет добавлена позже.

Источник

Оцените статью