Cloud NAT 規則
您可以使用 NAT 規則功能建立存取規則,定義使用 Cloud NAT 連線至網際網路的方式。NAT 規則支援根據目的地位址的來源 NAT。
如果您在設定 NAT 閘道時未設定 NAT 規則,使用該 NAT 閘道的 VM 會使用相同的 NAT IP 位址組合來存取所有網際網路位址。如要進一步控管透過 Cloud NAT 傳送的封包,您可以新增 NAT 規則。NAT 規則會定義比對條件和對應的動作。指定 NAT 規則後,每個封包都會與每個 NAT 規則進行比對。如果封包符合規則中設定的條件,就會執行與該比對相符的動作。
Cloud NAT 規則設定範例
以下範例說明當目的地只允許來自少數 IP 位址的存取權時,如何使用 NAT 規則。建議您只允許特定 IP 位址,讓私人子網路中的 Google Cloud VM 將流量傳送至這些目的地。建議您不要將這些 IP 位址用於其他目的地。
請考量 Subnet-1
(10.10.10.0/24
) 中的 VM 符合下列要求,該 VM 位於 VPC 網路 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 規則,但由於 Subnet-1
(10.10.10.0/24
) 的 NAT 規則與其他子網路不同,因此您需要兩個 NAT 閘道。如要建立這個設定,請按照下列步驟操作:
- 為
Subnet-1
建立名為Cloud NAT Gateway 1
的閘道,並使用 NAT IP 位址203.0.113.40
新增下列規則:Cloud NAT Gateway 1
中的 NAT 規則 1:如果目的地是198.51.100.20/30
,請使用來源 NAT 搭配203.0.113.20
。Cloud NAT Gateway 1
中的 NAT 規則 2:如果目的地是198.51.100.30
或198.51.100.31
,請使用來源 NAT 搭配203.0.113.30
。
- 為該區域的其他子網路建立名為
Cloud NAT Gateway 2
的閘道,並將 NAT IP 位址指派為203.0.113.10
。這個步驟不需要 NAT 規則。
網路位址轉譯 (NAT) 規則規格
使用 NAT 規則前,請注意下列規範:
- 規則編號可用來唯一識別 NAT 規則。兩個規則的規則編號不得相同。
- 每個 NAT 設定都有預設規則:
- 如果同一個 NAT 設定中沒有其他 NAT 規則相符,系統就會套用預設規則。
- 預設規則的規則編號為
65001
。 - 預設規則的目的 IP CIDR 範圍為
0.0.0.0/0
。
- 只有在 NAT IP 分配選項的值為
MANUAL_ONLY
時,系統才支援 Cloud NAT 規則。 在特定規則中設定的所有 IP 位址都必須屬於同一個層級。
您無法在同一規則 (包括預設規則) 中混用進階級和標準級 IP 位址。
比對條件中的目的地 IP CIDR 範圍,不得與 NAT 規則重疊。最多只能有一個規則可比對任何特定封包。
您無法建立目的地 IP CIDR 範圍為
0.0.0.0/0
的 NAT 規則,因為預設規則會使用該範圍。不同 NAT 規則的網路位址轉譯 (NAT) IP 位址不得重疊。
規則必須包含非空白的
Active
或非空白的Drain
IP 位址。如果規則的Active
IP 位址為空白,系統就會捨棄符合 NAT 規則的新連線。無法將 NAT 規則新增至已啟用端點獨立對應 的 NAT 閘道。您無法在含有 NAT 規則的 NAT 閘道上啟用端點獨立對應。
此外,所有 VM 都會根據每個 Cloud NAT 規則的每個 VM 通訊埠數量下限值,取得系統指派的通訊埠。如果 NAT 規則為 VM 分配的通訊埠用盡,系統會捨棄符合 NAT 規則的新連線。
舉例來說,如果您為每個 VM 設定 4,096 個通訊埠,且有 16 個 VM 和 2 個 NAT 規則 (rule1
有 1 個 IP 位址,rule2
有 2 個 IP 位址),以及 2 個 IP 位址的預設規則 (default
),則每個 NAT 規則組合中的所有 16 個 VM 都會取得 4,096 個通訊埠。在此範例中,default
或 rule2
的所有 VM 都沒有問題,但 rule1
無法為所有 VM 分配通訊埠。因此,如果 VM 的流量需要經過 rule1
,由於流量未使用預設規則,因此可能會遭到捨棄,並顯示資源不足的跡象。
規則運算式語言
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 位址。
屬性名稱 | 說明 |
---|---|
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 位址 198.51.100.20
的流量。
"destination.ip == '198.51.100.20'"
比對流量與目的地 IP 位址 198.51.100.10/30
或 198.51.100.20
。
"inIpRange(destination.ip, '198.51.100.10/30') || destination.ip == '198.51.100.20'"
後續步驟
- 瞭解如何設定 NAT 規則。