练习 - 通过 NVA 路由流量
在创建了网络虚拟设备 (NVA) 和虚拟机 (VM) 后,现在将通过 NVA 路由流量。
创建公共和专用虚拟机
接下来的步骤是将 VM 部署到公共子网和专用子网中。
打开 Cloud Shell 编辑器,创建名为“cloud-init.txt”的文件。
code cloud-init.txt
在文件中添加以下配置信息。 通过此配置,在创建新 VM 时会安装
inetutils-traceroute
包。 该包中包含稍后将在此练习中使用的traceroute
实用工具。#cloud-config package_upgrade: true packages: - inetutils-traceroute
按 Ctrl+S 保存文件,然后按 Ctrl+Q 关闭编辑器。
在 Cloud Shell 中,运行以下命令以创建公共 VM。 将
<password>
替换为 azureuser 帐户的合适密码。az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --vnet-name vnet \ --subnet publicsubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
运行以下命令以创建专用 VM。 将
<password>
替换为合适的密码。az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --vnet-name vnet \ --subnet privatesubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
运行以下 Linux
watch
命令以检查 VM 是否处于运行状态。watch
命令会定期运行az vm list
命令,使你可以监视 VM 进度。watch -d -n 5 "az vm list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --show-details \ --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \ --output table"
“ProvisioningState”值为“Succeeded”,且“PowerState”值为“VM running”表示部署成功。 在三个 VM 都运行后,即可进行下一步。 按 Ctrl-C 停止命令,然后继续练习。
运行以下命令,将公共 VM 的公共 IP 地址保存到名为
PUBLICIP
的变量。PUBLICIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PUBLICIP
运行以下命令,将专用 VM 的公共 IP 地址保存到名为
PRIVATEIP
的变量。PRIVATEIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PRIVATEIP
通过网络虚拟设备测试流量路由
最后的步骤是使用 Linux traceroute
实用工具显示流量的路由方式。 使用 ssh
命令在每台 VM 上运行 traceroute
命令。 第一个测试将显示从公共 VM 发送到专用 VM 的 ICMP 数据包所采用的路由。 第二个测试将显示从专用 VM 发送到公共 VM 的 ICMP 数据包所采用的路由。
运行以下命令以跟踪从公共到专用的路由。 在出现提示时输入之前指定的 azureuser 帐户的密码。
ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
如果收到错误消息
bash: traceroute: command not found
,请稍等片刻,然后重试该命令。 部署 VM 后,自动安装traceroute
可能需要一到两分钟的时间。 命令执行成功后,输出应如下所示:traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max 1 10.0.2.4 0.710ms 0.410ms 0.536ms 2 10.0.1.4 0.966ms 0.981ms 1.268ms Connection to 52.165.151.216 closed.
请注意,第一个跃点为路由到 10.0.2.4。 此地址是 nva 的专用 IP 地址。 第二个跃点为路由到专用地址 10.0.1.4。 在第一个练习中,已将此路由添加到路由表,并将该表链接到了 publicsubnet 子网。 因此,从公共到专用的所有流量目前都通过 NVA 进行路由。
运行以下命令以跟踪从专用到公共的路由。 在出现提示时,输入 azureuser 帐户的密码。
ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
应看到流量直接进入公共 (10.0.0.4) 而不是通过 NVA,如以下命令输出所示。
traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max 1 10.0.0.4 1.095ms 1.610ms 0.812ms Connection to 52.173.21.188 closed.
专用 VM 使用默认路由,并且流量直接在子网之间路由。
现在已配置了子网之间的路由,以便在流量到达专用子网之前通过 dmzsubnet 子网从公共 Internet 定向流量。 在 dmzsubnet 子网中,你已添加了充当 NVA 的 VM。 可以配置此 NVA 以检测潜在的恶意请求,并在它们到达预期目标之前进行阻止。