這項特性可啟用下列情境:
- DNAT - 您可以將多個標準端口實例轉換至後端伺服器。 例如,如果您有兩個公用 IP 位址,您可以為這兩個 IP 位址轉譯 TCP 通訊埠 3389 (RDP)。
- SNAT - 其他連接埠可用於輸出 SNAT 連線,降低 SNAT 連接埠耗盡的可能性。 Azure 防火牆會隨機選擇第一個來源公網 IP 用於連線,並在第一個 IP 的埠口用完後再選擇另一個公網 IP。 如果您的網路上有任何下游篩選,則您必須允許與防火牆相關聯的所有公用 IP 位址。 請考慮使用公用 IP 位址首碼來簡化此設定。
你可以透過 Azure 入口網站、Azure PowerShell、Azure CLI、REST 和範本,使用多個公共 IP 位址存取 Azure 防火牆。 你可以在擁有最多 250 個公共 IP 位址的中樞虛擬網路中部署 Azure 防火牆。 不過,DNAT 目的地規則也會計入 250 的上限。 在 VHUB 部署中,使用 Bring your own Public IP 的 Azure 防火牆上限是 250 個,而傳統 VHUB 部署則是 80 個公共 IP 位址。
注意
新增多個公共 IP 位址是擴展 SNAT 埠口成本較低的方法。 在流量量與吞吐量高的情境下,建議改用 NAT 閘道 器,以獲得更具擴展性的解決方案。 NAT 閘道會動態分配 SNAT 埠口給所有與其相關的公共 IP。 更多資訊請參閱「整合 NAT 閘道與 Azure 防火牆」及最佳實務中的選項比較。
下列 Azure PowerShell 範例示範如何設定、新增和移除 Azure 防火牆的公用 IP 位址。
重要
你無法從 Azure 防火牆的公共 IP 位址設定頁面移除第一個 IP 設定。 如果你想修改 IP 位址,請使用 Azure PowerShell。
建立具有兩個以上公用 IP 位址的防火牆
此範例建立一個連接虛擬網路 myVirtualNetwork 的防火牆,擁有兩個公共 IP 位址。 使用 Get-AzVirtualNetwork 取得現有的虛擬網路,使用 New-AzPublicIpAddress 建立每個公共 IP 位址,並用 New-AzFirewall 部署同時擁有兩個 IP 的防火牆。
$rgName = "resourceGroupName"
$vnet = Get-AzVirtualNetwork `
-Name "myVirtualNetwork" `
-ResourceGroupName $rgName
$pip1 = New-AzPublicIpAddress `
-Name "AzFwPublicIp1" `
-ResourceGroupName $rgName `
-Sku "Standard" `
-Location "centralus" `
-AllocationMethod Static
$pip2 = New-AzPublicIpAddress `
-Name "AzFwPublicIp2" `
-ResourceGroupName $rgName `
-Sku "Standard" `
-Location "centralus" `
-AllocationMethod Static
New-AzFirewall `
-Name "azFw" `
-ResourceGroupName $rgName `
-Location centralus `
-VirtualNetwork $vnet `
-PublicIpAddress @($pip1, $pip2)
新增公用 IP 位址至現有防火牆
在此範例中,公用 IP 位址 azFwPublicIp1 會附加至防火牆。 使用 New-AzPublicIpAddress 建立新 IP,使用 Get-AzFirewall 取得現有防火牆物件,並用 Set-AzFirewall 儲存更新後的設定。
$pip = New-AzPublicIpAddress `
-Name "azFwPublicIp1" `
-ResourceGroupName "rg" `
-Sku "Standard" `
-Location "centralus" `
-AllocationMethod Static
$azFw = Get-AzFirewall `
-Name "AzureFirewall" `
-ResourceGroupName "rg"
$azFw.AddPublicIpAddress($pip)
$azFw | Set-AzFirewall
從現有防火牆移除公用 IP 位址
在此範例中,公用 IP 位址 azFwPublicIp1 會與防火牆中斷連結。 使用 Get-AzPublicIpAddress 取得現有 IP,使用 Get-AzFirewall 取得防火牆物件,並用 Set-AzFirewall 儲存更新後的設定。
$pip = Get-AzPublicIpAddress `
-Name "azFwPublicIp1" `
-ResourceGroupName "rg"
$azFw = Get-AzFirewall `
-Name "AzureFirewall" `
-ResourceGroupName "rg"
$azFw.RemovePublicIpAddress($pip)
$azFw | Set-AzFirewall