使用 Azure NAT 网关缩放 SNAT 端口

Azure 防火墙为每个后端虚拟机规模集实例(至少两个实例)配置的公共 IP 地址提供 2,496 个 SNAT 端口,最多可关联 250 公共 IP 地址。 根据体系结构和流量模式,使用此配置可能需要超过 1,248,000 个可用的 SNAT 端口。 例如,使用它来保护与 Microsoft 365 应用版 集成的大型 Azure 虚拟桌面部署。

使用大量公共 IP 地址的难题之一是存在下游 IP 地址筛选要求。 当 Azure 防火墙 与多个公共 IP 地址关联时,您需要在与其关联的所有公共 IP 地址上执行筛选操作以满足要求。 即使使用公共 IP 地址前缀,并需要关联 250 个公共 IP 地址以满足出站 SNAT 端口要求,也仍需要创建并允许 16 个公共 IP 地址前缀。

缩放和动态分配出站 SNAT 端口的更好选择是使用 Azure NAT 网关。 它为每个公共 IP 地址提供 64,512 个 SNAT 端口,最多支持 16 个 IPv4 公共 IP 地址。 这实际上最多可提供 1,032,192 个出站 SNAT 端口。 Azure NAT 网关还动态分配子网级别的 SNAT 端口,因此其关联 IP 地址提供的所有 SNAT 端口都按需提供以提供出站连接。

当你将NAT网关与 AzureFirewallSubnet关联时,防火墙的出站流量会使用NAT网关的公网IP地址。 你不需要额外的用户定义路由(UDR)将该流量从防火墙经 NAT 网关发送出去。 保留工作负载子网路由,以将流量定向到防火墙的私有 IP 地址进行检查。 出站流量的响应流量也会经过 NAT 网关。 如果多个公共IP地址与NAT网关关联,它会随机选择一个地址。 你不能指定用哪个地址。

此体系结构没有双重 NAT。 Azure 防火墙实例使用其专用 IP 地址(而不是Azure 防火墙公共 IP 地址)将流量发送到 NAT 网关。

在多个公共 IP 地址和 NAT 网关之间进行选择

当防火墙的 SNAT 端口不足时,可以添加多个公用 IP 地址或使用 NAT 网关:

  • 在成本敏感且规模需求适中时添加多个公共 IP 地址。 每个公共IP地址为每个后端实例增加了2496个SNAT端口,你可以关联最多250个公共IP地址。 有关步骤,请参阅部署具有多个公共 IP 地址的Azure 防火墙。
  • 需要在子网间动态分配SNAT端口时,使用NAT网关。 它为每个公共IP地址提供多达64,512个SNAT端口。

有关优点和缺点的完整比较,请参阅有关Azure 防火墙性能的最佳做法。

要在门户中作为Azure 防火墙部署的一部分创建StandardV2 NAT网关,请在高级选项卡中选择启用NAT网关。完整流程请参见“创建带有StandardV2 NAT网关的Azure 防火墙”。 以下PowerShell和CLI示例将标准NAT网关与现有防火墙子网关联起来。

注意事项

使用带有区域冗余防火墙的StandardV2 NAT网关。 标准NAT网关不支持区域冗余部署。 步骤请参见“将 Azure 防火墙 与 NAT Gateway V2 集成”。 有关 SKU 差异的详细信息,请参阅 NAT 网关 SKU。 Azure NAT 网关 在安全虚拟枢纽(vWAN)中不被支持。 在vWAN架构中,应直接在辐射虚拟网络上配置NAT网关。 关于在枢纽虚拟网络中将NAT网关与防火墙集成的步骤,请参见NAT网关和Azure 防火墙集成教程。 有关Azure 防火墙体系结构选项的详细信息,请参阅 什么是 Azure 防火墙管理器 体系结构选项?

将 NAT 网关与Azure 防火墙子网相关联 - Azure PowerShell

以下示例使用 Azure PowerShell 创建并附加具有Azure 防火墙子网的 NAT 网关。

# Create public IP addresses
New-AzPublicIpAddress -Name public-ip-1 -ResourceGroupName nat-rg -Sku Standard -AllocationMethod Static -Location 'China East 2 '
New-AzPublicIpAddress -Name public-ip-2 -ResourceGroupName nat-rg -Sku Standard -AllocationMethod Static -Location 'China East 2 '

# Create NAT gateway
$PublicIPAddress1 = Get-AzPublicIpAddress -Name public-ip-1 -ResourceGroupName nat-rg
$PublicIPAddress2 = Get-AzPublicIpAddress -Name public-ip-2 -ResourceGroupName nat-rg
New-AzNatGateway -Name firewall-nat -ResourceGroupName nat-rg -PublicIpAddress $PublicIPAddress1,$PublicIPAddress2 -Location 'China East 2 ' -Sku Standard

# Associate NAT gateway to subnet
$virtualNetwork = Get-AzVirtualNetwork -Name nat-vnet -ResourceGroupName nat-rg
$natGateway = Get-AzNatGateway -Name firewall-nat -ResourceGroupName nat-rg
$firewallSubnet = $virtualNetwork.subnets | Where-Object -Property Name -eq AzureFirewallSubnet
$firewallSubnet.NatGateway = $natGateway
$virtualNetwork | Set-AzVirtualNetwork

将 NAT 网关与Azure 防火墙子网相关联 - Azure CLI

以下示例使用 Azure CLI 创建并附加具有Azure 防火墙子网的 NAT 网关。

# Create public IP addresses
az network public-ip create --name public-ip-1 --resource-group nat-rg --sku standard
az network public-ip create --name public-ip-2 --resource-group nat-rg --sku standard
# Create NAT gateway
az network nat gateway create --name firewall-nat --resource-group nat-rg --public-ip-addresses public-ip-1 public-ip-2 --sku standard
# Associate NAT gateway to subnet
az network vnet subnet update --name AzureFirewallSubnet --vnet-name nat-vnet --resource-group nat-rg --nat-gateway firewall-nat

后续步骤