Как использовать Traceroute и MTR для диагностики сетевых проблем
Введение
Важной частью администрирования серверов является мониторинг сетевого подключения.
Есть несколько инструментов, которые просты в использовании, но их полезно знать. В этом руководстве мы обсудим, как использовать инструмент под названием traceroute
для диагностики возможных проблем с сетью.
Мы также рассмотрим утилиту под названием mtr
, которая объединяет большую часть функций ping и traceroute в одном интерфейсе.
Как использовать трассировку
traceroute
— это простой инструмент для отображения пути к удаленному серверу. Это может быть что угодно, от веб-сайта, который вы пытаетесь посетить, до принтера в вашей локальной сети.
Программа traceroute
установлена по умолчанию почти в каждом дистрибутиве Linux, поэтому вам не нужно ее устанавливать.
Чтобы вызвать его, нам просто нужно указать веб-сайт или IP-адрес, который мы хотели бы изучить:
- traceroute google.com
Вы получите вывод, подобный следующему:
Outputtraceroute to google.com (173.194.38.137), 30 hops max, 60 byte packets
1 192.241.160.253 (192.241.160.253) 0.564 ms 0.539 ms 0.525 ms
2 192.241.164.241 (192.241.164.241) 0.487 ms 0.435 ms 0.461 ms
3 xe-3-0-6.ar2.nyc3.us.nlayer.net (69.31.95.133) 1.801 ms 1.802 ms 1.762 ms
4 144.223.28.73 (144.223.28.73) 0.583 ms 0.562 ms 0.550 ms
5 144.232.1.21 (144.232.1.21) 1.044 ms 1.048 ms 1.036 ms
6 74.125.49.212 (74.125.49.212) 0.494 ms 0.688 ms 0.643 ms
7 209.85.248.180 (209.85.248.180) 0.650 ms 209.85.248.178 (209.85.248.178) 0.621 ms 0.625 ms
8 72.14.236.208 (72.14.236.208) 0.618 ms 72.14.236.206 (72.14.236.206) 0.898 ms 72.14.236.208 (72.14.236.208) 0.872 ms
9 72.14.239.93 (72.14.239.93) 7.478 ms 7.989 ms 7.466 ms
10 72.14.232.73 (72.14.232.73) 20.002 ms 19.969 ms 19.975 ms
11 209.85.248.228 (209.85.248.228) 30.490 ms 72.14.238.106 (72.14.238.106) 34.463 ms 209.85.248.228 (209.85.248.228) 30.707 ms
12 216.239.46.54 (216.239.46.54) 42.502 ms 42.507 ms 42.487 ms
13 216.239.46.159 (216.239.46.159) 76.578 ms 74.585 ms 74.617 ms
14 209.85.250.126 (209.85.250.126) 80.625 ms 80.584 ms 78.514 ms
15 72.14.238.131 (72.14.238.131) 80.287 ms 80.560 ms 78.842 ms
16 209.85.250.228 (209.85.250.228) 171.997 ms 173.668 ms 170.068 ms
17 66.249.94.93 (66.249.94.93) 238.133 ms 235.851 ms 235.479 ms
18 72.14.233.79 (72.14.233.79) 233.639 ms 239.147 ms 233.707 ms
19 sin04s01-in-f9.1e100.net (173.194.38.137) 236.241 ms 235.608 ms 236.843 ms
Первая строка сообщает нам условия, в которых работает traceroute:
Outputtraceroute to google.com (173.194.38.137), 30 hops max, 60 byte packets
Он дает указанный хост, IP-адрес, возвращаемый DNS для этого домена, максимальное количество переходов для проверки и размер пакета, который будет использоваться.
Максимальное количество переходов можно настроить с помощью флага -m
. Если хост, к которому вы пытаетесь выполнить маршрутизацию, находится на расстоянии более 30 прыжков, вам может потребоваться указать здесь большее значение. Максимальное значение, которое вы можете установить, равно 255.
- traceroute -m 255 obiwan.scrye.net
Вы можете настроить размер пакета, отправляемого на каждый переход, указав целое число после имени хоста:
- traceroute google.com 70
Вы увидите такой вывод:
Outputtraceroute to google.com (173.194.38.128), 30 hops max, 70 byte packets
1 192.241.160.254 (192.241.160.254) 0.364 ms 0.330 ms 0.319 ms
2 192.241.164.237 (192.241.164.237) 0.284 ms 0.343 ms 0.321 ms
После первой строки каждая последующая строка представляет «переход» или промежуточный узел, через который должен пройти ваш трафик, чтобы достичь компьютера, представленного указанным вами узлом.
Каждая строка имеет следующий формат:
Outputhop_number host_name (IP_address) packet_round_trip_times
Вот пример прыжка, который вы можете увидеть:
Output3 nyk-b6-link.telia.net (62.115.35.101) 0.311 ms 0.302 ms 0.293 ms
Вот что означает каждое поле:
- hop_number: Последовательный подсчет количества степеней отделения хоста от вашего компьютера. Трафик от хостов с более высокими номерами должен пройти через большее количество компьютеров для маршрутизации.
- host_name: это поле содержит результат обратного поиска DNS по IP-адресу хоста, если он доступен. Если из обратного DNS-запроса не возвращается никакой информации, предоставляется сам IP-адрес.
- IP_address: это поле содержит IP-адрес для этого сетевого прыжка.
- packet_round_trip_times: в оставшейся части строки указано время прохождения пакета в обоих направлениях до хоста и обратно. По умолчанию на каждый хост отправляется три пакета, и каждая попытка добавляется в конец строки.
Если вы хотите изменить количество пакетов, которые проверяются на каждом хосте, вы можете указать число с опцией -q
, например:
- traceroute -q1 google.com
Если вы хотите отказаться от обратного просмотра DNS для ускорения трассировки, вы можете передать флаг -n
:
- traceroute -n google.com
Вы получите такой вывод:
Outputtraceroute to google.com (74.125.235.7), 30 hops max, 60 byte packets
1 192.241.160.253 0.626 ms 0.598 ms 0.588 ms
2 192.241.164.241 2.821 ms 2.743 ms 2.819 ms
3 69.31.95.133 1.470 ms 1.473 ms 1.525 ms
Если ваш traceroute распадается на несколько звездочек (*), проблема с маршрутом до хоста.
Output...
15 209.85.248.220 (209.85.248.220) 121.809 ms 72.14.239.12 (72.14.239.12) 76.941 ms 209.85.248.220 (209.85.248.220) 78.946 ms
16 72.14.239.247 (72.14.239.247) 101.001 ms 92.478 ms 92.448 ms
17 * * 209.85.250.124 (209.85.250.124) 175.083 ms
18 * * *
19 * * *
Что означает проблема с маршрутом?
Если ваша попытка traceroute останавливается на определенном переходе или узле и не может найти маршрут к хосту, у вас возникла проблема.
Хотя прыжок, на котором маршрут не возвращается, может быть местом проблемы с сетью, его не всегда так просто диагностировать.
Из-за того, что каждый эхо-запрос представляет собой двусторонний пакет, а также ситуации, когда пакеты часто используют разные пути в любом направлении, это может указывать на проблему на совершенно другом, возможно, более близком маршруте.
Также может случиться так, что проблема связана с прыжком сразу после последнего прыжка, который вы видите. Трудно диагностировать точное местоположение проблемы, если вы не можете получить трассировку возврата от этого конкретного прыжка. Обычно это невозможно за пределами вашей собственной сети.
Как использовать ССО
Динамической альтернативой программе traceroute является mtr
. Сочетая в себе функции ping и traceroute, mtr позволяет постоянно опрашивать удаленный сервер и видеть, как со временем меняется задержка и производительность.
В отличие от traceroute, mtr не устанавливается по умолчанию в большинстве систем. Вы можете получить его, введя следующие команды.
Убунту/Дебиан:
- sudo apt-get install mtr
ЦенОС/Федора:
- yum install mtr
Арка:
- pacman -S mtr
После установки вы можете вызвать его, набрав:
- mtr google.com
Вы получите такой вывод:
Output My traceroute [v0.80]
traceroute (0.0.0.0) Tue Oct 22 20:39:42 2013
Resolver: Received error response 2. (server failure)er of fields q
uit Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. 192.241.160.253 0.0% 371 0.4 0.6 0.1 14.3 1.0
2. 192.241.164.241 0.0% 371 7.4 2.5 0.1 37.5 4.8
3. xe-3-0-6.ar2.nyc3.us. 2.7% 371 3.6 2.6 1.1 5.5 1.1
4. sl-gw50-nyc-.sprintli 0.0% 371 0.7 5.0 0.1 82.3 13.1
Хотя выходные данные могут выглядеть похожими, большое преимущество по сравнению с traceroute заключается в том, что выходные данные постоянно обновляются. Это позволяет накапливать тренды и средние значения, а также позволяет видеть, как производительность сети меняется с течением времени.
Если вы запустили traceroute, есть вероятность, что пакеты, которые были отправлены на каждый переход, прошли без происшествий, даже в ситуации, когда маршрут страдает от периодической потери пакетов. Утилита mtr позволяет отслеживать эту ситуацию, собирая данные за более широкий диапазон времени.
Также можно запустить mtr с параметром --report
, который возвращает результаты отправки 10 пакетов на каждый переход.
- mtr --report google.com
Отчет выглядит так:
OutputHOST: traceroute Loss% Snt Last Avg Best Wrst StDev
1.|-- 192.241.160.254 0.0% 10 1.5 0.9 0.4 1.5 0.4
2.|-- 192.241.164.237 0.0% 10 0.6 0.9 0.4 2.7 0.7
3.|-- nyk-b6-link.telia.net 0.0% 10 0.5 0.5 0.2 0.7 0.2
4.|-- nyk-bb2-link.telia.net 0.0% 10 67.5 18.5 0.8 87.3 31.8
Это может быть полезно, когда вы не обязательно хотите измерять в реальном времени, но вам нужен больший диапазон данных, чем предоставляет traceroute.
Заключение
С помощью traceroute
и mtr
вы можете понять, какие серверы на вашем пути к определенному домену или адресу вызывают проблемы. Это может быть полезно при устранении неполадок во внутренней сети, а также при попытке предоставить информацию членам службы поддержки или интернет-провайдерам, когда у вас возникают проблемы с сетью.