Использование Traceroute и mtr для диагностики сети
Мониторинг сети и сетевых подключений – важная часть администрирования сервера.
Для этого разработано несколько достаточно простых инструментов. Данное руководство рассказывает, как использовать инструмент traceroute для диагностики потенциальных проблем сети.
Кроме того, руководство охватывает использование утилиты mtr, интерфейс которой объединяет функции ping и traceroute.
Использование traceroute
Traceroute – это простой инструмент для определения пути к удаленному серверу. Это может быть что угодно: от сайта до принтера, подключенного к локальной сети.
Программа traceroute установлена на каждый дистрибутив Linux по умолчанию, потому не требует отдельной установки.
Чтобы вызвать traceroute, нужно указать вебсайт или IP-адрес сервера:
traceroute google.com
traceroute 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
Первая строка вывода говорит об условиях работы traceroute:
traceroute to google.com (173.194.38.137), 30 hops max, 60 byte packets
В ней содержится указанный хост, IP-адрес, который DNS возвращает для этого домена, максимальное количество хопов (так называемых «прыжков» – промежуточных участков) и размер пакета, который будет использоваться.
Максимальное количество хопов можно изменить при помощи флага –m. Если до необходимого хоста больше 30 хопов, нужно указать большее значение. Программа traceroute позволяет задать максимум 225 хопов.
traceroute -m 255 obiwan.scrye.net
Кроме того, можно задать размер пакета, который отправляется на каждый хоп, указав целое число после имени хоста:
traceroute google.com 70
traceroute 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
Все следующие строки представляют каждый отдельный хоп или промежуточный хост, через который должен пройти трафик, чтоб достичь требуемого хоста.
Каждая из этих строк имеет следующий формат:
hop_number host_name (IP_address) packet_round_trip_times
3 nyk-b6-link.telia.net (62.115.35.101) 0.311 ms 0.302 ms 0.293 ms
Указанная выше строка содержит следующие поля:
- hop_number: последовательный подсчет промежуточных участков (начинается с текущего компьютера).
- host_name: данное поле содержит результат обратного DNS-запроса (т.е., преобразования IP-адреса в доменное имя, если адрес доступен). Если информация не возвращается, будет указан сам IP-адрес.
- IP_address: данное поле содержит IP-адрес сетевого хопа.
- packetroundtrip_times: остальная часть строки указывает время прохождения пакетов на хост и обратно. По умолчанию на каждый хост посылается три пакета, и каждая такая попытка вносится в конец строки.
Примечание: чтобы изменить количество отправляемых пакетов, используйте опцию –q:
Чтобы отключить обратный DNS-запрос с целью ускорить мониторинг, используйте флаг -n:
traceroute -n google.com
traceroute 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 возвращает звездочки (*), значит, с трассировкой пакетов к хосту возникли проблемы.
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 останавливается на определенном хопе и не может продолжить трассировку маршрута.
Хоп, на котором оборвался маршрут, может иметь некоторые сетевые проблемы, но это не всегда так просто диагностировать.
Поскольку каждый пинг представляет собой прохождение пакета туда и обратно, и в связи с тем, что пакеты часто используют разные пути в обоих направлениях, это может указывать на проблему в совершенно другом, возможно, более близком узле.
Может, проблемы возникли с хопом, выполненным непосредственно после последнего выведенного хопа. В случае если запустить обратную трассировку конкретного хопа невозможно (обычно это происходит, если хоп находится за пределами сети), диагностировать точное местоположение проблемы будет непросто.
Использование MTR
MTR – это динамическая альтернатива программе traceroute. Объединяя функции ping и traceroute, mtr позволяет постоянно опрашивать удаленный сервер и отслеживать изменения задержки и производительности с течением времени.
В отличие от traceroute, в большинстве систем mtr не поставляется по умолчанию. Для установки mtr используйте следующие команды:
Установив программу, вызовите ее при помощи команды:
mtr google.com
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; но mtr имеет существенное преимущество – ее вывод постоянно обновляется. Это позволяет собирать средние показатели, а также отслеживать тенденции и изменения производительности сети.
При запуске traceroute есть вероятность, что пакеты, отправленные на каждый хоп, были переданы должным образом, даже если маршрут пострадал от потери пакетов. Утилита MTR позволяет отслеживать подобные ситуации путем сбора данных в широком диапазоне времени.
Кроме того, mtr можно запустить с опцией –report, которая вернет результаты отправки 10 пакетов на каждый хоп:
mtr —report google.com
HOST: 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 помогают вычислить, какой из серверов на пути к определенному домену/адресу вызывают проблемы. Это очень полезно при диагностике и устранении неполадок внутренней сети, а также при необходимости предоставить информацию провайдеру или специалистам поддержки для решения проблем сети.
Что значит «* * *» в выводе traceroute?
Всем привет 🙂 Просто из любопытства, интересно что это значит когда я пытаюсь через traceroute посчитать транзитные участки. Это сепаратор какой-то (например выход из локальной сети в глобальную) или это что-то важное значит? Например до Яндекса у меня 7 hop’ов, «* * *» на шестом, до гугла их 19 и «* * *» на 5, 11-18. В случае с гуглом как-то сепаратор выглядит не логично. Спасибо за ответы 🙂
Заранее извините за глупый вопрос 🙂
Это хосты которые не ответили на трейсроут
О как! А я могу как-нибудь узнать что это за хосты, которые не ответили? Эта информация из DNS берется?
А я могу как-нибудь узнать что это за хосты
DNS, в данном случае, используется только для получения имени хоста, когда известен его IP (который известен благодаря тому что хост ответил на трассировку). При чём получение имени хоста из DNS это опциональное поведение
«Для определения промежуточных маршрутизаторов traceroute отправляет целевому узлу серию ICMP-пакетов (по умолчанию 3 пакета), с каждым шагом увеличивая значение поля TTL («время жизни») на 1. Это поле обычно указывает максимальное количество маршрутизаторов, которое может быть пройдено пакетом. Первая серия пакетов отправляется с TTL, равным 1, и поэтому первый же маршрутизатор возвращает обратно ICMP-сообщение «time exceeded in transit», указывающее на невозможность доставки данных. Traceroute фиксирует адрес маршрутизатора, а также время между отправкой пакета и получением ответа (эти сведения выводятся на монитор компьютера). Затем traceroute повторяет отправку серии пакетов, но уже с TTL, равным 2, что заставляет первый маршрутизатор уменьшить TTL пакетов на единицу и направить их ко второму маршрутизатору. Второй маршрутизатор, получив пакеты с TTL=1, так же возвращает «time exceeded in transit».
Процесс повторяется до тех пор, пока пакет не достигнет целевого узла. При получении ответа от этого узла процесс трассировки считается завершённым.»
https://ru.wikipedia.org/wiki/Traceroute
«* * *» это те хосты которые получив пакет с TTL=1 не отправляют сообщение «time exceeded in transit»