Public NAT

Public NAT 让您的 Google Cloud 虚拟机 (VM) 实例能够与互联网通信,方法是向每个使用 Public NAT 创建与互联网的出站连接的虚拟机分配一组共享外部 IPv4 地址和来源端口。

借助 Public NAT,没有外部 IPv4 地址的虚拟机实例可以与互联网上的 IPv4 目标进行通信。Public NAT 还可让具有外部或内部 IPv6 地址的虚拟机实例连接到互联网上的 IPv4 目标(预览版)。

规格

Public NAT 支持各项的网络地址转换 (NAT):

  • 从 IPv4 到 IPv4,或 NAT44。如需了解详情,请参阅 Public NAT 中的 NAT44

  • 从 IPv6 到 IPv4,或 NAT64(预览版)。Public NAT 支持 NAT64 用于 Compute Engine 虚拟机实例。对于 GKE 节点、无服务器流量和区域级互联网 NEG,Public NAT 仅转换 IPv4 流量。 如需了解详情,请参阅 Public NAT 中的 NAT64

一般规范

对于 IPv4 来源数据包,您可以配置 Public NAT 以便为从以下地址发送的数据包提供 NAT:

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

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

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

对于 IPv6 来源数据包,您可以配置 Public NAT,以便为从虚拟机的仅限 IPv6 网络接口的外部或内部 /96 地址范围发送的数据包提供 NAT(预览版)。

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

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

每个用于 Public NAT 的 Cloud NAT 网关都与单个 VPC 网络、区域和 Cloud Router 关联。Cloud NAT 网关和 Cloud Router 提供了一个控制平面(数据平面中并未涉及这两项服务),因此数据包不会通过 Cloud NAT 网关或 Cloud Router。

路由和防火墙规则

Public NAT 依赖于后续跃点是默认互联网网关的路由。默认路由通常符合此要求。如需了解详情,请参阅路由交互

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

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

子网 IP 地址范围适用性

您可以配置用于 Public NAT 的 Cloud NAT 网关,以便为 IPv4 子网地址范围、IPv6 子网地址范围或两者提供 NAT。对于 IPv4 子网地址范围,网关会转换来自虚拟机网络接口的主要内部 IP 地址、别名 IP 范围或两者的流量。对于 IPv6 子网地址范围,网关会转换来自网络接口的外部或内部 /96 IPv6 地址范围的流量(预览版)。

对于 IPv4 子网地址范围,您可以配置 Cloud NAT 网关,以便为以下各项提供 NAT:

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

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

  • 自定义子网列表。单个 Cloud NAT 网关为符合条件的虚拟机的主要内部 IP 地址和所有别名 IP 范围提供 NAT,其中这些虚拟机的网络接口使用指定子网列表中的 IPv4 子网。

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

对于 IPv6 子网地址范围,您可以配置 Cloud NAT 网关,以便为以下各项提供 NAT(预览版):

  • 相应区域中所有子网的外部和内部 IPv6 地址范围。 单个 Cloud NAT 网关为相应区域中的所有外部和内部 IPv6 地址范围提供 NAT。
  • 自定义子网列表。单个 Cloud NAT 网关可为您指定的子网的外部和内部 IPv6 地址范围提供 NAT。

多个 Cloud NAT 网关

如果满足以下任一条件,您可以在 VPC 网络的同一个区域中使用多个用于 Public NAT 的 Cloud NAT 网关:

  • 每个网关均针对不同的子网进行配置。

  • 在单个子网中,每个网关均针对不同的 IP 地址范围进行配置。您可以使用自定义 Cloud NAT 映射,来将用于 Public NAT 的 Cloud NAT 网关映射到特定子网或 IP 地址范围。

只要映射的 NAT 网关不重叠,您就可以根据需要创建任意数量的用于 Public NAT 的 Cloud NAT 网关,但受 Public NAT 配额和限制的约束。如需了解详情,请参阅 Cloud NAT 网关限制

带宽

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

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

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

  • 用于 Public NAT 的 Cloud NAT 网关只能应用于虚拟机的单个网络接口。单独的用于 Public NAT 的 Cloud NAT 网关可以为同一虚拟机提供 NAT,在这种情况下,每个网关都会应用于单独的接口。
  • 在多网络接口虚拟机中,一个接口可能具有外部 IPv4 地址,因此不符合 Public NAT 的要求,但如果另一接口没有外部 IPv4 地址,且向您配置了要应用到相应子网 IP 地址范围的用于 Public NAT 的 Cloud NAT 网关,则该接口可符合 NAT 的要求。对于 IPv6,支持外部和内部 IPv6 地址(预览版)。

NAT IP 地址和端口

创建用于 Public NAT 的 Cloud NAT 网关时,您可以选择让网关自动分配区域级外部 IP 地址。或者,您也可以手动为网关分配固定数量的区域级外部 IP 地址。

对于具有自动 NAT IP 地址分配的用于 Public NAT 的 Cloud NAT 网关,请考虑以下事项:

  • 您可以选择 Cloud NAT 网关从中分配 IP 地址的 Network Service Tiers(高级层级或标准层级)。
  • 当您更改自动分配 NAT IP 地址的用于 Public NAT 的 Cloud NAT 网关的层级时, Google Cloud 会释放该网关的所有已分配的 IP 地址,并弃用所有端口分配。

    系统会自动分配新选择层级的一组新 IP 地址,并为所有端点提供新的端口分配。

对于给定的用于 Public NAT 的 Cloud NAT 网关,您还可以根据某些条件手动分配高级层级和/或标准层级中的 IP 地址。

如需详细了解 NAT IP 地址分配,请参阅 Public NAT IP 地址

您可以配置每个用于 Public NAT 的 Cloud 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 超时

Public NAT 中的 NAT44

下图展示了用于 IPv4 流量的基本 Public NAT 配置:

Public NAT IPv4 转换示例。
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,则它无法访问互联网,因为没有 Cloud NAT 网关适用于该子网的任何 IP 地址范围。

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

工作流示例

在上图中,主要内部 IP 地址为 10.240.0.4 且没有外部 IP 地址的虚拟机需要从外部 IP 地址 203.0.113.1 下载更新。在该图中,nat-gw-us-east 网关的配置如下所示:

  • 每个实例的最小端口数:64
  • 手动分配了两个 NAT IP 地址:192.0.2.50192.0.2.60
  • subnet-1 的主要 IP 地址范围提供了 NAT

Public NAT 按照端口预留过程为网络中的每个虚拟机预留以下 NAT 来源 IP 地址和来源端口元组。例如,用于 Public NAT 的 Cloud NAT 网关会为内部 IP 地址为 10.240.0.4 的虚拟机预留 64 个来源端口。NAT IP 地址 192.0.2.50 有 64 个未预留端口,因此网关为该虚拟机预留以下这组 64 个 NAT 来源地址和来源端口元组:

  • 192.0.2.50:34000192.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
  • nat-gw-us-east 网关会对出站流量执行来源网络地址转换 (SNAT),并重写请求数据包的 NAT 来源 IP 地址和来源端口。如果虚拟私有云 (VPC) 网络对 203.0.113.1 目标有下一个跃点为默认互联网网关的路由,则会将修改后的数据包发送到互联网。默认路由通常符合此要求。

    • NAT 来源 IP 地址:192.0.2.50,来自虚拟机预留的 NAT 来源 IP 地址和来源端口元组
    • 来源端口:34022,来自虚拟机预留的来源端口元组之一的未使用的来源端口
    • 目标地址:203.0.113.1,未更改
    • 目标端口:80,未更改
    • 协议:TCP,未更改
  • 当更新服务器发送一个响应数据包时,该数据包会到达具有以下属性的 nat-gw-us-east 网关:

    • 来源 IP 地址:203.0.113.1,更新服务器的外部 IP 地址
    • 来源端口:80,来自更新服务器的 HTTP 响应
    • 目标地址:192.0.2.50,与请求数据包的原始 NAT 来源 IP 地址一致
    • 目标端口:34022,与请求数据包的来源端口一致
    • 协议:TCP,未更改
  • nat-gw-us-east 网关会对响应数据包执行目标网络地址转换 (DNAT),重写响应数据包的目标地址和目标端口,以便将数据包传送到虚拟机:

    • 来源 IP 地址:203.0.113.1,未更改
    • 来源端口:80,未更改
    • 目标地址:10.240.0.4,虚拟机的主要内部 IP 地址
    • 目标端口:24000,与请求数据包的原始临时来源端口一致
    • 协议:TCP,未更改

Public NAT 中的 NAT64

NAT64 可让仅限 IPv6 的虚拟机实例与互联网上的 IPv4 目标进行通信。Public NAT 支持 NAT64 用于外部和内部 IPv6 地址。如果您要配置 NAT64,还必须配置 DNS64。

在 Cloud DNS 中配置 DNS64 可实现以下行为:

  • 当仅限 IPv6 的虚拟机实例向互联网发出请求时,Cloud DNS 会检查请求目标是否存在 AAAA 记录。如果记录存在,系统会返回 IPv6 地址,并且仅限 IPv6 的虚拟机实例可以连接到 IPv6 目标。
  • 如果启用了 DNS64 且未找到 AAAA 记录,DNS64 服务器会改为查找 A 记录。找到 A 记录后,DNS64 服务器会将 64:ff9b::/96 前缀添加到从 A 记录中获取的 IPv4 地址前面,以合成 IPv6 地址。

    例如,如果目标 IPv4 地址为 203.0.113.1,服务器会返回 64:ff9b::cb00:7101,其中 cb00:7101203.0.113.1 的十六进制表示法。

当请求到达已启用 NAT64 的 Cloud NAT 网关时,该网关会执行以下操作来执行 SNAT:

  • 将来源 IPv6 地址和端口替换为分配给该网关的外部 IPv4 地址和端口之一。
  • 使用合成地址的最后 32 位,来将合成的目标 IPv6 地址(例如 64:ff9b::cb00:7101)转换为原始 IPv4 地址。

    Cloud NAT 网关还会使用合成 IPv6 地址的最后 32 位,来确定如何将请求数据包路由到互联网。 当仅限 IPv6 的虚拟机实例将数据包发送到以 64:ff9b::/96 前缀开头的目标时,网关会将 VPC 网络的 IPv4 路由表应用到目标 IPv4 地址。如果 IPv4 路由表具有针对目标 IPv4 地址的路由,且该路由的下一个跃点是默认互联网网关,则会将修改后的数据包发送到互联网。

收到响应后,Cloud NAT 网关会执行以下操作来执行 DNAT:

  • 在响应数据包的来源 IP 地址前面添加 64:ff9b::/96 前缀。
  • 重写响应数据包的目标地址和目标端口,以便将数据包传送到虚拟机。

后续步骤