本教程介绍如何将 NAT 网关与中心辐射网络中的 Azure 防火墙集成,以提高出站连接性和可伸缩性。
对于为每个后端虚拟机规模集实例(最少两个实例)配置的每个公共 IP 地址,Azure 防火墙将提供 2,496 个 SNAT 端口。 最多可将 250 个公共 IP 地址关联到 Azure 防火墙。 根据体系结构要求和流量模式,可能需要更多的 SNAT 端口,而不是 Azure 防火墙可以提供的端口。 你可能还需要使用更少的公共 IP,同时需要更多的 SNAT 端口。 更好的出站连接方法是使用 NAT 网关。 NAT 网关为每个公共 IP 地址提供 64,512 个 SNAT 端口,最多可与 16 个公共 IP 地址一起使用。
NAT 网关可以通过将 NAT 网关直接配置为 Azure 防火墙子网来与 Azure 防火墙集成。 该关联提供了一种更具伸缩性的出站连接方式。 对于生产部署,建议使用中心辐射型网络,其中的防火墙位于其自身的虚拟网络中。 工作负载服务器是与防火墙所在的中心虚拟网络位于同一区域的对等互连虚拟网络。 在此体系结构设置中,NAT 网关可为对等互连的所有分支虚拟网络提供从中心虚拟网络的出站连接。
注意
虽然可以在中心辐射虚拟网络架构中部署 NAT 网关,如本教程中所述,但 vWAN 架构的中心虚拟网络不支持 NAT 网关。 要在 vWAN 体系结构中使用,必须将 NAT 网关直接配置到与安全虚拟中心 (vWAN) 关联的分支虚拟网络。 有关 Azure 防火墙体系结构选项的详细信息,请参阅什么是 Azure 防火墙管理器体系结构选项?。
本教程介绍如何执行下列操作:
- 在部署期间创建中心虚拟网络并部署 Azure 防火墙和 Azure Bastion
- 创建 NAT 网关并将其与中心虚拟网络中的防火墙子网相关联
- 创建分支虚拟网络
- 创建虚拟网络对等互连
- 为分支虚拟网络创建路由表
- 为中心虚拟网络创建防火墙策略
- 创建虚拟机以测试通过 NAT 网关进行的出站连接
必备条件
本文需要 Azure PowerShell 模块 1.0.0 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。 此外,还需要运行 Connect-AzAccount -Environment AzureChinaCloud 以创建与 Azure 的连接。
创建资源组
创建资源组以包含本快速入门的所有资源。
登录到 Azure 门户。
在门户顶部的搜索框中,输入 资源组。 在搜索结果中选择“资源组”。
选择“+ 新建”。
在“创建资源组”的“基本信息”选项卡中,输入或选择以下信息。
| 设置 |
值 |
| 订阅 |
选择订阅 |
| 资源组 |
test-rg |
| 区域 |
中国北部 3 |
选择“查看 + 创建”。
选择“创建”。
使用 New-AzResourceGroup 创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。
以下示例在 chinanorth3 位置创建名为 test-rg 的资源组:
$rsg = @{
Name = 'test-rg'
Location = 'chinanorth3'
}
New-AzResourceGroup @rsg
创建中心虚拟网络
中心虚拟网络包含与 Azure 防火墙和 NAT 网关关联的防火墙子网。 使用以下示例创建中心虚拟网络。
登录到 Azure 门户。
在 Azure 门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“创建”。
在“创建虚拟网络”的“基本信息”选项卡中输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择 test-rg 或您的资源组。 |
|
实例详细信息 |
|
| 名称 |
输入 vnet-hub。 |
| 区域 |
选择你的区域。 此示例使用 中国北部 3。 |
选择“ IP 地址 ”选项卡,或依次选择“ 下一步:安全性”、“ 下一步:IP 地址”。
在 “子网 ”中,选择 默认 子网。
在“编辑子网”中,输入或选择以下信息。
| 设置 |
值 |
| 子网用途 |
保留默认值。 |
| 名称 |
输入subnet-1。 |
将其余设置保留为默认值,然后选择“ 保存”。
选择“+添加子网”。
在 “添加子网”中 输入或选择以下信息。
| 设置 |
值 |
| 子网用途 |
选择 Azure Bastion。 |
将其余设置保留为默认值,然后选择“ 添加”。
选择“+添加子网”。
在 “添加子网”中 输入或选择以下信息。
将其余设置保留为默认值,然后选择“ 添加”。
选择查看 + 创建,然后选择创建。
使用 New-AzVirtualNetwork 创建中心虚拟网络。
# Create hub virtual network
$vnetParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'vnet-hub'
AddressPrefix = '10.0.0.0/16'
}
$hubVnet = New-AzVirtualNetwork @vnetParams
使用 Add-AzVirtualNetworkSubnetConfig 为 Azure 防火墙和 Azure Bastion 创建子网。
# Create default subnet
$subnetParams = @{
Name = 'subnet-1'
AddressPrefix = '10.0.0.0/24'
VirtualNetwork = $hubVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
# Create subnet for Azure Firewall
$subnetParams = @{
Name = 'AzureFirewallSubnet'
AddressPrefix = '10.0.1.64/26'
VirtualNetwork = $hubVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
# Create subnet for Azure Bastion
$subnetParams = @{
Name = 'AzureBastionSubnet'
AddressPrefix = '10.0.1.0/26'
VirtualNetwork = $hubVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
使用 Set-AzVirtualNetwork 更新虚拟网络。
# Create the virtual network
$hubVnet | Set-AzVirtualNetwork
创建 Azure Bastion 主机
Azure Bastion 通过 TLS 提供与虚拟机的安全 RDP 和 SSH 连接,而无需 VM 上的公共 IP 地址。
在 Azure 门户顶部的搜索框中,输入 Bastion。 在搜索结果中选择 Bastions 。
选择“创建”。
在“创建 Bastion”的基本选项卡中输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择 test-rg 或您的资源组。 |
|
实例详细信息 |
|
| 名称 |
输入“堡垒”。 |
| 区域 |
选择你的区域。 此示例使用 中国北部 3。 |
| 层 |
选择 “开发人员”。 |
| 虚拟网络 |
选择“vnet-1”。 |
| 子网 |
选择“AzureBastionSubnet”。 |
选择查看 + 创建,然后选择创建。
使用 New-AzPublicIpAddress 为 Azure Bastion 创建公共 IP。
# Create public IP for Azure Bastion
$publicIpBastionParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'public-ip-bastion'
Sku = 'Standard'
AllocationMethod = 'Static'
Zone = 1, 2, 3
}
$publicIpBastion = New-AzPublicIpAddress @publicIpBastionParams
使用 New-AzBastion 创建 Azure Bastion。
# Create Azure Bastion
$bastionParams = @{
ResourceGroupName = "test-rg"
Name = "bastion"
VirtualNetworkName = "vnet-hub"
PublicIpAddressName = "public-ip-bastion"
PublicIPAddressRgName = "test-rg"
VirtualNetworkRgName = "test-rg"
Sku = "Basic"
}
New-AzBastion @bastionParams
创建 Azure 防火墙
在门户顶部的搜索框中,输入“防火墙”。 在搜索结果中选择“防火墙”。
选择“+ 新建”。
在“创建防火墙”页上,使用下表配置防火墙:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 名称 |
输入 firewall。 |
| 区域 |
选择“中国北部 3”。 |
| 可用性区域 |
接受默认选项 None。 |
| 防火墙 SKU |
选择“标准” 。 |
| 防火墙管理 |
选择“使用防火墙策略来管理此防火墙”。 |
| 防火墙策略 |
选择“ 添加新”。 名称:输入 防火墙策略。 区域:选择 “中国北部 3”。 策略层: 标准。 选择“ 确定”。 |
|
选择虚拟网络 |
|
| 虚拟网络 |
选择“使用现有项”。 |
| 虚拟网络 |
选择 vnet-hub。 |
|
公共 IP 地址 |
|
| 公共 IP 地址 |
选择“ 添加新”。 名称:输入 public-ip-firewall。 SKU: 标准。 赋值: 静态。
可用性区域: 区域冗余。 选择“ 确定”。 |
接受其他默认值,然后选择“查看 + 创建”。
查看摘要,然后选择“创建”以创建防火墙。
部署防火墙需要几分钟时间。
部署完成后,转到 test-rg 资源组,然后选择 防火墙 资源。
记下防火墙专用 IP 地址和公共 IP 地址。 稍后将使用这些地址。
使用 New-AzPublicIpAddress 为 Azure 防火墙创建公共 IP。
# Create public IP for Azure Firewall
$publicIpFirewallParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'public-ip-firewall'
AllocationMethod = 'Static'
Sku = 'Standard'
Zone = 1, 2, 3
}
$publicIpFirewall = New-AzPublicIpAddress @publicIpFirewallParams
使用 New-AzFirewallPolicy 创建防火墙策略。
# Create firewall policy
$firewallPolicyParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'firewall-policy'
}
$firewallPolicy = New-AzFirewallPolicy @firewallPolicyParams
使用 New-AzFirewall 创建 Azure 防火墙。
# Create Azure Firewall
$firewallParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'firewall'
VirtualNetworkName = 'vnet-hub'
PublicIpName = 'public-ip-firewall'
FirewallPolicyId = $firewallPolicy.Id
}
$firewall = New-AzFirewall @firewallParams
创建 NAT 网关
所有出站 Internet 流量都穿越 NAT 网关传送到 Internet。 使用以下示例为中心辐射型网络创建 NAT 网关,并将其与 AzureFirewallSubnet 相关联。
在门户顶部的搜索框中,输入“公共 IP 地址”。 在搜索结果中,选择“公共 IP 地址”。
选择“+ 新建”。
在“创建公共 IP 地址”中,输入以下信息。
| 设置 |
值 |
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
| 区域 |
选择“中国北部 3”。 |
| 名称 |
输入 public-ip-nat。 |
| IP 版本 |
选择 IPv4。 |
| SKU |
选择“标准” 。 |
| 可用性区域 |
选择“区域冗余”。 |
| 层 |
选择“区域”。 |
选择“查看 + 创建”,然后选择“创建”。
在门户顶部的搜索框中,输入“NAT 网关”。 在搜索结果中选择“NAT 网关”。
选择“+ 新建”。
在“创建网络地址转换(NAT)网关”的“基本信息”选项卡中,输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| NAT 网关名称 |
输入 nat-gateway。 |
| 区域 |
选择“中国北部 3”。 |
| 可用性区域 |
选择“区域”或“无区域”。 |
| TCP 空闲超时(分钟) |
保留默认值“4”。 |
选择“下一步”。
在 “出站 IP ”选项卡中,选择公共 IP 地址或前缀。
选择“下一步”。
在 “子网 ”选项卡中的 “虚拟网络”中,选择 vnet-hub。
选择特定的子网,选择 AzureFirewallSubnet。
选择查看 + 创建,然后选择创建。
使用 New-AzPublicIpAddress 为 NAT 网关创建区域冗余 IPv4 公共 IP 地址。
## Create public IP address for NAT gateway ##
$ip = @{
Name = 'public-ip-nat'
ResourceGroupName = 'test-rg'
Location = 'chinanorth3'
Sku = 'Standard'
AllocationMethod = 'Static'
IpAddressVersion = 'IPv4'
Zone = 1,2,3
}
$publicIPIPv4 = New-AzPublicIpAddress @ip
使用 New-AzNatGateway 创建 NAT 网关资源。
## Create NAT gateway resource ##
$nat = @{
ResourceGroupName = 'test-rg'
Name = 'nat-gateway'
IdleTimeoutInMinutes = '4'
Location = 'chinanorth3'
PublicIpAddress = $publicIPIPv4
Zone = 1
}
$natGateway = New-AzNatGateway @nat
使用 Set-AzVirtualNetworkSubnetConfig 将 NAT 网关与 AzureFirewallSubnet 相关联。
# Get the hub virtual network
$vnetHub = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-hub'
# Associate NAT gateway with AzureFirewallSubnet
$subnetParams = @{
VirtualNetwork = $vnetHub
Name = 'AzureFirewallSubnet'
AddressPrefix = '10.0.1.64/26'
NatGateway = $natGateway
}
Set-AzVirtualNetworkSubnetConfig @subnetParams
# Update the virtual network
$vnetHub | Set-AzVirtualNetwork
创建分支虚拟网络
分支虚拟网络包含用于测试 Internet 流量到 NAT 网关的路由的测试虚拟机。 使用以下示例创建分支网络。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在“创建虚拟网络的”基本信息“选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 名称 |
输入 vnet-spoke。 |
| 区域 |
选择“中国北部 3”。 |
选择下一步,转到安全性选项卡。
选择“下一步”,转到“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 创建分支虚拟网络。
# Create spoke virtual network
$vnetParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'vnet-spoke'
AddressPrefix = '10.1.0.0/16'
}
$spokeVnet = New-AzVirtualNetwork @vnetParams
使用 Add-AzVirtualNetworkSubnetConfig 为分支虚拟网络创建子网。
# Create subnet in spoke virtual network
$subnetParams = @{
Name = 'subnet-private'
AddressPrefix = '10.1.0.0/24'
VirtualNetwork = $spokeVnet
}
Add-AzVirtualNetworkSubnetConfig @subnetParams
使用 Set-AzVirtualNetwork 更新分支虚拟网络。
# Create the virtual network
$spokeVnet | Set-AzVirtualNetwork
在中心与分支之间创建对等互连
虚拟网络对等互连用于将中心连接到分支,并将分支连接到中心。 使用以下示例在中心与分支之间创建双向网络对等互连。
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择 vnet-hub。
在“设置”中选择“对等互连”。
选择“+ 添加”。
在“添加对等方”中,输入或选择以下信息:
| 设置 |
值 |
| 远程虚拟网络摘要 |
|
| 对等互连链接名称 |
输入 vnet-spoke-to-vnet-hub。 |
| 虚拟网络部署模型 |
保留默认值“资源管理器”。 |
| 订阅 |
选择订阅。 |
| 虚拟网络 |
选择 vnet-spoke (test-rg)。 |
| 远程虚拟网络对等互连设置 |
|
| 允许“vnet-spoke”访问“vnet-hub” |
保留默认值“已选择”。 |
| 允许“vnet-spoke”接收来自“vnet-hub”的转发流量 |
选中复选框。 |
| 允许“vnet-spoke”中的网关或路由服务器将流量转发到“vnet-hub” |
保留默认值“未选中”。 |
| 启用“vnet-spoke”以使用“vnet-hubb”远程网关或路由服务器 |
保留默认值“未选中”。 |
| 本地虚拟网络摘要 |
|
| 对等互连链接名称 |
输入 vnet-hub-to-vnet-spoke。 |
| 本地虚拟网络对等互连设置 |
|
| 允许“vnet-hub”访问“vnet-spoke” |
保留默认值“已选择”。 |
| 允许“vnet-hub”接收来自“vnet-spoke”的转发流量 |
选中复选框。 |
| 允许“vnet-hub”中的网关或路由服务器将流量转发到“vnet-spoke” |
保留默认值“未选中”。 |
| 启用“vnet-hub”以使用“vnet-spoke”远程网关或路由服务器 |
保留默认值“未选中”。 |
选择添加。
选择“刷新”并确认“对等互连状态”是否为“已连接”。
使用 Add-AzVirtualNetworkPeering 创建从中心到分支的对等互连。
# Create peering from hub to spoke
$peeringParams = @{
Name = 'vnet-hub-to-vnet-spoke'
VirtualNetwork = $hubVnet
RemoteVirtualNetworkId = $spokeVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @peeringParams
使用 Add-AzVirtualNetworkPeering 创建从分支到中心的对等互连。
# Create peering from spoke to hub
$peeringParams = @{
Name = 'vnet-spoke-to-vnet-hub'
VirtualNetwork = $spokeVnet
RemoteVirtualNetworkId = $hubVnet.Id
AllowForwardedTraffic = $true
}
Add-AzVirtualNetworkPeering @peeringParams
创建分支网络路由表
路由表将离开分支虚拟网络的所有流量强制发送到中心虚拟网络。 路由表中配置了 Azure 防火墙(作为虚拟设备)的专用 IP 地址。
获取防火墙的专用 IP 地址
本文稍后创建的路由表需要防火墙的专用 IP 地址。 使用以下示例获取防火墙的专用 IP 地址。
在门户顶部的搜索框中,输入“防火墙”。 在搜索结果中选择“防火墙”。
选择 firewall。
在“firewall”的“概述”中,记下“防火墙专用 IP”字段中的 IP 地址。 此示例中的 IP 地址为 10.0.1.68。
使用 Get-AzFirewall 获取防火墙的专用 IP 地址。
# Get the private IP address of the firewall
$firewallParams = @{
ResourceGroupName = 'test-rg'
Name = 'firewall'
}
$firewall = Get-AzFirewall @firewallParams
$firewall.IpConfigurations[0].PrivateIpAddress
创建路由表
创建一个路由表,以强制所有分支间流量和 Internet 出口流量通过中心虚拟网络中的防火墙。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择“+ 新建”。
在“创建路由表”中,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 区域 |
选择“中国北部 3”。 |
| 名称 |
输入 route-table-spoke。 |
| 传播网关路由 |
请选择“否”。 |
选择“查看 + 创建”。
选择“创建”。
在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。
选择 route-table-spoke。
在“设置”中选择“路由”。
在“路由”中选择“+ 添加”。
在“添加路由”中,输入或选择以下信息:
| 设置 |
值 |
| 路由名称 |
输入 route-to-hub。 |
| 目标类型 |
选择“IP 地址”。 |
| 目标 IP 地址/CIDR 范围 |
输入 0.0.0.0/0。 |
| 下一跃点类型 |
选择“虚拟设备”。 |
| 下一跃点地址 |
输入“10.0.1.68”。 |
选择添加。
在“设置”中选择“子网”。
选择“+ 关联”。
在“关联子网”中,输入或选择以下信息:
| 设置 |
值 |
| 虚拟网络 |
选择 vnet-spoke (test-rg)。 |
| 子网 |
选择“subnet-private”。 |
选择“确定”。
使用 New-AzRouteTable 创建路由表。
# Create route table
$routeTableParams = @{
ResourceGroupName = 'test-rg'
Location = 'China North 3'
Name = 'route-table-spoke'
}
$routeTable = New-AzRouteTable @routeTableParams
使用 Add-AzRouteConfig 在路由表中创建路由。
# Create route
$routeConfigParams = @{
Name = 'route-to-hub'
AddressPrefix = '0.0.0.0/0'
NextHopType = 'VirtualAppliance'
NextHopIpAddress = $firewall.IpConfigurations[0].PrivateIpAddress
RouteTable = $routeTable
}
Add-AzRouteConfig @routeConfigParams
使用 Set-AzRouteTable 更新路由表。
# Update the route table
$routeTable | Set-AzRouteTable
使用 Set-AzVirtualNetworkSubnetConfig 将路由表与分支子网相关联。
# Associate route table with subnet
$subnetConfigParams = @{
VirtualNetwork = $spokeVnet
Name = 'subnet-private'
AddressPrefix = '10.1.0.0/24'
RouteTable = $routeTable
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
使用 Set-AzVirtualNetwork 更新分支虚拟网络。
# Update the virtual network
$spokeVnet | Set-AzVirtualNetwork
必须通过防火墙策略和网络规则允许来自分支的流量通过中心传送。 使用以下示例创建防火墙策略和网络规则。
在门户顶部的搜索框中,输入“防火墙”。 在搜索结果中选择“防火墙策略”。
选择 firewall-policy。
展开“设置”,然后选择“网络规则”。
选择“+ 添加规则集合”。
在“添加规则集合”中,输入或选择以下信息:
| 设置 |
值 |
| 名称 |
输入 spoke-to-internet。 |
| 规则集合类型 |
选择“网络”。 |
| 优先级 |
输入 100。 |
| 规则集合操作 |
选择“允许”。 |
| 规则集合组 |
选择“DefaultNetworkRuleCollectionGroup”。 |
| 规则 |
|
| 名称 |
输入 allow-web. |
| 源类型 |
IP 地址。 |
| 源 |
输入 10.1.0.0/24。 |
| 协议 |
选择“TCP”。 |
| 目标端口 |
输入 80,443。 |
| 目标类型 |
选择“IP 地址”。 |
| 目标 |
输入 * |
选择添加。
使用 Get-AzFirewallPolicy 获取现有的防火墙策略。
# Get the existing firewall policy
$firewallPolicyParams = @{
Name = 'firewall-policy'
ResourceGroupName = 'test-rg'
}
$firewallPolicy = Get-AzFirewallPolicy @firewallPolicyParams
使用 New-AzFirewallPolicyNetworkRule 创建网络规则。
# Create a network rule for web traffic
$networkRuleParams = @{
Name = 'allow-internet'
SourceAddress = '10.1.0.0/24'
Protocol = 'TCP'
DestinationAddress = '*'
DestinationPort = '*'
}
$networkRule = New-AzFirewallPolicyNetworkRule @networkRuleParams
使用 New-AzFirewallPolicyFilterRuleCollection 为网络规则创建规则集合。
# Create a rule collection for the network rule
$ruleCollectionParams = @{
Name = 'spoke-to-internet'
Priority = 100
Rule = $networkRule
ActionType = 'Allow'
}
$ruleCollection = New-AzFirewallPolicyFilterRuleCollection @ruleCollectionParams
使用 New-AzFirewallPolicyRuleCollectionGroup 创建规则集合组。
$newRuleCollectionGroupParams = @{
Name = 'DefaultNetworkRuleCollectionGroup'
Priority = 200
FirewallPolicyObject = $firewallPolicy
RuleCollection = $ruleCollection
}
New-AzFirewallPolicyRuleCollectionGroup @newRuleCollectionGroupParams
创建测试虚拟机
使用 Ubuntu 虚拟机来测试通过 NAT 网关传送出站 Internet 流量。 使用以下示例创建 Ubuntu 虚拟机。
在门户中,搜索并选择“虚拟机”。
在“虚拟机”中,依次选择“+ 创建”、“Azure 虚拟机”。
在“创建虚拟机”的“基本信息”选项卡上,输入或选择以下信息:
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“test-rg”。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入 vm-spoke。 |
| 区域 |
选择“中国北部 3”。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
保留默认值标准。 |
| 图像 |
选择“Ubuntu Server 24.04 LTS - Gen2”。 |
| 大小 |
选择一个大小。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择“SSH 公钥”。 |
| 用户名 |
输入“azureuser”。 |
| SSH 公钥源 |
选择“生成新密钥对”。 |
| 密钥对名称 |
输入 vm-spoke-key。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择无。 |
选择页面顶部的“网络”选项卡,或者选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”选项卡中,输入或选择以下信息:
| 设置 |
值 |
|
网络接口 |
|
| 虚拟网络 |
选择 vnet-spoke。 |
| 子网 |
选择“subnet-private (10.1.0.0/24)”。 |
| 公共 IP |
选择无。 |
| NIC 网络安全组 |
选择“高级”。 |
| 配置网络安全组 |
选择“新建”。
在“名称”中输入“nsg-1”。
将其余字段保留默认设置,然后选择“确定”。 |
将其余设置保留为默认值,然后选择“查看 + 创建”。
检查设置,然后选择“创建”。
此时会显示“ 生成新密钥对 ”对话框。 选择“下载私钥并创建资源”。
私钥将下载到本地计算机。 在后续步骤中,使用 Azure Bastion 连接到虚拟机时将需要该私钥。 私钥文件的名称是在 “密钥对名称 ”字段中输入的名称。 在此示例中,私钥文件名为 ssh-key。
等待虚拟机完成部署,然后再继续执行后续步骤。
注意
虚拟网络中具有堡垒主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用专用 IP 在网络中进行通信。 可以从堡垒托管的虚拟网络的任何虚拟机中删除公共 IP。 有关详细信息,请参阅 将公共 IP 地址与 Azure VM 取消关联。
使用 New-AzNetworkSecurityGroup 创建网络安全组。
$nsgParams = @{
ResourceGroupName = "test-rg"
Name = "nsg-1"
Location = "chinanorth3"
}
New-AzNetworkSecurityGroup @nsgParams
使用 New-AzNetworkInterface 创建网络接口。
$nicParams = @{
ResourceGroupName = "test-rg"
Name = "nic-1"
SubnetId = (Get-AzVirtualNetwork -ResourceGroupName "test-rg" -Name "vnet-spoke").Subnets[0].Id
NetworkSecurityGroupId = (Get-AzNetworkSecurityGroup -ResourceGroupName "test-rg" -Name "nsg-1").Id
Location = "chinanorth3"
}
New-AzNetworkInterface @nicParams
使用 Get-Credential 设置 VM 的用户名和密码,并将其存储在 $cred 变量中。
$cred = Get-Credential
注意
需要为 VM 提供一个用户名。 密码是可选的,即使设置了密码,也不会使用。 对于 Linux VM,建议使用 SSH 密钥配置。
使用 New-AzVMConfig 定义 VM。
$vmConfigParams = @{
VMName = "vm-spoke"
VMSize = "Standard_DS4_v2"
}
$vmConfig = New-AzVMConfig @vmConfigParams
使用 Set-AzVMOperatingSystem 和 Set-AzVMSourceImage 创建 VM 配置的其余部分。 以下示例创建 Ubuntu Server 虚拟机:
$osParams = @{
VM = $vmConfig
ComputerName = "vm-spoke"
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-1"
}
$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 = "chinanorth3"
SshKeyName = "vm-spoke-key"
}
New-AzVM @vmParams -GenerateSshKey
测试 NAT 网关
连接到在前面步骤中创建的 Ubuntu 虚拟机,以验证出站 Internet 流量是否从 NAT 网关传出。
获取 NAT 网关公共 IP 地址
获取 NAT 网关公共 IP 地址,以验证本文稍后的步骤。
在门户顶部的搜索框中,输入“公共 IP”。 在搜索结果中,选择“公共 IP 地址”。
选择“public-ip-nat”。
记下“IP 地址”中的值。 本文中使用的示例为 203.0.113.0.25。
使用 Get-AzPublicIpAddress 获取 NAT 网关的公共 IP 地址。
# Get the public IP address of the NAT gateway
$publicIpNatParams = @{
ResourceGroupName = 'test-rg'
Name = 'public-ip-nat'
}
$publicIpNat = Get-AzPublicIpAddress @publicIpNatParams
$publicIpNat.IpAddress
从分支测试 NAT 网关
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择 vm-spoke。
在“概述”中,选择“连接”,然后选择“通过 Bastion 连接”。
选择 SSH 作为连接类型。 上传 SSH 私钥文件。 选择“连接”。
在 bash 提示符下,输入以下命令:
curl ifconfig.me
验证命令返回的 IP 地址是否与 NAT 网关的公共 IP 地址匹配。
azureuser@vm-1:~$ curl ifconfig.me
203.0.113.0.25
关闭堡垒主机与 vm-spoke 的连接。
清理资源
使用创建的资源之后,可以删除资源组及其所有资源:
在 Azure 门户中,搜索并选择“资源组”。
在“资源组”页上,选择“test-rg”资源组。
在“test-rg”页上,选择“删除资源组”。
在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”。
使用 Remove-AzResourceGroup 删除资源组。
# Remove resource group
$rgParams = @{
Name = 'test-rg'
}
Remove-AzResourceGroup @rgParams
后续步骤
请继续学习下一篇文章,了解如何将 NAT 网关与 Azure 负载均衡器集成: