Cloud NAT 概览

Cloud NAT(网络地址转换)允许某些没有外部 IP 地址的资源创建与互联网的出站连接。

Cloud NAT 为以下资源提供传出连接:

架构

Cloud NAT 是一种软件定义的分布式代管式服务。它并非基于代理虚拟机或设备。Cloud NAT 会配置 Andromeda 软件,该软件为您的 Virtual Private Cloud (VPC) 网络提供支持,从而为没有外部 IP 地址的虚拟机提供来源网络地址转换(来源 NAT 或 SNAT)。此外,Cloud NAT 还会对建立的入站响应数据包执行目标网络地址转换(目标 NAT 或 DNAT)。

传统 NAT 与 Cloud NAT(点击可放大)。
传统 NAT 与 Cloud NAT(点击可放大)

Cloud NAT 结合 VPC 网络中的静态路由来实施出站 NAT,其中该网络中的后续跃点为默认互联网网关。在基本配置中,VPC 网络中的默认路由符合此要求。

Cloud NAT 不会实现来自互联网的未经请求的入站连接。仅针对用作对出站数据包的响应而到达的数据包执行 DNAT。

优势

Cloud NAT 具有以下优势:

  • 安全

    您可以减少各个虚拟机对外部 IP 地址的需求。根据出站防火墙规则,没有外部 IP 地址的虚拟机可以访问互联网上的目标。例如,您的虚拟机可能只需访问互联网即可下载更新或完成预配。

    如果您使用手动 NAT IP 地址分配来配置 Cloud NAT 网关,则可以放心地与目标方共享一组常用的外部来源 IP 地址。例如,目标服务可能只允许来自已知外部 IP 地址的连接。

  • 可用性

    Cloud NAT 是一种软件定义的分布式代管式服务。它既不依赖于项目中的任何虚拟机,也不依赖于单个物理网关设备。您可以在 Cloud Router 路由器上配置 NAT 网关,以便为 NAT 提供控制平面,并保存您指定的配置参数。Google Cloud 可在运行 Google Cloud 虚拟机的物理机器上运行和维护进程。

  • 可伸缩性

    您可配置 Cloud NAT 来自动扩缩其使用的 NAT IP 地址数量,Cloud NAT 还支持属于代管式实例组的虚拟机,包括已启用自动扩缩的虚拟机。

  • 性能

    Cloud NAT 不会降低每个虚拟机的网络带宽。Cloud NAT 可直接与 Google 的 Andlomeda 软件定义网络配合使用。如需了解详情,请参阅 Compute Engine 文档中的网络带宽

规范

您可配置 Cloud NAT 来为发送自以下地址的数据包提供互联网 NAT:

  • Compute Engine 虚拟机的网络接口的主要内部 IP 地址,前提是该网络接口未分配有外部 IP 地址。如果该网络接口具有外部 IP 地址,则由于该接口符合 Google Cloud 互联网访问要求,因此 Google Cloud 会自动对其来源与该接口的主要内部 IP 地址匹配的数据包执行一对一 NAT。如果接口上存在外部 IP 地址,系统会优先考虑这一点,并且始终执行一对一 NAT,而不使用 Cloud NAT。

  • 为虚拟机的网络接口分配的别名 IP 范围:即使网络接口分配有外部 IP 地址,您也可以配置 Cloud NAT 网关,对其来源在该接口的别名 IP 范围内的数据包提供 NAT。接口上的外部 IP 地址绝不会对别名 IP 地址执行一对一 NAT。

  • 对于 GKE 集群,即使集群在某些情况下具有外部 IP 地址,Cloud NAT 也可以提供服务。如需了解详情,请参阅 GKE 交互

Cloud NAT 允许出站连接和对这些连接的入站响应。每个 Cloud NAT 网关都会对已建立的响应数据包执行出站来源和目标 NAT。

Cloud NAT 不会允许来自互联网的未经请求的入站请求,即使防火墙规则允许这些请求。如需了解详情,请参阅适用的 RFC

每个 Cloud NAT 网关都与一个 VPC 网络、地区和 Cloud Router 路由器相关联。Cloud NAT 网关和 Cloud Router 路由器提供了一个控制平面 - 数据平面中并未涉及这两项服务,因此数据包不会通过 Cloud NAT 网关或 Cloud Router 路由器。

路由和防火墙规则

Cloud NAT 依赖于后续跃点是默认互联网网关的自定义静态路由。要充分利用 Cloud NAT 网关,您的 VPC 网络需要下一个跃点是默认互联网网关的默认路由。如需了解详情,请参阅路由交互

Cloud NAT 没有任何 Google Cloud 防火墙规则要求。防火墙规则直接应用于 Compute Engine 虚拟机的网络接口,而非 Cloud NAT 网关。

您无需创建任何特殊防火墙规则来允许连接到或从 NAT IP 地址连接。当 Cloud NAT 网关为虚拟机的网络接口提供 NAT 时,适用的出站防火墙规则将在 NAT 之前被评估为网络接口的数据包。入站防火墙规则将在 NAT 处理完数据包后进行评估。

子网 IP 地址范围适用性

Compute Engine Cloud NAT 网关可以为发送自虚拟机网络接口的数据包提供 NAT 服务,但前提是该网络接口未分配有外部 IP 地址。对于 GKE 集群,即使集群节点在某些情况下具有外部 IP 地址,Cloud NAT 也可以提供服务。如需了解详情,请参阅 GKE 交互

您可配置 Cloud NAT 网关来为虚拟机网络接口的主要内部 IP 地址和/或别名 IP 范围提供 NAT。要进行此配置,您可以选择应将网关应用到的子网 IP 地址范围

您可配置 Cloud NAT 网关来为以下各项提供 NAT:

  • 相应地区中所有子网的主要和次要 IP 地址范围。单个 Cloud NAT 网关为符合条件的虚拟机的主要内部 IP 地址和所有别名 IP 范围提供 NAT,其中这些虚拟机的网络接口使用该地区中的子网。此选项仅对每个地区使用一个 NAT 网关。

  • 相应地区中所有子网的主要 IP 地址范围。单个 Cloud NAT 网关为符合条件的虚拟机的子网主要 IP 地址范围内的主要内部 IP 地址和别名 IP 范围提供 NAT,其中这些虚拟机的网络接口使用该地区中的子网。您可在该地区创建其他 Cloud NAT 网关,来为符合条件的虚拟机的子网次要 IP 地址范围内的别名 IP 范围提供 NAT。

  • 自定义子网 IP 地址范围。您可在必要时根据 Cloud NAT 配额和限制创建任意数量的 Cloud NAT 网关。您可以选择每个网关应提供哪个子网主要或次要 IP 地址范围是可以选择的。

带宽

使用 Cloud NAT 网关不会更改虚拟机可使用的出站或入站带宽量。如需了解带宽规范(因机器类型而异),请参阅 Compute Engine 文档中的网络带宽

包含多个网络接口的虚拟机

如果您配置的虚拟机包含多个网络接口,则每个接口必须位于单独的 VPC 网络中。因此,需满足以下条件:

  • Cloud NAT 网关只能应用于虚拟机的单个网络接口。单独的 Cloud NAT 网关可以为同一虚拟机提供 NAT,在这种情况下,每个网关都会应用于单独的接口。

  • 在多网络接口虚拟机中,一个接口可能具有外部 IP 地址,因此不符合 Cloud NAT 的要求,但如果另一接口没有外部 IP 地址,且向您配置了要应用到相应子网 IP 地址范围的 Cloud NAT 网关,则该接口可符合 NAT 的要求。

NAT IP 地址和端口

创建 Cloud NAT 网关时,您可以选择让网关自动分配地区级外部 IP 地址。或者,您也可以手动为网关分配固定数量的地区级外部 IP 地址。如需详细了解每种方法,请参阅 NAT IP 地址

您可以配置每个 Cloud NAT 网关为每个虚拟机(该网关应为这台虚拟机提供 NAT 服务)预留的来源端口数量。您可以配置静态端口分配(其中,为每个虚拟机预留相同数量的端口),或动态端口分配预览版)(其中,预留端口的数量可以在您指定的下限和上限之间变化)。

应为其提供 NAT 的虚拟机由您配置该网关以提供服务的子网 IP 地址范围决定。

如需了解详情,请参阅端口和端口预留过程。

适用的 RFC

按照 RFC 5128 中的定义,Cloud NAT 支持端点独立映射和依赖于端点的过滤。您可以启用或停用端点独立映射。默认情况下,创建 NAT 网关时,系统会停用端点独立映射。

端点独立映射是指,如果虚拟机将来自给定内部 IP 地址和端口对的数据包发送到多个不同的目的地,网关会将所有数据包映射到相同的 NAT IP 地址和端口对,无论数据包的目的地为何。如需详细了解与“端点独立映射”相关的详情和影响,请参阅同时重用端口和端点独立映射

依赖于端点的过滤是指,仅当来自互联网的响应数据包是来自虚拟机已向其发送过数据包的 IP 地址和端口时,才允许这些响应数据包进入。过滤依赖于端点,与端点映射类型无关。此功能始终启用,且用户无法配置。

如需详细了解端口和连接之间的关系,请参阅端口和连接以及 NAT 流示例

Cloud NAT 是 RFC 3489 中定义的端口受限锥 NAT。

NAT 遍历

如果启用了端点独立映射,Cloud 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 超时

Cloud NAT 网关使用以下超时。 您可以修改默认超时值,以降低或提高端口重用的速率。每个超时值都在 Cloud NAT 资源的有效使用与活跃连接、流或会话的可能中断之间实现平衡。

超时 说明 Cloud NAT 默认值 可配置

UDP 映射空闲超时

RFC 4787 REQ-5

指定多少秒以后 UDP 流必须停止向端点发送流量,以便移除 Cloud NAT 映射。

UDP 映射空闲超时会影响两个端点,这些端点会停止互相发送流量。当端点需要更长的响应时间或者当网络延迟增加时,此超时也会影响端点。

您可以增加指定的超时值,以降低端口重用的速率。超时值越大,意味着端口为连接保留的时间越长,还可以防止特定 UDP 套接字上的流量暂停。

30 秒

TCP 已建立的连接空闲超时

RFC 5382 REQ-5

指定多少秒以后连接变为空闲状态,以便移除 Cloud NAT 映射。

TCP 已建立的连接空闲超时影响端点的情况:端点需要更长的响应时间或网络延迟增加。

如果要打开 TCP 连接并在没有 keepalive 机制的情况下使连接长时间保持打开状态,则可以增加超时值。

1200 秒(20 分钟)

TCP 临时连接空闲超时

RFC 5382 REQ-5

指定 TCP 连接可以保持半打开状态的秒数,在此时间之后可以删除 Cloud NAT 映射。

TCP 临时连接空闲超时影响端点的情况:外部端点花费的时间超过指定时间或网络延迟增加。与 TCP 已建立的连接空闲超时不同,TCP 临时连接空闲超时仅影响半打开连接。

30 秒

注意:无论您为此超时设置什么值,Cloud NAT 可能还需要额外的 30 秒才能使用 NAT 来源 IP 地址和来源端口元组处理新连接。

TCP TIME_WAIT 超时

RFC 5382 REQ-5

指定完全关闭的 TCP 连接在到期后保留在 Cloud NAT 映射中的秒数。

TCP TIME_WAIT 超时可保护内部端点,使其不会接收属于已关闭 TCP 连接并重新发送的无效数据包。

您可以减少超时值以改善 Cloud NAT 端口的重复使用,但代价是可能会接收来自已关闭的不相关连接的重新传输的数据包。

120 秒

注意:无论您为此超时设置什么值,Cloud NAT 可能还需要额外的 30 秒才能使用 NAT 来源 IP 地址和来源端口元组处理新连接。

ICMP 映射空闲超时

RFC 5508 REQ-2

指定多少秒以后关闭没有任何流量的互联网控制消息协议 (ICMP) Cloud NAT 映射。

ICMP 映射空闲超时影响端点的情况:端点的响应时间比指定的时间长或网络延迟增加。

30 秒

产品交互

以下部分介绍了 Cloud NAT 与其他 Google Cloud 产品之间的重要交互。

路由交互

Cloud NAT 网关只能使用后续跃点为默认互联网网关的路由。每个 VPC 网络均以默认路由开始,该路由的目标为 0.0.0.0/0,它的下一个跃点是默认互联网网关。如需了解重要的背景信息,请参阅路由概览

以下示例说明了可能导致 Cloud NAT 网关无法使用的情况:

  • 如果您创建一个自定义静态路由,并将其后续跃点设置为任何其他类型的自定义静态路由下一跃点,则目标 IP 地址与该路由目标相匹配的数据包会发送到上述下一个跃点,而不是默认互联网网关。例如,如果您要使用运行 NAT、防火墙或代理软件的虚拟机实例,则必须创建自定义静态路由,将流量作为下一个跃点定向到这些虚拟机。下一个跃点虚拟机需要外部 IP 地址。因此,来自依赖于下一个跃点虚拟机的虚拟机的流量以及下一个跃点虚拟机本身的流量都无法使用 Cloud NAT。

  • 如果您创建的自定义静态路由的下一个跃点是 Cloud VPN 隧道,则 Cloud NAT 不会使用该路由。例如,使用目标 0.0.0.0/0 和下一个跃点 Cloud VPN 隧道的自定义静态路由会将流量引导至该隧道,而非默认互联网网关因此,Cloud NAT 网关将无法使用该路由。即使对于更具体的目标(包括 0.0.0.0/1128.0.0.0/1)也是如此。

  • 如果本地路由器向管理 Cloud VPN 隧道或 Cloud Interconnect 互连连接 (VLAN) 的 Cloud Router 路由器通告自定义动态路由,则 Cloud NAT 网关不能使用该路由。例如,如果您的本地路由器通告目标为 0.0.0.0/0 的自定义动态路由,则 0.0.0.0/0 会被定向到 Cloud VPN 隧道或 Cloud Interconnect 连接 (VLAN)。即使对于更具体的目标(包括 0.0.0.0/1128.0.0.0/1)也是如此。

专用 Google 访问通道交互

Cloud NAT 从不对发送到所选 Google API 和服务的外部 IP 地址的流量执行 NAT。当您将 Cloud NAT 网关配置为应用于主要或次要子网域范围时,Google Cloud 会自动为子网 IP 地址范围启用专用 Google 访问通道。只要网关为子网范围提供 NAT,专用 Google 访问通道就会在该范围内有效,无法手动停用。

Cloud NAT 网关不会更改专用 Google 访问通道的工作方式。如需了解详情,请参阅专用 Google 访问通道

共享 VPC 交互

共享 VPC 允许单个组织中的多个服务项目在宿主项目中共用共享 VPC 网络。要为使用共享 VPC 网络的服务项目中的虚拟机提供 NAT,您必须在宿主项目中创建 Cloud NAT 网关。

VPC 网络对等互连交互

Cloud NAT 网关与单个地区和单个 VPC 网络中的子网 IP 地址范围相关联。即使对等互连网络中的虚拟机与网关位于同一地区,在一个 VPC 网络中创建的 Cloud NAT 网关也无法向使用 VPC 网络对等互连连接的其他 VPC 网络中的虚拟机提供 NAT。

GKE 交互

Cloud NAT 网关可以为专用集群(这是一种 VPC 原生集群)中的节点和 Pod 执行 NAT。您必须对 Cloud NAT 网关进行配置,至少应用于您的集群所用子网的以下子网 IP 地址范围:

  • 子网主要 IP 地址范围(由节点使用)
  • 集群中用于 Pod 的子网次要 IP 地址范围
  • 集群中用于 Service 的子网次要 IP 地址范围

若要为整个专用集群提供 NAT,最简单的方法是配置 Cloud NAT 网关,使其应用到该集群所有子网 IP 地址范围中。

如需了解有关 VPC 原生集群如何使用子网 IP 地址范围的背景信息,请参阅 VPC 原生集群的 IP 范围

当 Cloud NAT 网关经过配置要为专用集群提供 NAT 时,它会为每个节点虚拟机预留 NAT 来源 IP 地址和来源端口。 Pod 可以使用这些 NAT 来源 IP 地址和来源端口,因为 Pod IP 地址是作为分配给每个节点虚拟机的别名 IP 地址范围实现的。GKE VPC 原生集群始终会为每个节点分配一个包含多个 IP 地址(网络掩码小于 /32)的别名 IP 范围。因此,Cloud NAT 端口预留过程会为每个节点至少预留 1024 个来源 IP 地址和来源端口。如需了解 Pod IP 地址范围和 VPC 原生集群,请参阅 Pod 的子网次要 IP 地址范围

GKE 与 Cloud NAT 无关,当 Pod 将数据包发送到互联网时,GKE 会使用在每个节点上运行的软件执行 SNAT,除非您更改了集群的 IP 伪装配置。如果您需要对 Pod 的出站流量进行精细控制,可以使用网络政策

在某些情况下,Cloud NAT 也可用于非专用集群,包括 VPC 原生集群和基于路由的集群。由于非专用集群中的节点具有外部 IP 地址,因此从该节点的主要内部 IP 地址发送的数据包绝不会被 Cloud NAT 处理。但是,如果出现以下情况,Cloud NAT 网关则可以处理从非专用集群中的 Pod 发送的数据包:

  • 对于 VPC 原生集群,Cloud NAT 网关被配置为应用到集群的 Pod 的次要 IP 地址范围。

  • 集群的 IP 伪装配置未配置为针对从 Pod 发送到互联网的数据包在集群内执行 SNAT。

Cloud Load Balancing 交互

Google Cloud 外部负载平衡器和运行状况检查系统使用特殊路由与虚拟机进行通信。后端虚拟机不需要外部 IP 地址,Cloud NAT 网关也不负责管理负载平衡器和运行状况检查的通信。如需了解详情,请参阅 Cloud Load Balancing 概览运行状况检查概览

示例

以下示例说明了 Cloud NAT 概念。

基本 NAT 配置

Cloud NAT(点击可放大)。
Cloud 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,则它无法访问互联网,因为没有 Cloud NAT 网关适用于该子网的任何 IP 地址范围。

  • nat-gw-eu 网关已配置为应用到 europe-west1 地区中 subnet-3 的主要 IP 地址范围。如果虚拟机的网络接口没有外部 IP 地址,则该虚拟机可以使用其主要内部 IP 地址或 subnet-3 的主要 IP 地址范围 192.168.1.0/24 内的别名 IP 范围向互联网发送流量。

GKE 示例

对 GKE 进行 Cloud NAT(点击可放大)。
对 GKE 进行 Cloud NAT(点击可放大)

在此例中,您希望对容器进行 NAT 转换。如需为所有容器和 GKE 节点启用 NAT,您必须选择子网 1 的所有 IP 范围作为 NAT 候选项。不要仅对 container1container2 启用 NAT。

后续步骤