Public NAT
Public NAT 让您的 Compute Engine 虚拟机 (VM) 实例能够与互联网通信,方法是向每个使用 Public NAT 创建与互联网的出站连接的虚拟机分配一组共享外部 IPv4 地址和来源端口。
借助 Public NAT,没有外部 IPv4 地址的虚拟机实例可以与互联网上的 IPv4 目标进行通信。Public NAT 还可让具有外部或内部 IPv6 地址的虚拟机实例连接到互联网上的 IPv4 目标(预览版)。
规格
Public NAT 支持各项的网络地址转换 (NAT):
从 IPv4 到 IPv4,或 NAT44。如需了解详情,请参阅 Public NAT 中的 NAT44。
从 IPv6 到 IPv4,或 NAT64(预览版)。NAT64 适用于 Compute Engine 虚拟机实例。对于 Google Kubernetes Engine (GKE) 节点、无服务器端点和区域级互联网网络端点组,Public NAT 仅转换 IPv4 地址。如需了解详情,请参阅 Public NAT 中的 NAT64。
一般规范
-
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 的 Cloud NAT 网关由 Cloud Router 管理,Public NAT 也不使用或依赖于边界网关协议。
对于 NAT44,Public NAT 可为从以下来源发送的出站数据包提供 NAT:
虚拟机的网络接口的主要内部 IP 地址,前提是该网络接口未分配有外部 IP 地址:如果该网络接口分配有外部 IP 地址, Trusted Cloud 会自动对来源于该接口的主内部 IP 地址匹配的数据包执行一对一 NAT,这是因为该网络接口符合 Trusted Cloud 互联网访问要求。如果接口上存在外部 IP 地址,系统会优先考虑这一点,并且始终执行一对一 NAT,而不使用 Public NAT。
为虚拟机的网络接口分配的别名 IP 范围:即使网络接口分配有外部 IP 地址,您也可以为Public NAT配置 Cloud NAT 网关,对其来源在该接口的别名 IP 范围内的数据包提供 NAT。接口上的外部 IP 地址绝不会对别名 IP 地址执行一对一 NAT。
GKE 集群:即使集群在某些情况下具有外部 IP 地址,Public NAT 也可以提供服务。如需了解详情,请参阅 GKE 交互。
对于 NAT64(预览版),Public NAT 可为从以下来源发送的出站数据包提供 NAT:
- 虚拟机的仅 IPv6 网络接口的内部 /96 地址范围。
- 虚拟机的仅 IPv6 网络接口的外部 /96 地址范围。
路由和防火墙规则
Public NAT 依赖于后续跃点是默认互联网网关的本地静态路由。默认路由通常符合此要求。如需了解详情,请参阅路由交互。
Cloud NGFW 防火墙规则直接应用于 Compute Engine 虚拟机的网络接口,而非用于 Public NAT 的 Cloud NAT 网关。
当用于 Public NAT 的 Cloud NAT 网关为虚拟机的网络接口提供 NAT 时,适用的出站防火墙规则将在 NAT 之前被评估为该网络接口的数据包。入站防火墙规则将在 NAT 处理完数据包后进行评估。 您无需专门为 NAT 创建任何防火墙规则。
不过,如果您想在具有针对 IPv4 目的地的出站流量拒绝防火墙规则的 VPC 网络中启用 NAT64,建议您为目的地的 IPv4 嵌入式 IPv6 地址创建额外的出站流量拒绝防火墙规则。这可确保使用 NAT64 的虚拟机的流量不会绕过 IPv4 防火墙规则。例如,如果 IPv4 规则中的目标是 1.2.3.4/32
,则 IPv6 规则中的目标必须是 64:ff9b:0102:0304/128
。如需详细了解嵌入 IPv4 的 IPv6 地址,请参阅 NAT64。
子网 IP 地址范围适用性
Public NAT 可以为 IPv4 子网范围、IPv6 子网范围或两者提供 NAT:
对于 IPv4 子网范围,您可以使用以下选项为主要 IP 地址范围、别名 IP 范围或两者配置 NAT:
-
相应区域中所有子网的主要和次要 IPv4 地址范围:单个 Cloud NAT 网关为主要内部 IP 地址和符合条件的虚拟机(这些虚拟机的网络接口使用该区域中的IPv4子网)的所有别名 IP 范围提供 NAT。
-
相应区域中所有子网的主要 IPv4 地址范围:单个 Cloud NAT 网关为主要内部 IP 地址和符合条件虚拟机(这些虚拟机的网络接口使用该区域中IPv4子网)的子网主要 IP 地址范围内的别名 IP 范围提供 NAT。您可在该区域创建其他用于 Public NAT 的 Cloud NAT 网关,来为符合条件的虚拟机的子网次要 IP 地址范围内的别名 IP 范围提供 NAT。
-
自定义子网列表:单个 Cloud NAT 网关为符合条件的虚拟机的主要内部 IP 地址和所有别名 IP 范围提供 NAT,其中这些虚拟机的网络接口使用指定子网列表中的子网。
-
自定义子网 IPv4 地址范围:您可以根据 Public NAT 配额和限制视需要创建任意数量的用于 Public NAT 的 Cloud NAT 网关。您可以选择每个网关要提供哪个子网主要或次要 IP 地址范围。
-
对于 IPv6 子网范围,您可以使用以下选项为内部 IP 地址范围、外部 IP 地址范围或两者配置 NAT:
- 相应区域中所有子网的内部和外部 IPv6 地址范围:单个 Cloud NAT 网关为相应区域中的所有内部和外部 IP 地址范围提供 NAT。
- 自定义子网列表:单个 Cloud NAT 网关为符合条件的虚拟机的内部和外部 IP 地址范围提供 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 网关的层级时, Trusted 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 配置:
在此示例中:
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.50 和 192.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: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
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 的虚拟机实例发起请求以解析仅具有 IPv4 地址的互联网目的地名称时,DNS64 服务器会查找
A
记录。 如果找到
A
记录,DNS64 服务器会通过将64:ff9b::/96
前缀添加到从A
记录获取的目标 IPv4 地址来合成嵌入 IPv4 的 IPv6 地址。例如,如果目标 IPv4 地址为 203.0.113.1,则服务器会返回 64:ff9b::cb00:7101,其中cb00:7101
是 203.0.113.1 的十六进制表示形式。如需了解详情,请参阅 DNS64。
当请求到达启用了 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
前缀。 - 重写响应数据包的目标地址和目标端口,以便将数据包传送到虚拟机。
在配置 NAT64 之前,请先查看路由和防火墙规则。
后续步骤
- 了解 Cloud NAT 产品交互。
- 了解 Cloud NAT 地址和端口。
- 了解 Cloud NAT 规则。
- 设置 Public NAT。