在 Google Cloud 和 Azure 之间创建高可用性 VPN 连接

本教程演示如何在 Google Cloud 和 Microsoft Azure 之间创建高可用性 (HA) 虚拟专用网 (VPN) 连接。您可以使用这些高可用性 VPN 服务在 Google Cloud 中的 Virtual Private Cloud (VPC) 网络与 Microsoft Azure 虚拟网络网关之间进行直接通信。

本文档假定您熟悉 VPC 网络、边界网关协议 (BGP)、VPN 和互联网协议安全 (IPsec) 隧道的基本概念。

Google Cloud 提供高可用性 (HA) VPN服务通过 IPsec VPN 连接将您的 VPC 网络连接到在 Google Cloud 外部运行的环境(例如 Microsoft Azure)。如果根据 Google 最佳做法进行配置,高可用性 VPN 可提供服务协议 (SLA) 承诺的 99.99% 的可用性

架构概览

下图显示了本文档介绍的架构。

架构概览。

图中显示的架构包括以下组件:

  • Cloud Router 路由器:完全分布式和全代管式 Google Cloud 服务,通过 BGP 为您的 VPC 网络提供动态路由。
  • 高可用性 VPN 网关:在 Google Cloud 上运行的 Google 管理的 VPN 网关。每个高可用性 VPN 网关都是具有两个接口(接口 0 和 1)的区域级资源。每个接口都有自己的外部 IP 地址。
  • VPN 隧道:从 Google Cloud 上的高可用性 VPN 网关到 Azure 上用于传输加密流量的对等 VPN 网关的连接。
  • 虚拟网络网关:在 Azure Cloud 服务中定义的两个专用网络。

每个虚拟网络网关连接都有两个隧道,它们预配置为指向单个客户网关(在本例中为 Google Cloud 中的高可用性 VPN 网关接口)。使用此配置时,要达到 99.99% 服务可用性的 SLA,至少需要 2 个 Cloud VPN 隧道。

过程所需的 IP 地址

为了完成本文档中的过程,您将在 Google Cloud 和 Azure 中使用各种 IP 地址。系统会在您创建资源时自动分配其中一些 IP 地址。

对于未自动分配的那些地址,您可以根据可用 IP 地址和组织需求定义这些 IP 地址。

Google Cloud 资源需要以下 IP 地址:

  • 为 Virtual Private Cloud 网络创建子网需要用户定义的 IP 地址范围。
  • 创建高可用性 VPN 网关后,Google Cloud 会自动为高可用性 VPN 网关分配两个外部 IP 地址。Google 会为网关的两个接口各分配一个 IP 地址。您需要使用这些接口的 IP 地址在 Azure 中设置本地网络网关。
  • 在 Google Cloud 中创建高可用性 VPN 隧道时,每个隧道都需要与 Cloud Router 建立 BGP 接口,还需要连接到 Azure 中的主动/主动虚拟网络网关(VPN 网关)的 BGP 接口。对于每个隧道,请确定 169.254.21.*169.254.22.* 范围内的 /30 块中的一对链路本地 BGP 对等互连 IPv4 地址。这些范围是 Azure APIPA BGP 对等互连 IPv4 地址的有效范围。您一共必须选择 4 个 IP 地址。

    您选择的 BGP 对等互连 IPv4 地址在 VPC 网络所有区域中的所有 Cloud Router 之间必须唯一。

Azure 资源需要以下 IP 地址:

  • 创建虚拟网络 (VNet) 时,VNet 需要网络的 IP 地址空间和网络子网的 IP 地址空间。您可以使用默认地址空间,也可以输入用户定义的地址空间。
  • 创建主动/主动虚拟网络网关(VPN 网关)时,网关需要子网地址范围。您可以使用默认范围,也可以输入用户定义的范围。
  • 为主动/主动 VPN 网关配置 BGP 时,网关需要两个 APIPA BGP 对等互连 IP 地址。如前所述,Azure APIPA BGP 对等互连 IP 地址的有效范围为 169.254.21.*169.254.22.*
  • 创建主动/主动 VPN 网关后,Azure 会自动为每个网关的接口分配一个外部 IP 地址。在 Google Cloud 中设置对等 VPN 网关时需要使用这些 IP 地址。

定义 IP 地址时,请确保为每个网络使用一组唯一的 IP 地址。

目标

  • 创建 Azure 虚拟网络 (VNet) 和主动/主动虚拟网络网关(VPN 网关)。
  • 在 Google Cloud 上创建必要的组件:一个 VPC 网络、一个 Cloud Router 路由器、一个高可用性 VPN 网关、一个对等 VPN 网关和两个具有 BGP 会话的高可用性 VPN 隧道。
  • 在 Azure 中创建两个本地网络网关和两个 VPN 连接。验证 Cloud Router 配置,并检查 Google Cloud 中的高可用性 VPN 隧道的状态。
  • 测试 Google Cloud 上的 VPC 网络与 Azure 上的虚拟网络 (VNet) 之间的 Cloud VPN 连接。

费用

本文档中的过程使用 Google Cloud 的计费组件,包括以下组件:

如需估算 Google Cloud 组件的费用,请使用 Google Cloud 价格计算器

本文档中的过程使用 Microsoft Azure Cloud 服务的计费组件,包括:

  • VPN 网关
  • 本地网络网关

如需估算 Azure 组件的费用,请使用 Azure 价格计算器

准备工作

  1. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 启用 Compute Engine API。

    启用 API

  4. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

  5. 确保您拥有必需的管理角色来配置网络组件:

    • Network Admin:compute.networkAdmin
    • Security Admin:compute.securityAdmin
    • Compute Admin:compute.admin

    如需详细了解这些角色的用途,请参阅负有网络相关工作职责的 IAM 角色

在 Azure 上创建 VNet 和主动/主动 VPN 网关

在 Azure 中,您需要设置以下组件:

  • Azure 虚拟网络 (VNet),以允许 Azure 资源与您的 Google Cloud VPN 通信。
  • 主动/主动虚拟网络网关(VPN 网关),以允许网关虚拟机 (VM) 的两个实例建立连接到 Google Cloud VPN 的 VPN 隧道。

创建 VNet

借助 VNet,Azure 资源可以相互安全通信,也可以与互联网和其他网络(例如 Cloud VPN)安全通信。如需详细了解如何创建 VNet,请参阅有关创建 VNet 的 Azure 文档

  1. 登录 Azure 门户。
  2. 搜索资源、服务和文档 (G+/) 框中,输入 virtual network
  3. Marketplace 结果列表中,选择虚拟网络
  4. 虚拟网络页面上,选择创建
  5. 创建虚拟网络页面的基本信息标签页上,为项目详细信息实例详细信息配置以下 VNet 设置:

    1. Subscription 框中,验证列出的订阅是正确的。如需更改订阅,请从列表中选择订阅。
    2. 如需指定资源组,请点击新建以创建新组,然后输入 azure‑to‑google‑resgroup 作为资源组的名称。
    3. 名称框中,输入 VNet 的名称,例如 azure‑to‑google‑network
    4. 区域框中,选择 VNet 的位置。

      您选择的位置决定了您部署到此虚拟网络的资源的存储位置。

  6. IP 地址标签页的 IPv4 地址空间框中,使用 Azure 创建的默认地址空间和子网。

  7. 安全标签页上,让堡垒主机DDos 防护标准防火墙的值保留设置为默认值停用

  8. 如需验证 VNet 设置,请选择审核 + 创建

  9. 验证设置后,选择创建

创建主动/主动 VPN 网关

以下过程会创建主动/主动 VPN 网关:

  • 第一个过程定义项目和实例的详细信息
  • 第二个过程指定网关的 IP 地址。

目前,您只创建主动/主动 VPN 网关。您需要先创建 Google Cloud 组件,然后才能在 Azure 中配置必要的隧道。如需详细了解如何创建主动/主动 VPN 网关,请参阅 Azure 文档中的使用门户配置主动/主动 VPN 网关主题。

定义网关详细信息

  1. 登录 Azure 门户。
  2. 搜索资源、服务和文档 (G+/) 中,输入 virtual network gateway
  3. 在搜索结果中的服务下,找到并选择虚拟网络网关
  4. 虚拟网络网关页面上,选择创建
  5. 创建虚拟网络网关页面的基本信息标签页上,为项目详细信息实例详细信息部分中的选项指定以下值:

    1. 订阅列表中,选择要使用的订阅。
    2. 可选:在网关子网地址范围框中,输入子网的地址范围。
    3. 验证资源组是否显示与您在本页中选择的虚拟网络对应的资源组。
    4. 对于名称,请输入网关的名称,例如 azure‑to‑google‑gateway
    5. 对于区域,请选择您在创建 VNET 时使用的区域。
    6. 对于网关类型,选择 VPN
    7. 对于 VPN 类型,选择基于路由的 VPN 类型。

    8. SKU 列表中,选择要使用的网关 SKU。

      在下拉列表中列出的 SKU 取决于您选择的 VPN 类型。

    9. 世代列表中,选择您要使用的世代。

    10. 虚拟网络列表中,选择您之前创建的 VNet

  6. 请留在本页面上,了解下一个过程。

定义网关 IP 地址

  1. Create virtual network gateway 页面的 Basics 标签页上,按照以下步骤创建主动/主动 VPN 网关使用的外部 IP 地址:

    1. 对于公共 IP 地址,选择新建

      Azure 会自动将外部 IP 地址分配给主动/主动 VPN 网关。

    2. Public IP address name 框中,输入外部 IP 地址实例的名称,例如 azure‑to‑google‑network‑ip1

    3. 对于启用主动/主动模式,请选择已启用

    4. 可选:如果您的区域可用,请配置可用区。例如,您可以选择可用区冗余

    5. 对于第二个公共 IP 地址,选择新建

    6. Public IP address name 框中,输入第二个外部 IP 地址的名称,例如 azure‑to‑google‑network‑ip2

    7. 对于配置 BGP,选择已启用

    8. 对于自治系统编号 (ASN),将 ASN 设置为允许的有效值。

      在 Google Cloud 中为隧道设置 BGP 会话时,您将使用此 ASN 值。将此值记录为 AZURE_ASN 以引用此主动/主动 VPN 网关。

    9. 对于自定义 Azure APIPA BGP IP 地址,输入第一个 APIPA BGP IP 地址并将值记录为 AZURE_BGP_IP_0。Azure APIPA BGP IP 地址的有效范围为 169.254.21.*169.254.22.*

    10. Second Custom Azure APIPA BGP IP address 部分,输入第二个 APIPA BGP IP 地址并将值记录为 AZURE_BGP_IP_1。在 Google Cloud 中配置 BGP 会话时,您将使用这些变量。

  2. 如需运行验证,请选择审核 + 创建

  3. 验证完成后,选择创建以部署 VPN 网关。

查看和记录主动/主动 VPN 网关的外部 IP 地址

您需要使用 Azure 自动分配给主动/主动 VPN 网关的外部 IP 地址。您可以使用这些 IP 地址在 Google Cloud 中创建对等 VPN 网关资源。

  1. 在刚刚创建的主动/主动网关的概览页面上,找到网关的外部 IP 地址。
  2. 记录您在屏幕上看到的 IP 地址:
    • 将第一个外部 IP 地址记录为 AZURE_GW_IP_0
    • 将第二个外部 IP 地址记录为 AZURE_GW_IP_1

稍后,本文档将这些 IP 地址称为 AZURE_GW_IP_0AZURE_GW_IP_1

创建 Google Cloud 组件

在 Google Cloud 上,您需要设置以下组件:

  • 一个 VPC 网络。
  • 一个高可用性 VPN 网关。
  • 一个 Cloud Router。
  • 对等 VPN 网关。
  • 具有 BGP 会话的高可用性 VPN 隧道。

以下过程假定您已按照准备工作中所述设置了 Google Cloud。如果您尚未完成这些步骤,请现在完成。

在 Google Cloud 上创建 VPC 网络、子网、高可用性 VPN 网关和 Cloud Router

在 Google Cloud 上,您可以创建 VPC 网络、高可用性 VPN 网关和 Cloud Router,然后在 Google Cloud 上配置防火墙规则。

  1. 在 Google Cloud Shell 中,确保您使用的是您创建或选择的 Cloud 项目:

    gcloud config set project YOUR_PROJECT_ID
    
    export PROJECT_ID=`gcloud config list   --format="value(core.project)"`
    

    YOUR_PROJECT_ID 替换为您的 Cloud 项目 ID。

  2. 创建具有单个子网的自定义 VPC 网络:

    gcloud compute networks create NETWORK \
        --subnet-mode SUBNET_MODE \
        --bgp-routing-mode BGP_ROUTING_MODE
    

    请替换以下内容:

    • NETWORK:网络的名称,例如 google‑to‑azure‑vpc
    • SUBNET_MODE:将子网模式设置为 custom
  3. BGP_ROUTING_MODE:将 BGP 路由模式设置为 global

    该命令应类似于以下示例:

    gcloud compute networks create google-to-azure-vpc \
        --subnet-mode custom \
        --bgp-routing-mode global
    
  4. 创建一个子网来托管测试虚拟机:

    gcloud compute networks subnets create SUBNET_NAME \
        --network NETWORK \
        --region SUBNET_REGION \
        --range SUBNET_IP_ADDRESS_RANGE
    

    请替换以下内容:

    • SUBNET_NAME:子网名称。
    • SUBNET_REGION:要在其中创建子网的区域。
    • SUBNET_IP_ADDRESS_RANGE子网的 IP 地址范围

    该命令应类似于以下示例:

    gcloud compute networks subnets create subnet-central1  \
        --network google-to-azure-vpc \
        --region us-central1 \
        --range 10.1.1.0/24
    
  5. 创建高可用性 VPN 网关:

    gcloud compute vpn-gateways create HA_VPN_GATEWAY_NAME \
        --network NETWORK \
        --region REGION
    

    HA_VPN_GATEWAY_NAME 替换为高可用性 VPN 网关的名称。

    该命令应类似于以下示例:

    gcloud compute vpn-gateways create ha-vpn-gw-a \
       --network google-to-azure-vpc \
       --region us-central1
    

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

    Created [https://www.googleapis.com/compute/v1/projects/YOUR_PROJECT_ID/regions/us-central1/vpnGateways/ha-vpn-gw-a].
    NAME          INTERFACE0     INTERFACE1     NETWORK     REGION
    ha-vpn-gw-a   203.0.113.1   203.0.113.2   google-to-azure-vpc   us-central1
    

    输出列出了已自动分配给每个网关接口(INTERFACE0INTERFACE1)的外部 IPv4 地址。在 Azure 上设置本地网络网关时,您需要以下 IP 地址:

    • 记录 HA_VPN_INT_0INTERFACE0 的 IP 地址。
    • 记录 HA_VPN_INT_1INTERFACE1 的 IP 地址。
  6. 创建 Cloud Router 路由器:

    gcloud compute routers create ROUTER_NAME \
        --region REGION \
        --network NETWORK \
        --asn GOOGLE_ASN \
    

    请替换以下内容:

    • ROUTER_NAME:Cloud Router 的名称。
    • REGION:您要在其中创建高可用性 VPN 网关和隧道的区域。
    • GOOGLE_ASN:您要创建的 Cloud Router 的专用自治系统编号 (ASN)。它可以是 64512-655344200000000-4294967294 范围内您尚未用作同一区域和网络中的对等 ASN 的任何专用 ASN。

    该命令应类似于以下示例:

    gcloud compute routers create cloud-router \
        --region us-central1 \
        --network google-to-azure-vpc \
        --asn 65534
    

为 Azure VPN 创建对等 VPN 网关

在本部分中,您将创建一个外部 VPN 网关资源,该资源向 Google Cloud 提供有关 Azure 中的主动/主动 VPN 网关的信息。您可以创建一个使用两个单独接口的对等 VPN 网关,每个接口都有自己的外部 IP 地址。

创建一个使用两个接口的外部对等 VPN 网关:

gcloud compute external-vpn-gateways create AZURE_GW_NAME \
     --interfaces 0=AZURE_GW_IP_0,1=AZURE_GW_IP_1

请替换以下内容:

  • AZURE_GW_NAME:Azure 主动/主动 VPN 网关的名称
  • AZURE_GW_IP_0:来自对等网关一个接口的外部 IP 地址
  • AZURE_GW_IP_1:来自对等网关其他接口的外部 IP 地址

您创建的对等 VPN 网关资源应类似于以下示例,其中 AZURE_GW_IP_0AZURE_GW_IP_1 显示对等网关接口的实际外部 IP 地址:

gcloud compute external-vpn-gateways create azure-peer-gw \
     --interfaces 0=203.0.113.1,1=203.0.113.2

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/externalVpnGateways/peer-gw].
NAME     INTERFACE0    INTERFACE1
azure-peer-gw  203.0.113.1  203.0.113.2

创建 VPN 隧道

您需要创建两个 VPN 隧道:对等 VPN 网关中每个接口对应一个隧道。在配置连接到 Azure 的 VPN 隧道时,请使用 IKEv2 加密协议。

对于本部分中使用的命令,请替换以下内容:

  • TUNNEL_NAME_IF0TUNNEL_NAME_IF1:隧道的名称;通过添加网关接口名称来为隧道命名有助于以后识别隧道。
  • AZURE_GW_NAME:之前创建的外部对等网关的名称
  • AZURE_GW_INT_NUM_0AZURE_GW_INT_NUM_1:之前在外部对等网关上配置的接口号。
  • IKE_VERS:对于 IKEv2,使用 2
  • SHARED_SECRET:您的预共享密钥(共享密钥),它必须与您在 Azure 中设置 VPN 连接时指定的预共享密钥相对应。如需查看相关建议,请参阅生成强预共享密钥
  • HA_VPN_GATEWAY_NAME:高可用性 VPN 网关的名称。
  • INT_NUM_0:您之前创建的高可用性 VPN 网关上第一个接口的编号 0
  • INT_NUM_1:您之前创建的高可用性 VPN 网关上第二个接口的编号 1

按照以下步骤创建 VPN 隧道:

  1. 为接口 0 创建 VPN 隧道:

    gcloud compute vpn-tunnels create TUNNEL_NAME_IF0 \
       --peer-external-gateway=AZURE_GW_NAME \
       --peer-external-gateway-interface=AZURE_GW_INT_NUM_0  \
       --region=REGION \
       --ike-version=IKE_VERS \
       --shared-secret=SHARED_SECRET \
       --router=ROUTER_NAME \
       --vpn-gateway=HA_VPN_GATEWAY_NAME \
       --interface=INT_NUM_0
    

    该命令应类似于以下示例:

    gcloud compute vpn-tunnels create azure-tunnel-1 \
       --peer-external-gateway azure-peer-gw \
       --peer-external-gateway-interface 0  \
       --region us-central1  \
       --ike-version 2 \
       --shared-secret xo2aTKHipD/oE1GAXgj3lMwjBmJXZjqD \
       --router cloud-router \
       --vpn-gateway ha-vpn-gw-a \
       --interface 0
    
  2. 为接口 1 创建 VPN 隧道:

    gcloud compute vpn-tunnels create TUNNEL_NAME_IF1 \
      --peer-external-gateway=AZURE_GW_NAME \
      --peer-external-gateway-interface=AZURE_GW_INT_NUM_1 \
      --region=REGION \
      --ike-version=IKE_VERS \
      --shared-secret=SHARED_SECRET \
      --router=ROUTER_NAME \
      --vpn-gateway=HA_VPN_GATEWAY_NAME \
      --interface=INT_NUM_1
    

    该命令应类似于以下示例:

    gcloud compute vpn-tunnels create azure-tunnel-2 \
       --peer-external-gateway azure-peer-gw \
       --peer-external-gateway-interface 1  \
       --region us-central1  \
       --ike-version 2 \
       --shared-secret xo2aTKHipD/oE1GAXgj3lMwjBmJXZjqD \
       --router cloud-router \
       --vpn-gateway ha-vpn-gw-a \
       --interface 1
    

创建 BGP 会话

对于动态路由,您可以使用 Cloud Router 在 Google Cloud 和 Azure 之间建立 BGP 会话。我们建议您尽可能使用动态路由(而不是非静态路由),如 Cloud VPN 概览Cloud VPN 网络和隧道路由中所述。

您需要为每个 VPN 隧道创建 BGP 会话。每个 BGP 会话都包含一个与 Cloud Router 的 BGP 接口和一个 BGP 对等端。您可以为刚刚创建的两个 VPN 隧道中的每一个创建 BGP 对等端。

对于本部分中使用的命令,请替换以下内容:

  • ROUTER_NAME:您分配给 Cloud Router 的名称。
  • ROUTER_INTERFACE_NAME_0ROUTER_INTERFACE_NAME_1:Cloud Router BGP 接口的名称;使用与之前配置的隧道名称相关的名称会有所帮助。
  • MASK_LENGTH:指定 30;同一 Cloud Router 上的每个 BGP 会话都必须使用 169.254.0.0/16 块中的唯一 /30 CIDR。
  • GOOGLE_BGP_IP_0GOOGLE_BGP_IP_1:您配置的高可用性 VPN 网关接口的 BGP 对等互连 IP 地址;每个隧道使用不同的网关接口。由于 Azure APIPA BGP 对等互连 IP 地址允许的范围为 169.254.21.*169.254.22.*,因此您必须在这些范围的 /30 CIDR 中选择一个可用的 IP 地址作为您的 Cloud Router BGP 对等互连 IP 地址。
  • AZURE_BGP_IP_0AZURE_BGP_IP_1:您已在 Azure 主动/主动 VPN 网关上配置的 APIPA BGP 对等互连 IP 地址;每个隧道使用不同的地址。
  • TUNNEL_NAME_IF0TUNNEL_NAME_IF1:与您配置的高可用性 VPN 网关接口关联的隧道。
  • AZURE_ASN:您为 Azure 中的主动/主动对等 VPN 网关配置的 ASN。
  • BGP_PEER_NAME_1BGP_PEER_NAME_2 替换为每个 BGP 对等方的唯一名称。例如 azure‑bgp‑peer‑1azure‑bgp‑peer‑2

如需为 VPN 隧道创建 BGP 会话,请按照以下步骤操作:

  1. 对于第一个 VPN 隧道,将 BGP 接口添加到 Cloud Router:

    gcloud compute routers add-interface ROUTER_NAME \
       --interface-name=ROUTER_INTERFACE_NAME_0 \
       --mask-length=MASK_LENGTH \
       --vpn-tunnel=TUNNEL_NAME_IF0 \
       --ip-address=GOOGLE_BGP_IP_0 \
       --region=REGION
    

    该命令应类似于以下示例:

    gcloud compute routers add-interface cloud-router \
       --interface-name azure-tunnel-1-int-0 \
       --mask-length 30 \
       --vpn-tunnel azure-tunnel-1 \
       --ip-address 169.254.21.2 \
       --region us-central1
    
  2. 对于第一个 VPN 隧道,将 BGP 对等端添加到接口:

    gcloud compute routers add-bgp-peer ROUTER_NAME \
       --peer-name=BGP_PEER_NAME_1 \
       --peer-asn=AZURE_ASN \
       --interface=ROUTER_INTERFACE_NAME_0 \
       --peer-ip-address=AZURE_BGP_IP_0 \
       --region=REGION
    

    该命令应类似于以下示例:

    gcloud compute routers add-bgp-peer cloud-router \
       --peer-name azure-bgp-peer-1 \
       --peer-asn 65515 \
       --interface azure-tunnel-1-int-0 \
       --peer-ip-address 169.254.21.1 \
       --region us-central1
    
  3. 对于第二个 VPN 隧道,将 BGP 接口添加到 Cloud Router:

    gcloud compute routers add-interface ROUTER_NAME \
       --interface-name=ROUTER_INTERFACE_NAME_1 \
       --mask-length=MASK_LENGTH \
       --vpn-tunnel=TUNNEL_NAME_IF0 \
       --ip-address=GOOGLE_BGP_IP_1 \
       --region=REGION
    

    该命令应类似于以下示例:

    gcloud compute routers add-interface cloud-router \
       --interface-name azure-tunnel-2-int-1 \
       --mask-length 30 \
       --vpn-tunnel azure-tunnel-2 \
       --ip-address 169.254.22.2 \
       --region us-central1
    
  4. 对于第二个 VPN 隧道,将 BGP 对等方添加到接口:

    gcloud compute routers add-bgp-peer ROUTER_NAME \
       --peer-name=BGP_PEER_NAME_2 \
       --peer-asn=AZURE_ASN \
       --interface=ROUTER_INTERFACE_NAME_1 \
       --peer-ip-address=AZURE_BGP_IP_1 \
       --region=REGION
    

    该命令应类似于以下示例:

    gcloud compute routers add-bgp-peer cloud-router \
      --peer-name azure-bgp-peer-2 \
      --peer-asn 65515 \
      --interface azure-tunnel-2-int-1 \
      --peer-ip-address 169.254.22.1 \
      --region us-central1
    

在 Azure 中创建本地网络网关和 VPN 连接

创建并配置 Google Cloud 组件后,您将返回到 Azure 环境以完成 Google Cloud 到 Azure 的连接。如需完成此连接,请在 Azure 中创建以下组件:

  • 两个本地网络网关,分别代表 Azure 中的 Google Cloud VPN。
  • 与您在 Google Cloud 中配置的两个高可用性 VPN 隧道相对应的 VPN 连接。

创建两个本地网络网关

本地网络网关是一个特定对象,表示 Azure 中的 Google Cloud VPN。创建本地网络网关时,您可以指定以下信息:

  • 本地网络网关的名称。
  • 要在连接中使用的高可用性 VPN 接口的 IP 地址。
  • 您要创建与之连接的 Google Cloud Router 路由器的 IP 地址。
  • 通过 VPN 网关路由到 Cloud Router 路由器的 IP 地址前缀。您指定的地址前缀是位于 Cloud VPN 上的前缀。如果您的 Cloud 虚拟专用网发生变化,或者您需要更改 Cloud Router 路由器的外部 IP 地址,则可以稍后更新这些值。

您需要创建两个本地网络网关:一个连接到 Google Cloud 上的第一个高可用性 VPN 隧道接口,另一个网关连接到第二个高可用性 VPN 隧道接口。

如需了解详情,请参阅 Azure 文档中的在 Azure 门户中创建站点到站点 VPN 连接教程的创建本地网络网关部分。

如要创建第一个本地网络网关,请按以下步骤操作:

  1. 登录 Azure 门户。
  2. 搜索资源、服务和文档 (G+/) 中,输入本地网络网关
  3. 在搜索结果中的 Marketplace 下方,找到并选择本地网络网关
  4. 点击创建
  5. 创建本地网络网关页面的基本信息标签页上,为本地网络网关指定以下值:

    1. 订阅列表中,验证是否显示正确的订阅。
    2. 资源组列表中,选择与您在本文档前面部分为 VNet 创建的资源组相同的资源组。
    3. 对于区域,选择您的 VNet 所在的位置。
    4. 对于名称,输入本地网络网关的名称,例如 azure-to-google-locgateway1
    5. 对于端点,选择 IP 地址
    6. IP 地址框中,输入高可用性 VPN 的 INTERFACE0 的 IP 地址(即输入 HA_VPN_INT_0)。
    7. 对于地址空间,输入此本地网络代表的网络的地址范围。

      您可以添加多个地址空间范围。请确保您在此处指定的范围与要连接的其他网络范围不重叠。

  6. 高级标签页上,按如下方式配置 BGP 设置:

    1. 对于配置 BGP 设置,选择
    2. 对于自治系统编号 (ASN),输入 Cloud Router 的 ASN(即输入 GOOGLE_ASN)。
    3. 对于 BGP 对等 IP 地址,输入隧道 1 中 Cloud Router 的 BGP IP 地址(即输入 GOOGLE_BGP_IP_0)。
  7. 如需验证本地网络网关配置,请点击页面底部的查看创建

  8. 验证通过后,点击创建以创建本地网络网关。

如需创建第二个本地网络网关,请按以下步骤操作:

  1. 在 Azure 门户的搜索资源、服务和文档 (G+/) 中,输入 local network gateway
  2. 在搜索结果中的 Marketplace 下方,找到并选择本地网络网关
  3. 创建本地网络网关页面的基本信息标签页上,为本地网络网关指定以下值:

    1. 订阅列表中,验证是否显示正确的订阅。
    2. 资源组列表中,选择与您在本文档前面部分为 VNet 创建的资源组相同的资源组。
    3. 对于区域,选择与您的 VNet 相同的区域。
    4. 对于名称,输入本地网络网关的名称,例如 azure-to-google-locgateway2
    5. 对于端点,选择 IP 地址
    6. IP 地址框中,输入高可用性 VPN 的 INTERFACE1 的 IP 地址(即输入 HA_VPN_INT_1)。
    7. 对于地址空间,输入此本地网络代表的网络的地址范围。

    您可以添加多个地址空间范围。请确保您在此处指定的范围与要连接的其他网络范围不重叠。

  4. 高级标签页上,按如下方式配置 BGP 设置:

    1. 对于配置 BGP 设置,选择
    2. 对于自治系统编号 (ASN),输入 Cloud Router 的 ASN(即输入 GOOGLE_ASN)。
    3. 对于 BGP 对等 IP 地址,输入隧道 1 中 Cloud Router 的 BGP IP 地址(即输入 GOOGLE_BGP_IP_1)。
  5. 如需验证本地网络网关配置,请点击页面底部的查看创建

  6. 验证通过后,点击创建以创建本地网络网关。

创建两个 VPN 连接

如需在 Azure 中创建 VPN 连接,您需要使用您在 Google Cloud 上设置高可用性 VPN 隧道时配置的预共享密钥或 SHARED_SECRET

  1. 在 Azure 门户中,找到您在创建主动/主动 VPN 网关中创建的主动/主动 VPN 网关。
  2. 选择连接
  3. 连接页面顶部,选择 +添加
  4. 添加连接页面上,为第一个连接指定以下值:
    1. 对于名称,输入连接的名称,例如 azure-vnet-to-google1
    2. 对于连接类型,选择站点到站点 (IPsec)
    3. 对于本地网络网关,指定您创建的第一个本地网络网关,例如 azure-to-google-locgateway1
    4. 对于共享密钥 (PSK),指定您为第一个高可用性 VPN 隧道配置的共享密钥。
    5. 选择启用 BGP
    6. 对于 IKE 协议,选择 IKEv2
    7. 点击 OK(确定)。
    8. 连接页面上,选择 +添加以使用以下值添加第二个连接:
    9. 对于名称,输入连接的名称,例如 azure-vnet-to-google2
    10. 对于连接类型,选择站点到站点 (IPsec)
    11. 对于本地网络网关,指定您创建的第二个本地网络网关,例如 azure-to-google-locgateway2
    12. 对于共享密钥 (PSK),指定您为第二个高可用性 VPN 隧道配置的共享密钥。
    13. 选择启用 BGP
    14. 对于 IKE 协议,选择 IKEv2
    15. 点击 OK(确定)。
  5. 连接页面上,验证两个连接的状态是否列为已连接

验证配置

在 Google Cloud 中,您可以先通过检查 Cloud Router 配置,接着检查高可用性 VPN 隧道的状态来验证高可用性 VPN 配置。

  1. 在 Cloud Shell 中,列出 Cloud Router 选择的 BGP 对等互连 IP 地址:

    gcloud compute routers get-status ROUTER_NAME \
       --region=REGION \
       --format='flattened(result.bgpPeerStatus[].name,
         result.bgpPeerStatus[].ipAddress, result.bgpPeerStatus[].peerIpAddress)'
    

    该命令应类似于以下示例:

    gcloud compute routers get-status cloud-router \
        --region us-central1 \
    --format='flattened(result.bgpPeerStatus[].name,result.bgpPeerStatus[].ipAddress,result.bgpPeerStatus[].peerIpAddress)'
    

    管理两个高可用性 VPN 隧道(索引 0 和索引 1)的 Cloud Router 的预期输出应如下所示:

    result.bgpPeerStatus[0].ipAddress:     169.254.21.2
    result.bgpPeerStatus[0].name:          azure-bgp-peer-1
    result.bgpPeerStatus[0].peerIpAddress: 169.254.21.1
    result.bgpPeerStatus[1].ipAddress:     169.254.22.2
    result.bgpPeerStatus[1].name:          azure-bgp-peer-2
    result.bgpPeerStatus[1].peerIpAddress: 169.254.22.1
    
  2. 在 Cloud Shell 中,查看第一个高可用性 VPN 隧道的状态:

    gcloud compute vpn-tunnels describe TUNNEL_NAME_IF0 \
       --region=REGION
    

    请替换以下内容:

    • TUNNEL_NAME_IF0:与您配置的第一个高可用性 VPN 网关接口关联的隧道。
    • REGION:在其中部署高可用性 VPN 网关的区域。

    该命令应类似于以下示例:

    gcloud compute vpn-tunnels describe azure-tunnel-1 -–region=us-central1
    

    隧道的预期输出应类似于以下示例:

    creationTimestamp: '2022-09-28T17:13:21.592-07:00'
    description: ''
    detailedStatus: Tunnel is up and running.
    id: '278561789474069966'
    ikeVersion: 2
    kind: compute#vpnTunnel
    localTrafficSelector:
    -   0.0.0.0/0
    name: azure-tunnel-1
    peerExternalGateway: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/global/externalVpnGateways/azure-peer-gw
    peerExternalGatewayInterface: 0
    peerIp: 203.0.113.1
    region: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1
    remoteTrafficSelector:
    -   0.0.0.0/0
    router: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/routers/cloud-router
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/vpnTunnels/azure-tunnel-1
    sharedSecret: '*************'
    sharedSecretHash: ALDZGgSMUxj8KFahMoG_L0Fz9paz
    status: ESTABLISHED
    vpnGateway: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/vpnGateways/ha-vpn-gw-a
    vpnGatewayInterface: 0
    
  3. 在 Cloud Shell 中,查看第二个高可用性 VPN 隧道的状态:

    gcloud compute vpn-tunnels describe TUNNEL_NAME_IF1 \
       --region=REGION
    

    请替换以下内容:

    • TUNNEL_NAME_IF1:与您配置的第二个高可用性 VPN 网关接口关联的隧道。
    • REGION:在其中部署高可用性 VPN 网关的区域。

    该命令应类似于以下示例:

    gcloud compute vpn-tunnels describe azure-tunnel-2 --region=us-central1
    

    隧道的预期输出应类似于以下示例:

    creationTimestamp: '2022-09-28T17:13:21.592-07:00'
    description: ''
    detailedStatus: Tunnel is up and running.
    id: '5665972275117479944'
    ikeVersion: 2
    kind: compute#vpnTunnel
    localTrafficSelector:
    -   0.0.0.0/0
    name: azure-tunnel-2
    peerExternalGateway: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/global/externalVpnGateways/azure-peer-gw
    peerExternalGatewayInterface: 1
    peerIp: 203.0.113.2
    region: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1
    remoteTrafficSelector:
    -   0.0.0.0/0
    router: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/routers/cloud-router
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT-ID/regions/us-central1/vpnTunnels/azure-tunnel-2
    sharedSecret: '*************'
    sharedSecretHash: ALDZGgSMUxj8KFahMoG_L0Fz9ddd
    

测试连接性

如需测试高可用性 VPN 连接,您首先需要在隧道的每一侧创建虚拟机。

接下来,您需要确保在 Google Cloud 中定义防火墙规则,以允许来自 Azure 网络子网的入站 ICMP 流量。定义好虚拟机和防火墙规则后,您可以使用 ping 测试连接,并使用 iperf 测试带宽。

  1. 在隧道的每端创建测试虚拟机以测试 ping 请求。

    您还必须配置 Azure 网络防火墙,以允许来自 Virtual Private Cloud 中使用的子网前缀的入站流量。

  2. 在 Google Cloud 上,配置允许来自 Azure VPN 的入站 ICMP 流量的防火墙规则:

    gcloud compute firewall-rules create RULE_NAME \
        --network NETWORK \
        --direction ingress \
        --action allow \
        --source-ranges AZURE_VNET_RANGE \
        --rules icmp \
    

    AZURE_VNET_RANGE 替换为分配给 Azure VNet 的 IP 地址范围。

    该命令应类似于以下示例:

    gcloud compute firewall-rules create allow-azure-icmp \
      --network google-to-azure-vpc \
      --direction ingress \
      --action allow \
      --source-ranges 10.0.0.0/16 \
      --rules icmp
    
  3. 使用 ping 命令测试连接。

  4. 使用 iperf 测量测试机器之间的带宽。

清理

删除您在本教程中创建的 Google Cloud 和 Azure 资源。

删除 Google Cloud 项目

为避免系统因本教程中使用的资源向您的 Google Cloud 账号收取费用,您可以删除您的项目:

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除 Azure 资源组

删除您在创建 VNet 时创建的 Azure Manager 资源组。在本教程中,示例资源组的名称为 azure-to-google-resgroup

如需了解详情,请参阅 Azure Resource Manager 资源组和资源删除

后续步骤