中心辐射型网络是高可用性多位置网络基础结构的构建基块之一。 最常见的中心辐射型网络部署的意图是通过中心路由所有分支间流量和出站 Internet 流量。 目的是使用网络虚拟设备 (NVA) 检查穿越网络的所有流量,以进行安全扫描和数据包检查。
对于发往 Internet 的出站流量,网络虚拟设备通常有一个分配了公共 IP 地址的网络接口。 NVA 在检查出站流量后,会将流量从公共接口转发到 Internet。 Azure NAT 网关不再需要分配到 NVA 的公共 IP 地址。 将 NAT 网关与 NVA 的公共子网相关联会更改公共接口的路由,以通过 NAT 网关路由所有出站 Internet 流量。 消除公共 IP 地址可以提高安全性,并允许使用多个公共 IP 地址和/或公共 IP 前缀来扩展出站源网络地址转换 (SNAT)。
重要
本文中使用的 NVA 仅用于演示目的,并使用 Ubuntu 虚拟机进行模拟。 该解决方案不包括用于实现 NVA 部署高可用性的负载均衡器。 请将本文中的 Ubuntu 虚拟机替换为你选择的 NVA。 有关路由和配置说明,请咨询所选 NVA 的供应商。 对于高度可用的 NVA 基础结构,建议使用负载均衡器和可用性区域。
本教程介绍如何执行下列操作:
- 创建 NAT 网关。
- 创建中心辐射型虚拟网络。
- 创建模拟的网络虚拟设备 (NVA)。
- 强制来自分支的所有流量流经中心。
- 强制中心和分支中的所有 Internet 流量从 NAT 网关传出。
- 测试 NAT 网关和分支间路由。
先决条件
Azure Cloud Shell
Azure 托管 Azure Cloud Shell,这是一个可以通过浏览器使用的交互式 shell 环境。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用,以使用 Azure 服务。 可以使用 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
查找已安装的版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount
以创建与 Azure 的连接。
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
- 本文需要 Azure CLI 2.0.28 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。
创建 NAT 网关
所有出站 Internet 流量都穿越 NAT 网关传送到 Internet。 使用以下示例为中心辐射型网络创建 NAT 网关。
登录 Azure 门户。
在门户顶部的搜索框中,输入“NAT 网关”。 在搜索结果中选择“NAT 网关”。
选择“+ 新建”。
在“创建网络地址转换(NAT)网关”的“基本信息”选项卡中,输入或选择以下值:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“新建”。 在“名称”中输入 test-rg。 选择“确定”。 |
实例详细信息 |
|
NAT 网关名称 |
输入 nat-gateway。 |
区域 |
选择“美国东部 2”。 |
可用性区域 |
选择“区域”或“无区域”。 |
TCP 空闲超时(分钟) |
保留默认值“4”。 |
选择“下一步: 出站 IP”。
在“出站 IP”的“公共 IP 地址”中,选择“创建新的公共 IP 地址”。
在“名称”中输入 public-ip-nat。
选择“确定”。
选择“查看 + 创建”。
选择“创建”。
使用 New-AzResourceGroup 创建资源组。
$rgParams = @{
Name = "test-rg"
Location = "eastus2"
}
New-AzResourceGroup @rgParams
使用 New-AzPublicIpAddress 为 NAT 网管创建公共 IP 地址。
$publicIpParams = @{
ResourceGroupName = "test-rg"
Name = "public-ip-nat"
Sku = "Standard"
AllocationMethod = "Static"
Location = "eastus2"
Zone = 1,2,3
}
$publicIp = New-AzPublicIpAddress @publicIpParams
使用 New-AzNatGateway 创建 NAT 网关。
$natGatewayParams = @{
ResourceGroupName = "test-rg"
Name = "nat-gateway"
PublicIpAddress = $publicIp
Sku = 'Standard'
IdleTimeoutInMinutes = 4
Location = "eastus2"
}
New-AzNatGateway @natGatewayParams
使用 az group create 创建资源组。
az group create \
--name test-rg \
--___location eastus2
使用 az network public-ip create 为 NAT 网关创建公共 IP 地址。
az network public-ip create \
--resource-group test-rg \
--name public-ip-nat \
--sku Standard \
--allocation-method Static \
--zone 1 2 3
使用 az network nat gateway create 创建 NAT 网关。
az network nat gateway create \
--resource-group test-rg \
--name nat-gateway \
--public-ip-addresses public-ip-nat \
--idle-timeout 4 \
--___location eastus2
创建中心虚拟网络
中心虚拟网络是解决方案的中心网络。 中心网络包含 NVA 设备以及公共和专用子网。 在创建虚拟网络期间,NAT 网关将分配到公共子网。 Azure Bastion 主机配置为以下示例的一部分。 该堡垒主机用于安全连接到 NVA 虚拟机以及本文稍后将在分支中部署的测试虚拟机。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在“创建虚拟网络”的“基本信息”选项卡中输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
名称 |
输入 vnet-hub。 |
区域 |
选择“美国东部 2”。 |
选择下一步,转到安全性选项卡。
在“安全性”选项卡的“Azure Bastion”部分,选择“启用 Azure Bastion”。
Azure Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP),通过使用其专用 IP 地址连接虚拟网络中的虚拟机。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Azure Bastion 的详细信息,请参阅 Azure Bastion
注意
每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价和 SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在此资源使用完成后将其删除。
在“Azure Bastion”中,输入或选择以下信息:
设置 |
值 |
Azure Bastion 主机名 |
输入“堡垒”。 |
Azure Bastion 公共 IP 地址 |
选择“创建公共 IP 地址”。 在名称中输入 public-ip-bastion。 选择“确定”。 |
选择“下一步”,转到“IP 地址”选项卡。
在“子网”的地址空间框中,选择“默认”子网。
在编辑子网中,输入或选择以下信息:
设置 |
值 |
子网用途 |
保留默认值“默认”。 |
名称 |
输入 subnet-private。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.0.0.0/16”。 |
开始地址 |
保留默认值“10.0.0.0”。 |
大小 |
保留默认值“/24 (256 个地址)”。 |
选择“保存”。
选择“+添加子网”。
在“添加子网”中,输入或选择以下信息:
设置 |
值 |
子网用途 |
保留默认值“默认”。 |
名称 |
输入 subnet-public。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.0.0.0/16”。 |
开始地址 |
输入 10.0.253.0。 |
大小 |
选择“/28 (16 个地址)”。 |
安全性 |
|
NAT 网关 |
选择 nat-gateway。 |
选择添加。
选择“查看 + 创建”。
选择“创建”。
部署堡垒主机需要几分钟时间。 在部署过程中创建虚拟网络时,可以继续执行后续步骤。
使用 New-AzVirtualNetworkSubnetConfig 创建子网。
$subnetPrivateParams = @{
Name = "subnet-private"
AddressPrefix = "10.0.0.0/24"
}
$privateSubnetConfig = New-AzVirtualNetworkSubnetConfig @subnetPrivateParams
$subnetBastionParams = @{
Name = "AzureBastionSubnet"
AddressPrefix = "10.0.1.0/26"
}
$bastionSubnetConfig = New-AzVirtualNetworkSubnetConfig @subnetBastionParams
$subnetPublicParams = @{
Name = "subnet-public"
AddressPrefix = "10.0.253.0/28"
NatGateway = (Get-AzNatGateway -ResourceGroupName "test-rg" -Name "nat-gateway")
}
$publicSubnetConfig = New-AzVirtualNetworkSubnetConfig @subnetPublicParams
使用 New-AzVirtualNetwork 创建虚拟网络。
$vNetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-hub"
AddressPrefix = "10.0.0.0/16"
Location = "eastus2"
Subnet = $privateSubnetConfig, $bastionSubnetConfig, $publicSubnetConfig
}
$vNet = New-AzVirtualNetwork @vNetParams
使用 New-AzPublicIpAddress 为 Azure Bastion 主机创建公共 IP 地址。
$publicIpParams = @{
ResourceGroupName = "test-rg"
Name = "public-ip-bastion"
Sku = "Standard"
AllocationMethod = "Static"
Location = "eastus2"
Zone = 1,2,3
}
New-AzPublicIpAddress @publicIpParams
使用 New-AzBastion 创建 Azure Bastion 主机。
$bastionParams = @{
ResourceGroupName = "test-rg"
Name = "bastion"
VirtualNetworkName = "vnet-hub"
PublicIpAddressName = "public-ip-bastion"
PublicIPAddressRgName = "test-rg"
VirtualNetworkRgName = "test-rg"
}
New-AzBastion @bastionParams
使用 az network vnet create 创建虚拟网络。
az network vnet create \
--resource-group test-rg \
--name vnet-hub \
--address-prefix 10.0.0.0/16 \
--___location eastus2
使用 az network vnet subnet create 创建子网。
az network vnet subnet create \
--resource-group test-rg \
--vnet-name vnet-hub \
--name subnet-private \
--address-prefix 10.0.0.0/24
az network vnet subnet create \
--resource-group test-rg \
--vnet-name vnet-hub \
--name AzureBastionSubnet \
--address-prefix 10.0.1.0/26
az network vnet subnet create \
--resource-group test-rg \
--vnet-name vnet-hub \
--name subnet-public \
--address-prefix 10.0.253.0/28 \
--nat-gateway nat-gateway
使用 az network public-ip create 为 Azure Bastion 主机创建公共 IP 地址。
az network public-ip create \
--resource-group test-rg \
--name public-ip-bastion \
--sku Standard \
--allocation-method Static \
--zone 1 2 3
使用 az network bastion create 创建 Azure Bastion 主机。
az network bastion create \
--resource-group test-rg \
--name bastion \
--vnet-name vnet-hub \
--public-ip-address public-ip-bastion \
--___location eastus2
创建模拟的 NVA 虚拟机
模拟的 NVA 充当虚拟设备,用于路由分支和中心之间的所有流量以及发送到 Internet 的出站流量。 Ubuntu 虚拟机用于模拟的 NVA。 使用以下示例创建模拟的 NVA 并配置网络接口。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
虚拟机名称 |
输入 vm-nva。 |
区域 |
选择“(US)美国东部 2”。 |
可用性选项 |
选择“无需基础结构冗余”。 |
安全类型 |
选择“标准”。 |
映像 |
选择“Ubuntu Server 24.04 LTS - x64 Gen2”。 |
VM 架构 |
保留默认值“x64”。 |
大小 |
选择一个大小。 |
管理员帐户 |
|
身份验证类型 |
选择“SSH 公钥”。 |
用户名 |
输入用户名。 |
SSH 公钥源 |
选择“生成新密钥对”。 |
SSH 密钥类型 |
保留 RSA SSH 格式的默认值。 |
密钥对名称 |
输入 ssh-key。 |
入站端口规则 |
|
公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
设置 |
值 |
网络接口 |
|
虚拟网络 |
选择 vnet-hub。 |
子网 |
选择 subnet-public (10.0.253.0/28)。 |
公共 IP |
选择“无”。 |
NIC 网络安全组 |
选择“高级”。 |
配置网络安全组 |
选择“新建”。 在“名称”中,输入 nsg-nva。 选择“确定”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择“创建”。
此时会显示“ 生成新密钥对 ”对话框。 选择“下载私钥并创建资源”。
私钥将下载到本地计算机。 在后续步骤中,使用 Azure Bastion 连接到虚拟机时将需要该私钥。 私钥文件的名称是在 “密钥对名称 ”字段中输入的名称。 在此示例中,私钥文件名为 ssh-key。
使用 New-AzNetworkSecurityGroup 创建网络安全组。
$nsgParams = @{
ResourceGroupName = "test-rg"
Name = "nsg-nva"
Location = "eastus2"
}
New-AzNetworkSecurityGroup @nsgParams
使用 New-AzNetworkInterface 创建网络接口。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-public"
SubnetId = (Get-AzVirtualNetwork -ResourceGroupName "test-rg" -Name "vnet-hub").Subnets[1].Id
NetworkSecurityGroupId = (Get-AzNetworkSecurityGroup -ResourceGroupName "test-rg" -Name "nsg-nva").Id
Location = "eastus2"
}
New-AzNetworkInterface @nicParams
使用 Get-Credential 设置 VM 的用户名和密码,并将其存储在 $cred
变量中。
$cred = Get-Credential
注意
需要为 VM 提供一个用户名。 密码是可选的,即使设置了密码,也不会使用。 对于 Linux VM,建议使用 SSH 密钥配置。
使用 New-AzVMConfig 定义 VM。
$vmConfigParams = @{
VMName = "vm-nva"
VMSize = "Standard_DS4_v2"
}
$vmConfig = New-AzVMConfig @vmConfigParams
使用 Set-AzVMOperatingSystem 和 Set-AzVMSourceImage 创建 VM 配置的其余部分。 以下示例创建 Ubuntu Server 虚拟机:
$osParams = @{
VM = $vmConfig
ComputerName = "vm-nva"
Credential = $cred
}
$vmConfig = Set-AzVMOperatingSystem @osParams -Linux -DisablePasswordAuthentication
$imageParams = @{
VM = $vmConfig
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$vmConfig = Set-AzVMSourceImage @imageParams
使用 Add-AzVMNetworkInterface 将之前创建的 NIC 附加到 VM。
# Get the network interface object
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-public"
}
$nic = Get-AzNetworkInterface @nicParams
$vmConfigParams = @{
VM = $vmConfig
Id = $nic.Id
}
$vmConfig = Add-AzVMNetworkInterface @vmConfigParams
使用 New-AzVM 创建 VM。 该命令将为虚拟机生成用于进行登录的 SSH 密钥。 记下该私钥的位置。 在后续步骤中,使用 Azure Bastion 连接到虚拟机时将需要该私钥。
$vmParams = @{
VM = $vmConfig
ResourceGroupName = "test-rg"
Location = "eastus2"
SshKeyName = "ssh-key"
}
New-AzVM @vmParams -GenerateSshKey
使用 az network nsg create 创建网络安全组。
az network nsg create \
--resource-group test-rg \
--name nsg-nva \
--___location eastus2
使用 az network nic create 创建网络接口。
az network nic create \
--resource-group test-rg \
--name nic-public \
--vnet-name vnet-hub \
--subnet subnet-public \
--network-security-group nsg-nva
使用 az vm create 创建虚拟机。 该命令将为虚拟机生成用于进行登录的 SSH 密钥。 记下该私钥的位置。 在后续步骤中,使用 Azure Bastion 连接到虚拟机时将需要该私钥。
az vm create \
--resource-group test-rg \
--name vm-nva \
--image Ubuntu2204 \
--size Standard_DS4_v2\
--admin-username azureuser \
--generate-ssh-keys \
--nics nic-public
默认情况下,虚拟机主要网络接口的 IP 配置设置为动态。 使用以下示例将主要网络接口 IP 配置更改为静态,并为 NVA 的专用接口添加辅助网络接口。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择 vm-nva。
在“概述”中,如果虚拟机正在运行,请选择“停止”。
展开“网络”,然后选择“网络设置”。
在“网络设置”中,选择“网络接口:”旁的网络接口名称。 接口名称是虚拟机名称加上随机数字和字母。 在此示例中,接口名称为 vm-nva271。
在网络接口属性的“设置”中,选择“IP 配置” 。
选中 “启用 IP 转发”旁的框。
选择“应用”。
应用操作完成后,选择 ipconfig1。
在“ipconfig1”中的“专用 IP 地址设置”中,选择“静态”。
在“专用 IP 地址”中输入“10.0.253.10”。
选择“保存”。
保存操作完成后,返回 vm-nva 的网络配置。
在 vm-nva 的“网络设置”中,选择“附加网络接口”。
选择“创建并附加网络接口”。
在“创建网络接口”中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
资源组 |
选择“test-rg”。 |
网络接口 |
|
名称 |
输入 nic-private。 |
子网 |
选择 subnet-private (10.0.0.0/24)。 |
NIC 网络安全组 |
选择“高级”。 |
配置网络安全组 |
选择 nsg-nva。 |
专用 IP 地址分配 |
选择“静态”。 |
专用 IP 地址 |
输入 10.0.0.10。 |
选择“创建”。
启动虚拟机。
使用 Set-AzNetworkInterface 在主网络接口上启用 IP 转发。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-public"
}
$nic = Get-AzNetworkInterface @nicParams
$nic.EnableIPForwarding = $true
Set-AzNetworkInterface -NetworkInterface $nic
使用 Set-AzNetworkInterfaceIpConfig 静态设置公共接口虚拟机的专用 IP 地址。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-public"
}
$nic = Get-AzNetworkInterface @nicParams
$nic.IpConfigurations[0].PrivateIpAllocationMethod = "Static"
$nic.IpConfigurations[0].PrivateIpAddress = "10.0.253.10"
Set-AzNetworkInterface -NetworkInterface $nic
使用 Update-AzVM 将 nic-public 接口指定为主接口。
$vmParams = @{
ResourceGroupName = "test-rg"
Name = "vm-nva"
}
$vm = Get-AzVM @vmParams
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-public"
}
$nic = Get-AzNetworkInterface @nicParams
$vm.NetworkProfile.NetworkInterfaces | ForEach-Object {
$_.Primary = $false
}
$vm.NetworkProfile.NetworkInterfaces | Where-Object { $_.Id -eq $nic.Id } | ForEach-Object {
$_.Primary = $true
}
$updateParams = @{
ResourceGroupName = "test-rg"
VM = $vm
}
Update-AzVM @updateParams
使用 New-AzNetworkInterface 创建辅助网络接口。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-private"
SubnetId = (Get-AzVirtualNetwork -ResourceGroupName "test-rg" -Name "vnet-hub").Subnets[0].Id
PrivateIpAddress = "10.0.0.10"
Location = "eastus2"
}
New-AzNetworkInterface @nicParams
使用 Stop-AzVM 关闭并解除分配虚拟机。
$vmParams = @{
ResourceGroupName = "test-rg"
Name = "vm-nva"
Force = $true
}
Stop-AzVM @vmParams
使用 Add-AzVMNetworkInterface 将辅助网络接口附加到虚拟机。
$vmParams = @{
ResourceGroupName = "test-rg"
Name = "vm-nva"
}
$vm = Get-AzVM @vmParams
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-private"
}
$nic = Get-AzNetworkInterface @nicParams
$vm = Add-AzVMNetworkInterface -VM $vm -Id $nic.Id
$updateParams = @{
ResourceGroupName = "test-rg"
VM = $vm
}
Update-AzVM @updateParams
使用 Start-AzVM 启动虚拟机。
$startVmParams = @{
ResourceGroupName = "test-rg"
Name = "vm-nva"
}
Start-AzVM @startVmParams
使用 az network nic update 在主网络接口上启用 IP 转发。
az network nic update \
--resource-group test-rg \
--name nic-public \
--ip-forwarding true
使用 az network nic ip-config update 以静态方式设置虚拟机的专用 IP 地址。
az network nic ip-config update \
--resource-group test-rg \
--nic-name nic-public \
--name ipconfig1 \
--private-ip-address 10.0.253.10 \
--private-ip-address-version IPv4
使用 az network nic create 创建辅助网络接口。
az network nic create \
--resource-group test-rg \
--name nic-private \
--vnet-name vnet-hub \
--subnet subnet-private \
--private-ip-address 10.0.0.10
使用 az vm deallocate 关闭并解除分配虚拟机。
az vm deallocate \
--resource-group test-rg \
--name vm-nva
使用 az vm nic add 将辅助网络接口附加到虚拟机。
az vm nic add \
--resource-group test-rg \
--vm-name vm-nva \
--nics nic-private
使用 az vm start 启动虚拟机。
az vm start \
--resource-group test-rg \
--name vm-nva
模拟 NVA 的路由使用 Ubuntu 虚拟机中的 IP 表和内部 NAT。 使用 Azure Bastion 连接到 NVA 虚拟机,以配置 IP 表和路由配置。
在 Azure 门户中,搜索并选择“虚拟机”。
在 “虚拟机 ”页上,选择 vm-nva。
在该 VM 的“概述”页上,选择“连接”,然后选择“通过 Bastion 连接”。
在 Bastion 连接屏幕中,将“身份验证类型”更改为“本地文件中的 SSH 私钥”。
输入创建虚拟机时使用的用户名。 在此示例中,用户名为 azureuser,请将其替换为你创建的用户名。
在“本地文件”中,选择文件夹图标并浏览到创建 VM 时生成的私钥文件。 私钥文件通常命名 id_rsa
或 id_rsa.pem
ssh-key.pem
。
选择“连接” 。
在虚拟机的提示符处输入以下信息以启用 IP 转发:
sudo nano /etc/sysctl.conf
在 Nano 编辑器中,从行net.ipv4.ip_forward=1
中删除 #
:
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
按 Ctrl + O 保存文件。
按 Ctrl + X 退出编辑器。
输入以下信息,以在虚拟机中启用内部 NAT:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo apt-get update
sudo apt install iptables-persistent
选择“是”两次。
sudo su
iptables-save > /etc/iptables/rules.v4
exit
使用 Nano 根据以下信息编辑配置:
sudo nano /etc/rc.local
将以下行添加到配置文件:
/sbin/iptables-restore < /etc/iptables/rules.v4
按 Ctrl + O 保存文件。
按 Ctrl + X 退出编辑器。
重新启动虚拟机:
sudo reboot
创建中心网络路由表
路由表用于覆盖 Azure 的默认路由。 创建路由表以强制中心专用子网中的所有流量流经模拟的 NVA。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择“+ 新建”。
在“创建路由表”中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
区域 |
选择“美国东部 2”。 |
名称 |
输入 route-table-nat-hub。 |
传播网关路由 |
保留默认值“是”。 |
选择“查看 + 创建”。
选择“创建”。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择 route-table-nat-hub。
展开“设置”,然后选择“路由”。
在“路由”中选择“+ 添加”。
在“添加路由”中,输入或选择以下信息:
设置 |
值 |
路由名称 |
输入 default-via-nat-hub。 |
目标类型 |
选择“IP 地址”。 |
目标 IP 地址/CIDR 范围 |
输入 0.0.0.0/0。 |
下一跃点类型 |
选择“虚拟设备”。 |
下一跃点地址 |
输入 10.0.0.10。 这是在前面的步骤中添加到 NVA 的专用接口的 IP 地址。。 |
选择添加。
在“设置”中选择“子网”。
选择“+ 关联”。
在“关联子网”中,输入或选择以下信息:
设置 |
值 |
虚拟网络 |
选择 vnet-hub (test-rg)。 |
子网 |
选择“subnet-private”。 |
选择“确定”。
使用 New-AzRouteTable 创建路由表。
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-nat-hub"
Location = "eastus2"
}
New-AzRouteTable @routeTableParams
使用 Add-AzRouteConfig 在路由表中创建路由。
$routeConfigParams = @{
Name = "default-via-nat-hub"
AddressPrefix = "0.0.0.0/0"
NextHopType = "VirtualAppliance"
NextHopIpAddress = "10.0.0.10"
}
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-nat-hub"
}
$routeTable = Get-AzRouteTable @routeTableParams
$routeTable | Add-AzRouteConfig @routeConfigParams | Set-AzRouteTable
使用 Set-AzVirtualNetworkSubnetConfig 将路由表与子网相关联。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-hub"
}
$vnet = Get-AzVirtualNetwork @vnetParams
$subnetParams = @{
VirtualNetwork = $vnet
Name = "subnet-private"
}
$subnet = Get-AzVirtualNetworkSubnetConfig @subnetParams
$subnet.RouteTable = $routeTable
Set-AzVirtualNetwork -VirtualNetwork $vnet
使用 az network route-table create 创建路由表。
az network route-table create \
--resource-group test-rg \
--name route-table-nat-hub \
--___location eastus2
使用 az network route-table route create 在路由表中创建路由。
az network route-table route create \
--resource-group test-rg \
--route-table-name route-table-nat-hub \
--name default-via-nat-hub \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.0.10
使用 az network vnet subnet update 将路由表与子网相关联。
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-hub \
--name subnet-private \
--route-table route-table-nat-hub
创建分支 1 虚拟网络
在其他区域中为中心辐射型网络的第一个分支创建另一个虚拟网络。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在“创建虚拟网络”的“基本信息”选项卡中输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
名称 |
输入 vnet-spoke-1。 |
区域 |
选择“(美国)美国中南部”。 |
选择下一步,转到安全性选项卡。
选择“下一步”,转到“IP 地址”选项卡。
在“IPv4 地址空间”中的“IP 地址”选项卡中,选择“删除地址空间”以删除自动填充的地址空间。
选择“添加 IPv4 地址空间”。
在“IPv4 地址空间”中,输入“10.1.0.0.”。 在掩码选择中保留默认值 /16(65536 个地址)。
选择“+添加子网”。
在“添加子网”中输入或选择以下信息:
设置 |
值 |
子网用途 |
保留默认值“默认”。 |
名称 |
输入 subnet-private。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.1.0.0/16”。 |
开始地址 |
保留默认值 10.1.0.0。 |
大小 |
保留默认值“/24 (256 个地址)”。 |
选择添加。
选择“查看 + 创建”。
选择“创建”。
使用 New-AzVirtualNetwork 创建虚拟网络。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-1"
AddressPrefix = "10.1.0.0/16"
Location = "southcentralus"
}
New-AzVirtualNetwork @vnetParams
使用 Add-AzVirtualNetworkSubnetConfig 创建子网。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-1"
}
$vnet = Get-AzVirtualNetwork @vnetParams
$subnetParams = @{
VirtualNetwork = $vnet
Name = "subnet-private"
AddressPrefix = "10.1.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
Set-AzVirtualNetwork -VirtualNetwork $vnet
使用 az network vnet create 创建虚拟网络。
az network vnet create \
--resource-group test-rg \
--name vnet-spoke-1 \
--address-prefix 10.1.0.0/16 \
--___location southcentralus
使用 az network vnet subnet create 创建子网。
az network vnet subnet create \
--resource-group test-rg \
--vnet-name vnet-spoke-1 \
--name subnet-private \
--address-prefix 10.1.0.0/24
在中心与分支 1 之间创建对等互连
虚拟网络对等互连用于将中心连接到分支 1,并将分支 1 连接到中心。 使用以下示例在中心与分支 1 之间创建双向网络对等互连。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择 vnet-hub。
展开“设置”,然后选择“对等互连”。
选择“+ 添加”。
在“添加对等方”中,输入或选择以下信息:
设置 |
值 |
远程虚拟网络摘要 |
|
对等互连链接名称 |
输入 vnet-spoke-1-to-vnet-hub。 |
虚拟网络部署模型 |
保留默认值“资源管理器”。 |
订阅 |
选择订阅。 |
虚拟网络 |
选择 vnet-spoke-1 (test-rg)。 |
远程虚拟网络对等互连设置 |
|
允许“vnet-spoke-1”访问“vnet-hub” |
保留默认值“已选择”。 |
允许“vnet-spoke-1”接收来自“vnet-hub”的转发流量 |
选中复选框。 |
允许“vnet-spoke-1”中的网关或路由服务器将流量转发到“vnet-hub” |
保留默认值“未选中”。 |
启用“vnet-spoke-1”以使用“vnet-hub”的远程网关或路由服务器 |
保留默认值“未选中”。 |
本地虚拟网络摘要 |
|
对等互连链接名称 |
输入 vnet-hub-to-vnet-spoke-1。 |
本地虚拟网络对等互连设置 |
|
允许“vnet-hub”访问“vnet-spoke-1” |
保留默认值“已选择”。 |
允许“vnet-hub”接收来自“vnet-spoke-1”的转发流量 |
选中复选框。 |
允许“vnet-hub”中的网关或路由服务器将流量转发到“vnet-spoke-1” |
保留默认值“未选中”。 |
启用“vnet-hub”以使用“vnet-spoke-1”的远程网关或路由服务器 |
保留默认值“未选中”。 |
选择添加。
选择“刷新”并确认“对等互连状态”是否为“已连接”。
使用 Add-AzVirtualNetworkPeering 来创建从中心到分支 1 的对等互连。
# Create peering from hub to spoke one
$hubVnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-hub"
}
$hubVnet = Get-AzVirtualNetwork @hubVnetParams
$spokeVnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-1"
}
$spokeVnet = Get-AzVirtualNetwork @spokeVnetParams
$hubToSpokeParams = @{
Name = "vnet-hub-to-vnet-spoke-1"
VirtualNetwork = $hubVnet
RemoteVirtualNetworkId = $spokeVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @hubToSpokeParams
# Create peering from spoke one to hub
$spokeToHubParams = @{
Name = "vnet-spoke-1-to-vnet-hub"
VirtualNetwork = $spokeVnet
RemoteVirtualNetworkId = $hubVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @spokeToHubParams
使用 az network vnet peering create 来创建从中心到分支 1 的对等互连。
# Create peering from hub to spoke one
az network vnet peering create \
--name vnet-hub-to-vnet-spoke-1 \
--resource-group test-rg \
--vnet-name vnet-hub \
--remote-vnet vnet-spoke-1 \
--allow-vnet-access \
--allow-forwarded-traffic
# Create peering from spoke one to hub
az network vnet peering create \
--name vnet-spoke-1-to-vnet-hub \
--resource-group test-rg \
--vnet-name vnet-spoke-1 \
--remote-vnet vnet-hub \
--allow-vnet-access \
--allow-forwarded-traffic
创建分支 1 网络路由表
创建一个路由表,以强制所有分支间流量和 Internet 出口流量流经中心虚拟网络中的模拟 NVA。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择“+ 新建”。
在“创建路由表”中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
区域 |
选择“美国中南部”。 |
名称 |
输入 route-table-nat-spoke-1。 |
传播网关路由 |
保留默认值“是”。 |
选择“查看 + 创建”。
选择“创建”。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择 route-table-nat-spoke-1。
展开 “设置”,然后选择“ 路由”。
在“路由”中选择“+ 添加”。
在“添加路由”中,输入或选择以下信息:
设置 |
值 |
路由名称 |
输入 default-via-nat-spoke-1。 |
目标类型 |
选择“IP 地址”。 |
目标 IP 地址/CIDR 范围 |
输入 0.0.0.0/0。 |
下一跃点类型 |
选择“虚拟设备”。 |
下一跃点地址 |
输入 10.0.0.10。 这是在前面的步骤中添加到 NVA 的专用接口的 IP 地址。。 |
选择添加。
在“设置”中选择“子网”。
选择“+ 关联”。
在“关联子网”中,输入或选择以下信息:
设置 |
值 |
虚拟网络 |
选择 vnet-spoke-1 (test-rg)。 |
子网 |
选择“subnet-private”。 |
选择“确定”。
使用 New-AzRouteTable 创建路由表。
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-nat-spoke-1"
Location = "southcentralus"
}
New-AzRouteTable @routeTableParams
使用 Add-AzRouteConfig 在路由表中创建路由。
$routeConfigParams = @{
Name = "default-via-nat-spoke-1"
AddressPrefix = "0.0.0.0/0"
NextHopType = "VirtualAppliance"
NextHopIpAddress = "10.0.0.10"
}
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-nat-spoke-1"
}
$routeTable = Get-AzRouteTable @routeTableParams
$routeTable | Add-AzRouteConfig @routeConfigParams | Set-AzRouteTable
使用 Set-AzVirtualNetworkSubnetConfig 将路由表与子网相关联。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-1"
}
$vnet = Get-AzVirtualNetwork @vnetParams
$subnetParams = @{
VirtualNetwork = $vnet
Name = "subnet-private"
}
$subnet = Get-AzVirtualNetworkSubnetConfig @subnetParams
$subnet.RouteTable = $routeTable
Set-AzVirtualNetwork -VirtualNetwork $vnet
使用 az network route-table create 创建路由表。
az network route-table create \
--resource-group test-rg \
--name route-table-nat-spoke-1 \
--___location southcentralus
使用 az network route-table route create 在路由表中创建路由。
az network route-table route create \
--resource-group test-rg \
--route-table-name route-table-nat-spoke-1 \
--name default-via-nat-spoke-1 \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.0.10
使用 az network vnet subnet update 将路由表与子网相关联。
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-spoke-1 \
--name subnet-private \
--route-table route-table-nat-spoke-1
创建分支 1 测试虚拟机
使用一个 Windows Server 2022 虚拟机来测试通过 NAT 网关传送的出站 Internet 流量,以及中心辐射型网络中的分支间流量。 使用以下示例创建 Windows Server 2022 虚拟机。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
虚拟机名称 |
输入 vm-spoke-1。 |
区域 |
选择“(美国)美国中南部”。 |
可用性选项 |
选择“无需基础结构冗余”。 |
安全类型 |
选择“标准”。 |
映像 |
选择Windows Server 2022 Datacenter - x64 Gen2。 |
VM 架构 |
保留默认值“x64”。 |
大小 |
选择一个大小。 |
管理员帐户 |
|
身份验证类型 |
选择密码。 |
用户名 |
输入用户名。 |
密码 |
输入密码。 |
确认密码 |
重新输入密码。 |
入站端口规则 |
|
公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
设置 |
值 |
网络接口 |
|
虚拟网络 |
选择 vnet-spoke-1。 |
子网 |
选择“subnet-private (10.1.0.0/24)”。 |
公共 IP |
选择“无”。 |
NIC 网络安全组 |
选择“高级”。 |
配置网络安全组 |
选择“新建”。 输入 nsg-spoke-1。 |
入站规则 |
选择“+ 添加入站规则”。 在“服务”中,选择“HTTP”。 选择“添加”。 选择“确定”。 |
选择“确定”。
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择“创建”。
使用 New-AzNetworkSecurityGroup 创建网络安全组。
$nsgParams = @{
ResourceGroupName = "test-rg"
Name = "nsg-spoke-1"
Location = "southcentralus"
}
New-AzNetworkSecurityGroup @nsgParams
使用 New-AzNetworkSecurityRuleConfig 为 HTTP 创建入站 NSG 规则。
$nsgParams = @{
ResourceGroupName = "test-rg"
Name = "nsg-spoke-1"
}
$nsg = Get-AzNetworkSecurityGroup @nsgParams
$ruleParams = @{
Name = "allow-http"
Priority = 1000
Direction = "Inbound"
Access = "Allow"
Protocol = "Tcp"
SourceAddressPrefix = "*"
SourcePortRange = "*"
DestinationAddressPrefix = "*"
DestinationPortRange = "80"
}
$nsg | Add-AzNetworkSecurityRuleConfig @ruleParams
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
使用 New-AzNetworkInterface 创建网络接口。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-1"
SubnetId = (Get-AzVirtualNetwork -ResourceGroupName "test-rg" -Name "vnet-spoke-1").Subnets[0].Id
NetworkSecurityGroupId = (Get-AzNetworkSecurityGroup -ResourceGroupName "test-rg" -Name "nsg-spoke-1").Id
Location = "southcentralus"
}
New-AzNetworkInterface @nicParams
使用 Get-Credential 设置 VM 的用户名和密码,并将其存储在 $cred
变量中。
$cred = Get-Credential
使用 New-AzVMConfig 定义 VM。
$vmConfigParams = @{
VMName = "vm-spoke-1"
VMSize = "Standard_DS4_v2"
}
$vmConfig = New-AzVMConfig @vmConfigParams
使用 Set-AzVMOperatingSystem 和 Set-AzVMSourceImage 创建 VM 配置的其余部分。 以下示例创建 Windows Server 虚拟机:
$osParams = @{
VM = $vmConfig
ComputerName = "vm-spoke-1"
Credential = $cred
}
$vmConfig = Set-AzVMOperatingSystem @osParams -Windows
$imageParams = @{
VM = $vmConfig
PublisherName = "MicrosoftWindowsServer"
Offer = "WindowsServer"
Skus = "2022-Datacenter"
Version = "latest"
}
$vmConfig = Set-AzVMSourceImage @imageParams
使用 Add-AzVMNetworkInterface 将之前创建的 NIC 附加到 VM。
# Get the network interface object
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-1"
}
$nic = Get-AzNetworkInterface @nicParams
$vmConfigParams = @{
VM = $vmConfig
Id = $nic.Id
}
$vmConfig = Add-AzVMNetworkInterface @vmConfigParams
使用 New-AzVM 创建 VM。
$vmParams = @{
VM = $vmConfig
ResourceGroupName = "test-rg"
Location = "southcentralus"
}
New-AzVM @vmParams
使用 az network nsg create 创建网络安全组。
az network nsg create \
--resource-group test-rg \
--name nsg-spoke-1 \
--___location eastus2
使用 az network nsg rule create 为 HTTP 创建入站 NSG 规则。
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-spoke-1 \
--name allow-http \
--priority 1000 \
--direction Inbound \
--access Allow \
--protocol Tcp \
--destination-port-ranges 80
使用 az network nic create 创建网络接口。
az network nic create \
--resource-group test-rg \
--name nic-1 \
--vnet-name vnet-1 \
--subnet subnet-private \
--network-security-group nsg-spoke-1
使用 az vm create 创建 Windows Server 2022 虚拟机。
az vm create \
--resource-group test-rg \
--name vm-spoke-1 \
--image Win2022Datacenter \
--size Standard_DS2_v2 \
--admin-username azureuser \
--nics nic-1
等待虚拟机完成部署,然后再继续执行后续步骤。
在分支 1 测试虚拟机上安装 IIS
IIS 安装在 Windows Server 2022 虚拟机上,用于测试通过 NAT 网关传送的出站 Internet 流量,以及中心辐射型网络中的分支间流量。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择 vm-spoke-1。
展开“操作”,然后选择“运行命令”。
选择 RunPowerShellScript。
在“运行命令脚本”中输入以下脚本:
# Install IIS server role
Install-WindowsFeature -name Web-Server -IncludeManagementTools
# Remove default htm file
Remove-Item C:\inetpub\wwwroot\iisstart.htm
# Add a new htm file that displays server name
Add-Content -Path "C:\inetpub\wwwroot\iisstart.htm" -Value $("Hello World from " + $env:computername)
选择“运行”。
请等待脚本完成,然后继续执行下一步。 脚本可能需要几分钟才能完成。
脚本完成后,“输出”将显示以下内容:
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {Common HTTP Features, Default Document, D...
使用 Set-AzVMExtension 在虚拟机上安装 IIS。
$vmExtensionParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-spoke-1"
Name = "CustomScriptExtension"
Publisher = "Microsoft.Compute"
Type = "CustomScriptExtension"
TypeHandlerVersion = "1.10"
Settings = @{
"commandToExecute" = "powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path 'C:\inetpub\wwwroot\default.htm' -Value vm-spoke-1"
}
}
Set-AzVMExtension @vmExtensionParams
使用 az vm extension set 在虚拟机上安装 IIS。
az vm extension set \
--publisher Microsoft.Compute \
--version 1.8 \
--name CustomScriptExtension \
--vm-name vm-spoke-1 \
--resource-group test-rg \
--settings '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\default.htm\" -Value $($env:computername)"}'
创建第二个分支虚拟网络
为中心辐射型网络的第二个分支创建第二个虚拟网络。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在“创建虚拟网络”的“基本信息”选项卡中输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
名称 |
输入 vnet-spoke-2。 |
区域 |
选择“(US) 美国西部 2”。 |
选择下一步,转到安全性选项卡。
选择“下一步”,转到“IP 地址”选项卡。
在“IPv4 地址空间”中的“IP 地址”选项卡中,选择“删除地址空间”以删除自动填充的地址空间。
选择“添加 IPv4 地址空间”。
在“IPv4 地址空间”中,输入“10.2.0.0”。 在掩码选择中保留默认值 /16(65536 个地址)。
选择“+添加子网”。
在“添加子网”中输入或选择以下信息:
设置 |
值 |
子网用途 |
保留默认值“默认”。 |
名称 |
输入 subnet-private。 |
IPv4 |
|
IPv4 地址范围 |
保留默认值“10.2.0.0/16”。 |
开始地址 |
保留默认值“10.2.0.0”。 |
大小 |
保留默认值“/24 (256 个地址)”。 |
选择添加。
选择“查看 + 创建”。
选择“创建”。
使用 New-AzVirtualNetwork 创建虚拟网络。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-2"
AddressPrefix = "10.2.0.0/16"
Location = "westus2"
}
New-AzVirtualNetwork @vnetParams
使用 Add-AzVirtualNetworkSubnetConfig 创建子网。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-2"
}
$vnet = Get-AzVirtualNetwork @vnetParams
$subnetParams = @{
VirtualNetwork = $vnet
Name = "subnet-private"
AddressPrefix = "10.2.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
Set-AzVirtualNetwork -VirtualNetwork $vnet
使用 az network vnet create 创建虚拟网络。
az network vnet create \
--resource-group test-rg \
--name vnet-spoke-2 \
--address-prefix 10.2.0.0/16 \
--___location westus2
使用 az network vnet subnet create 创建子网。
az network vnet subnet create \
--resource-group test-rg \
--vnet-name vnet-spoke-2 \
--name subnet-private \
--address-prefix 10.2.0.0/24
在中心与分支 2 之间创建对等互连
在中心与分支 2 之间创建双向虚拟网络对等互连。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择 vnet-hub。
在“设置”中选择“对等互连”。
选择“+ 添加”。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择 vnet-hub。
在“设置”中选择“对等互连”。
选择“+ 添加”。
在“添加对等方”中,输入或选择以下信息:
设置 |
值 |
远程虚拟网络摘要 |
|
对等互连链接名称 |
输入 vnet-spoke-2-to-vnet-hub。 |
虚拟网络部署模型 |
保留默认值“资源管理器”。 |
订阅 |
选择订阅。 |
虚拟网络 |
选择 vnet-spoke-2 (test-rg)。 |
远程虚拟网络对等互连设置 |
|
允许“vnet-spoke-2”访问“vnet-hub” |
保留默认值“已选择”。 |
允许“vnet-spoke-2”接收来自“vnet-hub”的转发流量 |
选中复选框。 |
允许“vnet-spoke-2”中的网关或路由服务器将流量转发到“vnet-hub” |
保留默认值“未选中”。 |
启用“vnet-spoke-2”以使用“vnet-hub”的远程网关或路由服务器 |
保留默认值“未选中”。 |
本地虚拟网络摘要 |
|
对等互连链接名称 |
输入 vnet-hub-to-vnet-spoke-2。 |
本地虚拟网络对等互连设置 |
|
允许“vnet-hub”访问“vnet-spoke-2” |
保留默认值“已选择”。 |
允许“vnet-hub”接收来自“vnet-spoke-2”的转发流量 |
选中复选框。 |
允许“vnet-hub”中的网关或路由服务器将流量转发到“vnet-spoke-2” |
保留默认值“未选中”。 |
启用“vnet-hub”以使用“vnet-spoke-2”的远程网关或路由服务器 |
保留默认值“未选中”。 |
选择添加。
选择“刷新”并确认“对等互连状态”是否为“已连接”。
使用 Add-AzVirtualNetworkPeering 来创建从中心到分支 2 的对等互连。
# Create peering from hub to spoke two
$hubVnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-hub"
}
$hubVnet = Get-AzVirtualNetwork @hubVnetParams
$spokeVnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-2"
}
$spokeVnet = Get-AzVirtualNetwork @spokeVnetParams
$hubToSpokeParams = @{
Name = "vnet-hub-to-vnet-spoke-2"
VirtualNetwork = $hubVnet
RemoteVirtualNetworkId = $spokeVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @hubToSpokeParams
# Create peering from spoke two to hub
$spokeToHubParams = @{
Name = "vnet-spoke-2-to-vnet-hub"
VirtualNetwork = $spokeVnet
RemoteVirtualNetworkId = $hubVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @spokeToHubParams
使用 az network vnet peering create 来创建从中心到分支 2 的对等互连。
# Create peering from hub to spoke two
az network vnet peering create \
--name vnet-hub-to-vnet-spoke-2 \
--resource-group test-rg \
--vnet-name vnet-hub \
--remote-vnet vnet-spoke-2 \
--allow-vnet-access \
--allow-forwarded-traffic
# Create peering from spoke two to hub
az network vnet peering create \
--name vnet-spoke-2-to-vnet-hub \
--resource-group test-rg \
--vnet-name vnet-spoke-2 \
--remote-vnet vnet-hub \
--allow-vnet-access \
--allow-forwarded-traffic
创建分支 2 网络路由表
创建一个路由表,以强制所有 Internet 出站流量和分支间流量流经中心虚拟网络中的模拟 NVA。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择“+ 新建”。
在“创建路由表”中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
区域 |
选择“美国西部 2” 。 |
名称 |
输入 route-table-nat-spoke-2。 |
传播网关路由 |
保留默认值“是”。 |
选择“查看 + 创建”。
选择“创建”。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择 route-table-nat-spoke-2。
在“设置”中选择“路由”。
在“路由”中选择“+ 添加”。
在“添加路由”中,输入或选择以下信息:
设置 |
值 |
路由名称 |
输入 default-via-nat-spoke-2。 |
目标类型 |
选择“IP 地址”。 |
目标 IP 地址/CIDR 范围 |
输入 0.0.0.0/0。 |
下一跃点类型 |
选择“虚拟设备”。 |
下一跃点地址 |
输入 10.0.0.10。 这是在前面的步骤中添加到 NVA 的专用接口的 IP 地址。。 |
选择添加。
在“设置”中选择“子网”。
选择“+ 关联”。
在“关联子网”中,输入或选择以下信息:
设置 |
值 |
虚拟网络 |
选择 vnet-spoke-2 (test-rg)。 |
子网 |
选择“subnet-private”。 |
选择“确定”。
使用 New-AzRouteTable 创建路由表。
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-nat-spoke-2"
Location = "westus2"
}
New-AzRouteTable @routeTableParams
使用 Add-AzRouteConfig 在路由表中创建路由。
$routeParams = @{
Name = "default-via-nat-spoke-2"
AddressPrefix = "0.0.0.0/0"
NextHopType = "VirtualAppliance"
NextHopIpAddress = "10.0.0.10"
}
$routeTableParams = @{
ResourceGroupName = "test-rg"
Name = "route-table-nat-spoke-2"
}
$routeTable = Get-AzRouteTable @routeTableParams
$routeTable | Add-AzRouteConfig @routeParams | Set-AzRouteTable
使用 Set-AzVirtualNetworkSubnetConfig 将路由表与子网相关联。
$vnetParams = @{
ResourceGroupName = "test-rg"
Name = "vnet-spoke-2"
}
$vnet = Get-AzVirtualNetwork @vnetParams
$subnetParams = @{
VirtualNetwork = $vnet
Name = "subnet-private"
}
$subnet = Get-AzVirtualNetworkSubnetConfig @subnetParams
$subnet.RouteTable = $routeTable
Set-AzVirtualNetwork -VirtualNetwork $vnet
使用 az network route-table create 创建路由表。
az network route-table create \
--resource-group test-rg \
--name route-table-nat-spoke-2 \
--___location westus2
使用 az network route-table route create 在路由表中创建路由。
az network route-table route create \
--resource-group test-rg \
--route-table-name route-table-nat-spoke-2 \
--name default-via-nat-spoke-2 \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.0.10
使用 az network vnet subnet update 将路由表与子网相关联。
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-spoke-2 \
--name subnet-private \
--route-table route-table-nat-spoke-2
创建分支 2 测试虚拟机
在分支 2 中创建 Windows Server 2022 虚拟机作为测试虚拟机。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“+ 创建”,然后选择“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:
设置 |
值 |
项目详细信息 |
|
订阅 |
选择订阅。 |
资源组 |
选择“test-rg”。 |
实例详细信息 |
|
虚拟机名称 |
输入 vm-spoke-2。 |
区域 |
选择“(US) 美国西部 2”。 |
可用性选项 |
选择“无需基础结构冗余”。 |
安全类型 |
选择“标准”。 |
映像 |
选择Windows Server 2022 Datacenter - x64 Gen2。 |
VM 架构 |
保留默认值“x64”。 |
大小 |
选择一个大小。 |
管理员帐户 |
|
身份验证类型 |
选择密码。 |
用户名 |
输入用户名。 |
密码 |
输入密码。 |
确认密码 |
重新输入密码。 |
入站端口规则 |
|
公共入站端口 |
选择“无”。 |
选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”中,输入或选择以下信息:
设置 |
值 |
网络接口 |
|
虚拟网络 |
选择 vnet-spoke-2。 |
子网 |
选择“subnet-private (10.2.0.0/24)”。 |
公共 IP |
选择“无”。 |
NIC 网络安全组 |
选择“高级”。 |
配置网络安全组 |
选择“新建”。 输入 nsg-spoke-2。 |
入站规则 |
选择“+ 添加入站规则”。 在“服务”中,选择“HTTP”。 选择“添加”。 选择“确定”。 |
将其余选项保留为默认值,然后选择“查看 + 创建”。
选择“创建”。
使用 New-AzNetworkSecurityGroup 创建网络安全组。
$nsgParams = @{
ResourceGroupName = "test-rg"
Name = "nsg-spoke-2"
Location = "westus2"
}
New-AzNetworkSecurityGroup @nsgParams
使用 New-AzNetworkSecurityRuleConfig 为 HTTP 创建入站 NSG 规则。
$ruleParams = @{
Name = "allow-http"
Priority = 1000
Direction = "Inbound"
Access = "Allow"
Protocol = "Tcp"
SourceAddressPrefix = "*"
SourcePortRange = "*"
DestinationAddressPrefix = "*"
DestinationPortRange = "80"
}
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName "test-rg" -Name "nsg-spoke-2"
$nsg | Add-AzNetworkSecurityRuleConfig @ruleParams
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
使用 New-AzNetworkInterface 创建网络接口。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-2"
SubnetId = (Get-AzVirtualNetwork -ResourceGroupName "test-rg" -Name "vnet-spoke-2").Subnets[0].Id
NetworkSecurityGroupId = (Get-AzNetworkSecurityGroup -ResourceGroupName "test-rg" -Name "nsg-spoke-2").Id
Location = "westus2"
}
New-AzNetworkInterface @nicParams
使用 Get-Credential 设置 VM 的用户名和密码,并将其存储在 $cred
变量中。
$cred = Get-Credential
使用 New-AzVMConfig 定义 VM。
$vmConfigParams = @{
VMName = "vm-spoke-2"
VMSize = "Standard_DS4_v2"
}
$vmConfig = New-AzVMConfig @vmConfigParams
使用 Set-AzVMOperatingSystem 和 Set-AzVMSourceImage 创建 VM 配置的其余部分。 以下示例创建 Windows Server 虚拟机:
$osParams = @{
VM = $vmConfig
ComputerName = "vm-spoke-2"
Credential = $cred
}
$vmConfig = Set-AzVMOperatingSystem @osParams -Windows
$imageParams = @{
VM = $vmConfig
PublisherName = "MicrosoftWindowsServer"
Offer = "WindowsServer"
Skus = "2022-Datacenter"
Version = "latest"
}
$vmConfig = Set-AzVMSourceImage @imageParams
使用 Add-AzVMNetworkInterface 将之前创建的 NIC 附加到 VM。
# Get the network interface object
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-2"
}
$nic = Get-AzNetworkInterface @nicParams
$vmConfigParams = @{
VM = $vmConfig
Id = $nic.Id
}
$vmConfig = Add-AzVMNetworkInterface @vmConfigParams
使用 New-AzVM 创建 VM。
$vmParams = @{
VM = $vmConfig
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzVM @vmParams
使用 az network nsg create 创建网络安全组。
az network nsg create \
--resource-group test-rg \
--name nsg-spoke-2 \
--___location eastus2
使用 az network nsg rule create 为 HTTP 创建入站 NSG 规则。
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-spoke-2 \
--name allow-http \
--priority 1000 \
--direction Inbound \
--access Allow \
--protocol Tcp \
--destination-port-ranges 80
使用 az network nic create 创建网络接口。
az network nic create \
--resource-group test-rg \
--name nic-2 \
--vnet-name vnet-1 \
--subnet subnet-private \
--network-security-group nsg-spoke-2
使用 az vm create 创建 Windows Server 2022 虚拟机。
az vm create \
--resource-group test-rg \
--name vm-spoke-2 \
--image Win2022Datacenter \
--size Standard_DS2_v2 \
--admin-username azureuser \
--nics nic-2
等待虚拟机完成部署,然后再继续执行后续步骤。
在分支 2 测试虚拟机上安装 IIS
IIS 安装在 Windows Server 2022 虚拟机上,用于测试通过 NAT 网关传送的出站 Internet 流量,以及中心辐射型网络中的分支间流量。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择 vm-spoke-2。
在“操作”中,选择“运行命令”。
选择 RunPowerShellScript。
在“运行命令脚本”中输入以下脚本:
# Install IIS server role
Install-WindowsFeature -name Web-Server -IncludeManagementTools
# Remove default htm file
Remove-Item C:\inetpub\wwwroot\iisstart.htm
# Add a new htm file that displays server name
Add-Content -Path "C:\inetpub\wwwroot\iisstart.htm" -Value $("Hello World from " + $env:computername)
选择“运行”。
请等待脚本完成,然后继续执行下一步。 脚本可能需要几分钟才能完成。
脚本完成后,“输出”* 将显示以下内容:
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {Common HTTP Features, Default Document, D...
使用 Set-AzVMExtension 在虚拟机上安装 IIS。
$vmExtensionParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-spoke-2"
Name = "CustomScriptExtension"
Publisher = "Microsoft.Compute"
Type = "CustomScriptExtension"
TypeHandlerVersion = "1.10"
Settings = @{
"commandToExecute" = "powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path 'C:\inetpub\wwwroot\default.htm' -Value vm-spoke-2"
}
}
Set-AzVMExtension @vmExtensionParams
使用 az vm extension set 在虚拟机上安装 IIS。
az vm extension set \
--publisher Microsoft.Compute \
--version 1.8 \
--name CustomScriptExtension \
--vm-name vm-spoke-2 \
--resource-group test-rg \
--settings '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}'
测试 NAT 网关
若要验证出站 Internet 流量是否离开 NAT 网关,请连接到在前面的步骤中创建的 Windows Server 2022 虚拟机。
获取 NAT 网关公共 IP 地址
获取 NAT 网关公共 IP 地址,以验证本文稍后的步骤。
通过 https://portal.azure.com 登录到 Azure 门户。
在门户顶部的搜索框中,输入“公共 IP”。 在搜索结果中,选择“公共 IP 地址”。
选择“public-ip-nat”。
记下“IP 地址”中的值。 本文中使用的示例为 203.0.113.25。
从分支 1 测试 NAT 网关
使用 Windows Server 2022 虚拟机上的 Microsoft Edge 连接到 https://whatsmyip.com 以验证 NAT 网关的功能。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择 vm-spoke-1。
在“概述”中,选择“连接”,然后选择“通过 Bastion 连接:。
输入创建虚拟机时输入的用户名和密码。
选择“连接” 。
在桌面完成加载后,打开 Microsoft Edge。
在地址栏中输入 https://whatsmyip.com。
验证显示的出站 IP 地址是否与之前获取的 NAT 网关 IP 相同。
保持打开堡垒主机与 vm-spoke-1 的连接。
从分支 2 测试 NAT 网关
使用 Windows Server 2022 虚拟机上的 Microsoft Edge 连接到 https://whatsmyip.com 以验证 NAT 网关的功能。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择 vm-spoke-2。
在“概述”中,选择“连接”,然后选择“通过 Bastion 连接:。
输入创建虚拟机时输入的用户名和密码。
选择“连接” 。
在桌面完成加载后,打开 Microsoft Edge。
在地址栏中输入 https://whatsmyip.com。
验证显示的出站 IP 地址是否与之前获取的 NAT 网关 IP 相同。
保持打开堡垒主机与 vm-spoke-2 的连接。
测试分支之间的路由
从分支 1 到分支 2 以及从分支 2 到分支 1 的流量将通过中心虚拟网络中的模拟 NVA 进行路由。 使用以下示例验证中心辐射型网络的分支之间的路由。
测试从分支 1 到分支 2 的路由
使用 Microsoft Edge 连接到在前面步骤中安装在 vm-spoke-2 上的 Web 服务器。
返回到堡垒主机与 vm-spoke-1 的处于打开状态的连接。
如果 Microsoft Edge 未打开,请将其打开。
在地址栏中输入 10.2.0.4。
验证 vm-spoke-2 中是否显示了 IIS 页。
关闭堡垒主机与 vm-spoke-1 的连接。
测试从分支 2 到分支 1 的路由
使用 Microsoft Edge 连接到在前面步骤中安装在 vm-spoke-1 上的 Web 服务器。
返回到堡垒主机与 vm-spoke-2 的处于打开状态的连接。
如果 Microsoft Edge 未打开,请将其打开。
在地址栏中,输入 10.1.0.4。
验证 vm-spoke-1 中是否显示了 IIS 页。
关闭堡垒主机与 vm-spoke-1 的连接。
使用完创建的资源之后,可以删除资源组及其所有资源。
在 Azure 门户中,搜索并选择“资源组”。
在“资源组”页上,选择“test-rg”资源组。
在“test-rg”页上,选择“删除资源组”。
在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”。
使用 Remove-AzResourceGroup 删除资源组。
$rgParams = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @rgParams
使用 az group delete 删除资源组。
az group delete \
--name test-rg \
--yes \
--no-wait
后续步骤
继续学习下一篇文章,了解如何将 Azure 网关负载均衡器用于高可用性网络虚拟设备: