使用 Azure CLI 诊断虚拟机网络路由问题
本文介绍如何使用 Azure 网络观察程序下一个跃点工具来排查和诊断 VM 路由问题,从而阻止它与其他资源正确通信。
先决条件
具有活动订阅的 Azure 帐户。 创建试用版订阅。
Azure CLI。
可以在本地安装 Azure CLI 以运行命令。 本文需要 Azure CLI 2.0 或更高版本。 运行 az --version 命令查找安装的版本。 如果在本地运行 Azure CLI,请使用 az login 命令登录到 Azure。
创建虚拟机
在创建 VM 之前,必须创建该 VM 所属的资源组。 使用 az group create 创建资源组。 以下示例在“chinaeast”位置创建名为“myResourceGroup”的资源组:
az group create --name myResourceGroup --location chinaeast
使用 az vm create 创建 VM。 如果默认密钥位置中尚不存在 SSH 密钥,该命令会创建它们。 若要使用特定的一组密钥,请使用 --ssh-key-value
选项。 以下示例创建名为 myVm 的 VM :
az vm create \
--resource-group myResourceGroup \
--name myVm \
--image Ubuntu2204 \
--generate-ssh-keys
创建 VM 需要几分钟时间。 在创建好 VM 且 Azure CLI 返回输出之前,请勿继续执行剩余的步骤。
测试网络通信
若要通过网络观察程序测试网络通信,必须先在要测试的 VM 所在区域中启用网络观察程序,然后使用网络观察程序的“下一个跃点”功能来测试通信。
启用网络观察程序
如果已在“中国东部”区域启用网络观察程序,请跳到使用下一跃点。 使用 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”为“无”,“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”更改为“虚拟网络”。 此时进行检查会将“nextHopType”显示为“虚拟网络” 。
清理资源
如果不再需要资源组及其包含的所有资源,可以使用 az group delete 将其删除:
az group delete --name myResourceGroup --yes
后续步骤
本文介绍了如何创建 VM 并根据该 VM 诊断网络路由问题。 同时说明了 Azure 可以创建多个默认路由,并且还测试了到两个不同目标的路由。 详细了解 Azure 中的路由,以及如何创建自定义路由。
对于出站 VM 连接,还可以使用网络观察程序的连接故障排除功能来确定延迟、VM 和终结点之间获得允许的和被拒绝的网络流量。 可以使用网络观察程序的连接监视器功能监视 VM 和终结点(例如 IP 地址或 URL)之间在某段时间的通信情况。 有关详细信息,请参阅监视网络连接。