IP 地址和端口
本页面介绍了 Public NAT 网关如何使用 IP 地址,以及它们如何将来源端口分配给使用网关的 Compute Engine 虚拟机实例和 Google Kubernetes Engine (GKE) 节点。
在查看这些信息之前,请先熟悉 Cloud NAT 概览。
Public NAT IP 地址
Public NAT IP 地址是可在互联网上路由的区域级外部 IP 地址。如果某台虚拟机在由 Public NAT 网关提供的子网中没有外部 IP 地址,它在将数据包发送到互联网上的目标位置时会使用 Public NAT IP 地址。
如需将网络地址转换 (NAT) IP 地址分配给 Public NAT 网关,请使用以下任一方法:
NAT IP 地址自动分配。选择此方法或选择 Google Cloud 默认值时,Public NAT 会根据以下内容自动向您的网关添加区域级外部 IP 地址:
- 您选择的网络层级
- 使用网关的虚拟机的数量
- 为每个虚拟机预留的端口数量
当 Public NAT 不再需要某个 NAT IP 地址上的任何来源端口时,Public NAT 还会自动移除该 NAT IP 地址。
以下是 NAT IP 地址自动分配的特征:
当 Public NAT 网关添加 NAT IP 地址时,它会在您配置网关时选择的网络层级中创建一个静态(预留)区域级外部 IP 地址。例如,如果您选择了高级层级,则 Public NAT 网关会在该层级创建 IP 地址。支持的网络层级为高级层级(默认选项)和标准层级。
您可以在静态外部 IP 地址列表中查看自动添加的 NAT IP 地址。这些地址不计入每个项目的配额。
- 如果您更改 Public NAT 网关的网络层级,则系统会释放该网关的现有 IP 地址,并分配所选层级中的一组新 IP 地址。
- 使用自动分配时,您无法预测将会分配的下一个 IP 地址。如果您需要提前知道(例如为了创建许可名单)可能的 NAT IP 地址集,则应改用手动 NAT IP 地址分配。
当自动添加的 NAT IP 地址不再使用时,它们会被移除。但是,仅当分配给该地址的最后一个虚拟机不再使用任何端口时,Public NAT 才会取消分配地址。因此,当使用 Public NAT 的虚拟机数量减少时,您可能看不到 IP 地址减少。这是因为 Public NAT 不会动态地将虚拟机从一个 IP 地址重新分配给另一个 IP 地址,因为重新分配将会中断已建立的连接。只要至少有一个虚拟机正在使用某个 IP 地址,该 IP 地址就会保持活跃状态,并且可以将新的虚拟机分配给它。
如果您希望能够手动将虚拟机从一个 IP 地址重新分配给另一个 IP 地址,以最大限度地减少 IP 地址用量,请使用手动 NAT IP 地址分配。手动 NAT IP 地址分配允许排空 Public NAT IP 地址。
如果您日后切换为手动 NAT IP 地址分配,系统会删除自动预留的地区级外部 IP 地址。如需了解详情,请参阅切换分配方法。
NAT IP 地址手动分配。如果选择此选项,您可以创建静态(预留)地区级外部 IP 地址并将其手动分配给 Public NAT 网关。根据条件,您可以手动分配高级层级和/或标准层级中的 IP 地址。
- 您可以通过修改 Cloud NAT 网关来增加或减少手动分配的 NAT IP 地址的数量。
- 使用手动 NAT IP 地址分配时,您必须计算 Public NAT 网关所需的地区级外部 IP 地址的数量。如果网关的 NAT IP 地址已用尽,Public NAT 会丢弃数据包。当您使用 Cloud NAT 日志记录启用错误日志记录功能时,系统会记录已丢弃的数据包。
- 如需查看示例计算,请参阅端口预留示例。
如需查看自动分配或手动分配的 NAT IP 地址的数量上限,请参阅 Cloud NAT 限制。
手动分配高级层级和标准层级 IP 地址的组合
使用手动 NAT IP 地址分配方法创建 Public NAT 网关时,您可以分配高级层级和标准层级 IP 地址的组合,只要不同网络层级的 IP 地址不属于相同的规则(包括默认规则)。
在一条规则(包括默认规则)中,分配给活跃范围的所有 IP 地址都必须属于同一网络层级。如果您尝试将不同层级的 IP 地址用作同一规则的一部分,则 Google Cloud 会拒绝该配置。
切换分配方法
您可以将 Public NAT 网关从自动 NAT IP 地址分配切换为手动 NAT IP 地址分配;但是,NAT IP 地址无法保留。即使自动分配的 NAT IP 地址是静态的,它们也无法切换至手动 NAT IP 地址分配。例如,您无法在开始时使用具有自动分配的 NAT IP 地址的 Public NAT 网关,然后在切换到手动分配的 NAT IP 地址时使用相同的地址。
Public NAT 用于自动 NAT IP 地址分配的一组地区级外部 IP 地址不同于您可以手动选择的一组地区级外部 IP 地址。
排空 Public NAT IP 地址
当您在配置采用手动 NAT IP 地址分配的 Public NAT 网关时,可以选择在需要减少该网关使用的 NAT IP 地址数量时会发生的情况:
如果您移除手动分配的 NAT IP 地址,已建立的 NAT 连接会立即中断。
您可以改为选择排空手动分配的 NAT IP 地址。排空操作会指示 Public NAT 网关停止为新连接使用 NAT IP 地址,但继续将其用于已建立的连接。已建立的连接可以正常关闭,而不是突然终止。如需排空与不使用 NAT 规则的 Public NAT 网关相关联的 IP 地址,请参阅排空与 NAT 关联的外部 IP 地址。如需排空与使用 NAT 规则的 NAT 网关相关联的 IP 地址,请参阅更新 NAT 规则。
Private NAT IP 地址
Private NAT 地址是区域级内部 IPv4 地址,来自位于与 Private NAT 网关位于同一区域和 VPC 网络中的 Private NAT 子网的主要 IPv4 地址范围。Private NAT IP 地址无法在互联网上路由。Private NAT 子网的主要 IPv4 地址范围中的 IP 地址只能由 Private NAT 网关使用。如需创建 Private NAT 子网,请使用 Google Cloud CLI 和 --purpose=PRIVATE_NAT 标志添加仅限 IPv4 的子网。
配置 Private NAT 网关以为 VPC 网络中的子网提供 NAT 服务后,具有该子网中网络接口的虚拟机可以将数据包发送到位于其他网络中的资源,例如连接到与托管 Private NAT 网关的网络相同的 Network Connectivity Center 中心的 VPC 网络,或者通过 Cloud Interconnect 或 Cloud VPN 连接到Google Cloud 的 Google Cloud 外部的网络。在出站流量中,Google Cloud 会将来源 IP 地址更改为与网关关联的 Private NAT 子网中的 IP 地址。
以下是 Private NAT IP 地址的特征:
- 您不能将 Private NAT IP 地址自动分配给 Private NAT 网关。相反,在 Private NAT 网关中创建规则时,您需要手动指定 Private NAT 子网。Private NAT 子网必须与网关位于同一 VPC 网络和区域中。网关仅使用 Private NAT 子网的主要 IPv4 地址范围中的 IP 地址。
- 如需确定每个 Private NAT 子网可以提供多少个 NAT IP 地址,请使用以下公式:
2(32 - PREFIX_LENGTH) - 4,其中PREFIX_LENGTH是 Private NAT 子网的主要 IPv4 地址范围的子网掩码长度。每个子网的主要 IPv4 地址范围内都有四个不可用的 IP 地址。
端口
Public NAT 网关上的每个 NAT IP 地址(Public NAT 和 Private NAT)都提供 64512 个 TCP 来源端口和 64512 个 UDP 来源端口。TCP 和 UDP 均支持每个 IP 地址 65,536 个端口。Cloud NAT 不会使用已知(特权)端口(0 到 1,023)。
当 Cloud NAT 网关对虚拟机发送的数据包执行来源网络地址转换 (SNAT) 时,它会更改数据包的 NAT 来源 IP 地址和来源端口。
创建 Cloud NAT 网关时,您可以选择使用静态端口分配还是动态端口分配。您可以在创建网关后更改端口分配方法。如需了解更改 Cloud NAT 网关的端口分配方法对已建立的连接有何影响,请参阅切换端口分配方法。
如果您已手动将多个静态(预留)区域级外部 IP 地址分配给 Public NAT 网关,则使用该网关的单个虚拟机可以从任何已分配的 NAT IP 地址获取所需的端口,甚至可以同时从多个 NAT IP 地址获取。
静态端口分配
配置静态端口分配时,您需要指定每个虚拟机实例的端口数下限。如果您未指定每个虚拟机的端口数量下限,Google Cloud 会使用默认值。
默认情况下,系统会为 Public NAT 启用静态端口分配。另一方面,Private NAT 默认使用动态端口分配。
由于所有虚拟机都分配相同数量的端口,因此如果所有虚拟机具有类似的出站流量使用量,则静态端口分配效果最佳。配置静态端口分配后,分配给每个虚拟机的端口数量是固定的,即使某些虚拟机使用的端口数多于其他虚拟机,或者某个虚拟机用尽所有端口,也不会发生变化。如果出站流量用量有所不同,请考虑配置动态端口分配。
如果要在 Public NAT 网关上配置端点独立映射,则必须使用静态端口分配。端点独立映射不适用于 Private NAT 网关。
动态端口分配
配置动态端口分配时,您需要指定每个虚拟机实例的端口数下限和上限。
默认情况下,系统会为 Private NAT 启用动态端口分配。Public NAT 默认使用静态端口分配。
通过配置动态端口分配,可以允许同一 Cloud NAT 网关根据虚拟机的使用量为每个虚拟机分配不同数量的端口。一开始,系统会为虚拟机分配每个虚拟机实例的端口数下限。如果虚拟机即将用完分配给它的所有端口,则分配给该虚拟机的端口数量将加倍。 虚拟机可以重复请求更多端口,直到达到每个虚拟机实例的端口数上限。当端口使用量大幅减少时,端口将被释放,并且可以分配给使用相同 NAT 网关的其他虚拟机。
动态端口分配具有以下优点:
减少已分配但未使用的端口数量。
NAT 网关监控每个虚拟机的端口使用量,并根据需求修改分配给每个虚拟机的端口数。您无需监控端口用量或调整 NAT 网关配置。
在使用动态端口分配之前,请考虑以下事项:
如果在 Public NAT 网关上启用了端点独立映射,则无法配置动态端口分配。如果您需要端点独立映射,请使用静态端口分配。
在将其他端口分配给虚拟机时,您可能会看到连接超时或延迟。如需了解有助于防止连接中断的策略,请参阅使用动态端口分配减少连接中断。
切换端口分配方法
您可以在给定的 Cloud NAT 网关的静态端口分配和动态端口分配之间切换。
仅当满足以下任一条件时,切换到动态端口分配方法才会破坏现有的 NAT 连接:
您需要将每个虚拟机的端口数上限设置为小于上一个 NAT 配置中指定的每个虚拟机的端口数下限(使用静态端口分配)的值。
如果在上一个配置中,每个虚拟机的端口数下限设置为超过
1024,并且如果新配置中将1024指定为每个虚拟机的端口数上限,则现有连接中断,因为第一个条件优先。您需要将每个虚拟机的端口数上限设置为小于
1024的值。
除非满足上述任一条件,否则切换到动态端口分配不会破坏现有的 NAT 连接。
停用动态端口分配并切换到静态端口分配会造成中断,并且会破坏所有活跃的 NAT 连接。
端口预留过程
Public NAT 使用以下过程为 Public NAT(Public NAT 和 Private NAT)网关提供的每台虚拟机预配 NAT 来源地址和来源端口元组。
Cloud NAT 会确定应为其执行 NAT 的虚拟机内部 IP 地址。虚拟机内部 IP 地址取决于网关已配置提供的子网 IP 地址范围。
如果 Public NAT 网关已配置为针对虚拟机的网络接口使用的子网的主要 IP 地址范围执行 NAT,则该网关会同时为这台虚拟机的主要内部 IP 地址及子网的主要 IP 地址范围中的任意一个别名 IP 地址范围执行 NAT。
如果 Public NAT 网关已配置为针对虚拟机网络接口使用的子网的次要 IP 地址范围执行 NAT,则该网关会对该子网的次要 IP 地址范围内的任意别名 IP 地址范围执行 NAT。
由于 Private NAT 网关已配置为针对虚拟机网络接口使用的子网的所有 IP 地址范围执行 NAT,因此该网关会对该子网中的所有 IP 范围执行 NAT。
必要时,Cloud NAT 会调整每个虚拟机实例的端口数下限。如果配置了静态端口分配,并且网关为具有多个地址(网络掩码小于