Public NAT
Public NAT 让没有公共 IP 地址的 Google Cloud 虚拟机 (VM) 实例使用一组共享公共 IP 地址与互联网进行通信。Cloud NAT 使用 Public NAT 网关,并会为每个使用网关创建与互联网的出站连接的虚拟机分配一组外部 IP 地址和来源端口。
基本 Public NAT 配置和工作流
下图展示了基本的 Public NAT 配置:
在此示例中:
nat-gw-us-east
网关已配置为应用到us-east1
地区中subnet-1
的主要 IP 地址范围。如果虚拟机的网络接口没有外部 IP 地址,则该虚拟机可以使用其主要内部 IP 地址或subnet-1
的主要 IP 地址范围10.240.0.0/16
内的别名 IP 范围向互联网发送流量。如果虚拟机的网络接口没有外部 IP 地址,并且主要内部 IP 地址位于
subnet-2
,则它无法访问互联网,因为没有 Public NAT 网关适用于该子网的任何 IP 地址范围。nat-gw-eu
网关已配置为应用到europe-west1
地区中subnet-3
的主要 IP 地址范围。如果虚拟机的网络接口没有外部 IP 地址,则该虚拟机可以使用其主要内部 IP 地址或subnet-3
的主要 IP 地址范围192.168.1.0/24
内的别名 IP 范围向互联网发送流量。
Public NAT 工作流示例
在上图中,主要内部 IP 地址为 10.240.0.4
且没有外部 IP 地址的虚拟机需要从外部 IP 地址 203.0.113.1
下载更新。在该图中,nat-gw-us-east
网关的配置如下所示:
- 每个实例的最小端口数:
64
- 手动分配了两个网络地址转换 (NAT) IP 地址:
192.0.2.50
和192.0.2.60
- 为
subnet-1
的主要 IP 地址范围提供了 NAT
Public NAT 按照端口预留过程为网络中的每个虚拟机预留以下 NAT 来源 IP 地址和来源端口元组。例如,Public NAT 网关会为内部 IP 地址为 10.240.0.4
的虚拟机预留 64 个来源端口。NAT IP 地址 192.0.2.50
有 64 个未预留端口,因此网关为该虚拟机预留以下这组 64 个 NAT 来源地址和来源端口元组:
192.0.2.50
:34000
到192.0.2.50
:34063
当虚拟机使用 TCP 协议将数据包发送到目标端口 80
上的更新服务器 203.0.113.1
时,会发生以下情况:
虚拟机发送的请求包具有以下属性:
- 来源 IP 地址:
10.240.0.4
,虚拟机的主要内部 IP 地址 - 来源端口:
24000
,虚拟机操作系统选择的临时来源端口 - 目标地址:
203.0.113.1
,更新服务器的外部 IP 地址 - 目标端口:
80
,指向更新服务器的 HTTP 流量的目标端口 - 协议:
TCP
- 来源 IP 地址:
nat-gw-us-east
网关会对出站流量执行来源网络地址转换 (SNAT),并重写请求数据包的 NAT 来源 IP 地址和来源端口。如果 Virtual Private Cloud (VPC) 网络对203.0.113.1
目标有下一个跃点为默认互联网网关的路由,则会将修改后的数据包发送到互联网。默认路由通常符合此要求。- NAT 来源 IP 地址:
192.0.2.50
,来自虚拟机预留的 NAT 来源 IP 地址和来源端口元组 - 来源端口:
34022
,来自虚拟机预留的来源端口元组之一的未使用的来源端口 - 目标地址:
203.0.113.1
,未更改 - 目标端口:
80
,未更改 - 协议:
TCP
,未更改
- NAT 来源 IP 地址:
当更新服务器发送一个响应数据包时,该数据包会到达具有以下属性的
nat-gw-us-east
网关:- 来源 IP 地址:
203.0.113.1
,更新服务器的外部 IP 地址 - 来源端口:
80
,来自更新服务器的 HTTP 响应 - 目标地址:
192.0.2.50
,与请求数据包的原始 NAT 来源 IP 地址一致 - 目标端口:
34022
,与请求数据包的来源端口一致 - 协议:
TCP
,未更改
- 来源 IP 地址:
nat-gw-us-east
网关会对响应数据包执行目标网络地址转换 (DNAT),重写响应数据包的目标地址和目标端口,以便将数据包传送到虚拟机:- 来源 IP 地址:
203.0.113.1
,未更改 - 来源端口:
80
,未更改 - 目标地址:
10.240.0.4
,虚拟机的主要内部 IP 地址 - 目标端口:
24000
,与请求数据包的原始临时来源端口一致 - 协议:
TCP
,未更改
- 来源 IP 地址:
规格
一般规范
您可以配置 Public NAT 网关,以便为从以下地址发送的数据包提供互联网 NAT:
Compute Engine 虚拟机的网络接口的主要内部 IP 地址,前提是该网络接口未分配有外部 IP 地址。如果该网络接口具有外部 IP 地址,则由于该接口符合 Google Cloud 互联网访问要求,因此 Google Cloud 会自动对其来源与该接口的主要内部 IP 地址匹配的数据包执行一对一 NAT。如果接口上存在外部 IP 地址,系统会优先考虑这一点,并且始终执行一对一 NAT,而不使用 Public NAT。
为虚拟机的网络接口分配的别名 IP 范围:即使网络接口分配有外部 IP 地址,您也可以配置 Public NAT 网关,对其来源在该接口的别名 IP 范围内的数据包提供 NAT。接口上的外部 IP 地址绝不会对别名 IP 地址执行一对一 NAT。
对于 Google Kubernetes Engine (GKE) 集群,即使集群在某些情况下具有外部 IP 地址,Public NAT 也可以提供服务。如需了解详情,请参阅 GKE 交互。
Public NAT 允许出站连接和对这些连接的入站响应。每个 Public NAT 网关都会对已建立的响应数据包执行出站来源和目标 NAT。
Public NAT 不会允许来自互联网的未经请求的入站请求,即使防火墙规则允许这些请求。如需了解详情,请参阅适用的 RFC。
每个 Public NAT 网关都与一个 VPC 网络、区域和 Cloud Router 路由器相关联。Public NAT 网关和 Cloud Router 路由器提供了一个控制平面 - 数据平面中并未涉及这两项服务,因此数据包不会通过 Public NAT 网关或 Cloud Router 路由器。
路由和防火墙规则
Public NAT 依赖于后续跃点是默认互联网网关的自定义静态路由。要充分利用 Public NAT 网关,您的 Virtual Private Cloud 网络需要一个默认路由,其下一个跃点是默认互联网网关。如需了解详情,请参阅路由交互。
Public NAT 没有任何 Cloud NGFW 规则要求。防火墙规则直接应用于 Compute Engine 虚拟机的网络接口,而非 Public NAT 网关。
您无需创建任何特殊防火墙规则来允许连接到或从 NAT IP 地址连接。当 Public NAT 网关为虚拟机的网络接口提供 NAT 时,适用的出站防火墙规则将在 NAT 之前被评估为网络接口的数据包。入站防火墙规则将在 NAT 处理完数据包后进行评估。
子网 IP 地址范围适用性
您可以配置 Public NAT 网关,以便为虚拟机网络接口的主要内部 IP 地址和/或别名 IP 地址范围提供 NAT。要进行此配置,您可以选择应将网关应用到的子网 IP 地址范围。
您可配置 Public NAT 网关来为以下各项提供 NAT:
-
相应地区中所有子网的主要和次要 IP 地址范围。单个 Public NAT 网关为符合条件的虚拟机的主要内部 IP 地址和所有别名 IP 范围提供 NAT,其中这些虚拟机的网络接口使用该区域中的子网。此选项仅对每个区域使用一个 NAT 网关。
-
相应地区中所有子网的主要 IP 地址范围。单个 Public NAT 网关为符合条件的虚拟机的子网主要 IP 地址范围内的主要内部 IP 地址和别名 IP 范围提供 NAT,其中这些虚拟机的网络接口使用该区域中的子网。您可在该区域创建其他 Public NAT 网关,来为符合条件的虚拟机的子网次要 IP 地址范围内的别名 IP 范围提供 NAT。
-
自定义子网列表。单个 Public NAT 网关为符合条件的虚拟机的主要内部 IP 地址和所有别名 IP 地址范围提供 NAT,其中这些虚拟机的网络接口使用指定子网列表中的子网。
-
自定义子网 IP 地址范围。您可在必要时根据 Public NAT 配额和限制创建任意数量的 Public NAT 网关。您可以选择每个网关应提供哪个子网主要或次要 IP 地址范围。
多个 Public NAT 网关
如果满足以下任一条件,您可以在 VPC 网络的同一个区域中使用多个 Public NAT 网关:
每个网关均针对不同的子网进行配置。
在单个子网中,每个网关均针对不同的 IP 地址范围进行配置。您可以使用自定义 Cloud NAT 映射将公共 NAT 网关映射到特定子网或 IP 地址范围。
只要映射的 NAT 网关不重叠,您就可以根据需要创建任意数量的 Public NAT 网关,但须遵守 Public NAT 配额和限制。如需了解详情,请参阅 Cloud NAT 网关限制。
带宽
使用 Public NAT 网关不会更改虚拟机可使用的出站或入站带宽量。如需了解带宽规范(因机器类型而异),请参阅 Compute Engine 文档中的网络带宽。
包含多个网络接口的虚拟机
如果您配置的虚拟机包含多个网络接口,则每个接口必须位于单独的 VPC 网络中。因此,需满足以下条件:
- Public NAT 网关只能应用于虚拟机的单个网络接口。单独的 Public NAT 网关可以为同一虚拟机提供 NAT,在这种情况下,每个网关都会应用于单独的接口。
- 在多网络接口虚拟机中,一个接口可能具有外部 IP 地址,因此不符合 Public NAT 的要求,但如果另一接口没有外部 IP 地址,且向您配置了要应用到相应子网 IP 地址范围的 Public NAT 网关,则该接口可符合 NAT 的要求。
NAT IP 地址和端口
创建 Public NAT 网关时,您可以选择让网关自动分配区域级外部 IP 地址。或者,您也可以手动为网关分配固定数量的区域级外部 IP 地址。
对于具有自动 NAT IP 地址分配的 Public NAT 网关,请考虑以下事项:
- 您可以选择 Public NAT 网关从中分配 IP 地址的 Network Service Tiers(高级层级或标准层级)。
当您更改自动分配 NAT IP 地址的 Public NAT 网关的层级时,Google Cloud 会释放该网关的所有已分配的 IP 地址,并停用所有端口分配。
系统会自动分配一组来自新选层级的 IP 地址,并为所有端点提供新的端口分配。
对于给定的 Public NAT 网关,您还可以根据条件手动分配高级层级和/或标准层级中的 IP 地址。
如需详细了解 NAT IP 地址分配,请参阅 Public NAT IP 地址。
您可以配置每个 Public NAT 网关在为其提供 NAT 服务的每个虚拟机上预留的源端口数量。您可以配置静态端口分配(其中,为每个虚拟机预留相同数量的端口),或动态端口分配(其中,预留端口的数量可以在您指定的下限和上限之间变化)。
应为其提供 NAT 的虚拟机由您配置该网关以提供服务的子网 IP 地址范围决定。
如需详细了解端口,请参阅端口。
适用的 RFC
按照 RFC 5128 中的定义,Public NAT 支持端点独立映射和依赖于端点的过滤。您可以启用或停用端点独立映射。默认情况下,创建 NAT 网关时,系统会停用端点独立映射。
端点独立映射是指,如果虚拟机将来自给定内部 IP 地址和端口对的数据包发送到多个不同的目的地,网关会将所有数据包映射到相同的 NAT IP 地址和端口对,无论数据包的目的地为何。如需详细了解与“端点独立映射”相关的详情和影响,请参阅同时重用端口和端点独立映射。
依赖于端点的过滤是指,仅当来自互联网的响应数据包是来自虚拟机已向其发送过数据包的 IP 地址和端口时,才允许这些响应数据包进入。过滤依赖于端点,与端点映射类型无关。此功能始终启用,且用户无法配置。
如需详细了解端口和连接之间的关系,请参阅端口和连接以及 NAT 流示例。
Public NAT 是 RFC 3489 中定义的端口受限锥 NAT。
NAT 遍历
如果启用了端点独立映射,Public NAT 可兼容常见的 NAT 遍历协议(如 STUN 和 TURN,如果您部署自己的 STUN 或 TURN 服务器):
- 在建立通信通道后,STUN(Session Traversal Utilities for NAT 的缩写,RFC 5389)允许直接与 NAT 后面的虚拟机之间通信。
- TURN(Traversal Using Relays around NAT 的缩写,RFC 5766)允许通过第三服务器(该服务器具有外部 IP 地址)与 NAT 后面的虚拟机之间通信。每个虚拟机都连接到服务器的外部 IP 地址,并且该服务器会中继两个虚拟机之间的通信。TURN 更强大,但消耗的带宽和资源更多。
NAT 超时
Public NAT 会为协议连接设置超时。如需了解这些超时及其默认值,请参阅 NAT 超时。
后续步骤
- 了解 Cloud NAT 产品交互。
- 了解 Cloud NAT 地址和端口。
- 设置 Cloud NAT。
- 了解 Cloud NAT 规则。
- 创建示例 Compute Engine 设置。
- 创建一个 Google Kubernetes Engine 示例设置。
- 排查常见问题。