使用來源網路位址轉譯 (SNAT) 進行輸出連線

某些案例需要虛擬機器或計算執行個體來進行與網際網路的輸出連線。 公用負載平衡器的前端 IP 可用來為後端實例提供網際網路的輸出連線。 此組態會使用 來源網路位址轉譯 (SNAT) 將虛擬機器的私人 IP 轉譯為負載平衡器的公用 IP 位址。 SNAT 會將後端的 IP 位址對應至負載平衡器的公用 IP 位址。 SNAT 可防止外部來源擁有後端執行個體的直接位址。

Azure 的輸出連線方法

下列方法是 Azure 最常用來啟用輸出連線的方法:

# 方法 埠配置的類型 生產等級? Rating
1 使用負載平衡器的前端 IP 位址,透過輸出規則輸出 靜態、明確 是,但不大規模 [確定]
2 將 NAT 閘道與子網產生關聯 動態、明確 Yes 最佳
3 將公用 IP 指派給虛擬機器 靜態、明確 Yes [確定]
4 預設輸出存取 隱含 No 糟糕

Diagram of Azure outbound options.

1.使用負載平衡器的前端 IP 位址透過輸出規則輸出

Diagram public load balancer with outbound rules.

輸出規則可讓您明確定義標準 SKU 公用負載平衡器的 SNAT(來源網路位址轉譯)。 此組態可讓您使用負載平衡器的公用 IP 或 IP 進行後端實例的輸出連線。

此設定可啟用:

  • IP 偽裝

  • 簡化允許清單

  • 減少用於部署的公用 IP 資源數目

透過輸出規則,您可以完整控制輸出網際網路連線能力。 輸出規則可讓您透過手動埠配置來調整和調整特定需求的能力。 根據後端集區大小和 前端 IPConfiguration 的數目 手動設定 SNAT 埠,有助於避免 SNAT 耗盡。

您可以透過「每個實例的埠」或「後端實例數目上限」手動設定 SNAT 埠。 如果您的後端有虛擬機器,建議您依「每個實例的埠」來配置埠,以取得最大 SNAT 埠使用量。

計算每個實例的埠,如下所示:

前端 IP 數目 * 64K / 後端實例數目

如果您在後端虛擬機器擴展集,建議使用「後端實例數目上限」來配置埠。 如果已將 VM 新增至後端超過允許的剩餘 SNAT 埠,可能會封鎖相應放大虛擬機器擴展集,或新的 VM 無法接收足夠的 SNAT 埠。

如需輸出規則的詳細資訊,請參閱 輸出規則

2.將 NAT 閘道與子網建立關聯

Diagram of a NAT gateway and public load balancer.

Azure NAT 閘道可簡化虛擬網路的輸出專用網際網路連線。 在子網路上設定時,所有輸出連線都會使用您指定的靜態公用 IP 位址。 在沒有負載平衡器或直接連結至虛擬機器的公用 IP 位址的情況下,輸出連線是可行的。 NAT 閘道完全受控且具有高度復原性。

使用 NAT 閘道是輸出連線的最佳方法。 NAT 閘道具有高度可擴充性、可靠性,而且與 SNAT 埠耗盡沒有相同的考慮。

如需 Azure NAT 閘道的詳細資訊,請參閱 什麼是 Azure NAT 閘道

3.將公用 IP 指派給虛擬機器

Diagram of virtual machines with instance level public IP addresses.

關聯 方法 IP 通訊協定
VM NIC 上的公用 IP 未使用 SNAT(來源網路位址轉譯)。
TCP (傳輸控制通訊協定)
UDP (使用者資料包通訊協定) ICMP (網際網路控制訊息通訊協定)

ESP (封裝安全性承載)

流量會從虛擬機器的公用 IP 位址 (實例層級 IP) 傳回要求用戶端。

Azure 會針對所有輸出流程,使用指派給實例 NIC 之 IP 組態的公用 IP。 實例具有所有暫時埠可用。 VM 是否負載平衡並不重要。 此案例優先于其他案例。

指派給 VM 的公用 IP 是 1:1 關聯性(而非 1:1:1),並實作為無狀態 1:1 NAT。

4.預設輸出存取

Diagram of default outbound access.

在 Azure 中,在未定義明確輸出連線的虛擬網路中建立的虛擬機器會指派預設輸出公用 IP 位址。 此 IP 位址會啟用從資源到網際網路的輸出連線。 此存取稱為 預設輸出存取 。 不建議 使用這種存取方法,因為它不安全,而且 IP 位址可能會變更。

重要

在 2025 年 9 月 30 日,新部署的預設輸出存取將會淘汰。 如需詳細資訊,請參閱官方公告。 建議使用一種說明形式的連線,如上述選項 1-3 所示。

什麼是 SNAT 埠?

埠可用來產生用來維護不同流程的唯一識別碼。 網際網路會使用五個 Tuple 來提供這項區別。

如果埠用於輸入連線,則會有 該埠上輸入連線要求的接聽程式 。 該埠無法用於輸出連線。 若要建立輸出連線, 會使用暫時埠 來為目的地提供通訊和維護不同流量流量的埠。 當這些暫時埠用於 SNAT 時,它們稱為 SNAT 埠

根據定義,每個 IP 位址都有 65,535 個埠。 每個埠都可用於 TCP(傳輸控制通訊協定)和 UDP(使用者資料包通訊協定)的輸入和輸出連線。 將公用 IP 位址新增為負載平衡器的前端 IP 時,64,000 個埠符合 SNAT 的資格。

負載平衡或輸入 NAT 規則中使用的每個埠都會從 64,000 個可用的 SNAT 埠取用 8 個埠的範圍。 如果相同的前端 IP 用於輸出連線,此使用方式可減少符合 SNAT 資格的埠數目。 如果負載平衡或輸入 NAT 規則取用的埠位於另一個規則所取用八個埠的相同區塊中,規則就不需要額外的埠。

注意

如果您需要連線到任何 支援的 Azure PaaS 服務 ,例如 Azure 儲存體、Azure SQL 或 Azure Cosmos DB,您可以使用 Azure Private Link 完全避免 SNAT。 Azure Private Link 會透過 Azure 骨幹網路將來自虛擬網路的流量傳送至 Azure 服務,而不是透過網際網路傳送。

私人連結是建議選項,可透過服務端點存取 Azure 託管服務。 如需 Private Link 和服務端點差異的詳細資訊,請參閱 比較私人端點和服務端點

預設 SNAT 如何運作?

當 VM 建立輸出流程時,Azure 會將來源 IP 位址轉譯為暫時 IP 位址。 此翻譯是透過 SNAT 完成的。

如果透過公用負載平衡器不使用輸出規則的 SNAT,則會預先配置 SNAT 埠,如下列預設 SNAT 埠配置資料表所述:

預設埠配置資料表

選取負載平衡規則以使用預設埠配置,或輸出規則設定為「使用預設輸出埠數目」時,預設會根據後端集區大小來配置 SNAT 埠。 後端將會收到資料表所定義的埠數目,每個前端 IP 最多 1024 個埠。

例如,在後端集區中有 100 部 VM,且只有一個前端 IP,每個 VM 將會收到 512 個埠。 如果新增第二個前端 IP,每個 VM 將會收到額外的 512 個埠。 這表示每個 VM 共配置 1024 個埠。 因此,新增第三個前端 IP 不會增加超過 1024 個埠的已配置 SNAT 埠數目。

根據經驗法則,利用預設埠配置時提供的 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 位址的 64,000 個埠分散到許多後端實例時,就會發生此耗盡。 如需 SNAT 埠耗盡風險降低的指引,請參閱 疑難排解指南

針對 TCP 連線,負載平衡器會針對每個目的地 IP 和埠使用單一 SNAT 埠。 此多重使用可讓多個連線到具有相同 SNAT 埠的相同目的地 IP。 如果連線不是不同的目的地埠,則此多重使用會受到限制。

針對 UDP 連線,負載平衡器會使用 埠限制的 Cone NAT 演算法,它會針對每個目的地 IP 取用一個 SNAT 埠,無論目的地埠為何。

埠會針對無限制的連線數目重複使用。 只有在目的地 IP 或埠不同時,才會重複使用埠。

條件約束

  • 當連線閒置且未傳送新的封包時,埠會在 4 - 120 分鐘後釋出。

  • 此閾值可透過輸出規則進行設定。

  • 每個 IP 位址都提供 64,000 個埠,可用於 SNAT。

  • 每個埠都可用於目的地 IP 位址的 TCP 和 UDP 連線

  • 不論目的地埠是否是唯一的,都需要 UDP SNAT 埠。 針對目的地 IP 的每個 UDP 連線,會使用一個 UDP SNAT 埠。

  • TCP SNAT 埠可用於與相同目的地 IP 的多個連線,前提是目的地埠不同。

  • 當後端實例用完指定的 SNAT 埠時,就會發生 SNAT 耗盡。 負載平衡器仍然可以有未使用的 SNAT 埠。 如果後端實例使用的 SNAT 埠超過其指定的 SNAT 埠,就無法建立新的輸出連線。

  • 除非輸出是透過 VM NIC 上的實例層級公用 IP,否則會捨棄分散的封包。

  • 網路介面的次要 IP 組態不會透過負載平衡器提供輸出通訊(除非公用 IP 與其相關聯)。

下一步