使用 Cloud NAT 规则

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

创建 NAT 规则

NAT 规则使用通用表达式语言语法编写。如需详细了解规则表达式语言,请参阅规则表达式语言

以下示例配置步骤满足以下条件:

  • 虚拟机必须使用资源名称为 IP_ADDRESS1 的 NAT IP 地址将流量发送到目标 198.51.100.10
  • 虚拟机必须使用资源名称为 IP_ADDRESS2IP_ADDRESS3 的 NAT IP 地址才能将流量发送到 198.51.100.20/30

您可以创建一条 NAT 规则来满足所有的这些条件。

控制台

将 NAT 规则添加到现有 NAT 网关

添加将流量从 IP_ADDRESS1 发送到 198.51.100.10 的 NAT 规则。

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

    转到 Cloud NAT

  2. 选择您的 NAT 网关。
  3. 选择修改
  4. NAT 规则下,选择添加新规则
  5. 匹配字段中,输入 198.51.100.10
  6. IP 地址菜单中,选择用于 IP_ADDRESS1 的 IP 地址。
  7. 规则编号字段中,输入 100
  8. 选择完成

接下来,添加将流量从 IP_ADDRESS2IP_ADDRESS3 发送到 198.51.100.20/30 的 NAT 规则。

  1. NAT 规则下,选择添加新规则
  2. 匹配字段中,输入 198.51.100.20/30
  3. IP 地址菜单中,选择用于 IP_ADDRESS2 的 IP 地址。
  4. 选择添加 IP 地址,然后选择用于 IP_ADDRESS3 的 IP 地址。
  5. 规则编号字段中,输入 200
  6. 选择完成
  7. 选择保存以保存这两个规则。

gcloud

按照以下部分中的步骤创建规则文件,创建使用规则文件中规则的 NAT 网关,或者将规则添加到现有 NAT 网关。

将 NAT 规则添加到现有 NAT 网关

您可以使用 NAT 规则命令添加新的 NAT 规则。将 NAT_RULE_NUMBER 替换为所需的 NAT 规则编号,并将其他变量替换为与您的配置匹配的信息。

首先,添加将流量从 IP_ADDRESS1 发送到 198.51.100.10 的 NAT 规则。

gcloud compute routers nats rules create NAT_RULE_NUMBER \
    --router=ROUTER_NAME \
    --nat=NAT_NAME \
    --match='destination.ip == "198.51.100.10"' \
    --source-nat-active-ips=[IP_ADDRESS1] \
    [--region=REGION] [GLOBAL-FLAG ...]

接下来,添加将流量从 IP_ADDRESS2IP_ADDRESS3 发送到 198.51.100.20/30 的 NAT 规则。

gcloud compute routers nats rules create NAT_RULE_NUMBER \
    --router=ROUTER_NAME \
    --nat=NAT_NAME \
    --match='inIpRange(destination.ip, "198.51.100.20/30")' \
    --source-nat-active-ips=[IP_ADDRESS2],[IP_ADDRESS3] \
    [--region=REGION] [GLOBAL-FLAG ...]

创建规则文件

以下代码示例是示例规则文件。您可以根据自己的使用场景修改此规则文件,如果您已经有规则文件,则可以跳过此步骤。

rules:
 - ruleNumber: 100
   match: destination.ip == '198.51.100.10'
   action:
     sourceNatActiveIps:
     -  /projects/PROJECT ID/regions/REGION/addresses/IP_ADDRESS1
 - ruleNumber: 200
   match: inIpRange(destination.ip, '198.51.100.20/30')
   action:
     sourceNatActiveIps:
     -  /projects/PROJECT ID/regions/REGION/addresses/IP_ADDRESS2
     -  /projects/PROJECT ID/regions/REGION/addresses/IP_ADDRESS3

使用 NAT 规则文件创建 NAT 网关

以下命令会创建一个 NAT 网关,并使用 NAT 规则文件中的规则对其进行配置。如果您已配置 NAT 网关,请参阅向现有 NAT 网关添加 NAT 规则。将变量替换为与您的配置匹配的信息。

gcloud compute routers nats create NAT_NAME \
    --router=ROUTER_NAME \
    --nat-external-ip-pool=[IP_ADDRESS4],[IP_ADDRESS5] \
    --nat-all-subnet-ip-ranges \
    --rules=PATH_TO_NAT_RULE_FILE \
    [--region=REGION] [GLOBAL-FLAG ...]

更新 NAT 规则

如需更新 NAT 规则,请按照以下部分中的步骤操作。您只能通过 gcloud 命令行工具使用规则文件。

控制台

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

    转到 Cloud NAT

  2. 选择您的 NAT 网关。
  3. 选择修改
  4. 自定义规则下,点击要更新的规则。
  5. 在展开的字段中,您可以修改要更改的任何信息。
  6. 完成更改后,选择完成
  7. 选择保存

gcloud

使用 NAT 规则文件更新

如需使用 NAT 规则文件更新 NAT 网关,请使用以下命令。将变量替换为与您的配置匹配的信息。

gcloud compute routers nats update NAT_NAME \
    --router=ROUTER_NAME \
    --rules=PATH_TO_NAT_RULE_FILE \
    [--region=REGION] [GLOBAL-FLAG ...]

以下代码示例是示例规则文件。请注意 sourceNatDrainIps 操作,该操作会使用 IP_ADDRESS1 阻止与目标位置的新连接,但保留现有连接。

rules:
 - ruleNumber: 100
   match: destination.ip == '198.51.100.10'
   action:
     sourceNatActiveIps:
     -  /projects/PROJECT ID/regions/REGION/addresses/IP_ADDRESS2
     sourceNatDrainIps:
     -  /projects/PROJECT ID/regions/REGION/addresses/IP_ADDRESS1

使用 NAT 规则命令进行更新

如需更新单个 NAT 规则,请使用以下命令。将 NAT_RULE_NUMBER 替换为所需的 NAT 规则编号,并将其他变量替换为与您的配置匹配的信息。 请注意 source-nat-drain-ips 选项,该选项会使用 IP_ADDRESS3IP_ADDRESS4 阻止与目的地的新连接,但会保留现有连接。

gcloud compute routers nats rules update NAT_RULE_NUMBER \
    --router=ROUTER_NAME \
    --nat=NAT_NAME \
    --match=Match conditions (expressed in CEL) \
    --source-nat-active-ips=[IP_ADDRESS1],[IP_ADDRESS2] \
    --source-nat-drain-ips=[IP_ADDRESS3],[IP_ADDRESS4] \
    [--region=REGION] [GLOBAL-FLAG ...]

删除 NAT 规则

控制台

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

    转到 Cloud NAT

  2. 选择您的 NAT 网关。
  3. 选择修改
  4. 自定义规则下,将指针悬停在要删除的规则上。点击
  5. 点击保存

gcloud

如需从网关中移除 NAT 规则,您可以将其直接从网关中移除,也可以将其从规则文件中移除并更新网关。

使用 NAT 规则文件删除

您可以直接从规则文件中移除 NAT 规则,然后更新 NAT 网关。为了方便您参考,下面重复展示了更新 NAT 网关的命令。将变量替换为与您的配置匹配的信息。

gcloud compute routers nats update NAT_NAME \
    --router=ROUTER_NAME \
    --rules=PATH_TO_NAT_RULE_FILE \
    [--region=REGION] [GLOBAL-FLAG ...]

使用 NAT 规则命令进行删除

或者,您可以使用 NAT 规则 delete 命令从网关中移除 NAT 规则。将 NAT_RULE_NUMBER 替换为所需的 NAT 规则编号,并将其他变量替换为与您的配置匹配的信息。

gcloud compute routers nats rules delete NAT_RULE_NUMBER \
    --router=ROUTER_NAME \
    --nat=NAT_NAME \
    [--region=REGION] [GLOBAL-FLAG ...]

描述 NAT 规则

控制台

您可以在 Cloud NAT 页面上查看有关 NAT 规则的信息。

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

    转到 Cloud NAT

  2. 选择您的 NAT 网关。
  3. 查看 NAT 规则。

如需详细了解单个 NAT 规则,您可以执行以下操作:

  1. 选择修改
  2. 自定义规则标题下,选择 NAT 规则。
  3. 查看详细信息。
  4. 选择取消,以确保不会保存任何更改。

gcloud

如需描述 NAT 规则,请使用以下命令。将 NAT_RULE_NUMBER 替换为您的 NAT 规则编号,并将其他变量替换为与您的配置匹配的信息。

gcloud compute routers nats rules describe NAT_RULE_NUMBER \
    --router=ROUTER_NAME \
    --nat=NAT_NAME \
    [--region=REGION] [GLOBAL-FLAG ...]

列出 NAT 网关中的所有 NAT 规则

控制台

您可以在 Cloud NAT 页面上查看 NAT 规则。

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

    转到 Cloud NAT

  2. 选择您的 NAT 网关。
  3. 查看 NAT 规则。

gcloud

要列出 NAT 网关中的所有 NAT 规则,请使用以下命令。此命令还会显示 NAT 规则(包括默认规则)中存在的所有 NAT IP 地址。将变量替换为与您的配置匹配的信息。

gcloud compute routers nats rules list \
    --router=ROUTER_NAME \
    --nat=NAT_NAME \
    [--region=REGION] [GLOBAL-FLAG ...]