Можно ли отправлять трассировки с виртуальной машины Linux Azure?

Я создал виртуальную машину Linux Azure. И я хочу отправить трассировку с него на мой домашний IP-адрес. Однако время ожидания traceroute истекает на каждом прыжке. Я настроил виртуальную машину на общедоступный статический IP-адрес. И иметь входящие и исходящие правила для всех портов.

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

Интересным фактом является то, что трассировки успешно выполняются из Windows Server Azure VM, но не из Linux Ubuntu 16.04.

Виртуальная машина имеет статический IP-адрес в обоих случаях: Linux и Windows.

Еще одна деталь: на ВМ Windows Azure первые 5 переходов не отвечают, а остальные отвечают. На виртуальной машине Linux Azure каждый прыжок не отвечает.


person Maksym Bondarenko    schedule 16.03.2017    source источник


Ответы (2)


Поскольку tracert и traceroute работают по-разному.
В Windows tracert основан на ICMP, мы можем использовать tracert для проверки подключения виртуальной машины Azure к внешней среде.
Но в Linux traceroute по умолчанию основан на UDP. мы можем добавить параметр, чтобы заставить traceroute работать с ICMP, но в моем тесте, даже если traceroute работает с ICMP, он отличается от tracert.

root@ubuntu:~# traceroute -I 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  google-public-dns-a.google.com (8.8.8.8)  1.599 ms  1.593 ms  1.783 ms

В качестве обходного пути мы можем использовать другие инструменты для проверки соединения, например, tracepath

person Jason Ye    schedule 16.03.2017
comment
Спасибо Джейсон. Tracepath действительно дает какой-то результат. Да, первые несколько прыжков не имеют ответа, но это согласуется с поведением виртуальной машины Windows Azure. - person Maksym Bondarenko; 20.03.2017
comment
Мне интересно, есть ли у вас объяснение, почему обычный traceroute не работает (все переходы не отвечают). - person Maksym Bondarenko; 20.03.2017
comment
@MaksymBondarenko Кажется, один из маршрутизаторов заблокировал type 11 (TTL-expired), поэтому мы не можем найти середину маршрутизатора, но видим, что пакет достиг конечного пункта назначения. - person Jason Ye; 20.03.2017

Джейсон Йе - информация MSFT верна, но его ответ на самом деле не отвечает на ваш вопрос.

Traceroue не работает в Azure, поскольку Azure по умолчанию блокирует весь трафик ICMP. Поскольку traceroute идентифицирует переходы, получая пакет ICMP (время жизни ICMP истекло) от каждого перехода, вы не видите никаких переходов.

По этой же причине не работает ping из Интернета на компьютеры в Azure.

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

person Malt    schedule 30.03.2017
comment
Спасибо Мальт! Я забыл заметить, что статический IP-адрес фактически был назначен Azure Linux и виртуальной машине Windows. Без статического IP трассировка не работает даже в Windows. До сих пор не очень понятно, почему время ожидания команды traceroute истекает на каждом прыжке при отправке из Linux. В итоге я использовал Scamper от CAIDA: caida.org/tools/measurement/scamper . Скампер работает хорошо. - person Maksym Bondarenko; 31.03.2017