使用來源網路位址翻譯 (SNAT) 外連

在某些情況下,虛擬機器或計算實例必須擁有網際網路的外發連接。 Azure 公用負載平衡器前端 IP 可用來為後端實例提供網際網路的外發連接。 此組 (SNAT) 將虛擬機器的專用 IP 轉換成 Load Balancer 的公用 IP 位址。 SNAT 會將後端的 IP 位址與負載平衡器公用 IP 位址進行映射。 SNAT 可防止外部來源有後端實例的直接位址。

Azure 的外發連接方法

在 Azure 中,可以下列方式啟用網際網路的外發連接:

# 方法 埠配置類型 生產等級? 評級
1 使用前端 IP 位址 (載入) 的負載平衡器,以透過出站規則進行外發 靜態、明確 是,但無法縮放 還行
2 將 NAT 閘道關聯到子網 靜態、明確 是的 最好
3 將公用 IP 指派給虛擬機器 靜態、明確 是的 還行
4 使用 預設外發存取 隱 式 糟糕

1. 使用負載平衡器前端 IP 位址,透過外發規則進行外發

外發規則可針對標準公用負載平衡器 (來源網路位址翻譯) 明確定義 SNAT。 此組式可讓您使用負載平衡器中的公用 IP 或 IP,以取得後端實例的外發連接。

此組會啟用:

  • IP 偽裝
  • 簡化您的允許清單
  • 減少部署公用 IP 資源的數量

使用外發規則,您可以對外發網際網路連接擁有完整的宣告式控制。 外發規則允許您透過手動埠配置,根據特定需求縮放和調整這項功能。 根據後端集區大小和 frontendIPConfiguration 數目手動設定 SNAT 埠,可協助避免 SNAT 用盡。

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

每個實例的埠計算方式如下:

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

如果您在後端有虛擬機器縮放集,建議您以「後端實例數上限」來配置埠。 如果後端新增的虛擬機器超過允許的 SNAT 埠數,則虛擬機器縮放比例設定縮放可能會受到封鎖,或是新的虛擬機器不會收到足夠的 SNAT 埠。

有關外發規則的資訊,請參閱 外發規則

2. 將 NAT 閘道關聯到子網

虛擬網路 NAT 簡化了虛擬網路的外發專用網際網路連接。 在子網上進行配置時,所有出站連接會使用您指定的靜態公用 IP 位址。 沒有直接連接到虛擬機器的負載平衡器或公用 IP 位址,即可進行外發連接。 NAT 已完全管理且高度彈性。

使用 NAT 閘道是外發連接的最佳方法。 NAT 閘道高度可擴展、可靠,且沒有 SNAT 埠用盡的相同問題。

有關 Azure 虛擬網路 NAT 的資訊,請參閱 什麼是 Azure 虛擬網路 NAT

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

協會 方法 IP 通訊協定
VM NIC 上的公用 IP 系統 (來源網路位址翻譯)
SNAT。
TCP (傳輸控制通訊協定) UDP (使用者資料包通訊協定
)
ICMP (網際網路控制訊息通訊協定) ESP (封裝安全性負載)

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

Azure 會針對所有出站流程使用指派給實例 NIC IP 配置的公用 IP。 實例具有所有可用的臨時埠。 無論虛擬機器負載是否平衡都沒關係。 此案例優先于其他案例。

指派給虛擬機器的公用 IP 是 1:1 關聯 (而非 1:許多) 為無狀態 1:1 NAT。

4. 預設外發存取

注意

對於生產工作負載 ,不建議 使用此方法,因為它會增加埠用盡的風險。 請不要在生產工作負載中使用此方法,以避免可能的連接失敗。

任何沒有與其關聯的公用 IP 的 Azure 資源、其前方沒有包含撥出規則的負載平衡器、不是虛擬機器縮放集彈性編排模式的一部分,或沒有與其子網相關聯的 NAT 閘道資源,會為出站配置最小數量的埠。 此存取稱為預設外發存取,是提供應用程式外發連接的最差方法。

預設外發存取的其他範例有:

  • 使用基本負載平衡器時
  • Azure 中的虛擬機器 (沒有上述關聯) 。 在此案例中,出站連接是由預設出站存取 IP 提供。 此 IP 是 Azure 指派的動態 IP,您無法控制。 生產工作負載不建議使用預設 SNAT,而且可能會導致連接失敗。
  • 沒有外發規則的負載平衡器後端集中的 VM。 因此,您將負載平衡器前端 IP 位址用於外發和輸入,且更容易發生 SNAT 埠用盡的連接失敗。

什麼是 SNAT 埠?

埠是用來產生唯一識別碼,用來維護不同的流程。 網際網路使用五 tuple 來提供此區別。

如果埠用於內入連接,則該埠上具有用於傳入連接要求的聆聽程式。 該埠無法用於外發連接。 若要建立外發連接,使用臨時埠為目的地提供一個埠,用來通訊及維護不同的流量。 當這些臨時埠用於 SNAT 時,它們稱為 SNAT 埠

根據定義,每個 IP 位址都有 65,535 個埠。 每個埠都可以用於 TCP (傳輸控制通訊協定) 和 UDP (使用者資料包通訊協定) 。 當公用 IP 位址新增為前端 IP 至負載平衡器時,64,000 個埠符合 SNAT 資格。 雖然所有新增為前端 IP 的公用 IP 都可以配置,但前端 IP 一次會耗用一個。 例如,如果兩個後端實例各配置 64,000 個埠,並存取 2 個前端 IP,則兩個後端實例都會耗用第一個前端 IP 的埠,直到所有 64,000 個埠全部用盡。

用於負載平衡或內入 NAT 規則的埠會耗用來自 64,000 個埠的八個埠。 此使用量會減少符合 SNAT 資格的埠數量。 如果負載平衡或傳入 NAT 規則的範圍與另一個相同,則不會使用額外的埠。

預設 SNAT 如何工作?

當虛擬機器建立出站流程時,Azure 會將來源 IP 位址轉換為暫時的 IP 位址。 此翻譯是透過 SNAT 完成。

如果使用 SNAT 而不透過公用負載平衡器執行外發規則,SNAT 埠會預先配置,如下所述的預設 SNAT 埠配置資料表所述。

預設埠配置表

下表 顯示後端資料庫大小的 SNAT 埠預配置:

虛擬機器實例 (大小) 每個 IP 組組的預設 SNAT 埠
1-50 1,024
51-100 512
101-200 256
201-400 128
401-800 64
801-1,000 32

耗用埠

每個到相同目的地 IP 和目的地埠的連接都會使用 SNAT 埠。 此連接會維持從後端實例或用戶端到伺服器之間的不同流量流量。 此程式會為伺服器提供一個可處理流量的明顯埠。 如果沒有此程式,用戶端電腦不會知道封包屬於哪個流程。

Imagine多個瀏覽器, https://www.microsoft.com 即:

  • 目的地 IP = 23.53.254.142
  • 目的地埠 = 443
  • 通訊協定 = TCP

若沒有用於建立 (的 SNA) T 埠 (不同的目的地埠,用戶端將無法將一個查詢結果與另一個查詢結果分開。

外發連接可能會當線。 後端實例可以配置不足的埠。 在 應用程式中 使用連接重複使用功能。 沒有 重新使用連接,SNAT 埠 用盡 的風險會增加。 有關使用 Azure App Service 建立連接資料庫的詳細資訊,請參閱在 Azure App 服務中疑難排解間歇性的外發 連接錯誤

當埠用盡時,目的地 IP 的新外發連接將會失敗。 當埠可用時,連接將會成功。 當 IP 位址的 64,000 個埠分散到許多後端實例時,會發生此耗用的情況。 有關減輕 SNAT 埠用盡的指南,請參閱 疑難排解指南

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

對於 UDP 連接,負載平衡器會使用埠受限 的圓錐 NAT 演算法,無論目的地埠是什麼,每個目的地 IP 都會耗用一個 SNAT 埠。

埠會重複使用為無限數量的連接。 只有在目的 IP 或埠不同時,埠才能重複使用。

約束

  • 當未送出任何新封包的空閒狀態時,埠將在 4 - 120 分鐘後釋放。
  • 此閾值可透過外發規則進行配置。
  • 每個 IP 位址提供 64,000 個埠,可用於 SNAT。
  • 每個埠都可以用於 TCP 和 UDP 連接到目的地 IP 位址
  • 無論目的埠是否唯一,都需要 UDP SNAT 埠。 針對每個目的地 IP 的 UDP 連接,都會使用一個 UDP SNAT 埠。
  • TCP SNAT 埠可用於同一目的地 IP 的多個連接,只要目的埠不同。
  • 當後端實例用盡給定的 SNAT 埠時,SNAT 會用盡。 負載平衡器仍然可以有未使用的 SNAT 埠。 如果後端實例使用的 SNAT 埠超過其給定的 SNAT 埠,就無法建立新的外發連接。
  • 除非出站是透過虛擬機器 NIC 上的實例層級公用 IP,否則會刪除分段封包。
  • 網路介面的次要 IP 組 (,除非公用 IP) 負載平衡器關聯。

下一個步驟