使用 Cloud NAT

本页介绍如何配置 Cloud NAT。在设置 Cloud NAT 之前,请先阅读 Cloud NAT 概览

前提条件

在设置 Cloud NAT 之前,您需要执行以下操作。

获取 IAM 权限

通过 roles/compute.networkAdmin 角色,您有权在 Cloud Router 路由器上创建 NAT 网关、预留和分配 NAT IP 地址,以及指定哪些子网的流量应该使用 NAT 网关的网络地址转换。

设置 Google Cloud

开始之前,请先在 Google Cloud 中设置以下内容。

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 安装并初始化 Cloud SDK

使用场景和示例命令

创建 NAT

设置简单的配置

此配置会自动分配必要的外部 IP 地址,以便为地区提供 NAT 服务。在该地区的任何子网中,没有外部 IP 地址的虚拟机实例均可通过 NAT 连接到互联网。此配置还会为所有日志类型启用日志记录

当您使用自动分配功能时,Google Cloud 会自动为您的项目预留 IP 地址。这些地址会计入您项目中的静态 IP 地址配额

您可以为网关启用或停用端点独立映射。如需了解设置,请参阅设置端点映射

控制台

  1. 在 Google Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击开始使用创建 NAT 网关

  3. 输入网关名称

  4. 选择 VPC 网络

  5. 为 NAT 网关设置地区

  6. 在地区中选择或创建 Cloud Router 路由器。

  7. 点击日志记录、最小端口数、超时打开该部分。

  8. Stackdriver Logging 下,选择翻译和错误。此操作会将所有日志发送到 Cloud Logging。

  9. 点击创建

gcloud

gcloud compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

为 NAT 指定 IP 地址

每个 IP 地址都是预留的静态 IP 地址资源的名称。

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击开始使用创建 NAT 网关

  3. 输入网关名称

  4. 选择 VPC 网络

  5. 为 NAT 网关设置地区

  6. 在地区中选择或创建 Cloud Router 路由器。

  7. NAT IP 地址设置为手动

  8. 选择或创建用于 NAT 的静态预留外部 IP 地址。

  9. 如果要指定其他 IP 地址,请点击添加 IP 地址,然后选择或创建其他静态预留外部 IP 地址。

  10. 点击创建

gcloud

gcloud compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --nat-all-subnet-ip-ranges \
    --nat-external-ip-pool=IP_ADDRESS1,IP_ADDRESS2

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • IP_ADDRESS1:用于 NAT 的静态预留外部 IP 地址
  • IP_ADDRESS2:用于 NAT 的另一个静态预留外部 IP 地址

指定 NAT 的子网范围

默认情况下,针对给定 VPC 网络,NAT 适用于相应地区中所有子网的所有主要和次要 IP 范围。您可以限制哪些主要和次要子网范围可以使用 NAT。

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击开始使用创建 NAT 网关

  3. 输入网关名称

  4. 选择 VPC 网络

  5. 为 NAT 网关设置地区

  6. 在地区中选择或创建 Cloud Router 路由器。

  7. NAT 映射下,将来源设置为自定义

  8. 选择子网。

  9. IP 范围下拉列表中,选择要包含的子网 IP 范围。

  10. 点击确定

  11. 如果您想指定其他范围,请点击添加子网和 IP 范围

  12. 点击创建

gcloud

gcloud compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --auto-allocate-nat-external-ips \
    --nat-custom-subnet-ip-ranges=SUBNETS

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • SUBNETS:以英文逗号分隔的子网列表

为 NAT 指定不同的每台虚拟机默认端口数下限

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击开始使用创建 NAT 网关

  3. 输入网关名称

  4. 选择 VPC 网络

  5. 为 NAT 网关设置地区

  6. 在地区中选择或创建 Cloud Router 路由器。

  7. 点击日志记录、最小端口数、超时

  8. 每个虚拟机实例的端口数下限设为其他值。

  9. 点击创建

gcloud

gcloud compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --auto-allocate-nat-external-ips \
    --min-ports-per-vm=128

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

如需了解详情,请参阅端口和连接

为 NAT 指定不同的超时

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击开始使用创建 NAT 网关

  3. 输入网关名称

  4. 选择 VPC 网络

  5. 为 NAT 网关设置地区

  6. 在地区中选择或创建 Cloud Router 路由器。

  7. 点击日志记录、最小端口数、超时

  8. 根据需要修改超时。

  9. 点击创建

gcloud

gcloud compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --auto-allocate-nat-external-ips \
    --nat-custom-subnet-ip-ranges=SUBNETS \
    --udp-mapping-idle-timeout=60s \
    --icmp-mapping-idle-timeout=60s \
    --tcp-established-connection-idle-timeout=60s \
    --tcp-transitory-connection-idle-timeout=60s

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • SUBNETS:以英文逗号分隔的子网列表

更新 NAT

更改与 NAT 关联的子网和 IP 地址资源

Console

  1. 在 Google Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. NAT 映射下,将来源设置为自定义

  5. 选择子网。

  6. IP 范围下拉列表中,选择要包含的子网 IP 范围。

  7. 如果您想指定其他范围,请点击添加子网和 IP 范围

  8. 点击 NAT IP 地址下拉列表,然后选择自动手动

  9. 如果您选择手动,请指定外部 IP 地址

  10. 要使用手动 IP 地址实现高可用性,请点击添加 IP 地址,然后添加第二个地址。

  11. 点击保存

gcloud

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --nat-external-ip-pool=IP_ADDRESS2,IP_ADDRESS3 \
    --nat-custom-subnet-ip-ranges=SUBNETS:range1

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • IP_ADDRESS2:手动外部 IP 地址
  • IP_ADDRESS3:另一个手动外部 IP 地址
  • SUBNETS:以英文逗号分隔的子网列表

更改与 NAT 关联的外部 IP 地址

您可以更改给定网关的外部 IP 地址列表。当您执行此操作时,Google Cloud 会移除旧地址并添加新地址。旧 IP 地址上的所有现有连接都会立即终止。如需允许现有连接继续运行,同时阻止通过这些 IP 地址建立新连接,请参阅排空与 NAT 关联的外部 IP 地址

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. 点击 NAT IP 地址下拉列表,然后选择自动手动

  5. 如果您选择手动,请指定外部 IP 地址

  6. 要获得高可用性,请点击添加 IP 地址,然后添加第二个地址。

  7. 点击保存

gcloud

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --nat-external-ip-pool=IP_ADDRESS2,IP_ADDRESS3

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • IP_ADDRESS2:手动外部 IP 地址
  • IP_ADDRESS3:另一个手动外部 IP 地址

排空与 NAT 关联的外部 IP 地址

在移除手动配置的 IP 地址之前,您可以对其执行排空操作,以确保现有的连接不会中断。当 IP 地址已排空时,所有现有连接都可以继续运行,直到其自然到期。您可以查看日志,以检查现有连接的状态。

已排空的 IP 地址不接受新的连接。不过,这些 IP 地址会与 NAT 配置保持关联。

NAT 配置中必须至少有一个有效地址,这意味着您不能排空配置中的所有 IP 地址。

如需查看 NAT IP 地址的状态,您可以显示 NAT 状态

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. NAT IP 地址下,将相应 IP 地址旁的 IP 排空值设置为 On

  5. 点击保存

gcloud

如需排空地址,您必须在同一命令中将其从活跃池移至排空池。如果您使用一个命令将该地址从活跃池中移除,而未将其添加到排空池,那么该 IP 地址会从服务中删除,并且现有连接会立即终止。

如果您将 IP 地址从排空池移至活跃池,则会取消排空该 IP 地址。如果您同时从这两个池中移除了 NAT IP 地址,则会将该地址与 NAT 配置断开。

此命令会使 NAT 配置中的其他字段保持不变。

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --nat-external-ip-pool=IP_ADDRESS3 \
    --nat-external-drain-ip-pool=IP_ADDRESS2

其中:

  • --nat-external-ip-pool=IP_ADDRESS3 会更新活跃池以省略 IP_ADDRESS2
  • --nat-external-drain-ip-pool=IP_ADDRESS2 会向排空池添加 IP_ADDRESS2

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • IP_ADDRESS3:IP 地址
  • IP_ADDRESS2:另一个 IP 地址

更改按与 NAT 关联的虚拟机分配的默认端口数下限

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. 点击日志记录、最小端口数、超时

  5. 修改每个虚拟机实例的端口数下限字段。

  6. 点击保存

gcloud

此命令会使 NAT 配置中的其他字段保持不变。

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --min-ports-per-vm=128

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

如需了解详情,请参阅端口和连接

更改与 NAT 关联的连接超时

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. 点击日志记录、最小端口数、超时

  5. 修改您要更改的所有超时值。

  6. 点击保存

gcloud

此命令会使 NAT 配置中的其他字段保持不变。

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --udp-mapping-idle-timeout=60s \
    --icmp-mapping-idle-timeout=60s \
    --tcp-established-connection-idle-timeout=60s \
    --tcp-transitory-connection-idle-timeout=60s

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

将与 NAT 关联的连接超时重置为默认值

Console

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. 点击日志记录、最小端口数、超时

  5. 移除您要重置的任何用户配置的值。

  6. 点击保存

已移除的值会重置为默认值。

gcloud

此命令会使 NAT 配置中的其他字段保持不变。

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --clear-udp-mapping-idle-timeout \
    --clear-icmp-mapping-idle-timeout \
    --clear-tcp-established-connection-idle-timeout \
    --clear-tcp-transitory-connection-idle-timeout

请替换以下内容:

  • NAT_CONFIG:您的 NAT 网关的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

设置端点映射

您可以为网关启用或停用端点独立映射。该功能默认处于启用状态。

控制台

  1. 在 Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. 点击高级配置

  5. 如需启用端点独立映射,请选中启用端点独立映射复选框。如需停用端点独立映射,请取消选中该复选框。

  6. 点击保存

gcloud

为现有网关更新

gcloud compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    [--enable-endpoint-independent-mapping | --no-enable-endpoint-independent-mapping]

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

配置日志记录

如需为现有网关添加(启用)、修改或移除日志记录,请参阅配置日志记录

删除 NAT

这会从 Cloud Router 路由器中移除 NAT 配置,但不会删除路由器本身。

Console

  1. 在 Google Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 选中您要删除的网关配置旁边的复选框。

  3. 菜单 上,点击删除

gcloud

gcloud compute routers nats delete NAT_CONFIG --router=NAT_ROUTER

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称

显示 NAT 配置、IP:port-ranges 和状态

Console

  1. 在 Google Cloud Console 中,转到 Cloud NAT 页面。

    转到“Cloud NAT”页面

  2. 如需查看 NAT 网关详细信息、映射信息或配置详细信息,请点击 NAT 网关的名称。

  3. 如需查看 NAT 状态,请参阅 NAT 网关的状态列。

gcloud

gcloud compute routers nats describe NAT_CONFIG --router=NAT_ROUTER

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
gcloud compute routers get-nat-mapping-info

现有的 routers get-status 命令会显示 NAT 状态:

gcloud compute routers get-status

配额和限制

给定的配额或限制按资源计算。配额和限制可能按项目、网络、地区或其他资源来设置。如需了解详情,请参阅配额页面。

设置示例

以下示例展示了如何使用 Google Cloud 测试 Cloud NAT:

后续步骤