你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 PowerShell 诊断虚拟机网络路由问题

本文介绍如何使用 Azure 网络观察程序下一个跃点工具来排查和诊断虚拟机 (VM) 路由问题,从而阻止它与其他资源正确通信。

先决条件

  • 具有活动订阅的 Azure 帐户。 免费创建帐户

  • Azure Cloud Shell 或 Azure PowerShell。

    本文中的步骤在 Azure Cloud Shell 中以交互方式运行 Azure PowerShell cmdlet 命令。 若要在 Cloud Shell 中运行 cmdlet,请选择代码块右上角的“打开 Cloud Shell”。 选择“复制”以复制代码,并将其粘贴到 Cloud Shell 以运行。 也可以从 Azure 门户中运行 Cloud Shell。

    也可以在本地安装 Azure PowerShell 以运行 cmdlet。 若要查找已安装的版本,请运行 Get-Module -ListAvailable Az。 如果在本地运行 PowerShell,请使用 Connect-AzAccount cmdlet 登录到 Azure。

创建虚拟机

在创建 VM 之前,必须创建该 VM 所属的资源组。 使用 New-AzResourceGroup 创建资源组。 以下示例在“eastus”位置创建名为“myResourceGroup”的资源组。

New-AzResourceGroup -Name myResourceGroup -Location EastUS

使用 New-AzVM 创建 VM。 运行此步骤时,会提示输入凭据。 输入的值将配置为用于 VM 的用户名和密码。

$vM = New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Name "myVm" `
    -Location "East US"

创建 VM 需要几分钟时间。 在创建好 VM 且 PowerShell 返回输出之前,请勿继续执行剩余的步骤。

测试网络通信

若要通过网络观察程序测试网络通信,必须先在要测试的 VM 所在区域中启用网络观察程序,然后使用网络观察程序的“下一个跃点”功能来测试通信。

启用网络观察程序

如果已在美国东部区域启用了网络观察程序,请使用 Get-AzNetworkWatcher 来检索网络观察程序。 以下示例检索 NetworkWatcherRG 资源组中名为 NetworkWatcher_eastus 的现有网络观察程序:

$networkWatcher = Get-AzNetworkWatcher `
  -Name NetworkWatcher_eastus `
  -ResourceGroupName NetworkWatcherRG

如果还没有在美国东部区域启用网络观察程序,请使用 New-AzNetworkWatcher 在美国东部区域创建网络观察程序:

$networkWatcher = New-AzNetworkWatcher `
  -Name "NetworkWatcher_eastus" `
  -ResourceGroupName "NetworkWatcherRG" `
  -Location "East US"

使用下一个跃点

Azure 自动创建到默认目标的路由。 可以创建自定义路由来覆盖默认路由。 有时,自定义路由可能会导致通信故障。 要测试来自 VM 的路由,请使用 Get-AzNetworkWatcherNextHop 命令确定流量发送到特定地址时的下一个路由跃点。

测试从 VM 发往 www.bing.com 的某个 IP 地址的出站通信:

Get-AzNetworkWatcherNextHop `
  -NetworkWatcher $networkWatcher `
  -TargetVirtualMachineId $VM.Id `
  -SourceIPAddress 192.168.1.4 `
  -DestinationIPAddress 13.107.21.200

数秒钟后,输出结果指示 NextHopType 为“Internet” ,RouteTableId 为“系统路由” 。 此结果指示存在通往目标的有效路由。

测试从 VM 发往 172.31.0.100 的出站通信:

Get-AzNetworkWatcherNextHop `
  -NetworkWatcher $networkWatcher `
  -TargetVirtualMachineId $VM.Id `
  -SourceIPAddress 192.168.1.4 `
  -DestinationIPAddress 172.31.0.100

输出结果指示“NextHopType”为“无”,“RouteTableId”仍为“系统路由”。 此结果指示,虽然存在有效的通往目标的系统路由,但是没有将流量路由到目标的下一跃点。

查看路由详细信息

若要进一步分析路由情况,请使用 Get-AzEffectiveRouteTable 命令查看网络接口的有效路由:

Get-AzEffectiveRouteTable `
  -NetworkInterfaceName myVm `
  -ResourceGroupName myResourceGroup |
  Format-table

将返回包含以下文本的输出:

Name State  Source  AddressPrefix           NextHopType NextHopIpAddress
---- -----  ------  -------------           ----------- ----------------
     Active Default {192.168.0.0/16}        VnetLocal   {}              
     Active Default {0.0.0.0/0}             Internet    {}              
     Active Default {10.0.0.0/8}            None        {}              
     Active Default {100.64.0.0/10}         None        {}              
     Active Default {172.16.0.0/12}         None        {}              

正如在之前输出中所看到的,带有 0.0.0.0/0 的 AddressPrefix 的路由会将未指定给地址的所有流量路由到以 Internet 的下一个跃点为前缀的其他路由地址内。 同时还可在输出结果中看到,虽然有一个到 172.16.0.0/12 前缀的默认路由(其中包括地址 172.31.0.100),但“nextHopType”为“无”。 Azure 会创建到 172.16.0.0/12 的默认路由,但不会无故指定下一个跃点类型。 在特定情况下,例如在已将 172.16.0.0/12 地址范围添加到虚拟网络的地址空间的情况下,Azure 会将路由的“nextHopType”更改为“虚拟网络”。 此时进行检查会将“nextHopType”显示为“虚拟网络” 。

清理资源

如果不再需要资源组及其包含的所有资源,请使用 Remove-AzResourceGroup 将其删除:

Remove-AzResourceGroup -Name myResourceGroup -Force

后续步骤

本文介绍了如何创建 VM 并根据该 VM 诊断网络路由问题。 同时说明了 Azure 可以创建多个默认路由,并且还测试了到两个不同目标的路由。 详细了解 Azure 中的路由,以及如何创建自定义路由

对于出站 VM 连接,还可以使用网络观察程序的连接故障排除功能来确定延迟、VM 和终结点之间获得允许的和被拒绝的网络流量。 可以使用网络观察程序的连接监视器功能监视 VM 和终结点(例如 IP 地址或 URL)之间在某段时间的通信情况。 有关详细信息,请参阅监视网络连接