默认情况下,Azure会在虚拟网络内的所有子网之间路由流量。 可以创建自己的路由来替代Azure的默认路由。 自定义路由非常有用,例如,它可以让你通过网络虚拟设备 (NVA) 在子网之间路由流量。
本教程介绍如何执行下列操作:
- 创建虚拟网络和子网
- 创建用于流量路由的 NVA
- 将virtual machines(VM)部署到不同的子网
- 创建路由表
- 创建路由
- 将路由表关联到子网
- 通过 NVA 将从一个子网的流量路由到另一个子网
先决条件
如果选择在本地安装和使用 PowerShell,本文需要Azure PowerShell模块版本 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要升级,请参阅 Install Azure PowerShell 模块。 如果在本地运行 PowerShell,则还需要运行 Connect-AzAccount -Environment AzureChinaCloud 来创建与Azure的连接。
如果您没有 Azure 试用订阅,请在开始之前创建 试用订阅。
可以使用本地Azure CLI。
- 本文需要 2.0.28 或更高版本的Azure CLI。
创建子网
本教程需要 DMZ 和专用子网。
DMZ 子网是用于部署 NVA 的地方,而 Private 子网则是用于部署需要路由流量的专用虚拟机的位置。 在关系图中, subnet-1 是用于公共虚拟机 的公共 子网。
创建资源组
登录到 Azure portal。
在门户顶部的搜索框中输入“资源组”。 在搜索结果中选择“资源组”。
选择“+ 新建”。
在“创建资源组的”基本信息“选项卡中,输入或选择以下信息:
| 设置 |
值 |
| 订阅 |
选择订阅。 |
| 资源组 |
输入 test-rg。 |
| 区域 |
选择“中国北部 3”。 |
选择“查看 + 创建”。
选择创建。
创建虚拟网络
在门户顶部的搜索框中,输入 Virtual network。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在 Basics 选项卡上的 Create virtual network,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“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 使用浏览器通过其专用 IP 地址通过安全外壳(SSH)或远程桌面协议(RDP)连接到虚拟网络中的 VM。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关Azure Bastion的详细信息,请参阅 Azure Bastion。
注意事项
每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅 Pricing 和 SKUs。 如果要将 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 创建virtual network。 以下示例创建一个名为 vnet-1 的virtual network,其地址前缀为 10.0.0.0/16。
$vnet = @{
ResourceGroupName = "test-rg"
Location = "chinanorth3"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
使用 New-AzVirtualNetworkSubnetConfig 创建四个子网配置,以创建四个子网。 以下示例为 Public、Private、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 将子网配置写入virtual network,这会在virtual network中创建子网:
$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虚拟机,而无需将其暴露在公共互联网。
$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 创建具有一个子网的virtual network。
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 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虚拟机,而无需将其暴露在公共互联网。
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。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
选择+ 创建,然后选择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 虚拟机的网络流量路由。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
选择+ 创建,然后选择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 网络安全组 |
选择“无”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择创建。
创建专用虚拟机
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
选择+ 创建,然后选择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
创建虚拟机需花费几分钟的时间。 在创建虚拟机并Azure将输出返回到 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 转发。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
在 Virtual machines 中,选择 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 转发,以转发网络流量。 使用“运行命令”功能在虚拟机上执行脚本。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
在 Virtual machines 中,选择 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
使用 vm-nva 虚拟机的操作系统启用 IP 转发,使用命令 `az vm run-command invoke`。 以下示例在操作系统中启用 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
将 route-table-subnet-public 路由表关联到 subnet-1 子网,使用 az network vnet subnet update。
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 的网络流量
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
在 Virtual machines 中,选择 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
可以看到,从 tracepath 到 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 的网络流量
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines。
在 Virtual machines 中,选择 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 portal中,搜索并选择资源组。
在“资源组”页上,选择“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 资源,请继续学习下一章节。