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

本文介绍如何使用 Azure Network Watcher next hop 工具来排查和诊断 VM 路由问题,防止它与其他资源正确通信。

先决条件

  • 具有活动订阅的Azure帐户。 创建试用版订阅

  • Azure CLI。

    可以在本地安装Azure CLI来运行命令。 本文需要 Azure CLI 2.0 或更高版本。 运行 az --version 命令查找安装的版本。 如果在本地运行Azure CLI,请使用 az login 命令登录到Azure。

创建资源组

使用 az group create 创建资源组。 以下示例在“chinaeast”位置创建名为“myResourceGroup”的资源组:

az group create --name myResourceGroup --location chinaeast

创建网络安全组

使用 az network nsg create 创建网络安全组。 网络安全组中的默认规则阻止来自 Internet 的所有入站访问。

az network nsg create \
  --resource-group myResourceGroup \
  --name myNSG

注释

网络安全组的默认规则阻止来自 Internet 的所有入站访问,包括 SSH。 若要连接到虚拟机,请使用Azure Bastion。 有关详细信息,请参阅 Quickstart:使用默认设置部署Azure Bastion

创建虚拟机

使用 az vm create 创建 VM。 以下示例创建名为 myVm 的 VM。 如果默认密钥位置中尚不存在 SSH 密钥,该命令会创建它们。

az vm create \
  --resource-group myResourceGroup \
  --name myVm \
  --image Ubuntu2204 \
  --nsg myNSG \
  --public-ip-address "" \
  --generate-ssh-keys

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

测试网络通信

若要测试与Network Watcher的网络通信,必须先在要测试的 VM 所在的区域中启用network watcher,然后使用Network Watcher的下一跃点功能测试通信。

启用网络观察程序

如果已在中国东部区域启用了网络观察程序,请跳到 “使用下一跃点”。 使用 az network watcher configure 命令在“中国东部”区域中创建网络观察程序:

az network watcher configure \
  --resource-group NetworkWatcherRG \
  --locations chinaeast \
  --enabled

使用下一个跃点

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

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

az network watcher show-next-hop \
  --dest-ip 13.107.21.200 \
  --resource-group myResourceGroup \
  --source-ip 10.0.0.4 \
  --vm myVm \
  --nic myVmVMNic \
  --out table

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

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

az network watcher show-next-hop \
  --dest-ip 172.31.0.100 \
  --resource-group myResourceGroup \
  --source-ip 10.0.0.4 \
  --vm myVm \
  --nic myVmVMNic \
  --out table

输出结果告知“nextHopType”为“None”,同时“routeTableId”也是“系统路由”。 此结果表明,虽然存在有效的系统路由通往目标,但没有可将流量路由到目标的下一跃点。

查看路由详细信息

若要进一步分析路由情况,请使用 az network nic show-effective-route-table 命令查看网络接口的有效路由:

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

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

{
  "additionalProperties": {
    "disableBgpRoutePropagation": false
  },
  "addressPrefix": [
    "0.0.0.0/0"
  ],
  "name": null,
  "nextHopIpAddress": [],
  "nextHopType": "Internet",
  "source": "Default",
  "state": "Active"
},

使用 az network watcher show-next-hop 命令在使用下一跃点 环节中测试发送到 13.107.21.200 的出站通信时,地址前缀为 0.0.0.0/0** 的路由用于将流量路由到该地址,因为输出中没有其他路由包含该地址。 默认情况下,未在另一路由的地址前缀中指定的所有地址都会路由到 Internet。

但是,使用 az network watcher show-next-hop 命令测试发送到 172.31.0.100 的出站通信时,结果显示没有下一跃点类型。 返回的输出中包含以下文本:

{
  "additionalProperties": {
    "disableBgpRoutePropagation": false
      },
  "addressPrefix": [
    "172.16.0.0/12"
  ],
  "name": null,
  "nextHopIpAddress": [],
  "nextHopType": "None",
  "source": "Default",
  "state": "Active"
},

az network watcher nic show-effective-route-table 命令的输出结果中可以看到,虽然有一个到 172.16.0.0/12 前缀的默认路由(其中包括地址 172.31.0.100),但“nextHopType”为“无” 。 Azure创建到 172.16.0.0/12 的默认路由,但在有原因之前不会指定下一跳类型。 例如,如果将 172.16.0.0/12 地址范围添加到虚拟网络的地址空间,Azure将 nextHopType 更改为路由的 Virtual network。 此时进行检查会将“nextHopType”显示为“虚拟网络” 。

清理资源

如果不再需要资源组及其包含的所有资源,可以使用 az group delete 将其删除:

az group delete --name myResourceGroup --yes

后续步骤

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

对于出站 VM 连接,还可以使用 Network Watcher 的 连接故障排除功能来确定 VM 与终结点之间的延迟和允许和拒绝的网络流量。 可以使用 Network Watcher 连接监视器功能监视 VM 与终结点(如 IP 地址或 URL)之间的通信情况变化。 有关详细信息,请参阅监视网络连接