诊断虚拟机路由问题

本文介绍如何通过查看虚拟机(VM)中网络接口的有效路由来诊断路由问题。 Azure 会自动为每个虚拟网络子网创建默认路由。 可以通过在路由表中定义自定义路由并将表与子网关联来替代这些默认路由。 网络接口的有效路由是 Azure 的默认路由、定义的自定义路由以及使用边界网关协议(BGP)通过 Azure VPN 网关从本地网络传播的任何路由的组合。 如果不熟悉虚拟网络、网络接口或路由,请参阅 虚拟网络概述网络接口路由概述

情景

你正在尝试连接到某个 VM,但连接失败。 若要确定为何无法连接到该 VM,可以使用 Azure 门户PowerShellAzure CLI 查看网络接口的有效路由。

以下步骤假设你已有一台用于查看其有效路由的现有虚拟机。 如果没有 VM,请先部署 LinuxWindows VM 以完成本文中的任务。 本文中的示例适用于名为 vm-1 的 VM ,其中包含名为 vm-1445 的网络接口。 VM 和网络接口位于名为 test-rg 的资源组中,位于 * 2* 区域中。 针对要诊断问题的 VM,请根据需要更改步骤中的值。

使用 Azure 门户诊断

  1. 使用具有必要权限的 Azure 帐户登录 Azure 门户

  2. 在 Azure 门户顶部的搜索框中,输入处于运行状态的 VM 的名称。 当 VM 名称显示在搜索结果中时,请选择它。

  3. 展开“ 网络 ”部分,然后选择“ 网络设置”。

  4. 若要选择接口,请选择其名称。

    VM 设置中的网络接口的屏幕截图。

  5. 在网络接口中,展开 “帮助”。 选择 “有效路由”。

    网络接口有效路由的屏幕截图。

    选择所需的网络接口以查看其有效路由。 每个接口可能属于不同的子网,从而导致唯一路由。 该图像中的示例显示 Azure 为每个子网创建的默认路由。 你的列表包括默认路由,也可能包括额外的路由。 路由可能来自虚拟网络对等互连或通过 Azure VPN 网关连接到本地网络等功能。 有关路由的详细信息,请参阅 虚拟网络流量路由。 如果有许多路由,请使用 “下载 ”选项将它们另存为 .csv 文件,以便更轻松地查看。

尽管上述步骤是通过 VM 查看有效路由,但也可以通过以下方式查看有效路由:

使用 PowerShell 诊断

注释

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

可以通过从计算机运行 PowerShell 来运行命令。 如果在计算机上运行 PowerShell,需要 Azure PowerShell 模块 1.0.0 或更高版本。 在计算机上运行 Get-Module -ListAvailable Az,找到已安装的版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。 如果在本地运行 PowerShell,则还需要运行 Connect-AzAccount -Environment AzureChinaCloud,以使用拥有所需权限的帐户登录到 Azure。

使用 Get-AzEffectiveRouteTable 获取网络接口的有效路由。 以下示例获取在名为 test-rg 的资源组中名为 vm-1445 的网络接口的有效路由:

$Params = @{
  NetworkInterfaceName = "vm-1445"
  ResourceGroupName    = "test-rg"
}
Get-AzEffectiveRouteTable @Params | Format-Table

若要了解输出中返回的信息,请参阅路由概述。 仅当 VM 处于运行状态时,才返回输出。 如果已将多个网络接口附加到 VM,可以查看每个网络接口的有效路由。 由于每个网络接口可能位于不同的子网中,因此,每个网络接口可能有不同的有效路由。 如果仍然遇到通信问题,请参阅 更多诊断注意事项

如果知道 VM 名称而不是网络接口名称,请使用以下命令返回附加到 VM 的所有网络接口的 ID:

$Params = @{
  Name              = "vm-1"
  ResourceGroupName = "test-rg"
}
$VM = Get-AzVM @Params
$VM.NetworkProfile

将会收到类似于以下示例的输出:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/test-rg/providers/Microsoft.Network/networkInterfaces/vm-1445

在上一个输出中,网络接口名称为 vm-1445

使用 Azure CLI 诊断

可以通过从计算机运行 CLI 来运行命令。 本文需要 Azure CLI 2.0.32 或更高版本。 运行 az --version 查找已安装的版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 如果在本地运行 Azure CLI,则还需要运行 az login,并使用拥有所需权限的帐户登录到 Azure。

使用 az network nic show-effective-route-table 获取网络接口的有效路由。 以下命令获取名为 vm-1445 的网络接口的有效路由,该网络接口位于名为 test-rg 的资源组中:

az network nic show-effective-route-table \
  --name vm-1445 \
  --resource-group test-rg

若要了解输出中返回的信息,请参阅路由概述。 仅当 VM 处于运行状态时,才返回输出。 如果已将多个网络接口附加到 VM,可以查看每个网络接口的有效路由。 由于每个网络接口可能位于不同的子网中,因此,每个网络接口可能有不同的有效路由。 如果仍然遇到通信问题,请参阅 更多诊断注意事项

如果知道 VM 名称而不是网络接口名称,请使用以下命令返回附加到 VM 的所有网络接口的 ID:

az vm show \
  --name vm-1 \
  --resource-group test-rg

解决问题

解决路由问题通常包括以下过程:

  • 添加自定义路由以替代 Azure 的默认路由之一。 了解如何添加自定义路由

  • 已更改或删除可能导致路由到不想要位置的自定义路由。 了解如何更改删除自定义路由。

  • 确保包含定义的任何自定义路由的路由表与网络接口所在的子网相关联。 了解如何将路由表关联到子网

  • 确保部署的设备(例如 Azure VPN 网关或网络虚拟设备)能够正常运行。 使用网络观察程序的 VPN 诊断功能来确定 Azure VPN 网关的任何问题。

如果仍然遇到通信问题,请参阅“注意事项”和“其他诊断”。

注意事项

排查通信问题时,请注意以下几点:

  • 路由使用最长的前缀匹配(LPM)来确定系统路由、BGP 和自定义路由的最佳路由。 如果多个路由共享相同的 LPM 匹配项,Azure 会根据 路由概述中的优先级顺序选择一个路由。 有效路由仅显示与 LPM 匹配的路由,以便更轻松地识别和排查影响 VM 通信的路由。

  • 如果自定义将流量定向到网络虚拟设备(NVA),并使用 虚拟设备 作为下一跃点类型,请确保启用 NVA 的 IP 转发;否则,会丢弃数据包。 了解如何 为网络接口启用 IP 转发 并将 NVA 的操作系统或应用程序配置为转发流量。

  • 如果创建到 0.0.0.0/0 的路由,则所有出站互联网流量将被路由到您指定的下一跳,例如 NVA 或 VPN 网关。 创建此类路由通常称为强制隧道传输。 使用从 Internet 到 VM 的 RDP 或 SSH 协议的远程连接可能无法使用此路由,具体取决于下一跃点处理流量的方式。 可以启用强制隧道:

    • 使用站点到站点 VPN 时,可通过创建下一跳类型为 VPN 网关 的路由。 详细了解如何配置强制隧道
    • 使用站点到站点 VPN 或 ExpressRoute 线路时,如果通过虚拟网络网关使用 BGP 通告 0.0.0.0/0(默认路由)。 详细了解如何将 BGP 与站点到站点 VPNExpressRoute 配合使用。
  • 要使虚拟网络对等连接流量正常工作,必须存在一个针对已对等连接虚拟网络前缀范围的系统路由,其下一跃点类型为 VNet Peering。 如果此类路由不存在,并且虚拟网络对等互连链接已 连接

  • 尽管 Azure 会将默认路由分配到每个 Azure 网络接口,但如果已将多个网络接口附加到 VM,则只会为主要网络接口或 VM 操作系统中的网关分配默认路由 (0.0.0.0/0)。 了解如何为附加到 WindowsLinux VM 的辅助网络接口创建默认路由。 详细了解主要和辅助网络接口

更多诊断

  • 若要运行快速测试来确定发往某个位置的流量的下一跃点类型,请使用 Azure 网络观察程序的下一跃点功能。 下一跳指示发往指定位置的流量的下一跳类型。

  • 如果没有路由导致 VM 网络通信失败,那么问题可能是由于在 VM 操作系统中运行的防火墙软件引起的。

  • 如果强制通过 VPN 网关或 NVA 将流量隧道传送 到本地设备,则可能无法从 Internet 连接到 VM,具体取决于设备的路由配置方式。 确认为设备配置的路由将流量路由到 VM 的公共或专用 IP 地址。

  • 使用网络观察程序的连接故障排除功能,来确定出站通信问题的路由、筛选和 OS 内部相关原因。

后续步骤