Диагностика проблем с маршрутизацией виртуальной машины

В этой статье вы узнаете, как диагностировать проблемы с маршрутизацией, просмотрев действующие маршруты для сетевого интерфейса в виртуальной машине. Azure создает несколько маршрутов по умолчанию для каждой подсети в виртуальной сети. Маршруты по умолчанию Azure можно переопределить, определив маршруты в таблице маршрутов, а затем связав эту таблицу маршрутов с подсетью. Созданные вами маршруты, маршруты по умолчанию Azure и все маршруты, распространяемые из локальной сети через VPN-шлюз Azure (если виртуальная сеть подключена к локальной сети) через протокол BGP, являются действующими маршрутами для всех сетевых интерфейсов в подсети. Если вам неизвестны приведенные здесь понятия, ознакомьтесь с общими сведениями о виртуальных сетях, сетевом интерфейсе и маршрутизации.

Сценарий

При попытке подключиться к виртуальной машине происходит сбой. Чтобы определить, почему не удается подключиться к виртуальной машине, вы можете просмотреть действующие маршруты для сетевого интерфейса с помощью портала Azure, PowerShell или Azure CLI.

Чтобы выполнить приведенные ниже инструкции, требуется виртуальная машина, для которой будут просматриваться действующие маршруты. Если у вас ее нет, разверните виртуальную машину Linux или Windows для выполнения задач, описанных в этой статье. Примеры в этой статье относятся к виртуальной машине myVM с сетевым интерфейсом myVMNic1. Виртуальная машина и сетевой интерфейс находятся в группе ресурсов myResourceGroup в регионе Восточная часть США. Измените значения в инструкциях, чтобы они соответствовали значениям для виртуальной машины, проблема с которой диагностируется.

Диагностика с помощью портала Azure

  1. Войдите на портал Azure с помощью учетной записи Azure, которая предоставляет необходимые разрешения.

  2. В верхней части окна портала Azure введите в поле поиска имя запущенной виртуальной машины. Когда в результатах поиска появится имя виртуальной машины, щелкните его.

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

  4. Слева выберите Действующие маршруты. Отобразятся действующие маршруты для сетевого интерфейса myVMNic1, как показано ниже: Просмотр действующих маршрутов

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

    В примере, показанном на предыдущем рисунке, перечислены маршруты по умолчанию, создаваемые Azure для каждой подсети. Ваш список содержит по крайней мере эти маршруты. Он может также содержать дополнительные маршруты, в зависимости от включенных возможностей виртуальной сети: пиринга с другой виртуальной сетью или подключения к локальной сети через VPN-шлюз Azure. Дополнительные сведения о каждом этом маршруте и других маршрутах, которые могут отображаться для сетевого интерфейса, приведены в разделе Маршрутизация трафика в виртуальной сети. Если в списке большое количество маршрутов, удобно будет щелкнуть Скачать, чтобы скачать CSV-файл со списком маршрутов.

На предыдущем шаге мы просмотрели действующие маршруты с помощью виртуальной машины. Но их можно просмотреть и другими способами:

Диагностика с помощью PowerShell

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Вы можете выполнить приведенные ниже команды в Azure Cloud Shell или с помощью PowerShell на своем компьютере. Azure Cloud Shell — это бесплатная интерактивная оболочка. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью. Если вы выполняете PowerShell на локальном компьютере, вам потребуется модуль Azure PowerShell 1.0.0 или более поздней версии. Выполните Get-Module -ListAvailable Az на компьютере, чтобы получить сведения об установленной версии. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell. Если PowerShell работает локально, необходимо также выполнить Connect-AzAccount, чтобы войти в Azure с учетной записью, предоставляющей необходимые разрешения.

Получите действующие маршруты для сетевого интерфейса, выполнив командлет Get-AzEffectiveRouteTable. Следующий пример кода извлекает действующие маршруты для сетевого интерфейса myVMNic1, который находится в группе ресурсов myResourceGroup.

Get-AzEffectiveRouteTable `
  -NetworkInterfaceName myVMNic1 `
  -ResourceGroupName myResourceGroup `
  | Format-Table

Чтобы понять сведения, возвращенные в выходных данных, ознакомьтесь с разделом Маршрутизация трафика в виртуальной сети. Выходные данные возвращаются только в том случае, если виртуальная машина запущена. Если к виртуальной машине подключено несколько сетевых интерфейсов, можно просмотреть действующие маршруты для каждого из них. Так как сетевые интерфейсы могут находиться в разных подсетях, у них могут быть разные действующие маршруты. Если у вас по-прежнему возникают проблемы с подключением, прочитайте разделы Дополнительная диагностика и Рекомендации.

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

$VM = Get-AzVM -Name myVM `
  -ResourceGroupName myResourceGroup
$VM.NetworkProfile

Вы получите примерно такой результат:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMNic1

В представленных выше выходных данных сетевой интерфейс имеет имя myVMNic1.

Диагностика с помощью Azure CLI

Вы можете выполнить приведенные ниже команды в Azure Cloud Shell или с помощью интерфейса командной строки на своем компьютере. Для этой статьи требуется Azure CLI 2.0.32 или более поздней версии. Выполните командлет az --version, чтобы узнать установленную версию. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. Если Azure CLI работает локально, необходимо также выполнить az login и войти в Azure с учетной записью, предоставляющей необходимые разрешения.

Получите действующие маршруты для сетевого интерфейса с помощью команды az network nic show-effective-route-table. Следующий пример кода извлекает действующие маршруты для сетевого интерфейса myVMNic1, который находится в группе ресурсов myResourceGroup.

az network nic show-effective-route-table \
  --name myVMNic1 \
  --resource-group myResourceGroup

Чтобы понять сведения, возвращенные в выходных данных, ознакомьтесь с разделом Маршрутизация трафика в виртуальной сети. Выходные данные возвращаются только в том случае, если виртуальная машина запущена. Если к виртуальной машине подключено несколько сетевых интерфейсов, можно просмотреть действующие маршруты для каждого из них. Так как сетевые интерфейсы могут находиться в разных подсетях, у них могут быть разные действующие маршруты. Если у вас по-прежнему возникают проблемы с подключением, прочитайте разделы Дополнительная диагностика и Рекомендации.

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

az vm show \
  --name myVM \
  --resource-group myResourceGroup

Устранение проблемы

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

  • Добавление настраиваемого маршрута для переопределения маршрутов по умолчанию Azure. Узнайте, как добавить настраиваемый маршрут.
  • Изменение или удаление настраиваемого маршрута, который может привести к маршрутизации в нежелательное расположение. Узнайте, как изменить или удалить настраиваемый маршрут.
  • Обеспечение привязки таблицы маршрутов, которая содержит определенные вами настраиваемые маршруты, к подсети сетевого интерфейса. Узнайте, как связать таблицу маршрутов с подсетью.
  • Обеспечение работоспособности устройств, таких как развернутые вами VPN-шлюз Azure или сетевые виртуальные модули. Используйте возможности диагностики VPN в службе "Наблюдатель за сетями", чтобы выявить проблемы с VPN-шлюзом Azure.

Если у вас по-прежнему возникают проблемы с подключениями, ознакомьтесь с разделами Рекомендации и "Дополнительная диагностика".

Рекомендации

При устранении проблем с подключениями необходимо учитывать следующие аспекты.

  • Маршрутизация основана на совпадении наиболее длинного префикса (LPM) среди определенных вами маршрутов, протоколе BGP и системных маршрутах. При наличии более одного маршрута с совпадающими значениями LPM маршрут выбирается по источнику в порядке, указанном в разделе Маршрутизация трафика в виртуальной сети. Функция действующих маршрутов позволяет просмотреть только действующие маршруты, выделенные из доступных маршрутов при помощи совпадающего значения LPM. Отображение способа вычисления маршрутов для сетевого интерфейса сильно упрощает устранение неполадок с определенными маршрутами, которые могут влиять на подключения из виртуальной машины.
  • Если вы определили настраиваемые маршруты к сетевому виртуальному модулю и при этом типом следующего прыжка является Виртуальный модуль, обязательно включите IP-пересылку на принимающем трафик сетевом виртуальном модуле, иначе пакеты будут удаляться. Узнайте больше о способах включения IP-пересылки для сетевого интерфейса. Кроме того, операционная система или приложение в сетевом виртуальном модуле должны иметь возможность пересылать трафик и поддерживать настройку этой функции.
  • Если вы создали маршрут 0.0.0.0/0, то весь исходящий трафик Интернета направляется по указанному вами следующему прыжку, например, в сетевой виртуальный модуль или VPN-шлюз. Создание таких маршрутов часто называют принудительным туннелированием. Удаленные подключения по протоколу RDP или SSH из Интернета к вашей виртуальной машине могут не работать с этим маршрутом. Это зависит от обработки трафика при выполнении следующего прыжка. Принудительное туннелирование можно включить:
    • Если используется VPN типа "сеть — сеть" путем создания маршрута с типом следующего прыжка VPN-шлюз. Узнайте больше о настройке принудительного туннелирования.
    • Если маршрут 0.0.0.0/0 (маршрут по умолчанию) объявляется по протоколу BGP через шлюз виртуальной сети при использовании VPN типа "сеть — сеть" или канала ExpressRoute. Узнайте больше об использовании протокола BGP с VPN типа "сеть — сеть" или ExpressRoute.
  • Для правильной работы пирингового трафика виртуальной сети системный маршрут с типом следующего прыжка Пиринг VNet должен действовать в диапазоне префиксов пиринговой виртуальной сети. Если такого маршрута не существует и пиринговая связь виртуальной сети подключена, возможны два сценария.
  • Хотя Azure назначает маршруты по умолчанию каждому сетевому интерфейсу Azure, если к виртуальной машине подключено несколько сетевых интерфейсов, то маршрут по умолчанию (0.0.0.0/0) назначается только основному сетевому интерфейсу или шлюзу в операционной системе виртуальной машины. Узнайте, как создать маршрут по умолчанию для дополнительных сетевых интерфейсов, подключенных к виртуальной машине Windows или Linux. Узнайте больше об основных и дополнительных сетевых интерфейсах.

Дополнительная диагностика

  • Чтобы выполнить быстрый тест для определения типа следующего прыжка для трафика, предназначенного для определенного расположения, используйте функцию следующего прыжка службы "Наблюдатель за сетями Azure". С ее помощью можно узнать тип следующего прыжка для трафика, предназначенного для указанного расположения.
  • Если маршруты, вызывающие сбой работы сети виртуальной машины, отсутствуют, возможно, проблема возникла из-за программного обеспечения брандмауэра, запущенного в операционной системе виртуальной машины.
  • Если вы используете принудительное туннелирование трафика на локальное устройство через VPN-шлюз или сетевой виртуальный модуль, может отсутствовать возможность подключения к виртуальной машине из Интернета в зависимости от настройки маршрутизации для этих устройств. Убедитесь, что маршрутизация для этих устройств направляет трафик на общедоступный или частный IP-адрес виртуальной машины.
  • Используйте функцию устранения неполадок подключения службы "Наблюдатель за сетями", чтобы определить параметры маршрутизации, фильтрации и ОС, вызывающие проблему с подключением.

Дальнейшие действия