Top.Mail.Ru

Traceroute в Linux: руководство по диагностике сетевых проблем

Traceroute в Linux: руководство по диагностике сетевых проблем

Команды:

traceroute 192.168.88.2

traceroute -I (ICMP) 192.168.88.2 - отправлять пакеты ICMP

traceroute -I -n (-numeric - числовой формат) 8.8.8.8

 

Утилита traceroute (трассировка маршрута) в Linux помогает понять, как именно данные идут от вашего компьютера до другого компьютера или сервера в интернете. Она показывает все промежуточные устройства (маршрутизаторы), через которые проходят эти данные, и сколько времени занимает путь до каждого из них.

Благодаря этому можно увидеть, где на маршруте возникают задержки или проблемы, если связь работает медленно или совсем не получается подключиться.

То есть traceroute помогает найти "узкие места" или поломки в сети, чтобы быстрее их исправить.

Давайте попробуем выполнить трассировку до хост системы

traceroute 192.168.88.2

Command 'traceroute' not found, but can be installed with:

sudo apt install traceroute

Система говорит, что данную утилиту нужно установить

sudo apt install traceroute

traceroute 192.168.88.2

 1  _gateway (192.168.0.1)  0.242 ms  0.172 ms  0.143 ms
2  * * *
3  * * *
4  * * *
5  * * *
6  * * *

Мы видим, что пакет прошел через наш роутер Микротик, а дальше утилита не может определить устройства. Все это по тому, что по умолчанию, утилита traceroute отправляет UDP пакеты, на которые далеко не всегда отвечают сетевые устройства.

Поэтому, давайте изменим тип отправляемых пакетов на ICMP, т.е. такие же пакеты, которые отправляются при проверке связи через утилиту ping. Для этого добавим ключ I

traceroute -I (ICMP) 192.168.88.2 - отправлять пакеты ICMP

traceroute -I 192.168.88.2

traceroute to 192.168.88.2 (192.168.88.2), 30 hops max, 60 byte packets
1  _gateway (192.168.0.1)  0.231 ms  0.254 ms  0.227 ms
2  192.168.88.2 (192.168.88.2)  6.721 ms  6.696 ms  6.690 ms

Вывод нам говорит, что машина, до которой мы проверяем маршрут, подключена ко второму сетевому устройству от нас. Так оно и есть, первое устройство это Микротик, второе это физический роутер Yota.

Давайте посмотрим, сколько сетевых устройств на пути до гугловского ДНС сервера?

traceroute -I 8.8.8.8

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1  _gateway (192.168.0.1)  0.198 ms  0.145 ms  0.210 ms
2  192.168.88.1 (192.168.88.1)  3.287 ms  3.262 ms  3.189 ms
3  100.96.0.1 (100.96.0.1)  3.089 ms  3.064 ms  3.066 ms
4  178.34.130.110 (178.34.130.110)  3.083 ms  3.060 ms  3.069 ms
...............................................
20  * * *
21  dns.google (8.8.8.8)  44.141 ms  44.299 ms  45.241 ms

21 устройство и в цепочке устройств мы видим, 1-ое устройство наш виртуальный МикроТик, 2-ое физической роутер Yota, причем, сейчас тут указан именно адрес роутера, а не адрес машины, до которой мы стучались в прошлый раз.

Все дело в том, что последняя запись выводит адрес устройства, которое мы проверяем, а не устройства, к которому оно подключено. Так что, верно было бы сказать, что пакет прошел через 20 устройств, а на 21-ом попал в пункт назначения.

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

Те строчки, где отображаются звездочки, говорит нам о том, что, скорее всего, данные устройства не отвечают на ICMP запросы.

Да, действительно, шлюз, который отправляет сетевые пакеты во внешнюю сеть имеет адрес 192.168.88.1

Давайте попробуем зайти на наш физический роутер 192.168.88.1, чтобы посмотреть, а куда физические роутер переправляет пакеты во внешнюю сеть? Т.е. какой у него шлюз? (http://192.168.88.1/html/home.html \ Настройки \ Ethernet \ Статус Ethernet \ Шлюз: 100.96.0.1) т.е. действительно, нас не обманули, дальше пакет идет на адрес 100.96.0.1 который мы видим в трассировке. Ну, дальше мы уже проверить не можем, но судя из эксперимента, верить этим данным можно!

Для чего, чаще всего используют трассировку, как правило для определения устройства на которому сыпется сеть.

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

traceroute -I 8.8.8.8

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1  192.168.0.1 (192.168.0.1)  0.281 ms  0.269 ms  0.241 ms
2  status.yota.ru (192.168.88.1)  3.241 ms !N  3.216 ms !N  3.192 ms !N

Данное сообщение говорит о том, что на втором устройстве произошел сбой !N Network Unreachable (сеть недоступна) и дальше пакет пойти не может. Т.е. так мы определили, последнее устройство, до которого мы можем достучаться, значит проблема по пути от роутера Yota до следующего устройства, что соответствует нашей сымитированной ситуации.

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

Чтобы у нас не отображались имена, а только цифровые значения, т.е. только IP адреса устройств, можно добавить ключ -n

traceroute -I -n (-numeric - числовой формат) 8.8.8.8

traceroute -I -n 8.8.8.8