设置和管理 Cloud NAT 规则

本页介绍了如何为 Public NAT 配置 Cloud NAT 规则。在配置 Cloud NAT 规则之前,请先参阅 Cloud NAT 规则概览

创建 NAT 规则

规则表达式语言中所述,Cloud NAT 使用通用表达式语言 (CEL) 来创建 NAT 规则。如需查看可在 NAT 规则中使用的表达式示例,请参阅表达式示例

如果您想创建 NAT 规则,请确保为 NAT 网关停用端点独立映射

创建基于来源的规则

本部分中的步骤介绍了如何针对以下情况创建基于来源的 NAT 规则:

  1. 来自来源 IP 范围 10.10.1.0/24 的数据包必须使用 IP_ADDRESS_1
  2. 来自来源 IP 范围 10.10.2.0/24 的数据包必须使用 IP_ADDRESS_2
  3. 所有其他数据包都必须使用 IP_ADDRESS_3

对于条件 1 和 2,您需要创建两条 NAT 规则。条件 3 通过用于匹配源地址的默认 NAT 规则来实现。 IP_ADDRESS_1IP_ADDRESS_2IP_ADDRESS_3 是您要用于 NAT 的外部 IP 地址。

控制台

向现有 NAT 网关添加 NAT 规则

  1. 添加一个 NAT 规则,该规则可匹配来自 10.10.1.0/24 的流量并将来源 IP 地址转换为 IP_ADDRESS_1

    1. 在 Google Cloud 控制台中,前往 Cloud NAT 页面。

      前往 Cloud NAT

    2. 点击您的 NAT 网关。

    3. 点击修改

    4. 对于 Cloud NAT IP 地址,选择手动

    5. Cloud NAT 规则部分中,点击添加规则

    6. 规则优先级字段中,输入一个介于 0(最高优先级)到 65000(最低优先级)之间的数字。例如 100

    7. 对于匹配 IP 范围,选择来源

    8. 来源 IP 地址范围字段中,输入 10.10.1.0/24

    9. IP 地址部分中,选择要用于 IP_ADDRESS_1 的 IP 地址。

    10. 点击完成

  2. 添加一个 NAT 规则,该规则可匹配来自 10.10.2.0/24 的流量并将其转换为 IP_ADDRESS_2

    1. Cloud NAT 规则部分中,点击添加规则
    2. 规则优先级字段中,输入一个介于 0(最高优先级)到 65000(最低优先级)之间的数字。例如 200
    3. 对于匹配 IP 范围,选择来源
    4. 来源 IP 地址范围字段中,输入 10.10.2.0/24
    5. IP 地址部分中,选择要用于 IP_ADDRESS_2 的 IP 地址。
    6. 点击完成
    7. 点击保存以保存这两个规则。

gcloud

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

向现有 NAT 网关添加 NAT 规则

您可以使用 gcloud beta compute routers nats rules create 命令添加新的 NAT 规则。

  1. 添加一个 NAT 规则,该规则使用 IP_ADDRESS_1 处理来自 10.10.1.0/24 的流量:

    gcloud beta compute routers nats rules create NAT_RULE_PRIORITY \
        --router=NAT_ROUTER \
        --region=REGION \
        --nat=NAT_CONFIG \
        --match="inIpRange(source.ip, '10.10.1.0/24')" \
        --source-nat-active-ips=IP_ADDRESS_1
    

    替换以下内容:

    • NAT_RULE_PRIORITY:唯一标识 NAT 规则的规则编号,从 0(最高优先级)到 65000(最低优先级),例如 100
    • NAT_ROUTER:您用于 NAT 网关的 Cloud Router 路由器的名称
    • REGION:NAT 网关的区域
    • NAT_CONFIG:NAT 配置的名称
    • IP_ADDRESS_1:您要用于与规则匹配的数据包的手动分配的外部 IP 地址
  2. 添加一个 NAT 规则,该规则使用 IP_ADDRESS_2 处理来自 10.10.2.0/24 的流量:

    gcloud beta compute routers nats rules create NAT_RULE_PRIORITY \
        --router=NAT_ROUTER \
        --region=REGION \
        --nat=NAT_CONFIG \
        --match="inIpRange(source.ip, '10.10.2.0/24')" \
        --source-nat-active-ips=IP_ADDRESS_2
    

    替换以下内容:

    • NAT_RULE_PRIORITY:唯一标识 NAT 规则的规则编号,从 0(最高优先级)到 65000(最低优先级),例如 200
    • NAT_ROUTER:您用于 NAT 网关的 Cloud Router 路由器的名称
    • REGION:NAT 网关的区域
    • NAT_CONFIG:NAT 配置的名称
    • IP_ADDRESS_2:您要用于与规则匹配的数据包的手动分配的外部 IP 地址

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

以下代码示例提供了一个示例规则文件。您可以根据自己的应用场景修改此规则文件,如果您已经拥有规则文件,则可以跳过此步骤。

创建规则文件
rules:
 - ruleNumber: 100
   match: inIpRange(source.ip, '10.10.1.0/24')
   action:
     sourceNatActiveIps:
     -  /projects/PROJECT_ID/regions/REGION/addresses/IP_ADDRESS_1
 - ruleNumber: 200
   match: inIpRange(source.ip, '10.10.2.0/24')
   action:
     sourceNatActiveIps:
     -  /projects/PROJECT_ID/regions/REGION/addresses/IP_ADDRESS_2

在上述示例中,IP_ADDRESS_1IP_ADDRESS_2 是您希望用于与规则匹配的数据包的手动分配的外部 IP 地址。对于每个 IP 地址,请替换以下内容:

  • PROJECT_ID:IP 地址的项目
  • REGION:预留 IP 地址的区域
使用 NAT 规则文件创建 NAT 网关

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

gcloud beta compute routers nats create NAT_CONFIG \
    --router=NAT_ROUTER \
    --region=REGION \
    --nat-all-subnet-ip-ranges \
    --nat-external-ip-pool=IP_ADDRESS_3,[IP_ADDRESS_4] \
    --rules=PATH_TO_NAT_RULE_FILE

替换以下内容:

  • NAT_CONFIG:NAT 配置的名称
  • NAT_ROUTER:您要用于 NAT 网关的 Cloud Router 路由器的名称
  • REGION:您要在其中创建 Cloud NAT 网关的区域
  • IP_ADDRESS_3IP_ADDRESS_4:您希望用于默认 NAT 规则的外部 IP 地址
  • PATH_TO_NAT_RULE_FILE:NAT 规则文件的路径

创建基于目的地的规则

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

  • 目标地址为 198.51.100.10 的数据包必须使用 NAT IP 地址 IP_ADDRESS_1
  • 目标地址为 198.51.100.20/30 的数据包必须使用 NAT IP 地址 IP_ADDRESS_2IP_ADDRESS_3

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

控制台

向现有 NAT 网关添加 NAT 规则

  1. 添加一个使用 IP_ADDRESS_1 将流量发送到 198.51.100.10 的 NAT 规则。

    1. 在 Google Cloud 控制台中,前往 Cloud NAT 页面。

      前往 Cloud NAT

    2. 点击修改

    3. 对于 Cloud NAT IP 地址,选择手动

    4. Cloud NAT 规则部分中,点击添加规则

    5. 规则优先级字段中,输入一个介于 0(最高优先级)到 65000(最低优先级)之间的数字。例如 100

    6. 对于匹配 IP 范围,选择目标

    7. 目标 IP 范围字段中,输入 198.51.100.10

    8. IP 地址部分中,选择要用于 IP_ADDRESS_1 的 IP 地址。

    9. 点击完成

  2. 添加一个使用 IP_ADDRESS_2IP_ADDRESS_3 将流量发送到 198.51.100.20/30 的 NAT 规则。

    1. Cloud NAT 规则部分中,点击添加规则
    2. 规则优先级字段中,输入一个介于 0(最高优先级)到 65000(最低优先级)之间的数字。例如 200
    3. 对于匹配 IP 范围,选择目标
    4. 目标 IP 范围字段中,输入 198.51.100.20/30
    5. IP 地址部分中,选择要用于 IP_ADDRESS_2 的 IP 地址。
    6. 点击添加 IP 地址,然后选择要用于 IP_ADDRESS_3 的 IP 地址。
    7. 点击完成
    8. 点击保存以保存这两个规则。

gcloud

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

向现有 NAT 网关添加 NAT 规则

您可以使用 NAT 规则命令添加新的 NAT 规则。将 NAT_RULE_PRIORITY 替换为您要分配给相应规则的 NAT 规则优先级(从 0 [最高] 到 65000 [最低]),并将其他变量替换为与您的配置匹配的信息。

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

gcloud compute routers nats rules create NAT_RULE_PRIORITY \
    --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_PRIORITY \
    --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. 在 Google Cloud 控制台中,转到 Cloud NAT 页面。

    转到 Cloud NAT

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

gcloud

使用 NAT 规则文件更新

如需使用 NAT 规则文件更新 NAT 网关,请使用 gcloud compute routers nats update 命令

将变量替换为与您的配置匹配的信息。

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_PRIORITY 替换为 NAT 规则优先级编号,并将其他变量替换为与您的配置匹配的信息。请注意 source-nat-drain-ips 选项,该选项会使用 IP_ADDRESS3IP_ADDRESS4 阻止与目的地的新连接,但会保留现有连接。

gcloud compute routers nats rules update NAT_RULE_PRIORITY \
    --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. 在 Google Cloud 控制台中,转到 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_PRIORITY 替换为 NAT 规则优先级编号,并将其他变量替换为与您的配置匹配的信息。

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

描述 NAT 规则

控制台

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

  1. 在 Google Cloud 控制台中,转到 Cloud NAT 页面。

    转到 Cloud NAT

  2. 点击您的 NAT 网关。
  3. 查看 NAT 规则。

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

  1. 点击修改
  2. 自定义规则标题下,选择一个 NAT 规则。
  3. 查看详细信息。
  4. 点击取消

gcloud

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

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

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

控制台

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

  1. 在 Google Cloud 控制台中,转到 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 ...]