某些案例需要虛擬機器或計算執行個體,才能具有網際網路的輸出連線能力。 Azure 公用負載平衡器的前端 IP 可用來為後端執行個體,提供網際網路的輸出連線能力。 這種設定會使用來源網路位址轉譯 (SNAT) 將虛擬機器的私人 IP 轉譯為負載平衡器的公用 IP 位址。 SNAT 會將後端的 IP 位址對應至負載平衡器的公用 IP 位址。 SNAT 可防止外部來源擁有後端執行個體的直接位址。
Azure 的出站連接方法
以下方法是 Azure 最常用的外接連線方法,並依多種方法使用時的優先順序排列:
| # | 方法 | 連接埠配置類型 | 生產環境等級? | 評等 |
|---|---|---|---|---|
| 1 | 建立 NAT 閘道至子網路的關聯 | 動態、明確 | 是 | 最佳 |
| 2 | 將公用 IP 指派至虛擬機器 | 靜態、明確 | 是 | [確定] |
| 3 | 使用負載平衡器的前端 IP 位址,透過輸出規則進行輸出 | 靜態、明確 | 是,但不是大規模 | [確定] |
| 4 | 使用負載平衡器的前端 IP 位址,不使用輸出規則進行輸出 | 靜態、隱含 | 否 | 最差 |
| 5 | 預設輸出存取 | 隱含 | 否 | 最差 |
1.建立 NAT 閘道至子網路的關聯
Azure NAT 閘道 簡化了虛擬網路僅外撥的網際網路連線。 在子網路上設定時,所有輸出連線都會使用您指定的靜態公用 IP 位址。 在沒有負載平衡器或直接連結至虛擬機器的公用 IP 位址的情況下,可能有輸出連線能力。 NAT 網路閘道完全受控且具有高度復原性。
使用 NAT 閘道是輸出連線能力的最佳方法。 NAT 閘道可高度擴充且可靠,也沒有 SNAT 連接埠耗盡的相同顧慮。
NAT 閘道優先於其他出站連接方式,包括負載平衡器、實例層級的公共 IP 位址及 Azure 防火牆。
欲了解更多Azure NAT 閘道資訊,請參見什麼是Azure NAT 閘道。 如需 SNAT 行為如何與 NAT 閘道搭配運作的詳細資訊,請參閱使用 NAT 閘道的 SNAT (部分機器翻譯)。
2.將公用 IP 指派至虛擬機器
| 關聯 | 方法 | IP 通訊協定 |
|---|---|---|
| VM NIC 上的公用 IP | 系統不會使用 SNAT (來源網路位址轉譯) 。 |
TCP (傳輸控制通訊協定) UDP (使用者資料包協定) ICMP (網際網路控制訊息通訊協定) ESP (封裝安全性承載) |
流量會從虛擬機器的公用 IP 位址 (執行個體層級 IP) 回到要求用戶端。
Azure 會針對所有輸出流程使用指派給執行個體 NIC 之 IP 設定的公用 IP。 執行個體有所有可用的暫時連接埠。 VM 進行負載平衡與否並不重要。 此案例的優先順序高於其他案例,但 NAT 閘道除外。
指派給虛擬機器的公用 IP 是 1:1 關聯 (而非 1:多) 而且會實作為無狀態 1:1 NAT。
3.使用負載平衡器的前端 IP 位址,透過輸出規則進行輸出
輸出規則能讓您針對標準 SKU 公用負載平衡器,來明確定義 SNAT (來源網路位址轉譯)。 此設定可讓您針對後端執行個體的輸出連線能力使用負載平衡器的公用 IP。
此設定會啟用:
IP 偽裝
簡化您的允許清單
減少用於部署的公用 IP 資源數目
使用輸出規則時,您可以對輸出網際網路連線能力具有完整宣告式控制。 輸出規則可讓您透過手動連接埠配置來調整此功能,以滿足您的特定需求。 根據後端集區大小和 frontendIPConfigurations 數目手動設定 SNAT 連接埠,可協助避免 SNAT 耗盡。
您可以依「每個執行個體的連接埠數」或「後端執行個體數目上限」手動配置 SNAT 連接埠。 如果您在後端有虛擬機器,建議您依「每個執行個體的連接埠數」來配置連接埠,以取得最大的 SNAT 連接埠使用量。
計算每個執行個體的連接埠,如下所示:
前端 IP 數目 * 64K/後端執行個體數目
如果你在後端有 虛擬機器擴展集,建議依照「最大後端實例數」來分配埠口。 如果後端新增的虛擬機數量超過剩餘的 SNAT 埠口,可能會阻止 虛擬機器擴展集 的擴展,或導致新虛擬機無法獲得足夠的 SNAT 埠口。
附註
使用輸出規則設定多個前端 IP 時,輸出連線可以來自設定至後端執行個體的任何前端 IP。 不建議建置任何相依於可選取用於連線的前端 IP 的做法。
如需輸出規則的詳細資訊,請參閱輸出規則。
4. 使用負載平衡器的前端 IP 位址,不使用輸出規則進行輸出
此選項與上一個選項類似,但未建立輸出規則時除外。 在這種情況下,負載平衡器的前端仍會被用於輸出,但是這是以隱含方式完成的,並沒有指定使用哪個前端的規則。 不使用輸出規則也會降低輸出的可擴縮性,因為隱含輸出連線在每個前端 IP 位址都有固定數目的 SNAT 連接埠,這可能會導致在高流量案例時發生連接埠耗盡的情形。
5.預設輸出存取
在 Azure 中,虛擬網路中建立且未明確定義出站連線的虛擬機器會被分配到預設的出站公 IP 位址。 此 IP 位址可讓資源輸出連線到網際網路。 這項存取稱為預設輸出存取。 不建議使用這種存取方法,因為它不安全,而且 IP 位址可能會變更。
重要事項
自 2026 年 3 月 31 日起,新建立的虛擬網路將預設為使用私人子網路。 如需詳細資訊,請參閱官方公告。 建議使用上述選項 1-3 中所示的其中一種明確連線形式。
什麼是 SNAT 連接埠?
連接埠是用來產生維護相異流程的唯一識別碼。 網際網路會使用五個元組來提供這種差異。
如果連接埠用於輸入連線,就會有該連接埠上輸入連線要求的接聽程式。 該連接埠無法用於輸出連線。 若要建立輸出連線,則會使用暫時連接埠來提供目的地連接埠,以進行通訊並維護不同的流量流程。 當這些暫時連接埠用於 SNAT 時,稱為 SNAT 連接埠。
根據定義,每個 IP 位址都有 65535 個連接埠。 每個連接埠都可以用於 TCP (傳輸控制通訊協定) 和 UDP (使用者資料包協定) 的輸入或輸出連線。 將公用 IP 位址新增為負載平衡器的前端 IP 時,有 64000 個連接埠適用於 SNAT。
負載平衡或輸入 NAT 規則中使用的每個連接埠都會從 64,000 個可用 SNAT 連接埠中取用八個連接埠的範圍。 如果輸出連線使用相同的前端 IP,則此使用方式會減少符合 SNAT 資格的連接埠數目。 如果負載平衡或輸入 NAT 規則取用的連接埠位於另一個規則所取用之八個連接埠的相同區塊中,那麼規則就不需要額外的連接埠。
附註
如果你需要連接任何支援的 Azure PaaS 服務,例如 Azure 儲存體、Azure SQL 或 Azure Cosmos DB,你可以使用 Azure Private Link 完全避免 SNAT。 Azure Private Link 是透過 Azure 骨幹網路,將流量從你的虛擬網路傳送到 Azure 服務,而不是透過網際網路。
相較於服務端點,Private Link 是私下存取 Azure 託管服務的建議選項。 欲了解更多關於Private Link端點與服務端點的差異,請參見 比較私人端點與服務端點。
預設 SNAT 的運作方式為何?
當虛擬機建立出站流程時,Azure 會將來源 IP 位址轉換成短暫的 IP 位址。 這項轉譯是透過 SNAT 完成的。
如果透過公用負載平衡器執行 SNAT,卻沒有輸出規則,則會預先配置 SNAT 連接埠,如下列預設 SNAT 連接埠配置表所述:
預設連接埠配置表
啟用預設連接埠配置時,系統預設會根據後端集區大小配置 SNAT 連接埠。 後端會收到資料表所定義的連接埠數目,每個前端 IP 最多 1,024 個連接埠。 不建議將預設連接埠配置用於生產工作負載,因為這樣做會將最少數量的連接埠配置給每個後端執行個體,並增加 SNAT 連接埠耗盡的風險。 相反地,請考慮使用 NAT 閘道,或在負載平衡器的輸出規則上手動配置連接埠。
有多種方法可以啟用預設連接埠配置:
- 設定負載平衡規則時,可以將 disableOutboundSnat 設置為 false,或者在 Azure 入口網站的負載平衡規則中選擇預設埠分配選項。
- 設定出站規則但將 allocatedOutboundPorts 屬性設為 0,或在 Azure 入口網站選擇「啟用預設埠分配」
例如,在後端集區中有 100 部 VM,且只有一個前端 IP,則每個 VM 會收到 512 個連接埠。 如果新增第二個前端 IP,則每個 VM 會額外收到 512 個連接埠。 這表示每個 VM 共配置 1024 個連接埠。 因此,新增第三個前端 IP 不會使配置的 SNAT 連接埠數目超過 1024 個。
根據經驗法則,套用預設連接埠配置時提供的 SNAT 連接埠數目可以這麼計算:MIN (根據集區大小提供的預設 SNAT 連接埠數目 * 與集區相關聯的前端 IP 數目,1024)
下列資料表顯示單一前端 IP 的 SNAT 連接埠預先配置,具體視後端集區大小而定:
| 集區大小 (VM 執行個體) | 預設 SNAT 連接埠 |
|---|---|
| 1-50 | 1,024 |
| 51-100 | 512 |
| 101-200 | 256 |
| 201-400 | 128 |
| 401-800 | 64 |
| 801-1,000 | 32 |
連接埠耗盡
相同目的地 IP 和目的地連接埠的每個連線皆使用 SNAT 連接埠。 此連線會維護從後端執行個體或用戶端到伺服器的相異流量。 此流程會為伺服器提供用來處理流量的不同連接埠。 如果沒有此流程,用戶端電腦就不會察覺封包所屬的流程。
想有多個瀏覽器進入 https://www.microsoft.com,也就是:
目的地 IP = 23.53.254.142
目的地連接埠 = 443
通訊協定 = TCP
如果沒有傳回流量的 SNAT 連接埠,用戶端就無法將一個查詢結果與另一個查詢結果分開。
輸出連線可能會突然增加。 後端執行個體配置的連接埠可能不足。 在您的應用程式中使用連線重複使用功能。 如果沒有連線重複使用,則會增加 SNAT 連接埠耗盡的風險。
如需有關搭配 Azure App 服務 使用連線集區的詳細資訊,請參閱針對 Azure App 服務 中的間歇性輸出連線錯誤進行疑難排解
發生連接埠耗盡時,目的地 IP 的新輸出連線會失敗。 當連接埠可供使用時,連線就會成功。 當來自 IP 位址的 64000 個連接埠分散在許多後端執行個體上時,就會發生這種耗盡狀況。 關於緩解 SNAT 連接埠耗盡的指引,請參見 Azure Load Balancer 的支援與疑難排解。
連接埠重複使用
針對 TCP 連線,負載平衡器會針對每個目的地 IP 和連接埠使用單一 SNAT 連接埠。 對於相同目的地 IP 的連線,只要目的地連接埠不同,就可以重複使用單一 SNAT 連接埠。 如果已有對於相同目的地 IP 和連接埠的連線,就無法重複使用。
若是 UDP 連線,負載平衡器會使用連接埠受限的錐形 NAT 演算法,而無論目的地連接埠為何,每個目的地 IP 都會使用一個 SNAT 連接埠。
當目的地 IP 或連接埠不同時,個別連接埠可以無限制地重複使用於可重複使用的連線。
在下表的範例中,私人 IP 為 10.0.0.1 的後端執行個體,會對目的地 IP 23.53.254.142 和 26.108.254.155 建立 TCP 連線,並使用前端 IP 位址 192.0.2.0 設定負載平衡器。 由於目的地 IP 不同,因此可以將相同的 SNAT 連接埠重複用於多個連線。
| Flow | 來源元組 | SNAT 之後的來源元組 | 目的地元組 |
|---|---|---|---|
| 1 | 10.0.0.1:80 | 192.0.2.0:1 | 23.53.254.142:80 |
| 2 | 10.0.0.1:80 | 192.0.2.0:1 | 26.108.254.155:80 |
條件約束
當連線閒置且沒有傳送新的封包時,連接埠會在 4–120 分鐘後釋出。
您可以透過輸出規則設定此閾值。
每個 IP 位址都提供可用於 SNAT 的 64000 個連接埠。
每個連接埠都可以同時用於目的地 IP 位址的 TCP 和 UDP 連線
無論目的地連接埠是否唯一,都需要 UDP SNAT 連接埠。 針對目的地 IP 的每個 UDP 連線,會使用一個 UDP SNAT 連接埠。
TCP SNAT 連接埠可用於多個連線至相同目的地 IP 的連線,但前提是目的地連接埠不同。
當後端執行個體用盡指定的 SNAT 連接埠時,就會發生 SNAT 耗盡。 負載平衡器仍可能有未使用的 SNAT 連接埠。 如果後端執行個體已使用的 SNAT 連接埠超過其指定的 SNAT 連接埠,則無法建立新的輸出連線。
除非透過 VM 的 NIC 上的執行個體層級公用 IP 進行輸出,否則會捨棄分散的封包。
輸出規則不支援網路介面的次要 IPv4 設定。 若要在次要 IPv4 設定上啟用輸出連線,請改為連結執行個體層級公用 IP 或使用 NAT 閘道。
後續步驟
- Azure Load Balancer 的支援與故障排除
- 複習 SNAT 計量,並熟悉其篩選、分割和檢視的正確方式。
- 了解如何將現有的輸出連線能力方法遷移至 NAT 閘道