Cloud NAT 規則
本頁面簡介 Public NAT 的 Cloud NAT 規則。您可以透過這些規則,定義使用 Cloud NAT 連線至網際網路的方式。
公開 NAT 的 Cloud NAT 規則支援根據來源或目的地地址進行來源網路位址轉譯 (SNAT)。
網路位址轉譯 (NAT) 規則
根據預設,當您為 Public NAT 設定 Cloud NAT 閘道時,該 NAT 閘道轉譯的封包會使用同一組 NAT IP 位址,連線至所有網際網路位址。如要進一步控管 Cloud NAT 翻譯的封包,可以新增 NAT 規則。
NAT 規則會定義比對條件和對應動作。指定 NAT 規則後,每個封包都會與各個 NAT 規則比對。如果封包符合規則中設定的條件,就會執行與該相符條件對應的動作。
公開 NAT 的 NAT 規則支援來源和目的地地址比對:
- 在以來源為準的規則中,封包會依據來源 IP 位址比對。僅支援 IPv4 來源位址。
- 在以目的地為準的規則中,封包會依據目的地 IP 位址比對。僅支援 IPv4 目的地地址。
單一 NAT 規則中不得同時包含來源和目的地條件。詳情請參閱 NAT 規則規格。
Cloud NAT 規則設定範例
本節提供以來源和目的地為準的 NAT 規則設定範例。
以來源為準的規則
您可以將來源型 NAT 規則用於 Public NAT 支援的任何流量。本節將顯示啟用 IP 轉送的 VM 執行個體設定範例。
根據預設,為子網路中的 IPv4 流量設定 Cloud NAT 閘道時,閘道會為該子網路中任何 VM 執行個體的主要內部 IP 位址和別名 IP 範圍提供 NAT。您也可以使用以來源為準的 NAT 規則,為轉送含有其他來源位址封包的 VM 執行個體設定 NAT。
在本範例中,Cloud NAT 是在 Subnet A 中設定。在子網路中,具有主要內部 IP 位址 10.1.1.2 和別名 IP 範圍 10.2.1.0/24 的 VM 執行個體會將流量傳送至網際網路。請注意 VM 執行個體須符合下列規定:
- 如果封包來自 IP 範圍
192.168.1.0/24,VM 必須使用 NAT IP 位址203.0.113.10,才能將流量傳送至任何網際網路目的地。 - 如果封包來自 IP 範圍
192.168.2.0/24,VM 必須使用 NAT IP 位址203.0.113.20,才能將流量傳送至任何網際網路目的地。 - 如果封包來自 IP 位址
10.1.1.2(VM 的主要內部 IP 位址) 或 IP 範圍10.2.1.0/24(VM 的別名 IP 範圍),VM 必須使用 NAT IP 位址203.0.113.30,才能將流量傳送至任何網際網路目的地。
如要符合這些規定,請為轉送的封包建立兩個以來源為準的 NAT 規則,並為來自 VM 執行個體主要內部 IP 位址和別名 IP 範圍的封包建立預設規則:
- 以來源為準的規則 1:如果來源位址為
192.168.1.0/24,請使用203.0.113.10將流量傳送至網際網路。 - 以來源為依據的規則 2:如果來源位址為
192.168.2.0/24,請使用203.0.113.20將流量傳送至網際網路。 - 預設規則:對於所有其他封包,請使用
203.0.113.30將流量傳送至網際網路。
如果 VM 執行個體轉送的封包來源位址不符合規則 1 或規則 2,封包就會遭到捨棄。如要瞭解 Cloud NAT 如何為啟用 IP 轉送的 VM 分配通訊埠,請參閱「IP 轉送的通訊埠分配」一文。
如要進一步瞭解如何使用以來源為準的 NAT 規則,請參閱「Cloud WAN 背後機制:深入瞭解我們獨特的網路功能」。
以目的地為準的規則
下列範例說明目的地只允許少數 IP 位址存取時,如何使用 NAT 規則。建議您只使用允許的 IP 位址,透過 SNAT 轉換私人子網路中 VM 的流量, Google Cloud 建議您不要將這些 IP 位址用於其他目的地。
請考量 Subnet-1 (10.10.10.0/24) 中的 VM 須符合下列需求,該 VM 位於虛擬私有雲網路 test 的 A 區域:
- VM 必須使用 NAT IP 位址
203.0.113.20,將流量傳送至目的地198.51.100.20/30。 - VM 必須使用 NAT IP 位址
203.0.113.30,將流量傳送至目的地198.51.100.30或198.51.100.31。 - VM 必須使用 NAT IP 位址
203.0.113.40,才能將流量傳送至任何其他網際網路目的地。
這個 VPC 網路在同一區域中也包含兩個額外的子網路。這些 VM 必須使用 NAT IP 位址 203.0.113.10,才能將流量傳送至任何目的地。
您可以在這個範例中使用 NAT 規則,但需要兩個 NAT 閘道,因為 Subnet-1 (10.10.10.0/24) 的 NAT 規則與其他子網路不同。如要建立這項設定,請按照下列步驟操作:
- 為
Subnet-1建立名為Cloud NAT Gateway 1的閘道,並使用 NAT IP 位址203.0.113.40,然後新增下列規則:Cloud NAT Gateway 1中的網路位址轉譯 (NAT) 規則 1:當目的地為198.51.100.20/30時,使用203.0.113.20進行網路位址轉譯 (NAT)。Cloud NAT Gateway 1中的 NAT 規則 2:如果目的地是198.51.100.30或198.51.100.31,請使用203.0.113.30進行 NAT。
- 為該區域的其他子網路建立名為
Cloud NAT Gateway 2的閘道,並將 NAT IP 位址指派為203.0.113.10。這個步驟不需要 NAT 規則。
網路位址轉譯 (NAT) 規則規格
- Cloud NAT 支援以來源和目的地為依據的規則。每項規則都會根據來源或目的地地址定義條件,但不會同時根據兩者。
- 規則優先順序會從 0 (最高優先順序) 到 65,000 (最低優先順序),以獨一無二的方式識別 NAT 規則。兩個規則不得有相同的優先順序。
- 每項 NAT 設定都有預設規則 (規則優先順序為 65,001):
- 如果封包不符合相同 NAT 設定中的任何來源或目的地 NAT 規則,就會套用預設規則。例外狀況: 預設規則不適用於轉送的封包。如要對這些封包使用 NAT,NAT 設定必須包含相符的來源規則。詳情請參閱「以來源為準的規則」和「IP 轉送的通訊埠分配」。
- 預設規則的 IP CIDR 範圍為
0.0.0.0/0。如果 NAT 設定同時包含以來源和目的地為準的規則,則任何符合預設規則資格,且不符合任何自訂規則的流量,都會由這個預設規則處理,並使用指派給該規則的 NAT IP 位址。
- 只有在 NAT IP 分配選項的值為
MANUAL_ONLY時,系統才會支援 Cloud NAT 規則。 特定規則中設定的所有 IP 位址必須為同一個級別。
您無法在同一條規則 (包括預設規則) 中混用進階級和標準級 IP 位址。
NAT 規則的相符條件中,IP CIDR 範圍不得重疊。每個封包最多只能套用一項規則。如果封包同時符合來源和目的地規則,Cloud NAT 會套用優先順序較高的規則。
您無法使用
0.0.0.0/0做為來源或目的地範圍建立 NAT 規則,因為預設規則會使用這個範圍。網路位址轉譯 (NAT) 規則中的網路位址轉譯 (NAT) IP 位址不得重疊。
規則必須具有非空白的
Active或非空白的DrainIP 位址。如果規則的ActiveIP 位址為空白,系統會捨棄符合 NAT 規則的新連線。如果 NAT 閘道已啟用端點獨立對應 (EIM),就無法新增 NAT 規則。如果 NAT 閘道含有 NAT 規則,就無法啟用 EIM。
通訊埠分配
Cloud NAT 閘道會使用每個 VM 的通訊埠數量下限 (minPortsPerVm) 設定,判斷要為每個 VM 分配多少來源通訊埠。
由於單一 NAT IP 位址可提供 64,512 個可用通訊埠,因此 minPortsPerVm 的值會決定一個 NAT IP 位址可支援的 VM 數量上限。舉例來說,如果 minPortsPerVm 為 1,024 個通訊埠,單一 IP 位址最多可支援 63 個 VM (64,512 ÷ 1,024)。
系統會使用 minPortsPerVm 的值,為每個已設定的 NAT 規則 (包括預設規則) 獨立計算連接埠分配。如果 VM 耗盡特定規則分配的連接埠,系統就會捨棄符合該規則的新連線。
規則類型和通訊埠分配
Cloud NAT 會根據 NAT 規則的類型分配通訊埠:
- 預設規則。即使 VM 已啟用 IP 轉送功能,系統仍會為每個由 Cloud NAT 閘道提供服務的 VM 分配連接埠,這些 VM 的主要內部 IP 位址或別名 IP 範圍皆適用此規則。預設規則只會處理源自主要內部 IP 位址或別名 IP 範圍的流量,不會處理轉送的流量。
以來源為準的規則。只有在 VM 的主要內部 IP 位址或別名 IP 範圍,與 NAT 規則中指定的來源位址相符時,系統才會將連接埠分配給 VM。舉例來說,假設 Cloud NAT 閘道設定為提供主要 IP 位址範圍,其中包含
10.1.1.1和10.1.1.2。如果以來源為依據的規則指定10.1.1.1做為相符條件,但 VM 使用主要內部 IP 位址10.1.1.2傳送封包,Cloud NAT 就不會從該特定規則將連接埠分配給 VM。限制:如果 VM 啟用IP 轉送,通訊埠分配作業的運作方式會有所不同。在本例中,Cloud NAT 會同時從 NAT 設定中的預設規則和所有以來源為準的規則,為 VM 分配通訊埠。詳情請參閱「IP 轉送的通訊埠分配」。
以目的地為準的規則。對於每個規則,系統會為 Cloud NAT 閘道服務的每個 VM 分配連接埠,這些 VM 的主要內部 IP 位址或別名 IP 範圍。每個 VM 都會從預設規則和每個以目的地為準的規則接收通訊埠。
舉例來說,如果閘道為每個 VM 設定 1,024 個通訊埠,且除了預設 NAT 規則外,還有兩項以目的地為準的 NAT 規則,則每個 VM 會從每項規則分配到 1,024 個通訊埠。
IP 轉送的通訊埠分配
如要支援啟用IP 轉送的 VM,這些 VM 的規則比對作業在連接埠分配和封包處理期間會有所不同:
通訊埠分配。由於轉送 VM 可以發出具有任意來源 IP 位址的封包,因此 Cloud NAT 會將這些 VM 視為符合預設規則,以及 NAT 設定中的所有來源型 NAT 規則。因此,對於每個轉送 VM,Cloud NAT 閘道會同時從預設規則和每個以來源為準的規則中,分配
minPortsPerVm值。舉例來說,假設 Cloud NAT 閘道設定的
minPortsPerVm為 1,024,一個以來源為準的 NAT 規則有一個 NAT IP 位址,預設 NAT 規則則有 10 個 NAT IP 位址。每個轉送 VM 都會從這兩項規則中分配到 1,024 個通訊埠。由於以來源為準的規則只有一個 NAT IP 位址,因此最多可支援 63 個轉送 VM。Cloud NAT 閘道也會從預設規則中,為這些 VM 保留 64,512 個通訊埠 (63 個 VM × 1,024 個通訊埠)。封包處理。如要進行實際的位址轉譯,來源型規則只會在封包的來源 IP 位址符合規則條件中定義的來源位址時,才會處理封包。預設規則不會處理來自已啟用 IP 轉送功能的 VM 的轉送流量。如果任意來源 IP 位址的封包不符合以來源為依據的規則,就會遭到捨棄。
為避免通訊埠耗盡,導致包含啟用 IP 轉送功能的 VM 的 NAT 設定發生錯誤,請確保 NAT 規則設定的通訊埠容量充足:
- 除了使用預設規則從主要內部 IP 位址或別名 IP 範圍傳送流量的每個 VM 之外,預設規則也必須有足夠的 NAT IP 位址,才能支援 Cloud NAT 閘道服務的所有轉送 VM。
- 每個以來源為準的規則都必須有足夠的 NAT IP 位址,才能支援閘道服務的所有轉送 VM。此外,規則也必須有足夠的 NAT IP 位址,才能支援每個 VM,這些 VM 會使用該特定來源型規則,從主要內部 IP 位址或別名 IP 範圍傳輸流量。
通訊埠容量
如果 NAT 規則的 IP 位址無法支援必要的通訊埠分配,該規則可能會耗盡可用通訊埠。
假設子網路有 16 個 VM,且 Cloud NAT 閘道已設定每個 VM 4,096 個通訊埠。閘道有三項規則:
- 具有兩個 NAT IP 位址的預設 NAT 規則
- 目的地型
rule-1,使用一個 NAT IP 位址 - 以目的地為準的
rule-2,使用兩個 NAT IP 位址
由於系統會根據每條規則獨立計算通訊埠分配,因此每條規則都必須提供 65,536 個通訊埠 (16 個 VM × 4,096 個通訊埠)。
預設規則和 rule-2 的容量充足。不過,rule-1 只有一個 IP 位址 (64,512 個可用連接埠),不足以為所有 16 個 VM 提供完整分配。因此,如果 VM 未收到完整通訊埠分配,相符的 rule-1 流量可能會遭到捨棄。
如要檢查 NAT 規則是否需要更多 IP 位址,可以使用 minExtraIpsNeeded 欄位。如果 NAT 規則中的現有 IP 位址無法滿足所有已設定 VM 的通訊埠需求,這個欄位會顯示您必須分配的 IP 位址數量。
通訊埠容量規劃
規劃 NAT 規則的通訊埠容量時,請考量 Cloud NAT 如何為 NAT 規則分配通訊埠:
- 通訊埠分配
- 規則類型和通訊埠分配
- IP 轉送的通訊埠分配 (適用於包含已啟用 IP 轉送功能的 VM 的 NAT 設定)
規則運算式語言
NAT 規則是使用一般運算語言語法編寫。
運算式需要兩個元件:
- 可在規則運算式中檢查的屬性。
- 可對屬性執行的作業,做為運算式的一部分。
舉例來說,下列運算式會在 inIpRange() 運算中使用 destination.ip 和 198.51.100.0/24 屬性。在本範例中,如果 destination.ip 位於 198.51.100.0/24 IP 位址範圍內,運算式就會傳回 true。
inIpRange(destination.ip, '198.51.100.0/24')
NAT 規則僅支援下列屬性和作業:
屬性
屬性代表輸出封包的資訊,例如來源和目的地 IP 位址。
| 屬性名稱 | 說明 |
|---|---|
source.ip |
封包的來源 IP 位址 |
destination.ip |
封包的目的地 IP 位址 |
作業
以下參照說明可與屬性搭配使用的運算子,用於定義規則運算式。
| 作業 | 說明 |
|---|---|
inIpRange(string, string) -> bool |
如果 IP CIDR 範圍 y 包含 IP 位址 x,inIpRange(x, y) 會傳回 true。 |
|| |
邏輯運算子。如果 x 或 y 是 true,x || y 會傳回 true。 |
== |
等於運算子。如果 x 等於 y,x == y 會傳回 true。 |
運算式範例
您可以根據來源或目的地地址比對封包,但不能同時根據兩者比對。
以來源為依據的比對範例
比對來源 IP 位址為 10.0.0.25 的封包:
"source.ip == '10.0.0.25'"
比對來源 IP 位址為 10.0.0.25 或 10.0.0.26 的封包:
"source.ip == '10.0.0.25' || source.ip == '10.0.0.26'"
比對來源 IP 位址範圍為 10.0.2.0/24 的封包:
"inIpRange(source.ip, '10.0.2.0/24')"
比對來源 IP 位址為 10.0.0.25 或來源 IP 位址範圍為 10.0.2.0/24 的封包:
"source.ip == '10.0.0.25' || inIpRange(source.ip, '10.0.2.0/24')"
依目的地比對的範例
比對目的地 IP 位址為 198.51.100.20 的封包:
"destination.ip == '198.51.100.20'"
比對目的地 IP 位址為 198.51.100.20 或 198.51.100.21 的封包:
"destination.ip == '198.51.100.20' || destination.ip == '198.51.100.21'"
比對目的地 IP 位址範圍為 198.51.100.10/30 的封包:
"inIpRange(destination.ip, '198.51.100.10/30')"
比對目的地 IP 位址為 198.51.100.20 或目的地 IP 位址範圍為 198.51.100.10/30 的封包:
"destination.ip == '198.51.100.20' || inIpRange(destination.ip, '198.51.100.10/30')"