Cloud NAT 規則

本頁面概述了公用 NAT 的 Cloud NAT 規則。您可以透過這些規則,定義使用 Cloud NAT 連線至網際網路的方式。

公開網路位址轉譯的 Cloud NAT 規則支援來源網路位址轉譯 (SNAT),可根據來源 (搶先版) 或目的地地址進行轉譯。

網路位址轉譯 (NAT) 規則

根據預設,為 Public NAT 設定 Cloud NAT 閘道時,該 NAT 閘道轉譯的封包會使用同一組 NAT IP 位址,連線至所有網際網路位址。如要進一步控管 Cloud NAT 翻譯的封包,可以新增 NAT 規則。

NAT 規則會定義比對條件和對應動作。指定 NAT 規則後,系統會將每個封包與各個 NAT 規則進行比對。如果封包符合規則中設定的條件,就會執行與該相符條件對應的動作。

公用網路位址轉譯 (NAT) 規則支援來源和目的地地址比對:

  • 在以來源為準的規則 (預覽) 中,封包會依據來源 IP 位址比對。僅支援 IPv4 來源位址。
  • 在以目的地為準的規則中,封包會依據目的地 IP 位址比對。僅支援 IPv4 目的地地址。

單一 NAT 規則中不得同時包含來源和目的地條件。詳情請參閱 NAT 規則規格

Cloud NAT 規則設定範例

本節提供以來源和目的地為準的 NAT 規則設定範例。

以來源為準的規則

以下範例說明如何使用以來源為準的 NAT 規則。

根據預設,為子網路中的 IPv4 流量設定 Cloud NAT 閘道時,閘道會為該子網路中任何 VM 執行個體的主要內部 IP 位址和別名 IP 範圍提供 NAT。您也可以使用以來源為準的 NAT 規則,為啟用 IP 轉送的 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 或 IP 範圍 10.2.1.0/24,VM 必須使用 NAT IP 位址 203.0.113.30,才能將流量傳送至任何網際網路目的地。
使用以來源為準的規則設定 Cloud NAT。
具有兩項以來源為準規則的 Cloud NAT 設定 (按一下即可放大)。

如要符合這些規定,請為轉送的封包建立兩個以來源為準的 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,系統就會捨棄該封包。

如需使用來源型 NAT 規則的另一個範例,請參閱「Cloud WAN 背後機制:深入瞭解我們獨特的網路功能」。

以目的地為準的規則

下列範例說明目的地只允許少數 IP 位址存取時,如何使用 NAT 規則。建議您只使用允許的 IP 位址,透過 SNAT 轉換私人子網路中 VM 的流量,前往這類目的地。 Google Cloud 建議您不要將這些 IP 位址用於其他目的地。

請考量虛擬私有雲網路 test 的 A 區域中,VM Subnet-1 (10.10.10.0/24) 的下列需求:

  • VM 必須使用 NAT IP 位址 203.0.113.20,將流量傳送至目的地 198.51.100.20/30
  • VM 必須使用 NAT IP 位址 203.0.113.30,將流量傳送至目的地 198.51.100.30198.51.100.31
  • VM 必須使用 NAT IP 位址 203.0.113.40,才能將流量傳送至任何其他網際網路目的地。

這個 VPC 網路在同一區域中也包含兩個額外的子網路。這些 VM 必須使用 NAT IP 位址 203.0.113.10,才能將流量傳送至任何目的地。

使用兩個 Cloud NAT 閘道的 Cloud NAT 設定。
具有兩個 Cloud NAT 閘道的 Cloud NAT 設定 (按一下即可放大)。

您可以在這個範例中使用 NAT 規則,但需要兩個 NAT 閘道,因為 Subnet-1 (10.10.10.0/24) 的 NAT 規則與其他子網路不同。如要建立這項設定,請按照下列步驟操作:

  1. Subnet-1 建立名為 Cloud NAT Gateway 1 的閘道,並使用 NAT IP 位址 203.0.113.40,然後新增下列規則:
    1. Cloud NAT Gateway 1 中的網路位址轉譯 (NAT) 規則 1:當目的地為 198.51.100.20/30 時,使用 203.0.113.20 進行網路位址轉譯 (NAT)。
    2. Cloud NAT Gateway 1 中的 NAT 規則 2:如果目的地是 198.51.100.30198.51.100.31,請使用 203.0.113.30 進行 NAT。
  2. 為該區域的其他子網路建立名為 Cloud NAT Gateway 2 的閘道,並將 NAT IP 位址指派為 203.0.113.10。這個步驟不需要 NAT 規則。

網路位址轉譯 (NAT) 規則規格

  • Cloud NAT 支援以來源和目的地為依據的規則。每項規則都會根據來源或目的地地址定義條件,但不會同時根據兩者。
  • 規則優先順序會從 0 (最高優先順序) 到 65,000 (最低優先順序),以不重複的方式識別 NAT 規則。兩個規則不得有相同的優先順序。
  • 每個 NAT 設定都有預設規則:
    • 如果相同的網路位址轉譯 (NAT) 設定中沒有其他相符的網路位址轉譯 (NAT) 規則,就會套用預設規則。
    • 預設規則的規則優先順序為 65001
    • 無論是根據來源或目的地建立的規則,預設規則的 IP CIDR 範圍都是 0.0.0.0/0
    • 預設規則不適用於轉送的封包。如要對這些封包使用 NAT,NAT 設定必須包含相符的來源型規則。詳情請參閱「以來源為準的規則」。
  • 只有在 NAT IP 分配選項的值為 MANUAL_ONLY 時,系統才會支援 Cloud NAT 規則。
  • 特定規則中設定的所有 IP 位址必須為同一個級別。

    您無法在同一規則 (包括預設規則) 中混用進階級和標準級 IP 位址。

  • NAT 規則的相符條件中,IP CIDR 範圍不得重疊。每個封包最多只能套用一項規則。如果封包同時符合來源和目的地規則,Cloud NAT 會套用優先順序較高的規則。

    您無法使用 0.0.0.0/0 做為來源或目的地範圍建立 NAT 規則,因為預設規則會使用這個範圍。

  • 網路位址轉譯 (NAT) 規則中的網路位址轉譯 (NAT) IP 位址不得重疊。

  • 規則必須具有非空白的 Active 或非空白的 Drain IP 位址。如果規則的 Active IP 位址為空白,系統會捨棄符合 NAT 規則的新連線。

  • 如果 NAT 閘道已啟用獨立端點對應 (EIM),就無法新增 NAT 規則。如果 NAT 閘道含有 NAT 規則,就無法啟用 EIM。

此外,所有 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 個通訊埠。在這個範例中,defaultrule2 的所有 VM 均未發生問題,但 rule1 無法為所有 VM 分配通訊埠。因此,需要通過 rule1 的 VM 流量可能會遭到捨棄,並顯示資源不足的跡象,因為流量未使用預設規則。

規則運算式語言

NAT 規則是使用一般運算語言語法編寫。

運算式需要兩個元件:

  • 可在規則運算式中檢查的屬性
  • 可對屬性執行的作業,做為運算式的一部分。

舉例來說,下列運算式會在 inIpRange() 運算中使用 destination.ip198.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 位址 xinIpRange(x, y) 會傳回 true
|| 邏輯運算子。如果 xytruex || y 會傳回 true
== 等於運算子。如果 x 等於 yx == y 會傳回 true

運算式範例

您可以根據來源或目的地地址比對封包,但不能同時根據兩者比對。

以來源為依據的比對範例

比對來源 IP 位址為 10.0.0.25 的封包:

"source.ip == '10.0.0.25'"

比對來源 IP 位址為 10.0.0.2510.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.20198.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')"

後續步驟