默认情况下,Azure 会在虚拟网络中的所有子网之间路由流量。 可以创建自己的路由来覆盖 Azure 的默认路由。 自定义路由非常有用,例如,它可以让你通过网络虚拟设备 (NVA) 在子网之间路由流量。
本教程介绍如何执行下列操作:
- 创建虚拟网络和子网
- 创建用于流量路由的 NVA
- 将虚拟机 (VM) 部署到不同子网
- 创建路由表
- 创建路由
- 将路由表关联到子网
- 通过 NVA 将从一个子网的流量路由到另一个子网
先决条件
- 具有活动订阅的 Azure 帐户。 可以创建帐户。
- 具有活动订阅的 Azure 帐户。 可以创建帐户。
如果选择在本地安装和使用 PowerShell,则本文需要 Azure PowerShell 模块 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount -Environment AzureChinaCloud 以创建与 Azure 的连接。
如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅。
可以使用本地 Azure CLI。
- 本文需要 Azure CLI 2.0.28 或更高版本。
创建子网
本教程需要 DMZ 和专用子网。
外围网络子网用于部署 NVA,专用子网用于部署希望将流量路由到的专用虚拟机。 在关系图中, subnet-1 是用于公共虚拟机 的公共 子网。
创建资源组
登录到 Azure 门户。
在门户顶部的搜索框中输入“资源组”。 在搜索结果中选择“资源组”。
选择“+ 新建”。
在“创建资源组的”基本信息“选项卡中,输入或选择以下信息:
| 设置 |
值 |
| 订阅 |
选择订阅。 |
| 资源组 |
输入 test-rg。 |
| 区域 |
选择“中国北部 3”。 |
选择“查看 + 创建”。
选择创建。
创建虚拟网络
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在创建虚拟网络的基本信息选项卡上输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 名称 |
输入“vnet-1”。 |
| 区域 |
选择“中国北部 3”。 |
选择“下一步”,转到“安全性”选项卡。
选择下一步,转到IP 地址选项卡。
在“子网”的地址空间框中,选择“默认”子网。
在编辑子网中,输入或选择以下信息:
| 设置 |
值 |
|
子网详细信息 |
|
| 子网模板 |
保留默认值“默认”。 |
| 名称 |
输入“subnet-1”。 |
| 起始地址 |
保留默认值“10.0.0.0”。 |
| 子网大小 |
保留默认值“/24 (256 个地址)”。 |
选择“保存”。
选择 + 添加子网。
在“添加子网”中,输入或选择以下信息:
| 设置 |
值 |
|
子网详细信息 |
|
| 子网模板 |
保留默认值“默认”。 |
| 名称 |
输入 subnet-private。 |
| 起始地址 |
输入10.0.2.0。 |
| 子网大小 |
保留默认值“/24 (256 个地址)”。 |
选择 添加 。
选择 + 添加子网。
在“添加子网”中,输入或选择以下信息:
| 设置 |
值 |
|
子网详细信息 |
|
| 子网模板 |
保留默认值“默认”。 |
| 名称 |
输入subnet-dmz。 |
| 起始地址 |
输入 10.0.3.0。 |
| 子网大小 |
保留默认值“/24 (256 个地址)”。 |
选择 添加 。
选择屏幕底部的“查看 + 创建”,然后在验证通过时选择“创建”。
部署 Azure Bastion
Azure Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP),通过使用其专用 IP 地址连接虚拟网络中的虚拟机。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Azure Bastion 的详细信息,请参阅 Azure Bastion。
注意事项
每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价和 SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
在门户顶部的搜索框中,输入“堡垒”。 在搜索结果中选择 Bastions 。
选择“+ 新建”。
在“创建 Bastion”的“基本信息”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 名称 |
输入堡垒。 |
| 区域 |
选择“中国北部 3”。 |
| 层 |
选择 “开发人员”。 |
|
配置虚拟网络 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
自动创建的 AzureBastionSubnet 具有 /26 或更大的地址空间。 |
选择“查看 + 创建”。
选择创建。
使用 New-AzResourceGroup 创建资源组。 以下示例为本文中创建的所有资源创建名为 test-rg 的资源组。
$rg = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
}
New-AzResourceGroup @rg
使用 New-AzVirtualNetwork 创建虚拟网络。 以下示例使用地址前缀“10.0.0.0/16”创建一个名为“vnet-1”的虚拟网络。
$vnet = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
使用 New-AzVirtualNetworkSubnetConfig 创建四个子网配置,以创建四个子网。 以下示例为公共、私有、DMZ(外围网络)和 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 = "chinanorth3"
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"
Sku = "Basic"
}
New-AzBastion @bastionParams -AsJob
首先使用 az group create 针对本文中创建的所有资源创建一个资源组。
# Create a resource group.
az group create \
--name test-rg \
--location chinanorth3
使用 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 chinanorth3 \
--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 chinanorth3
--sku Basic \
--no-wait
创建 NVA 虚拟机
网络虚拟设备 (NVA) 是帮助提供网络功能(例如路由和防火墙优化)的虚拟机。 在本部分,使用 Ubuntu 24.04 虚拟机创建 NVA。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
点击“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入 vm-nva。 |
| 区域 |
选择“(亚洲)中国北部 3”。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
选择“标准”。 |
| 图像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
| VM 架构 |
保留默认值“x64”。 |
| 大小 |
选择一个大小。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择“SSH 公钥”。 |
| 用户名 |
输入用户名。 |
| SSH 公钥源 |
选择“生成新密钥对”。 |
| 密钥对名称 |
输入 vm-nva-key。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
| 设置 |
值 |
|
网络接口 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“subnet-dmz (10.0.3.0/24)”。 |
| 公共 IP |
选择“无”。 |
| NIC 网络安全组 |
选择“高级”。 |
| 配置网络安全组 |
选择“新建”。
在“名称”中,输入 nsg-nva。
选择“确定”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
使用 New-AzVM 创建虚拟机。 以下示例创建名为 vm-nva 的虚拟机。
# Create a credential object
$cred = Get-Credential
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vm-nva"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-dmz"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-nva-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
使用 az vm create 创建要用作 subnet-dmz 子网中的 NVA 的虚拟机。
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 \
--generate-ssh-keys
创建虚拟机需花费几分钟的时间。 在 Azure 完成创建虚拟机并返回虚拟机的输出之前,请不要继续执行下一步。
创建公共和专用虚拟机
在 vnet-1 虚拟网络中创建两个虚拟机。 一个虚拟机位于 子网 1 子网中,另一个虚拟机位于 子网专用 子网中。 对两个虚拟机使用相同的虚拟机映像。
创建公共虚拟机
公共虚拟机用于模拟公共 Internet 中的计算机。 公共和专用虚拟机用于测试通过 NVA 虚拟机的网络流量路由。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
点击“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入“vm-public”。 |
| 区域 |
选择“(亚洲)中国北部 3”。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
选择“标准”。 |
| 图像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
| VM 架构 |
保留默认值“x64”。 |
| 大小 |
选择一个大小。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择“SSH 公钥”。 |
| 用户名 |
输入用户名。 |
| SSH 公钥源 |
选择“生成新密钥对”。 |
| 密钥对名称 |
输入 vm-public-key。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
| 设置 |
值 |
|
网络接口 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“subnet-1 (10.0.0.0/24)”。 |
| 公共 IP |
选择“无”。 |
| NIC 网络安全组 |
选择“无”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
创建专用虚拟机
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
点击“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入vm-private。 |
| 区域 |
选择“(亚洲)中国北部 3”。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
选择“标准”。 |
| 图像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
| VM 架构 |
保留默认值“x64”。 |
| 大小 |
选择一个大小。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择“SSH 公钥”。 |
| 用户名 |
输入用户名。 |
| SSH 公钥源 |
选择“生成新密钥对”。 |
| 密钥对名称 |
输入 vm-private-key。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
| 设置 |
值 |
|
网络接口 |
|
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“subnet-private (10.0.2.0/24)”。 |
| 公共 IP |
选择“无”。 |
| NIC 网络安全组 |
选择“无”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
使用 New-AzVM 在 subnet-1 子网中创建虚拟机。 以下示例在 vnet-1 虚拟网络的 subnet-public 子网中创建名为 vm-public 的虚拟机。
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vm-public"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-1"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-public-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
在 子网专用 子网中创建虚拟机。
# Define the virtual machine parameters
$vmParams = @{
ResourceGroupName = "test-rg"
Location = "ChinaNorth3"
Name = "vm-private"
Image = "Ubuntu2204"
Size = "Standard_DS1_v2"
Credential = $cred
VirtualNetworkName = "vnet-1"
SubnetName = "subnet-private"
PublicIpAddressName = "" # No public IP address
SshKeyName = "vm-private-ssh-key"
GenerateSshKey = $true
}
# Create the virtual machine
New-AzVM @vmParams
创建虚拟机需花费几分钟的时间。 在创建虚拟机并将输出返回到 PowerShell 之前,请不要继续执行下一步。
使用 az vm create 在 subnet-1 子网中创建虚拟机。
--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 \
--generate-ssh-keys \
--no-wait
在 子网专用 子网中创建虚拟机。
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 \
--generate-ssh-keys
启用 IP 转发
若要通过 NVA 路由流量,请在 Azure 中和 vm-nva 的操作系统中启用 IP 转发。 启用 IP 转发后,vm-nva 接收到的任何流量不会被丢弃,而是会被转发到正确的目标。
在 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 转发,以转发网络流量。 使用“运行命令”功能在虚拟机上执行脚本。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
在“虚拟机”中,选择“vm-nva”。
展开“操作”,然后选择“运行命令”。
选择 “RunShellScript”。
在 “运行命令脚本 ”窗口中输入以下脚本:
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sudo sysctl -p
选择运行。
等待脚本完成。 输出显示已启用 IP 转发设置。
返回到 vm-nva 的“概述”页,然后选择“重启”以重启虚拟机。
使用 Invoke-AzVMRunCommand 在 vm-nva 虚拟机的作系统中启用 IP 转发。 以下示例在操作系统中启用 IP 转发。
$runCommandParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-nva"
CommandId = "RunShellScript"
ScriptString = @"
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
sudo sysctl -p
"@
}
Invoke-AzVMRunCommand @runCommandParams
使用 az vm run-command invoke 在 vm-nva 虚拟机的操作系统中启用 IP 转发。 以下示例在操作系统中启用 IP 转发。
az vm run-command invoke \
--resource-group test-rg \
--name vm-nva \
--command-id RunShellScript \
--scripts "sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf" "sudo sysctl -p"
创建路由表
在本部分,请创建一个路由表来定义通过 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 = 'chinanorth3'
}
$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.chinacloudapp.cn 1.766ms
1: vm-nva.internal.chinacloudapp.cn 1.259ms
2: vm-private.internal.chinacloudapp.cn 2.202ms reached
Resume: pmtu 1500 hops 2 back 1
可以看到,从 vm-public 到 vm-private 的 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.chinacloudapp.cn 2.584ms reached
1: vm-public.internal.chinacloudapp.cn 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
后续步骤
在本教程中,你将了解:
若要了解有关路由的详细信息,请参阅路由概述和管理路由表。
若要了解如何通过虚拟网络服务终结点限制对 PaaS 资源的网络访问,请继续学习下一教程。