设置和管理 Cloud NAT 规则
本页介绍了如何为 Public NAT 配置 Cloud NAT 规则。在配置 Cloud NAT 规则之前,请先参阅 Cloud NAT 规则概览。
创建 NAT 规则
如规则表达式语言中所述,Cloud NAT 使用通用表达式语言 (CEL) 来创建 NAT 规则。如需查看可在 NAT 规则中使用的表达式示例,请参阅表达式示例。
如果您想创建 NAT 规则,请确保为 NAT 网关停用端点独立映射。
创建基于来源的规则
本部分中的步骤介绍了如何针对以下情况创建基于来源的 NAT 规则:
- 来自来源 IP 范围
10.10.1.0/24
的数据包必须使用IP_ADDRESS_1
。 - 来自来源 IP 范围
10.10.2.0/24
的数据包必须使用IP_ADDRESS_2
。 - 所有其他数据包都必须使用
IP_ADDRESS_3
。
对于条件 1 和 2,您需要创建两条 NAT 规则。条件 3 通过用于匹配源地址的默认 NAT 规则来实现。
IP_ADDRESS_1
、IP_ADDRESS_2
和 IP_ADDRESS_3
是您要用于 NAT 的外部 IP 地址。
控制台
向现有 NAT 网关添加 NAT 规则
添加一个 NAT 规则,该规则可匹配来自
10.10.1.0/24
的流量并将来源 IP 地址转换为IP_ADDRESS_1
。在 Google Cloud 控制台中,前往 Cloud NAT 页面。
点击您的 NAT 网关。
点击修改。
对于 Cloud NAT IP 地址,选择手动。
在 Cloud NAT 规则部分中,点击添加规则。
在规则优先级字段中,输入一个介于
0
(最高优先级)到65000
(最低优先级)之间的数字。例如100
。对于匹配 IP 范围,选择来源。
在来源 IP 地址范围字段中,输入
10.10.1.0/24
。在 IP 地址部分中,选择要用于
IP_ADDRESS_1
的 IP 地址。点击完成。
添加一个 NAT 规则,该规则可匹配来自
10.10.2.0/24
的流量并将其转换为IP_ADDRESS_2
。- 在 Cloud NAT 规则部分中,点击添加规则。
- 在规则优先级字段中,输入一个介于
0
(最高优先级)到65000
(最低优先级)之间的数字。例如200
。 - 对于匹配 IP 范围,选择来源。
- 在来源 IP 地址范围字段中,输入
10.10.2.0/24
。 - 在 IP 地址部分中,选择要用于
IP_ADDRESS_2
的 IP 地址。 - 点击完成。
- 点击保存以保存这两个规则。
gcloud
按照以下部分中的步骤创建规则文件,创建使用规则文件中规则的 Cloud NAT 网关,或者将规则添加到现有 NAT 网关。
向现有 NAT 网关添加 NAT 规则
您可以使用 gcloud beta compute routers nats rules create
命令添加新的 NAT 规则。
添加一个 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 地址
添加一个 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_1
和 IP_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_3
和IP_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_2
或IP_ADDRESS_3
。
您可以创建一条 NAT 规则来满足所有的这些条件。
控制台
向现有 NAT 网关添加 NAT 规则
添加一个使用
IP_ADDRESS_1
将流量发送到198.51.100.10
的 NAT 规则。在 Google Cloud 控制台中,前往 Cloud NAT 页面。
点击修改。
对于 Cloud NAT IP 地址,选择手动。
在 Cloud NAT 规则部分中,点击添加规则。
在规则优先级字段中,输入一个介于
0
(最高优先级)到65000
(最低优先级)之间的数字。例如100
。对于匹配 IP 范围,选择目标。
在目标 IP 范围字段中,输入
198.51.100.10
。在 IP 地址部分中,选择要用于
IP_ADDRESS_1
的 IP 地址。点击完成。
添加一个使用
IP_ADDRESS_2
或IP_ADDRESS_3
将流量发送到198.51.100.20/30
的 NAT 规则。- 在 Cloud NAT 规则部分中,点击添加规则。
- 在规则优先级字段中,输入一个介于
0
(最高优先级)到65000
(最低优先级)之间的数字。例如200
。 - 对于匹配 IP 范围,选择目标。
- 在目标 IP 范围字段中,输入
198.51.100.20/30
。 - 在 IP 地址部分中,选择要用于
IP_ADDRESS_2
的 IP 地址。 - 点击添加 IP 地址,然后选择要用于
IP_ADDRESS_3
的 IP 地址。 - 点击完成。
- 点击保存以保存这两个规则。
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_ADDRESS2
或 IP_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
命令行工具使用规则文件。
控制台
- 在 Google Cloud 控制台中,转到 Cloud NAT 页面。
- 点击您的 NAT 网关。
- 点击修改。
- 在自定义规则下,点击要更新的规则。
- 在展开的字段中,您可以修改要更改的任何信息。
- 点击完成。
- 点击保存。
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_ADDRESS3
和 IP_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 规则
控制台
- 在 Google Cloud 控制台中,转到 Cloud NAT 页面。
- 点击您的 NAT 网关。
- 点击修改。
- 在自定义规则下,将指针悬停在要删除的规则上。点击 。
- 点击保存。
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 规则的信息。
- 在 Google Cloud 控制台中,转到 Cloud NAT 页面。
- 点击您的 NAT 网关。
- 查看 NAT 规则。
如需详细了解个别 NAT 规则,您可以执行以下操作:
- 点击修改。
- 在自定义规则标题下,选择一个 NAT 规则。
- 查看详细信息。
- 点击取消。
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 规则。
- 在 Google Cloud 控制台中,转到 Cloud NAT 页面。
- 点击您的 NAT 网关。
- 查看 NAT 规则。
gcloud
要列出 NAT 网关中的所有 NAT 规则,请使用以下命令。此命令还会显示 NAT 规则(包括默认规则)中存在的所有 NAT IP 地址。将变量替换为与您的配置匹配的信息。
gcloud compute routers nats rules list \ --router=ROUTER_NAME \ --nat=NAT_NAME \ [--region=REGION] [GLOBAL-FLAG ...]