配置 Cloud NAT

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

限制

  • 如果您使用手动 NAT IP 地址分配,并且更改了用于 Cloud NAT 的 IP 地址,则旧 IP 地址上的所有连接会立即关闭。为避免这种情况,请参阅排空与 NAT 关联的外部 IP 地址

  • 如果您使用静态端口分配配置 Cloud NAT 网关,并减少每个虚拟机的端口数下限,则可能会破坏已建立的 NAT 连接。如需了解详情,请参阅减少每个虚拟机的端口

  • 如果您使用动态端口分配配置了 Cloud NAT 网关,并进一步更改配置,则可能会破坏已建立的 NAT 连接。更改配置时,当前分配给每个虚拟机的端口数可能会暂时重置为配置的最小数量。

  • 如果您使用动态端口分配配置 Cloud NAT 网关,然后关闭动态端口分配,则系统会关闭使用 NAT 网关的所有虚拟机连接。

  • 如果已启用端点独立映射,则无法配置动态端口分配NAT 规则

准备工作

在设置 Cloud NAT 之前,请完成以下任务。

获取 IAM 权限

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

设置 Google Cloud

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

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

此页面上的 gcloud 命令行工具说明假定您在发出命令前已经设置项目 ID。

  1. 您可以使用以下命令设置项目 ID:

    gcloud config set project PROJECT_ID
    
  2. 您还可以查看已设置的项目 ID:

    gcloud config list --format='text(core.project)'
    

创建 NAT

设置简单的配置

此配置会自动分配必要的外部 IP 地址,以便为区域提供 NAT 服务。在该区域的任何子网中,没有外部 IP 地址的虚拟机实例均可通过 NAT 连接到互联网。此配置使用静态端口分配,这意味着为每个虚拟机分配相同数量的端口。此配置还会为所有日志类型启用日志记录

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

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

控制台

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

    转到 Cloud NAT

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

  3. 输入网关名称

  4. 为 NAT 网关选择 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 路由器的名称

Terraform

您可以使用 Terraform 模块创建具有 NAT 网关的 Cloud Router 路由器。

module "cloud_router" {
  source  = "terraform-google-modules/cloud-router/google"
  version = "~> 0.4"
  project = var.project_id # Replace this with your project ID in quotes
  name    = "my-cloud-router"
  network = "default"
  region  = "us-central1"

  nats = [{
    name = "my-nat-gateway"
  }]
}

生成的 NAT 网关使用以下默认值:

enable_endpoint_independent_mapping = true
icmp_idle_timeout_sec               = 30
min_ports_per_vm                    = 0
nat_ip_allocate_option              = "AUTO_ONLY"
source_subnetwork_ip_ranges_to_nat  = "ALL_SUBNETWORKS_ALL_IP_RANGES"
tcp_established_idle_timeout_sec    = 1200
tcp_transitory_idle_timeout_sec     = 30
udp_idle_timeout_sec                = 30
log_config {
    enable = true
    filter = "ALL"
}

为 NAT 指定 IP 地址

您可以为 NAT 网关手动分配 NAT IP 地址。如果您选择手动分配,请务必分配足够的 IP 地址,以避免数据包丢失。如需了解详情,请参阅 NAT IP 地址

控制台

  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

此配置使用动态端口分配以及自动 NAT IP 地址分配。您还可以使用手动 NAT IP 地址分配来配置动态端口分配。

通过动态端口分配,NAT 网关可以根据使用情况为每个虚拟机分配不同数量的端口。

使用 beta 版本的 gcloud 命令行工具或 beta 版本的 API 来创建使用动态端口分配的 NAT 网关。

gcloud

gcloud beta compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-dynamic-port-allocation \
    [ --min-ports-per-vm=MIN_PORTS ] \
    [ --max-ports-per-vm=MAX_PORTS ]

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称。

  • NAT_ROUTER:您的 Cloud Router 路由器的名称。

  • MIN_PORTS:要为每个虚拟机分配的端口数下限。如果动态端口分配功能已启用,MIN_PORTS 必须是 2 的幂,并且介于 3232768 之间。默认值为 32

  • MAX_PORTS:为每个虚拟机分配的端口数上限。MAX_PORTS 必须是 2 的幂,并且介于 6465536 之间。MAX_PORTS 必须大于 MIN_PORTS。默认值为 65536

指定 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 指定不同的每台虚拟机默认端口数下限

您可以配置 Cloud NAT 网关为每个虚拟机预留的端口数。如需了解详情,请参阅端口和连接

控制台

  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 指定不同的超时

如需详细了解超时,请参阅 NAT 超时

控制台

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

    转到 Cloud NAT

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

  3. 输入网关名称

  4. 选择 VPC 网络

  5. 为 NAT 网关设置地区

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

  7. 点击高级配置

  8. 根据需要修改超时。

  9. 点击创建

gcloud

  • 使用此命令为这些超时创建具有自定义设置的 NAT 网关:

    • UDP 映射空闲超时
    • TCP 已建立的连接空闲超时
    • TCP 临时连接空闲超时
    • TCP TIME_WAIT 超时
    • ICMP 映射空闲超时
    gcloud compute routers nats create NAT_CONFIG \
      --router=NAT_ROUTER \
      --auto-allocate-nat-external-ips \
      --nat-custom-subnet-ip-ranges=SUBNETS \
      --udp-idle-timeout=60s \
      --tcp-established-idle-timeout=60s \
      --tcp-transitory-idle-timeout=60s \
      --tcp-time-wait-timeout=60s \
      --icmp-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 地址

控制台

  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 关联的虚拟机分配的默认端口数下限

如需了解如何更改端口数下限,请参阅增加每个虚拟机的端口减少每个虚拟机的端口

如果您的 Cloud NAT 网关已配置动态端口分配,请参阅配置动态端口分配时更改最小或最大端口数

控制台

  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 网关以使用动态端口分配

在现有 NAT 网关上启用动态端口分配之前,请确保每个虚拟机的端口数下限是 2 的幂,并且介于 3232,768 之间。如果您需要更改此设置,请参阅更改与 NAT 关联的每个虚拟机分配的默认端口数下限

gcloud

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

gcloud beta compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --enable-dynamic-port-allocation \
    [ --min-ports-per-vm=MIN_PORTS ] \
    [ --max-ports-per-vm=MAX_PORTS ]

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • MIN_PORTS:要为每个虚拟机分配的端口数下限。如果启用了动态端口分配,则 MIN_PORTS 必须是 2 的幂,并且可以介于 3232768 之间。
  • MAX_PORTS:为每个虚拟机分配的端口数上限。MAX_PORTS 必须是 2 的幂,并且介于 6465536 之间。MAX_PORTS 必须大于 MIN_PORTS。默认值为 65536

配置动态端口分配时更改最小或最大端口数

配置动态端口分配后,您可以更改每个虚拟机分配的端口数下限或上限。

如需了解如何更改端口数下限,请参阅增加每个虚拟机的端口减少每个虚拟机的端口

gcloud

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

gcloud beta compute routers nats update NAT_CONFIG \
    --router=NAT_ROUTER \
    --min-ports-per-vm=MIN_PORTS \
    --max-ports-per-vm=MAX_PORTS

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您的 Cloud Router 路由器的名称
  • MIN_PORTS:要为每个虚拟机分配的端口数下限。如果启用了动态端口分配,则 MIN_PORTS 必须是 2 的幂,并且可以介于 3232768 之间。
  • MAX_PORTS:为每个虚拟机分配的端口数上限。MAX_PORTS 必须是 2 的幂,并且介于 6465536 之间。MAX_PORTS 必须大于 MIN_PORTS

更改与 NAT 关联的连接超时

如需详细了解超时,请参阅 NAT 超时

控制台

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

    转到 Cloud NAT

  2. 点击您的 NAT 网关。

  3. 点击 修改

  4. 点击高级配置

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

  6. 点击保存

gcloud

  • 使用以下命令更改这些超时:

    • UDP 映射空闲超时
    • TCP 已建立的连接空闲超时
    • TCP 临时连接空闲超时
    • TCP TIME_WAIT 超时
    • ICMP 映射空闲超时

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

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

替换以下内容:

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

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

如需详细了解超时,请参阅 NAT 超时

控制台

  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-idle-timeout \
    --clear-icmp-idle-timeout \
    --clear-tcp-established-idle-timeout \
    --clear-tcp-time-wait-timeout \
    --clear-tcp-transitory-idle-timeout

请替换以下内容:

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

设置端点映射

您可以为网关启用或停用端点独立映射。默认情况下,该功能处于停用状态。 将端点独立映射从已启用切换为已停用(或从已停用更改为已启用)不会中断现有连接。

如果 NAT 网关使用 NAT 规则或动态端口分配,请勿启用端点独立映射。

控制台

  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:

后续步骤