通告特定的 VPC 子网

您可以创建自定义通告路由来限制 Cloud Router 路由器通告的 Virtual Private Cloud (VPC) 网络中的子网。只有您通告的子网对本地客户端可见。除非您将 Cloud Router 路由器配置为通告所有子网,否则 Cloud Router 路由器不会动态通告新子网。如果您选择仅通告特定子网,并且要通告新子网,则必须将其作为自定义通告路由添加。

对于启用 IPv6 的 BGP 会话,您可以为特定内部 (ULA) 和外部 (GUA) IPv6 子网范围配置自定义通告路由。如需了解 IPv6 子网类型,请参阅 IPv6 子网范围。

如需在创建 Cloud Router 路由器或配置 BGP 会话时指定自定义通告路由,请参阅创建 Cloud Router 路由器或建立 BGP 会话。

准备工作

gcloud

如果您要使用本指南中的命令行示例,请执行以下操作:

  1. 安装或更新到 Google Cloud CLI 的最新版本。
  2. 设置默认区域和可用区。

API

如果希望使用本指南中的 API 示例,请设置 API 访问权限。

在 Cloud Router 路由器上指定自定义通告路由

如需在现有 Cloud Router 路由器上指定自定义通告路由,请按以下步骤操作。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Router 页面。

    前往“Cloud Router 路由器”

  2. 选择要更新的 Cloud Router 路由器。

  3. 在路由器详情页面上,点击 修改。

  4. 在通告的路由部分,对于路由,选择创建自定义路由。

  5. 如果选中通告向 Cloud Router 公开的所有子网复选框,请将其清除。

  6. 选择添加自定义路由以添加自定义通告路由。

  7. 配置自定义通告路由:

    • 来源:选择预定义的子网列表。Cloud Router 会根据 VPC 网络的动态路由模式列出所有可用的子网。
    • IP 地址范围:您可以修改通告的子网 IP 范围。例如,您可以缩小指定的范围,使 Cloud Router 仅通告部分子网。 您可以同时指定 IPv4 和 IPv6 自定义 IP 范围。但是,IPv6 自定义范围仅在启用了 IPv6 的 BGP 会话中通告。

      如果您提供了不含子网掩码的 IP 地址前缀,则会被解释为 /32 子网掩码(对于 IPv4)和 /128 子网掩码(对于 IPv6)。如需了解您可以拥有的自定义已知路由的数量上限,请参阅限制。

    • 说明:添加说明以帮助标识此自定义通告路由的用途,然后点击完成。

  8. 添加完自定义通告路由后,点击保存。

gcloud

在开始之前,请记录要通告的子网 IP 范围。

运行 update 命令。如需指定要通告的子网 IP 范围,请使用 --set-advertisement-ranges 标志。如需将 IP 范围附加到现有通告,请使用 --add-advertisement-ranges 标志。

  1. 使用 --set-advertisement-ranges 标志;所有现有的自定义通告路由都会被替换:

    gcloud compute routers update ROUTER_NAME \
       --advertisement-mode custom \
       --set-advertisement-ranges=ADVERTISED_IP_RANGES
    

    请替换以下内容:

    • ROUTER_NAME:Cloud Router 路由器的名称

    • ADVERTISED_IP_RANGES:新 IP 地址范围数组的内容。您可以同时指定 IPv4 和 IPv6 自定义 IP 范围。但是,IPv6 自定义范围仅在启用了 IPv6 的 BGP 会话中通告。

      如果您提供了不含子网掩码的 IP 地址前缀,则会被解释为 /32 子网掩码(对于 IPv4)和 /128 子网掩码(对于 IPv6)。如需了解您可以拥有的自定义已知路由的数量上限,请参阅限制。

    以下示例更新 my-router Cloud Router 路由器,以通告 192.0.2.0/24 和 198.51.100.0/24 子网;现有的自定义通告路由将被替换:

    gcloud compute routers update my-router \
       --advertisement-mode=custom \
       --set-advertisement-ranges='192.0.2.0/24,198.51.100.0/24'
    

    以下示例更新 my-router Cloud Router 路由器,以通告 192.0.2.0/24 和 198.51.100.0/24 IPv4 子网以及 2001:db8:abcd:12::/64 IPv6 子网:

    gcloud compute routers update my-router \
       --advertisement-mode=custom \
       --set-advertisement-ranges='192.0.2.0/24,198.51.100.0/24,2001:db8:abcd:12::/64'
    

    Cloud Router 路由器仅在启用了 IPv6 的 BGP 会话中通告 IPv6 范围。

  2. 以下示例使用 --add-advertisement-ranges 标志将 IP 范围附加到现有通告:

    gcloud compute routers update my-router \
       --add-advertisement-ranges='203.0.113.0/24'
    

    以下示例将 2001:db8:abcd:12::/64 自定义 IPv6 范围添加到 Cloud Router 路由器的通告中:

    gcloud compute routers update my-router \
       --add-advertisement-ranges='2001:db8:abcd:12::/64'
    

    Cloud Router 路由器仅在启用了 IPv6 的 BGP 会话中通告 IPv6 范围。

如果 Cloud Router 路由器的通告组包含所有子网,请移除通告组以阻止 Cloud Router 路由器通告其他子网。通告组是 Cloud Router 路由器动态通告的 IP 范围,由 Google 定义。如需查看完整的通告组列表,请参阅 Google SDK 文档中的 set-advertisement-groups 标志。

  1. 以下示例使用 describe 命令检查 Cloud Router 路由器的通告路由:

    gcloud compute routers describe my-router
    
  2. 如果输出包含值为 all_subnets 的 advertisedGroups 字段,请将其移除。以下示例使用带有 --remove-advertisement-groups 标志的 update 命令:

    gcloud compute routers update my-router \
       --remove-advertisement-groups all_subnets
    

API

使用 routers.patch 方法更新 bgp.advertisedIpRanges[] 字段。如果 bgp.advertisedGroups[] 字段当前的值为 ALL_SUBNETS,则您可能还需要更新该字段。

bgp.advertisedGroups[] 和 bgp.advertisedIpRanges[] 字段接受通告组和通告 IP 地址范围的数组。PATCH 这些字段时,您将使用请求中的新数组覆盖现有数组。

  1. 发送 GET 请求以获取路由器上的当前通告组和通告 IP 地址范围的数组。如需了解详情,请参阅查看 Cloud Router 路由器状态和路由。

  2. 发送 PATCH 请求,其中包含新的通告组和通告 IP 地址范围的数组。

    • 将您要在路由器上使用的任何子网 IP 地址范围添加到 bgp.advertisedIpRanges[] 字段中。
    • 如果 advertisedGroups[] 字段当前指定了值 ALL_SUBNETS,请通过发送空数组将其移除,如以下示例所示。这样做可以阻止 Cloud Router 路由器通告其他子网。
    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/ROUTER_NAME
    {
      "bgp": {
        "advertisedGroups": [],
        "advertisedIpRanges": [
        ADVERTISED_IP_RANGES
       ]
     }
    }
    

    替换以下内容:

    • PROJECT_ID:Cloud Router 路由器所属的项目
    • REGION:Cloud Router 路由器所在的区域
    • ROUTER_NAME:Cloud Router 路由器的名称
    • ADVERTISED_IP_RANGES:新 IP 地址范围数组的内容。除了 IPv4 地址范围之外,您还可以指定 IPv6 自定义 IP 地址范围。但是,仅当您为此 BGP 会话启用 IPv6 交换时,才会通告 IPv6 范围。

    如果您提供了不含子网掩码的 IP 地址前缀,则会被解释为 /32 子网掩码(对于 IPv4)和 /128 子网掩码(对于 IPv6)。 如需了解您可以拥有的自定义已知路由的数量上限,请参阅限制。

    以下示例包含两个子网 IPv4 地址范围和一个 IPv6 地址范围:

        {
          "range": "192.0.2.0/24",
          "description": "First example range"
        },
        {
          "range": "198.51.100.0/24",
          "description": "Second example range"
        },
        {
          "range": "2001:db8:abcd:12::/64",
          "description: "Third example range"
        }
    

为 BGP 会话指定自定义通告路由

如需为现有 BGP 会话指定自定义通告路由,请按照以下步骤操作。

控制台

  1. 在 Cloud de Confiance 控制台中,前往 Cloud Router 页面。

    前往“Cloud Router 路由器”

  2. 选择待更新 BGP 会话所属的 Cloud Router 路由器。

  3. 在路由器详细信息页面上,选择要更新的 BGP 会话。

  4. 在 BGP 会话详情页面中,点击 修改。

  5. 对于路由,选择创建自定义路由。

  6. 如果选中通告向 Cloud Router 公开的所有子网复选框,请将其清除。

  7. 选择添加自定义路由以添加通告路由。

  8. 配置自定义通告路由:

    • 来源:选择预定义的子网列表。Cloud Router 会根据 VPC 网络的动态路由模式列出所有可用的子网。

    • IP 地址范围:您可以修改通告的子网 IP 范围。例如,您可以缩小指定的范围,使 Cloud Router 仅通告部分子网。除了 IPv4 地址范围之外,您还可以指定 IPv6 自定义 IP 地址范围。但是,仅当您为此 BGP 会话启用 IPv6 交换时,才会通告 IPv6 范围。

      如果您提供了不含子网掩码的 IP 地址前缀,则会被解释为 /32 子网掩码(对于 IPv4)和 /128 子网掩码(对于 IPv6)。 如需了解您可以拥有的自定义已知路由的数量上限,请参阅限制。

    • 说明:添加说明以帮助标识此自定义通告路由的用途,然后点击完成。

  9. 添加完自定义路由后,点击保存。

gcloud

在开始之前,请记录要通告的子网 IP 范围。

运行 update-bgp-peer 命令。如需指定要通告的子网 IP 范围,请使用 --set-advertisement-ranges 标志。如需将 IP 范围附加到现有通告,请使用 --add-advertisement-ranges 标志。

  1. 使用 --set-advertisement-ranges 标志;所有现有的自定义通告都会被替换:

    gcloud compute routers update-bgp-peer ROUTER_NAME \
       --peer-name=PEER_NAME \
       --advertisement-mode=custom \
       --set-advertisement-ranges=ADVERTISED_IP_RANGES
    

    替换以下内容:

    • ROUTER_NAME:Cloud Router 路由器的名称
    • PEER_NAME:您的 BGP 对等体的名称
    • (可选)如果您要添加自定义 IPv6 范围,请添加 --enable-ipv6 标志。
    • ADVERTISED_IP_RANGES:新 IP 地址范围数组的内容。您可以同时指定 IPv4 和 IPv6 自定义 IP 范围。但是,IPv6 自定义范围仅在启用了 IPv6 的 BGP 会话中通告。

      如果您提供了不含子网掩码的 IP 地址前缀,则会被解释为 /32 子网掩码(对于 IPv4)和 /128 子网掩码(对于 IPv6)。 如需了解您可以拥有的自定义已知路由的数量上限,请参阅限制。

    以下示例更新 my-router Cloud Router 路由器上的 my-bgp-session BGP 会话,以通告 192.0.2.0/24、198.51.100.0/24 和 2001:db8:abcd:12::/64 子网;现有的自定义通告路由将被替换:

    gcloud compute routers update-bgp-peer my-router \
       --peer-name my-bgp-session \
       --enable-ipv6 \
       --advertisement-mode=custom \
       --set-advertisement-ranges='192.0.2.0/24,198.51.100.0/24,2001:db8:abcd:12::/64'
    
  2. 以下示例使用 --add-advertisement-ranges 标志将 IP 范围附加到现有通告:

    gcloud compute routers update-bgp-peer my-router \
       --peer-name my-bgp-session \
       --add-advertisement-ranges='203.0.113.0/24'
    

    以下示例将 2001:db8:abcd:12::/64 自定义 IPv6 地址添加到 Cloud Router 路由器的通告路由中:

    gcloud compute routers update-bgp-peer my-router \
        --peer-name my-bgp-session \
        --enable-ipv6 \
        --add-advertisement-ranges='2001:db8:abcd:12::/64'
    

如果 BGP 会话的通告组包含所有子网,请移除该通告组,以防止 Cloud Router 路由器通告其他子网。通告组是 Cloud Router 路由器动态通告的 IP 范围,由 Google 定义。如需查看完整的通告组列表,请参阅 Google SDK 文档中的 set-advertisement-groups 标志。

  1. 以下示例使用 describe 命令检查 Cloud Router 路由器的通告路由:

    gcloud compute routers describe my-router
    
  2. 如果相关 BGP 会话包含值为 all_subnets 的 advertisedGroups 字段,请将其移除。以下示例使用带有 --remove-advertisement-groups 标志的 update 命令:

    gcloud compute routers update-bgp-peer my-router \
       --peer-name my-bgp-session \
       --remove-advertisement-groups=all_subnets
    

API

使用 routers.patch 方法来更新 bgpPeers[] 字段。

bgpPeers[] 字段接受 BGP 对等端数组。PATCH 此字段时,您将使用请求中包含的新数组覆盖现有 BGP 对等方数组。

  1. 发送 GET 请求以获取路由器的当前 BGP 对等方数组。如需了解详情,请参阅查看 BGP 会话配置。

  2. 发送带有新 BGP 对等端数组的 PATCH 请求。对要添加自定义通告路由的每个 BGP 对等端,执行以下操作:

    • 将所需的任何子网 IP 地址范围通告添加到 bgpPeers[].advertisedIpRanges[] 字段中。

      如果您提供了不含子网掩码的 IP 地址前缀,则会被解释为 /32 子网掩码(对于 IPv4)和 /128 子网掩码(对于 IPv6)。 如需了解您可以拥有的自定义已知路由的数量上限,请参阅限制。

    • 如果 bgpPeers[].advertisedGroups[] 字段当前指定了值 ALL_SUBNETS,请移除该值,以阻止 BGP 会话通告其他子网。

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/ROUTER_NAME
    {
      "bgpPeers": [
        BGP_PEERS
      ]
    }
    

    替换以下内容:

    • PROJECT_ID:Cloud Router 路由器所属的项目
    • REGION:Cloud Router 路由器所在的区域
    • ROUTER_NAME:Cloud Router 路由器的名称
    • BGP_PEERS:新 BGP 对等体数组的内容

    以下示例包含两个具有自定义通告路由的 BGP 对等端:

        {
          "name": "peer-1",
          "interfaceName": "if-peer-1",
          "ipAddress": "169.254.10.1",
          "peerIpAddress": "169.254.10.2",
          "peerAsn": 64512,
          "enableIpv6": true,
          "advertisedRoutePriority": 100,
          "advertiseMode": "CUSTOM",
          "advertisedGroups": [],
          "advertisedIpRanges": [
            {
              "range": "192.0.2.0/24",
              "description": "First example subnet"
            },
            {
              "range": "198.51.100.0/24",
              "description": "Second example subnet"
            },
            {
              "range": "2001:db8:abcd:12::/64",
              "description: "Third example subnet"
            }
          ]
        },
        {
          "name": "peer-2",
          "interfaceName": "if-peer-2",
          "ipAddress": "169.254.20.1",
          "peerIpAddress": "169.254.20.2",
          "peerAsn": 64513,
          "advertisedRoutePriority": 100,
          "advertiseMode": "CUSTOM",
          "advertisedGroups": [],
          "advertisedIpRanges": [
            {
              "range": "203.0.113.0/24",
              "description": "Fourth example subnet"
            }
          ]
        }
    

后续步骤