练习 - 使用 Azure CLI 命令创建站点到站点 VPN 网关

已完成

现已准备好通过创建公共 IP 地址、虚拟网络网关和连接来完成站点到站点 VPN 网关的创建。 请记住,在创建本地网络网关时,你使用了公共 IP 地址引用的占位符,因此现在的任务之一是使用分配给虚拟网络网关的实际公共 IP 地址更新这些网关。

理想情况下,应在创建本地网络网关之前创建公共 IP 地址和虚拟网络网关。 在本练习中,你将了解如何更新本地网络网关。 可以使用相同的命令来更新本地网络网关中的任何配置元素,例如远程网络地址空间。

注意

本练习可选做。 若要完成本练习,则需要在开始之前创建 Azure 订阅。 如果没有 Azure 帐户或不想暂时创建一个帐户,可以通读说明,以便了解所显示的信息。

注意

在本练习中,请将示例中的 myResourceGroupName 替换为现有资源组的名称或为此练习创建的资源组的名称。

创建 Azure 端 VPN 网关

首先,为连接的 Azure 端创建 VPN 网关。 最多需要 45 分钟就可创建虚拟网络网关。 为节省时间,请使用带有 --no-wait 参数的 Azure CLI 命令。 此参数允许同时创建两个虚拟网络网关,最大限度地缩短创建这些资源所需的总时间。

  1. 在 Cloud Shell 中运行以下命令,创建 PIP-VNG-Azure-VNet-1 公共 IP 地址:

    az network public-ip create \
        --resource-group "myResourceGroupName" \
        --name PIP-VNG-Azure-VNet-1 \
        --allocation-method Static
    
  2. 在 Cloud Shell 中运行以下命令,创建 VNG-Azure-VNet-1 虚拟网络:

    az network vnet create \
        --resource-group "myResourceGroupName" \
        --name VNG-Azure-VNet-1 \
        --subnet-name GatewaySubnet 
    
  3. 在 Cloud Shell 中运行以下命令,创建 VNG-Azure-VNet-1 虚拟网络网关:

    az network vnet-gateway create \
        --resource-group "myResourceGroupName" \
        --name VNG-Azure-VNet-1 \
        --public-ip-addresses PIP-VNG-Azure-VNet-1 \
        --vnet VNG-Azure-VNet-1 \
        --gateway-type Vpn \
        --vpn-type RouteBased \
        --sku VpnGw1 \
        --no-wait
    

创建本地 VPN 网关

接下来,创建一个 VPN 网关来模拟本地 VPN 设备。

  1. 在 Cloud Shell 中运行以下命令,创建 PIP-VNG-HQ-Network 公共 IP 地址:

    az network public-ip create \
        --resource-group "myResourceGroupName" \
        --name PIP-VNG-HQ-Network \
        --allocation-method Static
    
  2. 在 Cloud Shell 中运行以下命令,创建 VNG-HQ-Network 虚拟网络:

    az network vnet create \
        --resource-group "myResourceGroupName" \
        --name VNG-HQ-Network \
        --subnet-name GatewaySubnet 
    
  3. 在 Cloud Shell 中运行以下命令,创建 VNG-HQ-Network 虚拟网络网关:

    az network vnet-gateway create \
        --resource-group "myResourceGroupName" \
        --name VNG-HQ-Network \
        --public-ip-addresses PIP-VNG-HQ-Network \
        --vnet VNG-HQ-Network \
        --gateway-type Vpn \
        --vpn-type RouteBased \
        --sku VpnGw1 \
        --no-wait
    
  4. 创建网关大约需要至少 30 分钟才能完成。 若要监视网关创建的进度,请运行以下命令。 我们将使用 Linux watch 命令定期运行 az network vnet-gateway list 该命令,以便监视进度:

    watch -d -n 5 az network vnet-gateway list \
        --resource-group "myResourceGroupName" \
        --output table
    
  5. 在每个 VPN 网关的“ProvisioningState”显示为“Succeeded”之后,便可以继续操作。 按 Ctrl+C 在创建网关后停止命令。

    ActiveActive    EnableBgp    EnablePrivateIpAddress   GatewayType    Location        Name              ProvisioningState    ResourceGroup                         ResourceGuid                          VpnType
    --------------  -----------  ------------------------ -------------  --------------  ----------------  -------------------  -----------------------------  ------------------------------------  ----------
    False           False        False                    Vpn            southcentralus  VNG-Azure-VNet-1  Succeeded            "myResourceGroupName"  48dc714e-a700-42ad-810f-a8163ee8e001  RouteBased
    False           False        False                    Vpn            southcentralus  VNG-HQ-Network    Succeeded            "myResourceGroupName"  49b3041d-e878-40d9-a135-58e0ecb7e48b  RouteBased
    

更新本地网络网关 IP 引用

重要说明

在开始接下来的练习之前,必须已成功部署虚拟网络网关。 部署网关可能需要 30 分钟或更长时间才能完成。 如果 ProvisioningState 还未显示“已成功”,则需要等待。

在本节中,更新本地网络网关中定义的远程网关 IP 地址引用。 在创建 VPN 网关、为其分配 IPv4 地址并将其与之关联之前,无法更新本地网络网关。

  1. 运行以下 Azure CLI 命令以检查是否已创建两个虚拟网络网关。 初始状态显示“正在更新”。 你希望看到 VNG-Azure-VNet-1 和 VNG-HQ-Network 均成功

    az network vnet-gateway list \
        --resource-group "myResourceGroupName" \
        --output table
    
    Name              Location    GatewayType    VpnType     VpnGatewayGeneration    EnableBgp    EnablePrivateIpAddress    Active    ResourceGuid                        ProvisioningState    ResourceGroup
    ----------------  ----------  -------------  ----------  ----------------------  -----------  ------------------------  --------  ------------------------------------  -------------------  ------------------------------------------
    VNG-Azure-VNet-1  westus      Vpn            RouteBased  Generation1         False        False                     False     9a2e60e6-da57-4274-99fd-e1f8b2c0326d  Succeeded            learn-cfbcca66-16fd-423e-b688-66f242d8f09e
    VNG-HQ-Network    westus      Vpn            RouteBased  Generation1         False        False                     False     c36430ed-e6c0-4230-ae40-cf937a102bcd  Succeeded            learn-cfbcca66-16fd-423e-b688-66f242d8f09e
    

    记住,要等待网关列表成功返回。 另外还要记住,本地网络网关资源定义以它们命名的远程网关和网络设置。 例如, LNG-Azure-VNet-1 本地网络网关包含 Azure-VNet-1 的 IP 地址和网络等信息。

  2. 在 Cloud Shell 中运行以下命令,检索分配给 PIP-VNG-Azure-VNet-1 的 IPv4 地址并将其存储在变量中:

    PIPVNGAZUREVNET1=$(az network public-ip show \
        --resource-group "myResourceGroupName" \
        --name PIP-VNG-Azure-VNet-1 \
        --query "[ipAddress]" \
        --output tsv)
    
  3. 在 Cloud Shell 中运行以下命令,更新 LNG-Azure-VNet-1 本地网络网关,使其指向附加到 VNG-Azure-VNet-1 虚拟网络网关的公共 IP 地址:

    az network local-gateway update \
        --resource-group "myResourceGroupName" \
        --name LNG-Azure-VNet-1 \
        --gateway-ip-address $PIPVNGAZUREVNET1
    
  4. 在 Cloud Shell 中运行以下命令,检索分配给 PIP-VNG-HQ-Network 的 IPv4 地址并将其存储在变量中:

    PIPVNGHQNETWORK=$(az network public-ip show \
        --resource-group "myResourceGroupName" \
        --name PIP-VNG-HQ-Network \
        --query "[ipAddress]" \
        --output tsv)
    
  5. 在 Cloud Shell 中运行以下命令以更新 LNG-HQ-Network 本地网络网关,使其指向附加到 VNG-HQ-Network 虚拟网络网关的公共 IP 地址:

    az network local-gateway update \
        --resource-group "myResourceGroupName" \
        --name LNG-HQ-Network \
        --gateway-ip-address $PIPVNGHQNETWORK
    

创建连接

在此,您可以通过创建连接,将每个 VPN 网关与包含该网关远程网络的公共 IP 地址引用的本地网络网关连接起来,从而完成配置。

  1. 创建用于连接的共享密钥。 在以下命令中,将 <shared key> 替换为用于 IPSec 预共享密钥的文本字符串。 预共享密钥是一个由可打印 ASCII 字符组成的字符串,长度不得超出 128 个字符。 它不能包含特殊字符,例如连字符和波形符。 同时对两个连接使用此预共享密钥。

    注意

    在此示例中,任何一组数字都将用于共享密钥:SHAREDKEY=123456789。 在生产环境中,建议使用长度不超过 128 个字符的可打印 ASCII 字符串,不带有特殊字符,如连字符或波形符

    SHAREDKEY=<shared key>
    
  2. 请记住, LNG-HQ-Network 包含对模拟本地 VPN 设备上的 IP 地址的引用。 在 Cloud Shell 中运行以下命令,以创建从 VNG-Azure-VNet-1LNG-HQ-Network 的连接:

    az network vpn-connection create \
        --resource-group "myResourceGroupName" \
        --name Azure-VNet-1-To-HQ-Network \
        --vnet-gateway1 VNG-Azure-VNet-1 \
        --shared-key $SHAREDKEY \
        --local-gateway2 LNG-HQ-Network
    
  3. 请记住, LNG-Azure-VNet-1 包含对与 VNG-Azure-VNet-1 VPN 网关关联的公共 IP 地址的引用。 此连接通常从本地设备创建。 在 Cloud Shell 中运行以下命令,以创建从 VNG-HQ-NetworkLNG-Azure-VNet-1 的连接:

    az network vpn-connection create \
        --resource-group "myResourceGroupName" \
        --name HQ-Network-To-Azure-VNet-1  \
        --vnet-gateway1 VNG-HQ-Network \
        --shared-key $SHAREDKEY \
        --local-gateway2 LNG-Azure-VNet-1
    

现在已完成站点到站点连接的配置。 可能需要几分钟时间,但隧道应自动连接并处于活动状态。

验证步骤

让我们来确认 VPN 隧道是否已连接。

  1. 运行以下命令,确认 Azure-VNet-1-To-HQ-Network 是否已连接:

    az network vpn-connection show \
        --resource-group "myResourceGroupName" \
        --name Azure-VNet-1-To-HQ-Network  \
        --output table \
        --query '{Name:name,ConnectionStatus:connectionStatus}'
    

    应会看到类似以下内容的输出,这表示连接成功。 如果 ConnectionStatus 显示为 ConnectingUnknown,请等待一两分钟,然后重新运行此命令。 需要几分钟才能完全连接。

    Name                        ConnectionStatus
    --------------------------  ------------------
    Azure-VNet-1-To-HQ-Network  Connected
    

现已完成站点到站点的配置。 下图显示最终拓扑,包括子网和连接,以及逻辑连接点。 既然已成功建立 VPN 连接,“服务”和“应用程序”子网中部署的虚拟机现可彼此通信

单元 4 练习期间部署的资源示意图。