问题排查

本指南可帮助您解决 Cloud NAT 的常见问题。

常见问题

虚拟机无需 Cloud NAT 即可意外访问互联网

如果您的虚拟机 (VM) 实例或容器实例无需 Cloud NAT 即可访问互联网,但您不想让它们访问互联网,请检查以下问题:

  • 确定虚拟机的网络接口是否具有外部 IP 地址。如果网络接口分配有外部 IP 地址,Google Cloud 会自动对来源与该接口的主内部 IP 地址匹配的数据包执行一对一 NAT。如需了解详情,请参阅 Cloud NAT 规范

    如需确定虚拟机是否具有外部 IP 地址,请参阅为现有实例更改或分配外部 IP 地址

  • 确保您的 Google Kubernetes Engine (GKE) 集群是一个专用集群。非专用集群中的每个节点虚拟机都具有外部 IP 地址,因此每个节点都可以使用 Virtual Private Cloud (VPC) 网络中下一个跃点为默认互联网网关而不依赖 Cloud NAT 的路由。如需了解详情,包括非专用集群如何与 Cloud NAT 网关互动,请参阅 GKE 互动

  • 列出您的 VPC 网络中的路由,查找可通过不同于默认互联网网关的下一个跃点提供互联网连接的路由。例如:

    • 下一个跃点是虚拟机、内部 TCP/UDP 负载平衡器或 Cloud VPN 隧道的自定义静态路由可能会间接提供互联网连接。例如,内部 TCP/UDP 负载平衡器的下一个跃点虚拟机或后端虚拟机本身可能有外部 IP 地址,或者 Cloud VPN 隧道可能连接到提供互联网访问权限的网络。

    • Cloud Router 在您的 VPC 网络中通过本地网络获知的自定义动态路由可能会连接到提供互联网访问权限的网络。

  • 请记住,您的 VPC 网络中的其他自定义路由的优先级可能高于其下一个跃点是默认互联网网关的路由。如需了解 Google Cloud 如何评估路由,请参阅路由适用范围和顺序

不会生成任何日志

某些日志会被排除

  • 验证是否启用了 NAT 日志记录,以及您的日志过滤条件是否未排除要保留的日志。您可以清除日志过滤条件,以免排除任何内容。

  • Cloud NAT 不会记录单个事件。如果出站流量庞大,NAT 日志记录会受限,与虚拟机的机器类型成正比。转换或错误日志可能会被舍弃,并且无法确定在限制期间省略的内容。

需要分配更多 IP 地址

如果实例无法访问互联网,并且您手动分配 IP 地址,则可能需要添加更多 IP 地址。

如果您在 Cloud Console 中看到“要允许所有实例访问互联网,您至少需要再分配 x 个 IP 地址”这一消息,则需要分配更多 IP 地址。如需了解详情,请参阅 NAT IP 地址

您可以通过对消息 nat_allocation_failed 定义提醒政策来监控此问题。

常见问题解答

Cloud NAT 的地区限制

我可以在多个地区中使用同一个 Cloud NAT 网关吗?

不可以。Cloud NAT 网关是地区性资源,与单个区域、VPC 网络和 Cloud Router 相关联。

您可以在其他地区或其他 VPC 网络中创建更多 Cloud NAT 网关。如需确定是否可以在给定地区和 VPC 网络中创建多个网关,请参阅子网 IP 地址范围适用性

Cloud NAT 网关使用的外部 NAT IP 地址是全球性还是地区性的?

Cloud NAT 网关使用地区性外部 IP 地址作为 NAT IP 地址。即使是地区性的,它们也可公开路由。如需了解可以分配 NAT IP 地址的不同方式,请参阅 NAT IP 地址

当 Cloud NAT 能够使用和不能使用时

Cloud NAT 是否会应用于 GKE 节点虚拟机等具有外部 IP 地址的实例?

通常不会。如果虚拟机的网络接口具有外部 IP 地址,则 Google Cloud 始终对从网络接口的主要内部 IP 地址发送的数据包执行 1 对 1 NAT,而不使用 Cloud NAT。但是,Cloud NAT 仍然可以为通过同一网络接口的别名 IP 地址范围发送的数据包提供 NAT 服务。如需了解更多详情,请参阅 Cloud NAT 规范GKE 互动

我可以使用 Cloud NAT 在 VPC 网络中的虚拟机之间通信吗?

不可以,Cloud NAT 只能连接到互联网。

我是否可以使用 Cloud NAT 将 VPC 网络连接到其他网络以解决 IP 地址重叠问题?

否,Cloud NAT 无法应用于下一个跃点不是默认互联网网关的任何自定义路由。例如,Cloud NAT 无法应用于发送到下一个跃点 Cloud VPN 隧道的流量,即使目标位置是可公开路由的 IP 地址也是如此。

Cloud NAT 是否允许其网络接口缺少外部 IP 地址的来源虚拟机向具有外部 IP 地址的目标虚拟机或负载平衡器发送流量,即使来源和目标位于同一个 VPC 网络中?

是。网络路径涉及通过默认互联网网关将流量从 VPC 网络发出,然后在同一网络中接收。

当源虚拟机将数据包发送到目标位置时,Cloud NAT 会在将数据包传送到第二个实例之前执行源 NAT (SNAT)。 Cloud NAT 会对从第二个实例到第一个实例的响应执行目标 NAT (DNAT)。如需查看分步说明示例,请参阅 NAT 流

不支持垃圾传入连接

Cloud NAT 是否允许入站连接(例如 SSH)到没有外部 IP 地址的实例?

否,Cloud NAT 不支持垃圾传入连接。如需了解详情,请参阅 Cloud NAT 规范

如果您需要连接到没有外部 IP 地址的虚拟机,请参阅连接到没有外部 IP 地址的实例。例如,在 Cloud NAT 示例 Compute Engine 设置过程中,您使用 Identity-Aware Proxy 连接到没有外部 IP 地址的虚拟机。

Cloud NAT 和端口

为什么虚拟机拥有固定数量的端口(默认为 64 个)?

Cloud NAT 网关为虚拟机提供 NAT 时,它会根据端口预留程序预留源地址和源端口元组。

如需了解详情,请参阅端口预留示例

我可以更改为虚拟机预留的端口数下限吗?

可以。您可以在创建新的 Cloud NAT 网关时提高或降低每台虚拟机的端口数下限,也可以稍后通过修改此下限来实现此目的。每个 Cloud NAT 网关都会根据端口预留程序预留源地址和源端口元组。

如需详细了解如何降低端口数下限,请参阅下一个问题

创建 Cloud NAT 网关后,我可以减少每台虚拟机的最小端口数吗?

可以;不过,降低最小端口数可能会导致端口预留程序为每台虚拟机预留更少的端口数。发生这种情况时,现有的 TCP 连接可能会被重置,并且必须重新建立连接。

Cloud NAT 和其他 Google 服务

能否通过 Cloud NAT 访问 Google API 和服务?

当您为子网的主要 IP 范围启用 Cloud NAT 时,Google Cloud 会自动启用专用 Google 访问通道。如需了解详情,请参阅专用 Google 访问通道互动

后续步骤