本文介绍如何通过查看虚拟机(VM)中网络接口的有效路由来诊断路由问题。 Azure 会自动为每个虚拟网络子网创建默认路由。 可以通过在路由表中定义自定义路由并将表与子网关联来替代这些默认路由。 网络接口的有效路由是 Azure 的默认路由、定义的自定义路由以及使用边界网关协议(BGP)通过 Azure VPN 网关从本地网络传播的任何路由的组合。 如果不熟悉虚拟网络、网络接口或路由,请参阅 虚拟网络概述、 网络接口和 路由概述。
你正在尝试连接到某个 VM,但连接失败。 若要确定为何无法连接到该 VM,可以使用 Azure 门户、PowerShell 或 Azure CLI 查看网络接口的有效路由。
以下步骤假设有一个要查看其有效路由的现有 VM。 如果没有 VM,请先部署 Linux 或 Windows VM 以完成本文中的任务。 本文中的示例适用于名为 vm-1 的 VM ,其中包含名为 vm-1445 的网络接口。 VM 和网络接口位于名为 test-rg 的资源组中,位于 中国东部 区域。 针对要诊断问题的 VM,请根据需要更改步骤中的值。
在 Azure 门户顶部的搜索框中,输入处于运行状态的 VM 的名称。 当 VM 名称显示在搜索结果中时,请选择它。
展开“ 网络 ”部分,然后选择“ 网络设置”。
若要选择接口,请选择其名称。
在网络接口中,展开 “帮助”。 选择 “有效路由”。
选择所需的网络接口以查看其有效路由。 每个接口可能属于不同的子网,从而导致唯一路由。 该图像中的示例显示 Azure 为每个子网创建的默认路由。 你的列表包括默认路由,也可能包括额外的路由。 路由可能来自虚拟网络对等互连或通过 Azure VPN 网关连接到本地网络等功能。 有关路由的详细信息,请参阅 虚拟网络流量路由。 如果有许多路由,请使用 “下载 ”选项将它们另存为 .csv 文件,以便更轻松地查看。
尽管上述步骤是通过 VM 查看有效路由,但也可以通过以下方式查看有效路由:
备注
建议使用 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。
可以通过从计算机运行 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 与站点到站点 VPN 或 ExpressRoute 配合使用。
要使虚拟网络对等互连流量正常工作,对等互连虚拟网络的前缀范围中必须存在下一跃点类型为“VNet 对等互连”的系统路由。 如果此类路由不存在,并且虚拟网络对等互连链接已 连接:
请等待几秒钟后重试。 如果这是一个新建的对等互连链接,有时需要花费较长的时间才能将路由传播到子网中的所有网络接口。 若要详细了解虚拟网络对等互连,请参阅虚拟网络对等互连概述和管理虚拟网络对等互连。
网络安全组规则可能会影响通信。 有关详细信息,请参阅诊断虚拟机网络流量筛选器问题。
尽管 Azure 会将默认路由分配到每个 Azure 网络接口,但如果已将多个网络接口附加到 VM,则只会为主要网络接口或 VM 操作系统中的网关分配默认路由 (0.0.0.0/0)。 了解如何为附加到 Windows 或 Linux VM 的辅助网络接口创建默认路由。 详细了解主要和辅助网络接口。
若要运行快速测试来确定发往某个位置的流量的下一跃点类型,请使用 Azure 网络观察程序的下一跃点功能。 下一跃点告知发往指定位置的流量的下一跃点类型是什么。
如果没有路由导致 VM 网络通信失败,那么问题可能是由于在 VM 操作系统中运行的防火墙软件引起的。
如果强制通过 VPN 网关或 NVA 将流量隧道传送 到本地设备,则可能无法从 Internet 连接到 VM,具体取决于设备的路由配置方式。 确认为设备配置的路由将流量路由到 VM 的公共或专用 IP 地址。
使用网络观察程序的连接故障排除功能,来确定出站通信问题的路由、筛选和 OS 内部相关原因。
了解路由表和路由的所有任务、属性和设置。