你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:通过路由表路由网络流量
默认情况下,Azure 会在虚拟网络中的所有子网之间路由流量。 可以创建自己的路由来覆盖 Azure 的默认路由。 自定义路由非常有用,例如,它可以让你通过网络虚拟设备 (NVA) 在子网之间路由流量。
本教程介绍如何执行下列操作:
- 创建虚拟网络和子网
- 创建用于流量路由的 NVA
- 将虚拟机 (VM) 部署到不同子网
- 创建路由表
- 创建路由
- 将路由表关联到子网
- 通过 NVA 将从一个子网的流量路由到另一个子网
先决条件
Azure Cloud Shell
Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。
若要启动 Azure Cloud Shell,请执行以下操作:
选项 |
示例/链接 |
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 |
|
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 |
|
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 |
|
若要使用 Azure Cloud Shell,请执行以下操作:
启动 Cloud Shell。
选择代码块(或命令块)上的“复制”按钮以复制代码或命令。
在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。
选择“Enter”运行代码或命令。
如果选择在本地安装和使用 PowerShell,则本文需要 Azure PowerShell 模块 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az
查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount
以创建与 Azure 的连接。
如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
- 本文需要 Azure CLI 2.0.28 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。
创建子网
本教程需要“外围网络”和“专用”子网。 “外围网络”子网是部署 NVA 的位置,而“专用”子网是部署要将流量路由到的虚拟机的位置。 subnet-1 是在前面的步骤中创建的子网。 对公共虚拟机使用 subnet-1。
创建虚拟网络和 Azure Bastion 主机
以下过程创建包含资源子网、Azure Bastion 子网和 Bastion 主机的虚拟网络:
在门户中,搜索并选择“虚拟网络”。
在“虚拟网络”页面上,选择“+ 创建”。
在“创建虚拟网络”的“基本信息”选项卡上,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“新建”。 输入“test-rg”作为名称。 选择“确定”。 |
实例详细信息 |
|
名称 |
输入“vnet-1”。 |
区域 |
选择“美国东部 2”。 |
选择“下一步”,转到“安全性”选项卡。
在“Azure Bastion”部分,选择“启用 Azure Bastion”。
Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP),通过使用其专用 IP 地址连接虚拟网络中的虚拟机。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关详细信息,请参阅什么是 Azure Bastion?。
注意
每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价和 SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
在“Azure Bastion”中,输入或选择以下信息:
设置 |
值 |
Azure Bastion 主机名 |
输入“堡垒”。 |
Azure Bastion 公共 IP 地址 |
选择“创建公共 IP 地址”。 在名称中输入 public-ip-bastion。 选择“确定”。 |
选择下一步,转到IP 地址选项卡。
在“子网”的地址空间框中,选择“默认”子网。
在编辑子网中,输入或选择以下信息:
设置 |
“值” |
子网用途 |
保留默认值“默认”。 |
名称 |
输入“subnet-1”。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.0.0.0/16”。 |
开始地址 |
保留默认值“10.0.0.0”。 |
大小 |
保留默认值“/24 (256 个地址)”。 |
选择“保存”。
在窗口底部选择“查看 + 创建”。 验证通过后,选择“创建”。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
在“虚拟网络”中,选择“vnet-1”。
在 vnet-1 中,从“设置”部分选择“子网”。
在虚拟网络的子网列表中,选择“子网”。
在“添加子网”中,输入或选择以下信息:
设置 |
“值” |
子网用途 |
保留默认值“默认”。 |
名称 |
输入 subnet-private。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.0.0.0/16”。 |
开始地址 |
输入 10.0.2.0。 |
大小 |
保留默认值“/24 (256 个地址)”。 |
选择 添加 。
选择“+ 子网”。
在“添加子网”中,输入或选择以下信息:
设置 |
“值” |
子网用途 |
保留默认值“默认”。 |
名称 |
输入“subnet-dmz”。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.0.0.0/16”。 |
开始地址 |
输入 10.0.3.0。 |
大小 |
保留默认值“/24 (256 个地址)”。 |
选择 添加 。
使用 New-AzResourceGroup 创建资源组。 以下示例为本文中创建的所有资源创建名为 test-rg 的资源组。
$rg = @{
ResourceGroupName = "test-rg"
Location = "EastUS2"
}
New-AzResourceGroup @rg
使用 New-AzVirtualNetwork 创建虚拟网络。 以下示例使用地址前缀“10.0.0.0/16”创建一个名为“vnet-1”的虚拟网络。
$vnet = @{
ResourceGroupName = "test-rg"
Location = "EastUS2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
使用 New-AzVirtualNetworkSubnetConfig 创建四个子网配置,以创建四个子网。 以下示例针对公共、专用、外围网络和 Azure Bastion 子网创建四个子网配置。
$subnetConfigPublicParams = @{
Name = "subnet-1"
AddressPrefix = "10.0.0.0/24"
VirtualNetwork = $virtualNetwork
}
$subnetConfigBastionParams = @{
Name = "AzureBastionSubnet"
AddressPrefix = "10.0.1.0/24"
VirtualNetwork = $virtualNetwork
}
$subnetConfigPrivateParams = @{
Name = "subnet-private"
AddressPrefix = "10.0.2.0/24"
VirtualNetwork = $virtualNetwork
}
$subnetConfigDmzParams = @{
Name = "subnet-dmz"
AddressPrefix = "10.0.3.0/24"
VirtualNetwork = $virtualNetwork
}
$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig @subnetConfigPublicParams
$subnetConfigBastion = Add-AzVirtualNetworkSubnetConfig @subnetConfigBastionParams
$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig @subnetConfigPrivateParams
$subnetConfigDmz = Add-AzVirtualNetworkSubnetConfig @subnetConfigDmzParams
使用 Set-AzVirtualNetwork 将子网配置写入虚拟网络,以便在虚拟网络中创建子网:
$virtualNetwork | Set-AzVirtualNetwork
创建 Azure Bastion
使用 New-AzPublicIpAddress 为 Azure Bastion 主机创建公共 IP 地址。 以下示例在 vnet-1 虚拟网络中创建名为 public-ip-bastion 的公共 IP 地址。
$publicIpParams = @{
ResourceGroupName = "test-rg"
Name = "public-ip-bastion"
Location = "EastUS2"
AllocationMethod = "Static"
Sku = "Standard"
}
New-AzPublicIpAddress @publicIpParams
使用 New-AzBastion 创建 Azure Bastion 主机。 以下示例在 vnet-1 虚拟网络的 AzureBastionSubnet 子网中创建名为 Bastion 的 Azure Bastion 主机。 Azure Bastion 用于安全连接 Azure 虚拟机,而无需将其公开到公共 Internet。
$bastionParams = @{
ResourceGroupName = "test-rg"
Name = "bastion"
VirtualNetworkName = "vnet-1"
PublicIpAddressName = "public-ip-bastion"
PublicIpAddressRgName = "test-rg"
VirtualNetworkRgName = "test-rg"
}
New-AzBastion @bastionParams -AsJob
首先使用 az group create 针对本文中创建的所有资源创建一个资源组。
# Create a resource group.
az group create \
--name test-rg \
--location eastus2
使用 az network vnet create 创建包含一个子网的虚拟网络。
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-1 \
--subnet-prefix 10.0.0.0/24
使用 az network vnet subnet create 再创建两个子网。
# Create a bastion subnet.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name AzureBastionSubnet \
--address-prefix 10.0.1.0/24
# Create a private subnet.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-private \
--address-prefix 10.0.2.0/24
# Create a DMZ subnet.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-dmz \
--address-prefix 10.0.3.0/24
创建 Azure Bastion
使用 az network public-ip create 为 Azure Bastion 主机创建公共 IP 地址。 以下示例在 vnet-1 虚拟网络中创建名为 public-ip-bastion 的公共 IP 地址。
az network public-ip create \
--resource-group test-rg \
--name public-ip-bastion \
--location eastus2 \
--allocation-method Static \
--sku Standard
使用 az network bastion create 创建 Azure Bastion 主机。 以下示例在 vnet-1 虚拟网络的 AzureBastionSubnet 子网中创建名为 Bastion 的 Azure Bastion 主机。 Azure Bastion 用于安全连接 Azure 虚拟机,而无需将其公开到公共 Internet。
az network bastion create \
--resource-group test-rg \
--name bastion \
--vnet-name vnet-1 \
--public-ip-address public-ip-bastion \
--location eastus2
--no-wait
创建 NVA 虚拟机
网络虚拟设备 (NVA) 是帮助提供网络功能(例如路由和防火墙优化)的虚拟机。 在本部分,使用 Ubuntu 24.04 虚拟机创建 NVA。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
虚拟机名称 |
输入 vm-nva。 |
区域 |
选择“(US)美国东部 2”。 |
可用性选项 |
选择“无需基础结构冗余”。 |
安全类型 |
选择“标准”。 |
映像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
VM 架构 |
保留默认值“x64”。 |
大小 |
选择一个大小。 |
管理员帐户 |
|
身份验证类型 |
选择密码。 |
用户名 |
输入用户名。 |
Password |
输入密码。 |
确认密码 |
重新输入密码。 |
入站端口规则 |
|
公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
设置 |
值 |
网络接口 |
|
虚拟网络 |
选择“vnet-1”。 |
子网 |
选择“subnet-dmz (10.0.3.0/24)”。 |
公共 IP |
选择无。 |
NIC 网络安全组 |
选择“高级”。 |
配置网络安全组 |
选择“新建”。 在“名称”中,输入 nsg-nva。 选择“确定”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
使用 New-AzVM 创建 VM。 以下示例创建名为 vm-nva 的 VM。
# Create a credential object
$cred = Get-Credential
# Define the VM parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "EastUS2"
Name = "vm-nva"
ImageName = "Canonical:ubuntu-24_04-lts:server-gen1:latest"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-dmz"
PublicIpAddressName = $null # No public IP address
}
# Create the VM
New-AzVM @vmParams
使用 az vm create 在 subnet-dmz 子网中创建要用作 NVA 的 VM。
az vm create \
--resource-group test-rg \
--name vm-nva \
--image Ubuntu2204 \
--public-ip-address "" \
--subnet subnet-dmz \
--vnet-name vnet-1 \
--admin-username azureuser \
--authentication-type password
创建 VM 需要几分钟时间。 在 Azure 完成创建 VM 并返回有关 VM 的输出之前,请不要继续下一步。
创建公共和专用虚拟机
在 vnet-1 虚拟网络中创建两个虚拟机。 一个虚拟机位于 subnet-1 子网中,另一个虚拟机位于 subnet-private 子网中。 对两个虚拟机使用相同的虚拟机映像。
创建公共虚拟机
公共虚拟机用于模拟公共 Internet 中的计算机。 公共和专用虚拟机用于测试通过 NVA 虚拟机的网络流量路由。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
虚拟机名称 |
输入“vm-public”。 |
区域 |
选择“(US)美国东部 2”。 |
可用性选项 |
选择“无需基础结构冗余”。 |
安全类型 |
选择“标准”。 |
映像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
VM 架构 |
保留默认值“x64”。 |
大小 |
选择一个大小。 |
管理员帐户 |
|
身份验证类型 |
选择密码。 |
用户名 |
输入用户名。 |
Password |
输入密码。 |
确认密码 |
重新输入密码。 |
入站端口规则 |
|
公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
设置 |
值 |
网络接口 |
|
虚拟网络 |
选择“vnet-1”。 |
子网 |
选择“subnet-1 (10.0.0.0/24)”。 |
公共 IP |
选择无。 |
NIC 网络安全组 |
选择“无”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
创建专用虚拟机
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
虚拟机名称 |
输入vm-private。 |
区域 |
选择“(US)美国东部 2”。 |
可用性选项 |
选择“无需基础结构冗余”。 |
安全类型 |
选择“标准”。 |
映像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
VM 架构 |
保留默认值“x64”。 |
大小 |
选择一个大小。 |
管理员帐户 |
|
身份验证类型 |
选择密码。 |
用户名 |
输入用户名。 |
Password |
输入密码。 |
确认密码 |
重新输入密码。 |
入站端口规则 |
|
公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
设置 |
值 |
网络接口 |
|
虚拟网络 |
选择“vnet-1”。 |
子网 |
选择“subnet-private (10.0.2.0/24)”。 |
公共 IP |
选择无。 |
NIC 网络安全组 |
选择“无”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
使用 New-AzVM 在 subnet-1 子网中创建 VM。 以下示例在 vnet-1 虚拟网络的 subnet-public 子网中创建名为 vm-public 的 VM。
# Create a credential object
$cred = Get-Credential
# Define the VM parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "EastUS2"
Name = "vm-public"
ImageName = "Canonical:ubuntu-24_04-lts:server-gen1:latest"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
PublicIpAddressName = $null # No public IP address
}
# Create the VM
New-AzVM @vmParams
在 subnet-private 子网中创建一个 VM。
# Create a credential object
$cred = Get-Credential
# Define the VM parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "EastUS2"
Name = "vm-private"
ImageName = "Canonical:ubuntu-24_04-lts:server-gen1:latest"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-private"
PublicIpAddressName = $null # No public IP address
}
# Create the VM
New-AzVM @vmParams
创建 VM 需要几分钟时间。 请等到 VM 创建完毕且 Azure 向 PowerShell 返回了输出之后再继续下一步。
使用 az vm create 在 subnet-1 子网中创建 VM。 --no-wait
参数支持 Azure 在后台中执行命令,因此可以继续执行下一个命令。
az vm create \
--resource-group test-rg \
--name vm-public \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--public-ip-address "" \
--admin-username azureuser \
--authentication-type password \
--no-wait
在 subnet-private 子网中创建一个 VM。
az vm create \
--resource-group test-rg \
--name vm-private \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-private \
--public-ip-address "" \
--admin-username azureuser \
--authentication-type password
启用 IP 转发
若要通过 NVA 路由流量,请在 Azure 中和 vm-nva 的操作系统中启用 IP 转发。 启用 IP 转发后,vm-nva 收到的任何发往不同 IP 地址的流量都不会被丢弃,而是会被转发到正确的目标。
在 Azure 中启用 IP 转发
在本部分,请为 vm-nva 虚拟机的网络接口启用 IP 转发。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
在“虚拟机”中,选择“vm-nva”。
在 vm-nva 中,展开“网络”,然后选择“网络设置”。
选择“网络接口:”旁边的接口名称。 该名称以 vm-nva 开头,为接口分配了一个随机编号。 此示例中的接口名称为 vm-nva313。
在网络接口概述页上的“设置”部分,选择“IP 配置”。
在“IP 配置”中,选中“启用 IP 转发”旁边的框。
选择“应用”。
使用 Set-AzNetworkInterface 为 vm-nva 虚拟机的网络接口启用 IP 转发。 以下示例为名为 vm-nva313 的网络接口启用 IP 转发。
$nicParams = @{
Name = "vm-nva"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @nicParams
$nic.EnableIPForwarding = $true
Set-AzNetworkInterface -NetworkInterface $nic
使用 az network nic update 为 vm-nva 虚拟机的网络接口启用 IP 转发。 以下示例为名为 vm-nvaVMNic 的网络接口启用 IP 转发。
az network nic update \
--name vm-nvaVMNic \
--resource-group test-rg \
--ip-forwarding true
在操作系统中启用 IP 转发
在本部分,请为 vm-nva 虚拟机的操作系统启用 IP 转发,以转发网络流量。 使用 Azure Bastion 服务连接到 vm-nva 虚拟机。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
在“虚拟机”中,选择“vm-nva”。
在“概述”部分中选择“连接”,然后选择“通过 Bastion 连接”。
输入创建虚拟机时输入的用户名和密码。
选择“连接” 。
在虚拟机的提示符处输入以下信息以启用 IP 转发:
sudo vim /etc/sysctl.conf
在 Vim 编辑器中,删除 net.ipv4.ip_forward=1
行中的 #
:
按 Insert 键。
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
按 Esc 键。
输入 :wq
,然后按 Enter。
关闭 Bastion 会话。
重启虚拟机。
创建路由表
在本部分,请创建一个路由表来定义通过 NVA 虚拟机的流量的路由。 该路由表与部署了 vm-public 虚拟机的 subnet-1 子网关联。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择“+ 新建”。
在“创建路由表”中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
区域 |
选择“美国东部 2”。 |
名称 |
输入“route-table-public”。 |
传播网关路由 |
保留默认值“是”。 |
选择“查看 + 创建”。
选择“创建”。
创建路由
在本部分,请在前面步骤中创建的路由表中创建路由。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择“route-table-public”。
展开“设置”,然后选择“路由”。
在“路由”中选择“+ 添加”。
在“添加路由”中,输入或选择以下信息:
设置 |
值 |
路由名称 |
输入“to-private-subnet”。 |
目标类型 |
选择“IP 地址”。 |
目标 IP 地址/CIDR 范围 |
输入 10.0.2.0/24。 |
下一跃点类型 |
选择“虚拟设备”。 |
下一跃点地址 |
输入“10.0.3.4”。 这是你在前面的步骤中创建的 vm-nva 的 IP 地址。 |
选择 添加 。
在“设置”中选择“子网”。
选择“+ 关联”。
在“关联子网”中,输入或选择以下信息:
设置 |
值 |
虚拟网络 |
选择 vnet-1 (test-rg)。 |
子网 |
选择 subnet-1。 |
选择“确定”。
使用 New-AzRouteTable 创建路由表。 以下示例创建名为 route-table-public 的路由表。
$routeTableParams = @{
Name = 'route-table-public'
ResourceGroupName = 'test-rg'
Location = 'eastus2'
}
$routeTablePublic = New-AzRouteTable @routeTableParams
使用 Get-AzRouteTable 检索路由表对象以创建路由,使用 Add-AzRouteConfig 创建路由,然后使用 Set-AzRouteTable 将路由配置写入路由表。
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-public"
}
$routeConfigParams = @{
Name = "to-private-subnet"
AddressPrefix = "10.0.2.0/24"
NextHopType = "VirtualAppliance"
NextHopIpAddress = "10.0.3.4"
}
$routeTable = Get-AzRouteTable @routeTableParams
$routeTable | Add-AzRouteConfig @routeConfigParams | Set-AzRouteTable
使用 Set-AzVirtualNetworkSubnetConfig 将路由表与 subnet-1 子网相关联。 以下示例将 route-table-public 路由表与 subnet-1 子网相关联。
$vnetParams = @{
Name = 'vnet-1'
ResourceGroupName = 'test-rg'
}
$virtualNetwork = Get-AzVirtualNetwork @vnetParams
$subnetParams = @{
VirtualNetwork = $virtualNetwork
Name = 'subnet-1'
AddressPrefix = '10.0.0.0/24'
RouteTable = $routeTablePublic
}
Set-AzVirtualNetworkSubnetConfig @subnetParams | Set-AzVirtualNetwork
使用 az network route-table create 创建路由表。 以下示例创建名为 route-table-public 的路由表。
# Create a route table
az network route-table create \
--resource-group test-rg \
--name route-table-public
使用 az network route-table route create 在路由表中创建路由。
az network route-table route create \
--name to-private-subnet \
--resource-group test-rg \
--route-table-name route-table-public \
--address-prefix 10.0.2.0/24 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.3.4
使用 az network vnet subnet update 将 route-table-subnet-public 路由表关联到 subnet-1 子网。
az network vnet subnet update \
--vnet-name vnet-1 \
--name subnet-1 \
--resource-group test-rg \
--route-table route-table-public
测试网络流量的路由
测试从 vm-public 到 vm-private 的网络流量的路由。 测试从 vm-private 到 vm-public 的网络流量的路由。
测试从 vm-public 到 vm-private 的网络流量
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
在“虚拟机”中,选择“vm-public”。
在“概述”部分中选择“连接”,然后选择“通过 Bastion 连接”。
输入创建虚拟机时输入的用户名和密码。
选择“连接” 。
在提示符中,输入以下命令来跟踪从 vm-public 到 vm-private 的网络流量的路由:
tracepath vm-private
其响应类似于如下示例:
azureuser@vm-public:~$ tracepath vm-private
1?: [LOCALHOST] pmtu 1500
1: vm-nva.internal.cloudapp.net 1.766ms
1: vm-nva.internal.cloudapp.net 1.259ms
2: vm-private.internal.cloudapp.net 2.202ms reached
Resume: pmtu 1500 hops 2 back 1
可以看到,对于从 vm-public 到 vm-private 的 tracepath
ICMP 流量,上述响应中有两个跃点。 第一个跃点为 vm-nva。 第二个跃点是目标 vm-private。
Azure 通过 NVA 发送来自 subnet-1 的流量,而不是直接发送到 subnet-private,原因是你之前已将 to-private-subnet 路由添加到 route-table-public,并将其关联到了 subnet-1。
关闭 Bastion 会话。
测试从 vm-private 到 vm-public 的网络流量
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
在“虚拟机”中,选择“vm-private”。
在“概述”部分中选择“连接”,然后选择“通过 Bastion 连接”。
输入创建虚拟机时输入的用户名和密码。
选择“连接” 。
在提示符中,输入以下命令来跟踪从 vm-private 到 vm-public 的网络流量的路由:
tracepath vm-public
其响应类似于如下示例:
azureuser@vm-private:~$ tracepath vm-public
1?: [LOCALHOST] pmtu 1500
1: vm-public.internal.cloudapp.net 2.584ms reached
1: vm-public.internal.cloudapp.net 2.147ms reached
Resume: pmtu 1500 hops 1 back 2
可以看到上述响应中有一个跃点,即目标 vm-public。
Azure 将流量直接从 subnet-private 发送到了 subnet-1。 默认情况下,Azure 直接在子网之间路由流量。
关闭 Bastion 会话。
使用完创建的资源之后,可以删除资源组及其所有资源。
在 Azure 门户中,搜索并选择“资源组”。
在“资源组”页上,选择“test-rg”资源组。
在“test-rg”页上,选择“删除资源组”。
在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”。
如果不再需要资源组及其包含的所有资源,请使用 Remove-AzResourcegroup 将其删除。
$rgParams = @{
Name = "test-rg"
}
Remove-AzResourceGroup @rgParams -Force
如果不再需要资源组及其包含的所有资源,可以使用 az group delete 将其删除。
az group delete \
--name test-rg \
--yes \
--no-wait
后续步骤
在本教程中,你将了解:
可以从 Azure 市场部署不同的预配置 NVA,其中提供了许多有用的网络功能。
若要了解有关路由的详细信息,请参阅路由概述和管理路由表。
若要了解如何通过虚拟网络服务终结点限制对 PaaS 资源的网络访问,请继续学习下一教程。