创建位于 Google Cloud 网络之间的高可用性 VPN

本页面介绍如何使用高可用性 VPN 网关配置将两个 Virtual Private Cloud (VPC) 网络连接在一起。只要两个现有 VPC 网络中的主要和次要子网 IP 地址范围不重叠,您就可以将它们连接在一起。

如需详细了解 Cloud VPN,请参阅以下资源:

要求

一般准则

如需确保获得 SLA 承诺的 99.99% 可用性,请确保在创建此配置时满足以下要求:

  • 在每个 VPC 网络中设置一个高可用性 VPN 网关。
  • 在同一个 Google Cloud 区域中设置两个高可用性 VPN 网关。
  • 在每个网关的每个接口上配置隧道。
  • 匹配网关接口,如以下备注中所述。

虽然可以使用高可用性 VPN 网关之间的单个隧道或使用传统 VPN 网关将两个 VPC 网络相连,但这种类型的配置不具备高可用性,且不满足高可用性服务等级协议 (SLA) 承诺的 99.99% 可用性。

创建云端路由器

配置新的高可用性 VPN 网关时,您可以创建新的 Cloud Router 路由器,也可以将现有 Cloud Router 路由器与现有 Cloud VPN 隧道或 VLAN 连接搭配使用。但是,由于连接的特定 ASN 要求,您使用的 Cloud Routers 路由器必须尚未管理与合作伙伴互连连接关联的 VLAN 连接的 BGP 会话。

管理权限

由于高可用性 VPN 网关并不总会属于您或您的 Google Cloud 组织,因此在创建高可用性 VPN 网关或连接到其他人所拥有的高可用性 VPN 网关时,请考虑以下权限要求:

  • 如果您拥有在其中创建高可用性 VPN 网关的项目,请为其配置建议的权限。
  • 如果您要连接到非您所拥有的 Google Cloud 组织或项目中的高可用性 VPN 网关,请向所有者请求 compute.vpnGateways.use 权限。

准备工作

查看 Google Cloud 中动态路由的工作原理。

确保您的对等 VPN 网关支持边界网关协议 (BGP)。

在 Google Cloud 中设置以下各项,以更轻松地配置 Cloud VPN:

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 安装并初始化 Cloud SDK
  1. 如果您使用的是 gcloud 命令行工具,请使用以下命令设置项目 ID。此页面上的 gcloud 说明假设您在发出命令前已设置了项目 ID。

        gcloud config set project PROJECT_ID
        
  1. 您还可以通过运行以下命令来查看已设置的项目 ID:

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

创建自定义 VPC 网络和子网

创建高可用性 VPN 网关和隧道对之前,在高可用性 VPN 网关所在区域创建一个 VPC 网络和至少一个子网:

本文档中的示例还使用了 VPC 全球动态路由模式,该模式的行为如下:

  • Cloud Router 路由器的所有实例会将其获知的 to on-premises 路由应用于 VPC 网络的所有子网。
  • 指向 VPC 网络中所有子网的路由会与本地路由器共享。

本文档将在两个不同的 VPC 网络中分别创建一个高可用性 VPN 网关,以供您参考:

NETWORK_1 包含以下子网:

  • 使用 IP 范围 RANGE_1REGION_1 中名为 SUBNET_NAME_1 的子网。
  • 使用 IP 范围 RANGE_2REGION_2 中名为 SUBNET_NAME_2 的子网。

NETWORK_2 包含以下子网:

  • 使用 IP 范围 RANGE_3REGION_1 中名为 SUBNET_NAME_3 的子网。
  • 使用 IP 范围 RANGE_4REGION_3 中名为 SUBNET_NAME_4 的子网。

创建两个相互连接且经过全面配置的高可用性 VPN 网关

按照本部分中的说明创建高可用性 VPN 网关、对等 VPN 网关资源、隧道和 BGP 会话。

创建高可用性 VPN 网关

控制台

VPN 设置向导包括创建高可用性 VPN 网关、对等 VPN 网关资源、隧道和 BGP 会话所需的所有配置步骤。

如要创建高可用性 VPN 网关,请按以下步骤操作:

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

    转到 VPN

  2. 如果您是首次创建网关,请点击创建 VPN 连接

  3. 选择 VPN 设置向导

  4. 如果您已有高可用性 VPN 网关,请选择该网关的选项按钮。

  5. 点击继续

  6. 指定 VPN 网关名称

  7. VPC 网络下,选择现有网络或默认网络。

  8. 选择区域

  9. 点击创建并继续

  10. 控制台页面会刷新,刷新后会显示您的网关信息。系统会自动为每个网关接口分配两个外部 IP 地址。请记下您网关配置的详细信息,以供后续配置步骤使用。

gcloud

如需创建两个高可用性 VPN 网关,请完成以下命令序列:

  • REGION_1 的每个网络中创建一个高可用性 VPN 网关。

    每个网关创建后,系统会自动分配两个外部 IP 地址,每个 IP 地址对应一个网关接口。记下这些 IP 地址,以便稍后在配置步骤中使用。

    在以下命令中,替换以下选项:

    • GW_NAME_1GW_NAME_2:每个网关的名称
    • NETWORK:Google Cloud 网络的名称
    • REGION:您需要在其中创建网关和隧道的 Google Cloud 区域

    创建第一个网关

    gcloud compute vpn-gateways create GW_NAME_1 \
       --network=NETWORK_1 \
       --region=REGION_1
    

    您创建的网关应类似于以下示例输出。系统已自动为每个网关接口分配了一个外部 IP 地址:

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnGateways/ha-vpn-gw-a].
    NAME          INTERFACE0     INTERFACE1     NETWORK     REGION
    ha-vpn-gw-a   203.0.113.16   203.0.113.23   network-a   us-central1
    

    创建第二个网关

    gcloud compute vpn-gateways create GW_NAME_2 \
       --network=NETWORK_2 \
       --region=REGION_1
    

    您创建的网关应类似于以下示例输出:

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnGateways/ha-vpn-gw-b].
    NAME          INTERFACE0     INTERFACE1     NETWORK     REGION
    ha-vpn-gw-b   203.0.114.18   203.0.114.25   network-b   us-central1
    

API

如需为高可用性 VPN 网关创建完整配置,请使用以下部分中的 API 命令。这些部分使用的所有字段值均为示例值。

如需创建高可用性 VPN 网关,请向 vpnGateways.insert 方法发出 POST 请求。重复此命令以创建另一个高可用性 VPN 网关,并针对另一个网关使用 namenetworkregion

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnGateways
   {
     "name": "ha-vpn-gw-a",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/network-a"
   }

创建对等 VPN 网关资源

控制台

对等 VPN 网关资源表示 Google Cloud 中的非 Google Cloud 网关。

如需创建对等 VPN 网关资源,请按以下步骤操作:

  1. 创建 VPN 页面上的对等 VPN 网关下,选择 Google Cloud
  2. 项目下,选择将包含新网关的 Google Cloud 项目。
  3. VPN 网关名称下,选择您要同时配置的其他高可用性 VPN。
  4. 继续创建 VPN 隧道

gcloud

如需创建对等 VPN 网关资源,请参阅创建高可用性 VPN 网关gcloud 步骤。

API

如需创建对等 VPN 网关资源,请参阅创建高可用性 VPN 网关的 API 步骤。

创建云端路由器

控制台

Cloud Router 路由器下,创建指定以下选项的 Cloud Router(如果尚未创建)。如果 Cloud Router 路由器尚未管理与“合作伙伴互连”连接关联的 VLAN 连接的 BGP 会话,则可以使用现有的 Cloud Router 路由器。

  1. 要创建新的 Cloud Router 路由器,请指定以下内容:

    • 名称
    • 可选的说明
    • 新路由器的 Google ASN

    您可以使用未在网络中其他位置使用的任何专用 ASN(645126553442000000004294967294)。Google ASN 用于同一个 Cloud Router 路由器上的所有 BGP 会话,且以后不能更改 ASN。

  2. 如需创建新路由器,请点击创建

gcloud

以下说明假定您尚未创建用于管理高可用性 VPN 隧道的 BGP 会话的 Cloud Router 路由器。 您可以在每个 VPC 网络中使用现有的 Cloud Router 路由器,除非这些路由器已经为与合作伙伴互连连接关联的 VLAN 连接管理 BGP 会话。

如需创建两个 Cloud Router 路由器,请完成以下命令序列:

  • REGION_1 的每个网络中创建一个 Cloud Router 路由器。

    在以下命令中,替换以下选项:

    • ASN_1ASN_2:您尚未使用的任何专用 ASN(645126553442000000004294967294)。对于 ROUTER_NAME_1 的两个接口,此示例使用 ASN 65001,对于 ROUTER_NAME_2 的两个接口,此示例使用 ASN 65002
    • 将所有其他选项替换为您之前使用的值。

    创建第一个路由器

    gcloud compute routers create ROUTER_NAME_1 \
       --region=REGION_1 \
       --network=NETWORK_1 \
       --asn=ASN_1
    

    您创建的路由器应类似于以下示例输出:

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-a].
    NAME       REGION        NETWORK
    router-a   us-central1   network-a
    

    创建第二个路由器

    gcloud compute routers create ROUTER_NAME_2 \
       --region=REGION_1 \
       --network=NETWORK_2 \
       --asn=ASN_2
    

    您创建的路由器应类似于以下示例输出:

    Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-b].
    NAME       REGION        NETWORK
    router-b   us-central1   network-b
    

API

如果您已在每个高可用性 VPN 网关所在的每个 VPC 网络中创建了 Cloud Router 路由器,则可以使用这些 Cloud Router 路由器,无需新建。但是,如果 Cloud Router 路由器为与合作伙伴互连连接关联的 VLAN 连接管理 BGP 会话,则创建新的 Cloud Router 路由器。

如需创建 Cloud Router 路由器,请向 routers.insert 方法发出 POST 请求。

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers
   {
     "name": "router-a",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/network-a"
   }

创建 VPN 隧道

控制台

如需创建 VPN 隧道,请按以下步骤操作:

  1. 高可用性下,选择一对隧道或一个连接到其他高可用性 VPN 网关的隧道:

    • 如果您选择创建一对 VPN 隧道(推荐),请配置创建 VPN 页面底部出现的两个隧道对话框。

    • 如果您选择创建一个 VPN 隧道,您可以在创建 VPN 页面的其余部分配置单个隧道。但是,您必须创建第二个隧道,才能让另一个高可用性 VPN 网关获得服务等级协议 (SLA) 承诺的 99.99% 的可用性。稍后,您可以按照此过程的末尾所述添加第二个隧道。

  2. 在同一页面上或在页面底部的每个隧道对话框中,完成以下步骤。

  3. 如果您要配置一个隧道,请在关联的 Cloud VPN 网关接口下,针对此网关选择高可用性 VPN 接口和 IP 地址组合,以将其与其他高可用性 VPN 网关上的网关接口关联。对于双隧道配置,此选项和关联的对等 VPN 网关接口选项均不可用,因为已为您配置了正确的接口组合。

    1. 指定隧道的名称
    2. 指定可选的说明
    3. 指定 IKE 版本。如果您的对等路由器支持默认设置 IKE v2,则建议使用。
    4. 使用预共享密钥(共享密钥)指定 IKE 预共享密钥,该密钥必须与您在对等网关上创建的合作伙伴隧道的预共享密钥相对应。如果您尚未在对等 VPN 网关上配置预共享密钥并希望生成预共享密钥,请点击生成并复制。请确保将预共享密钥记录在安全位置,因为在创建 VPN 隧道后将无法检索该密钥。
    5. 点击完成
    6. 创建 VPN 页面上,为其余的隧道对话框重复隧道创建步骤。
  4. 配置完所有隧道后,点击创建并继续

gcloud

如需在每个高可用性 VPN 网关上创建两个 VPN 隧道,请完成以下命令序列。

  • 您从 GW_NAME_1interface 0 创建的隧道必须连接到与 NETWORK_2GW_NAME_2interface 0 相关联的外部 IP 地址。
  • GW_NAME_1interface 1 中的隧道必须连接到与 GW_NAME_2interface 1 关联的外部 IP 地址。
  • NETWORK_1 中的 GW_NAME_1 上创建 VPN 隧道时,请指定 NETWORK_2GW_NAME_2 的信息。Google 会自动将 interface 0GW_NAME_1 隧道与 GW_NAME_2 中的 interface 0 连接,并将 GW_NAME_1interface 1 连接到 GW_NAME_2interface 1

    GW_NAME_1 上创建两个隧道

    • NETWORK_1GW_NAME_1 的两个接口上各创建一个 VPN 隧道。

      在以下命令中,替换以下选项:

      • TUNNEL_NAME_GW1_IF0TUNNEL_NAME_GW1_IF1:源自 GW_NAME_1 的每条隧道的名称;通过添加网关接口名称为隧道命名有助于以后识别隧道
      • GW_NAME_2--peer-gcp-gateway 的值
      • REGIONGW_NAME_1 所在的区域
      • 可选:--vpn-gateway-region 是运行高可用性 VPN 网关的区域。其值应与 --region 相同。如果未指定,则系统会自动设置此选项。该选项会替换此命令调用中的默认计算/区域属性值。
      • IKE_VERS2 表示 IKEv2;两个隧道都连接到另一个高可用性 VPN 网关,因此 Google 建议使用 IKEv2
      • SHARED_SECRET:您的预共享密钥(共享密钥),该密钥必须与您在 interface 0interface 1 上通过 GW_NAME_2 创建的相应隧道使用的预共享密钥相同;有关建议,请参阅生成强预共享密钥
      • INT_NUM_0GW_NAME_1 上第一个接口的编号 0
      • INT_NUM_1GW_NAME_1 上第二个接口的编号 1
      • 如果 peer-gcp-gateway 位于与 VPN 隧道和本地 VPN 网关不同的项目中,则可以使用 --peer-gcp-gateway 选项作为完整 URI 或相对名称来指定该项目。以下示例选项是相对名称:
        --peer-gcp-gateway projects/other-project/regions/us-central1/vpnGateways/ha-vpn-gw-b
        
      • --peer-gcp-gateway-region 是 VPN 隧道所连接的对等端高可用性 VPN 网关所在的地区,必须与 VPN 隧道位于同一区域。如果未指定,则系统会自动设置区域。

      GW_NAME_1 INT_NUM_0 上创建第一个隧道

      gcloud compute vpn-tunnels create TUNNEL_NAME_GW1_IF0\
          --peer-gcp-gateway=GW_NAME_2 \
          --region=REGION_1 \
          --ike-version=IKE_VERS \
          --shared-secret=SHARED_SECRET \
          --router=ROUTER_NAME_1 \
          --vpn-gateway=GW_NAME_1 \
          --interface=INT_NUM_0
      

      GW_NAME_1 INT_NUM_1 上创建第二个隧道

      gcloud compute vpn-tunnels create TUNNEL_NAME_GW1_IF1 \
          --peer-gcp-gateway=GW_NAME_2 \
          --region=REGION_1 \
          --ike-version=IKE_VERS \
          --shared-secret=SHARED_SECRET \
          --router=ROUTER_NAME_1 \
          --vpn-gateway=GW_NAME_1 \
          --interface=INT_NUM_1
      

      命令输出应类似于以下示例:

      Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-a-to-b-if-0].
      NAME                 REGION        VPN_GATEWAY   INTERFACE  PEER_GCP_GATEWAY
      tunnel-a-to-b-if-0   us-central1   ha-vpn-gw-a   0          ha-vpn-gw-b
      
      Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-a-to-b-if-1].
      NAME                 REGION        VPN_GATEWAY   INTERFACE  PEER_GCP_GATEWAY
      tunnel-a-to-b-if-1   us-central1   ha-vpn-gw-a   1          ha-vpn-gw-b
      

    GW_NAME_2 上创建两个隧道

    • NETWORK_2GW_NAME_2 的两个接口上各创建一个 VPN 隧道。

      • 您从 GW_NAME_2interface 0 创建的隧道必须连接到与 NETWORK_1GW_NAME_1interface 0 相关联的外部 IP 地址。
      • GW_NAME_2interface 1 中的隧道必须连接到与 GW_NAME_1interface 1 关联的外部 IP 地址。

      在以下命令中,替换以下选项:

      • REGIONGW_NAME_2 所在的区域
      • 可选:--vpn-gateway-region 是运行 VPN 网关的区域。其值应与 --region 相同。如果未指定,则系统会自动设置此选项。该选项会替换此命令调用中的默认计算/地区属性值。
      • TUNNEL_NAME_GW2_IF0TUNNEL_NAME_GW2_IF1:源自 GW_NAME_2 的每条隧道的名称;通过添加网关接口名称为隧道命名有助于以后识别隧道
      • GW_NAME_1--peer-gcp-gateway 的值;--peer-gcp-gateway-region 的值必须与 VPN 隧道位于同一区域。如果未指定,则系统会自动设置该值。在此示例中,区域为 REGION_1
      • IKE_VERS2 表示 IKEv2;这些隧道连接到上一步创建的两个隧道,因此它们必须使用相同的 IKE 版本(Google 建议使用 IKEv2)
      • SHARED_SECRET:您的预共享密钥(共享密钥),必须与您在 GW_NAME_1 的每个接口上创建的合作伙伴隧道的预共享密钥相对应;如需查看建议,请参阅生成强预共享密钥
      • GW_NAME_2:您在网关配置步骤中配置的第二个网关的名称
      • INT_NUM_0GW_NAME_2 上第一个接口的编号 0
      • INT_NUM_1GW_NAME_2 上第二个接口的编号 1
      • 如果 peer-gcp-gateway 位于与 VPN 隧道和本地 VPN 网关不同的项目中,则可以使用 --peer-gcp-gateway 选项作为完整 URI 或相对名称来指定该项目。以下示例选项是相对名称:
        --peer-gcp-gateway projects/other-project/regions/us-central1/vpnGateways/ha-vpn-gw-b
        
      • --peer-gcp-gateway-region 是 VPN 隧道所连接的对等端高可用性 VPN 网关所在的地区,必须与 VPN 隧道位于同一区域。如果未指定,则系统会自动设置区域。

      GW_NAME_2 INT_NUM_0 上创建第一个隧道

      gcloud compute vpn-tunnels create TUNNEL_NAME_GW2_IF0 \
          --peer-gcp-gateway=GW_NAME_1 \
          --region=REGION_1 \
          --ike-version=IKE_VERS \
          --shared-secret=SHARED_SECRET \
          --router=ROUTER_NAME_2 \
          --vpn-gateway=GW_NAME_2 \
          --interface=INT_NUM_0
      

      GW_NAME_2 INT_NUM_1 上创建第二个隧道

      gcloud compute vpn-tunnels create TUNNEL_NAME_GW2_IF1 \
          --peer-gcp-gateway=GW_NAME_1 \
          --region=REGION_1 \
          --ike-version=IKE_VERS \
          --shared-secret=SHARED_SECRET \
          --router=ROUTER_NAME_2 \
          --vpn-gateway=GW_NAME_2 \
          --interface=INT_NUM_1
      

      命令输出应类似于以下示例:

      Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-b-to-a-if-0].
      NAME                 REGION       VPN_GATEWAY   INTERFACE  PEER_GCP_GATEWAY
      tunnel-b-to-a-if-0   us-central1  ha-vpn-gw-b   0          ha-vpn-gw-a
      
      Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-b-to-a-if-1].
      NAME                 REGION       VPN_GATEWAY   INTERFACE  PEER_GCP_GATEWAY
      tunnel-b-to-a-if-1   us-central1  ha-vpn-gw-b   1          ha-vpn-gw-a
      

    完成此步骤后,请等待几分钟,然后检查每个 VPN 隧道的状态

    仅当对应的合作伙伴隧道同样可用且配置正确时,VPN 隧道的状态才会更改为 Established。此外,还必须在它们之间协商有效的 IKE 和子安全关联 (SA)。

    例如,仅当 ha-vpn-gw-b 上的 tunnel-b-to-a-if-0 已配置且可用时,才能在 ha-vpn-gw-a 上建立 tunnel-a-to-b-if-0

API

如需为高可用性 VPN 网关的两个接口各创建一个 VPN 隧道,请向 vpnTunnels.insert 方法发出 POST 请求。

  1. 如需创建第一个隧道,请运行以下命令:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpnTunnels
    {
     "name": "ha-vpn-gw-a-tunnel-0",
     "ikeVersion": 2,
     "peerIp": "192.0.2.1",
     "router": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/router-a",
     "sharedSecret": "974;va'oi3-1",
     "vpnGateway": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/vpn-gateways/ha-vpn-gw-a",
     "vpnGatewayInterface": 0
    }
    
  2. 如需创建第二个隧道,请重复上述命令,但更改以下参数:

    • name
    • peerIp
    • sharedSecretsharedSecretHash(如果需要)
    • vpnGatewayInterface:更改为其他高可用性 VPN 网关接口的值 - 在此示例中,请将此值更改为 1

    重复整个步骤,为连接到第一个高可用性 VPN 网关的第二个高可用性 VPN 网关创建两个隧道,但使用 gcloud 命令示例作为参考来更改参数。

创建 BGP 会话

控制台

如要创建 BGP 会话,请按照以下步骤操作:

  1. 如果您不想立即配置 BGP 会话,请点击稍后配置 BGP 会话,这将打开摘要和提醒页面。
  2. 如果您要立即配置 BGP 会话,请在第一个 VPN 隧道上点击配置
  3. 创建 BGP 会话页面上,完成以下步骤:
    1. 指定 BGP 会话的名称
    2. 指定为对等 VPN 网关配置的对等 ASN
    3. 可选:指定通告路由的优先级
    4. 指定 Cloud Router BGP IP 地址和 BGP 对等 IP 地址。确保 IP 地址满足以下要求:
      • 每个 BGP IP 地址必须属于适合 169.254.0.0/16 的相同 /30 CIDR。
      • 每个 BGP IP 地址不能是 /30 CIDR 中的第一个(网络)或最后一个(广播)地址。
      • 每个 BGP 会话的每个 BGP IP 地址范围在 VPC 网络的所有地区中必须唯一。
    5. 可选:点击通告的路由列表,然后创建自定义路由。
    6. 点击保存并继续
  4. 针对网关中配置的其余隧道重复上述步骤。对于每个隧道,请使用不同的 Cloud Router BGP IP 地址和 BGP 对等 IP 地址。
  5. 配置完所有 BGP 会话后,请点击保存 BGP 配置

gcloud

在本部分中,您将配置 Cloud Router 路由器接口和 BGP 对等方;下表概述了这些接口和对等方。并介绍了您为每个接口指定的 IP 范围和对等 IP 地址之间的关系。例如,router-1 的第一个接口的对等 IP 地址为 169.254.0.2。此 IP 来自 router-2 第一个接口(即 169.254.0.2/30)的 IP 地址范围。

路由器 BGP 接口名称 IP 范围 对等 IP 地址 对等 ASN
router-1 if-tunnel-a-to-b-if-0 169.254.0.1/30 169.254.0.2 65002
router-2 if-tunnel-b-to-a-if-0 169.254.0.2/30 169.254.0.1 65001
router-1 if-tunnel-a-to-b-if-1 169.254.1.1/30 169.254.1.2 65002
router-2 if-tunnel-b-to-a-if-1 169.254.1.2/30 169.254.1.1 65001

如需了解详情,请参阅本部分中的说明,其中包括配置后的示例输出。

如需创建 Cloud Router 路由器接口和 BGP 对等端,请完成以下命令序列。

  1. 在隧道 TUNNEL_NAME_GW1_IF0ROUTER_NAME_1 上创建 BGP 接口和 BGP 对等端

    此 BGP 接口使用两个 BGP IP 地址进行连接 TUNNEL_NAME_GW1_IF0GW_1interface 0GW_2interface 0)。

    在以下命令中,替换以下选项:

    • ROUTER_1_INTERFACE_NAME_0:Cloud Router BGP 接口的名称;使用与 TUNNEL_NAME_GW1_IF0 相关的名称会很有帮助
    • IP_ADDRESS:来自 169.254.0.0/16 块的 BGP IP 地址尚未使用;此示例使用 169.254.0.1
    • MASK_LENGTH30;同一个 Cloud Router 路由器上的每个 BGP 会话都必须使用 169.254.0.0/16 块中的唯一 /30 CIDR
    • PEER_NAME:描述 BGP 对等端的名称;使用与 TUNNEL_NAME_GW1_IF0 相关的名称会很有帮助
    • PEER_IP_ADDRESS:来自 169.254.0.0/16 块的 BGP IP 地址尚未使用;此示例使用 169.254.0.2
    • PEER_ASN:用于其他 Cloud Router 路由器上所有接口的 ASN 编号 ROUTER_NAME_2;此示例使用 ASN 编号 65002

    TUNNEL_NAME_GW1_IF0 创建 BGP 接口

    gcloud compute routers add-interface ROUTER_NAME_1 \
        --interface-name=ROUTER_1_INTERFACE_NAME_0 \
        --ip-address=IP_ADDRESS \
        --mask-length=MASK_LENGTH \
        --vpn-tunnel=TUNNEL_NAME_GW1_IF0 \
        --region=REGION_1
    

    TUNNEL_NAME_GW1_IF0 创建 BGP 对等端

    gcloud compute routers add-bgp-peer ROUTER_NAME_1 \
        --peer-name=PEER_NAME \
        --interface=ROUTER_1_INTERFACE_NAME_0 \
        --peer-ip-address=PEER_IP_ADDRESS \
        --peer-asn=PEER_ASN \
        --region=REGION_1
    

    命令输出应类似于以下示例:

    Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-a].
    
  2. 在隧道 TUNNEL_NAME_GW1_IF1ROUTER_NAME_1 上创建 BGP 接口和 BGP 对等端

    此 BGP 接口使用两个 BGP IP 地址进行连接 TUNNEL_NAME_GW1_IF1GW_1interface 1GW_2interface 1)。

    在以下命令中,替换以下选项:

    • ROUTER_1_INTERFACE_NAME_1:Cloud Router BGP 接口的名称;使用与 TUNNEL_NAME_GW1_IF1 相关的名称会很有帮助
    • IP_ADDRESS:来自 169.254.0.0/16 块的 BGP IP 地址尚未使用;此示例使用 169.254.1.1
    • MASK_LENGTH30:同一个 Cloud Router 路由器上的每个 BGP 会话都必须使用 169.254.0.0/16 块中的唯一 /30 CIDR
    • PEER_NAME:描述 BGP 对等端的名称;使用与 TUNNEL_NAME_GW1_IF1 相关的名称会很有帮助
    • PEER_IP_ADDRESS:来自 169.254.0.0/16 块的 BGP IP 地址尚未使用;此示例使用 169.254.1.2
    • PEER_ASN:用于其他 Cloud Router 路由器上所有接口的 ASN 编号 ROUTER_NAME_2;此示例使用 ASN 编号 65002

    TUNNEL_NAME_GW1_IF1 创建 BGP 接口

    gcloud compute routers add-interface ROUTER_NAME_1 \
       --interface-name=ROUTER_1_INTERFACE_NAME_1 \
       --ip-address=IP_ADDRESS \
       --mask-length=MASK_LENGTH \
       --vpn-tunnel=TUNNEL_NAME_GW1_IF1 \
       --region=REGION_1
    

    TUNNEL_NAME_GW1_IF1 创建 BGP 对等端

    gcloud compute routers add-bgp-peer ROUTER_NAME_1  \
       --peer-name=PEER_NAME \
       --interface=ROUTER1_INTERFACE_NAME_1 \
       --peer-ip-address=PEER_IP_ADDRESS \
       --peer-asn=PEER_ASN \
       --region=REGION_1
    

    命令输出应类似于以下示例:

    Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-a].
    
  3. 验证 ROUTER_1 的设置

    gcloud compute routers describe ROUTER_1  \
        --region=REGION_1
    

    命令输出应类似于以下示例:

     bgp:
       advertisemode: DEFAULT
       asn: 65001
     bgpPeers:
     — interfaceName: if-tunnel-a-to-b-if-0
       ipAddress: 169.254.0.1
       name: bgp-peer-tunnel-a-to-b-if-0
       peerAsn: 65002
       peerIpAddress: 169.254.0.2
     bgpPeers:
     — interfaceName: if-tunnel-a-to-b-if-1
       ipAddress: 169.254.1.1
       name: bgp-peer-tunnel-a-to-b-if-1
       peerAsn: 65002
       peerIpAddress: 169.254.1.2
     creationTimestamp: '2015-10-19T14:31:52.639-07:00'
     id: '4047683710114914215'
     interfaces:
     — ipRange: 169.254.0.1/30
       linkedVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-a-to-b-if-0
       name: if-tunnel-a-to-b-if-0
     — ipRange: 169.254.1.1/30
       linkedVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-a-to-b-if-1
       name: if-tunnel-a-to-b-if-1
     kind: compute#router
     name: router-a
     network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/network-a
     region: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1
     selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-a
    
  4. 在隧道 TUNNEL_NAME_GW2_IF0ROUTER_NAME_2 上创建 BGP 接口和 BGP 对等端

    此 BGP 接口使用两个 BGP IP 地址进行连接 TUNNEL_NAME_GW2_IF0GW_2interface 0GW_1interface 0)。

    在以下命令中,替换以下选项:

    • ROUTER_2_INTERFACE_NAME_0:Cloud Router BGP 接口的名称;使用与 TUNNEL_NAME_GW2_IF0 相关的名称会很有帮助
    • IP_ADDRESS:之前用于此网关和接口的 BGP IP 地址;此示例使用 169.254.0.2
    • MASK_LENGTH30;同一个 Cloud Router 路由器上的每个 BGP 会话都必须使用 169.254.0.0/16 块中的唯一 /30 CIDR
    • PEER_NAME:描述 BGP 对等端的名称;使用与 TUNNEL_NAME_GW2_IF0 相关的名称会很有帮助
    • PEER_IP_ADDRESS:之前用于对等网关和接口的 IP 地址;此示例使用 169.254.0.1
    • PEER_ASN:用于 ROUTER_NAME_1 上所有接口的 ASN 编号,该编号已提前设置;此示例使用 ASN 编号 65001

    TUNNEL_NAME_GW2_IF0 创建 BGP 接口

    gcloud compute routers add-interface ROUTER_NAME_2 \
        --interface-name=ROUTER_2_INTERFACE_NAME_0 \
        --ip-address=IP_ADDRESS \
        --mask-length=MASK_LENGTH \
        --vpn-tunnel=TUNNEL_NAME_GW2_IF0 \
        --region=REGION_1
    

    TUNNEL_NAME_GW2_IF0 创建 BGP 对等端

    gcloud compute routers add-bgp-peer ROUTER_NAME_2 \
        --peer-name=PEER_NAME \
        --interface=ROUTER_2_INTERFACE_NAME_0 \
        --peer-ip-address=PEER_IP_ADDRESS \
        --peer-asn=PEER_ASN \
        --region=REGION_1
    

    命令输出应类似于以下示例:

    Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-b].
    
  5. 在隧道 TUNNEL_NAME_GW2_IF1ROUTER_NAME_2 上创建 BGP 接口和 BGP 对等端

    此 BGP 接口使用两个 BGP IP 地址进行连接 TUNNEL_NAME_GW2_IF1GW_2interface 1GW_1interface 1)。

    在以下命令中,替换以下选项:

    • ROUTER_2_INTERFACE_NAME_1:Cloud Router BGP 接口的名称;使用与 TUNNEL_NAME_GW2_IF1 相关的名称会很有帮助
    • IP_ADDRESS:之前用于此网关和接口的 BGP IP 地址;此示例使用 169.254.1.2
    • MASK_LENGTH30;同一个 Cloud Router 路由器上的每个 BGP 会话都必须使用 169.254.0.0/16 块中的唯一 /30 CIDR
    • PEER_NAME:描述 BGP 对等端的名称;使用与 TUNNEL_NAME_GW2_IF1 相关的名称会很有帮助
    • PEER_IP_ADDRESS:来自 169.254.0.0/16 块的 BGP IP 地址尚未使用;此示例使用 169.254.1.1
    • PEER_ASN:用于 ROUTER_NAME_1 上所有接口的 ASN 编号,该编号已提前设置;此示例使用 ASN 编号 65001

    TUNNEL_NAME_GW2_IF1 创建 BGP 接口

    gcloud compute routers add-interface ROUTER_NAME_2 \
       --interface-name=ROUTER_2_INTERFACE_NAME_1 \
       --ip-address=IP_ADDRESS \
       --mask-length=MASK_LENGTH \
       --vpn-tunnel=TUNNEL_NAME_GW2_IF1 \
       --region=REGION_1
    

    命令输出应类似于以下示例:

    Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-b].
    

    TUNNEL_NAME_GW2_IF1 创建 BGP 对等端

    gcloud compute routers add-bgp-peer ROUTER_NAME_2  \
       --peer-name=PEER_NAME \
       --interface=ROUTER_2_INTERFACE_NAME_1 \
       --peer-ip-address=PEER_IP_ADDRESS \
       --peer-asn=PEER_ASN \
       --region=REGION_1
    

    命令输出应类似于以下示例:

    Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-b].
    
  6. 验证 ROUTER_2 的设置

    gcloud compute routers describe ROUTER_2  \
       --region=REGION_1
    

    命令输出应类似于以下示例:

     bgp:
       advertiseMode: DEFAULT
       asn: 65002
     bgpPeers:
     — interfaceName: if-tunnel-b-to-a-if-0
       ipAddress: 169.254.0.2
       name: bgp-peer-tunnel-b-to-a-if-0
       peerAsn: 65001
       peerIpAddress: 169.254.0.1
     bgpPeers:
     — interfaceName: if-tunnel-b-to-a-if-1
       ipAddress: 169.254.1.2
       name: bgp-peer-tunnel-b-to-a-if-1
       peerAsn: 65001
       peerIpAddress: 169.254.1.1
     creationTimestamp: '2015-10-19T14:31:52.639-07:00'
     id: '4047683710114914215'
     interfaces:
     — ipRange: 169.254.0.1/30
       linkedVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-b-to-a-if-0
       name: if-tunnel-b-to-a-if-0
       — ipRange: 169.254.1.1/30
       linkedVpnTunnel: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/vpnTunnels/tunnel-b-to-a-if-1
       name: if-tunnel-b-to-a-if-1
     kind: compute#router
     name: router-b
     network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/network-b
     region: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1
     selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/routers/router-b
    

API

  1. 如需创建 Cloud Router BGP 接口,请向 routers.patch 方法或 routers.update 方法发出 PATCHUPDATE 请求。PATCH 仅更新您包含的参数。UPDATE 会更新 Cloud Router 的所有参数。为高可用性 VPN 网关上的每个 VPN 隧道创建一个 BGP 接口。

    您指定的 BGP IP 地址范围在 VPC 网络所有地区中的所有 Cloud Router 路由器之间必须唯一。

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers/{resourceId}
    {
     "interfaces": [
       {
         "name": "if-tunnel-a-to-on-prem-if-0",
         "linkedVpnTunnel": "ha-vpn-gw-a-tunnel-0",
         "ipRange": "169.254.0.1/30"
       }
     ]
    }
    
  2. 如需向每个 VPN 隧道的 Cloud Router 路由器添加 BGP 对等方,请向 routers.insert 方法发出 POST 请求。对于另一个 VPN 隧道,请重复此命令,但更改除 namepeerAsn 以外的所有选项。

    若要为高可用性 VPN 网关创建完整配置,请使用以下 API 命令。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers
    {
     "name": "router-a",
     "network": "network-a",
     "bgpPeers": [
       {
         "interfaceName": "if-tunnel-a-to-on-prem-if-0",
         "ipAddress": "169.254.0.1",
         "name": "bgp-peer-tunnel-a-to-on-prem-if-0",
         "peerAsn": "65002",
         "peerIpAddress": "169.254.0.2",
         "advertiseMode": "DEFAULT"
       }
     ]
    }
    

验证配置

控制台

如要验证配置,请转到摘要和提醒页面:

  1. 此页面的摘要部分列出了高可用性 VPN 网关和对等 VPN 网关配置文件的信息。对于每个 VPN 隧道,您都可以查看 VPN 隧道状态BGP 会话名称BGP 会话状态 以及 MED 值(通告路由的优先级)。
  2. 此页面的提醒部分列出了在 Cloud VPN 和对等 VPN 之间建立完全可正常运行的 VPN 连接所需完成的步骤。查看此页面上的信息后,点击确定

gcloud

如需验证 Cloud Router 路由器配置,请参阅创建 BGP 会话中的 gcloud 标签页上的验证步骤。

API

如需验证 Cloud Router 路由器配置,请使用 routers.getRouterStatus 方法发出 GET 请求,并使用空请求正文:

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/routers

在单个隧道网关上创建其他隧道。

控制台

如需获得 SLA 承诺的 99.99% 正常运行时间,请在高可用性 VPN 到高可用性 VPN 网关配置的每个端的每个高可用性 VPN 接口上配置隧道。

如果您已在一个高可用性 VPN 网关到另一个高可用性 VPN 网关上配置了一个隧道,但希望获得服务等级协议 (SLA) 承诺的 99.99% 的正常运行时间,则必须再配置一个隧道。

如需配置第二个隧道,请按照添加从高可用性 VPN 网关到另一个高可用性 VPN 网关的隧道中的步骤操作。

设置通告路由的基准优先级(可选)

您创建的 BGP 会话允许每个 Cloud Router 路由器将路由通告到对等网络。通告使用未经修改的基准优先级

创建两个相互连接且经过全面配置的高可用性 VPN 网关中记载的配置用于“主动/主动路由配置”,其中两端的两个隧道的通告路由优先级匹配。省略通告路由优先级 (--advertised-route-priority) 会导致两个 BGP 对等端的通告路由优先级相同。

对于主动/被动路由配置,您可以通过在添加或更新 BGP 对等方时设置通告路由的优先级来控制 Cloud Router 路由器与对等 VPN 网关共享的 to Google Cloud 路由的通告路由优先级 (--advertised-route-priority)。如需创建主动/被动配置,请为一个 BGP 会话及其对应的 VPN 隧道设置一个比其他 BGP 会话和 VPN 隧道更高的通告路由优先级。

如需详细了解通告路由的基准优先级,请参阅通告的前缀和优先级

您还可以使用自定义通告来优化所通告的路由:

  • 添加 --advertisement-mode=CUSTOM 标志 (gcloud) 或 advertiseMode: custom 标志 (API)。
  • 使用 --set-advertisement-ranges 标志 (gcloud) 或 advertisedIpRanges 标志 (API) 指定 IP 地址范围。

完成配置

在使用新的 Cloud VPN 网关及其关联的 VPN 隧道之前,请完成以下步骤:

  1. 设置对等 VPN 网关并配置其中相应的一个或多个隧道。如需了解相关说明,请参阅以下内容:
  2. 根据需要在 Google Cloud 和对等网络中配置防火墙规则
  3. 检查您的 VPN 隧道的状态。注意:此步骤包括检查高可用性 VPN 网关的高可用性配置。

应用组织政策限制条件以限制对等 VPN 网关 IP 地址

您可以创建 Google Cloud 组织政策限制条件,用于定义通过传统 VPN 或高可用性 VPN 隧道允许或拒绝对等 VPN 网关的 IP 地址集。此限制条件包含这些对等 IP 地址的允许列表或拒绝列表,这只会影响在您应用限制条件后创建的 Cloud VPN 隧道。如需了解详情,请参阅通过 Cloud VPN 隧道限制对等 IP 地址

如需创建组织政策并将其与组织、文件夹或项目关联,请使用后续部分中列出的示例,并按照使用限制条件中的步骤操作。

所需权限

若要在组织级或项目级设置对等 IP 地址限制条件,您必须先获得组织的 Organization Policy Administrator 角色 (roles/orgpolicy.policyAdmin)。

限制来自特定对等 IP 地址的连接

如需通过 Cloud VPN 隧道仅允许特定对等 IP 地址,请执行以下步骤:

  1. 运行以下命令,查找您的组织 ID:
    gcloud organizations list

    命令输出应如下所示:

          DISPLAY NAME             ID
          example-organization     29252605212
        
  2. 创建一个定义政策的 JSON 文件,如以下示例所示:

         {
           "constraint": "constraints/compute.restrictVpnPeersIPs",
           "listPolicy": {
             "allowedValues": [
               "100.1.1.1",
             ],
           }
         }
       
  3. 通过使用 Resource Manager gcloud 命令 set-policy、传入 JSON 文件并使用您在上一步中找到的 ORGANIZATION_ID,设置组织政策。

限制来自任何对等 IP 地址的连接

如需禁止创建任何新的 Cloud VPN 隧道,请按照此示例限制条件中的步骤操作:

  1. 在您要为其设置政策的资源层次结构中查找组织 ID 或节点 ID。
  2. 创建一个 JSON 文件,如以下示例所示:

        {
          "constraint": "constraints/compute.restrictVpnPeersIPs",
          "listPolicy": {
            "allValues": "DENY"
          }
        }
    
  3. 运行用于限制特定对等 IP 地址的同一命令,以传入 JSON 文件。

后续步骤

  • 要查找维护 VPN 隧道和网关的资源,请参阅维护 VPN 方法指南
  • 如需使用高可用性和高吞吐量场景或多个子网方案,请参阅高级配置
  • 如需帮助解决使用 Cloud VPN 时可能会遇到的常见问题,请参阅问题排查