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

已完成

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

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

创建 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 <rgn>[sandbox resource group name]</rgn> \
        --name PIP-VNG-Azure-VNet-1 \
        --allocation-method Static
    
  2. 在 Cloud Shell 中运行以下命令以创建“VNG-Azure-VNet-1”虚拟网络。

    az network vnet create \
        --resource-group <rgn>[sandbox resource group name]</rgn> \
        --name VNG-Azure-VNet-1 \
        --subnet-name GatewaySubnet 
    
  3. 在 Cloud Shell 中运行以下命令以创建“VNG-Azure-VNet-1”虚拟网络网关。

    az network vnet-gateway create \
        --resource-group <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --name PIP-VNG-HQ-Network \
        --allocation-method Static
    
  2. 在 Cloud Shell 中运行以下命令以创建“VNG-HQ-Network”虚拟网络。

    az network vnet create \
        --resource-group <rgn>[sandbox resource group name]</rgn> \
        --name VNG-HQ-Network \
        --subnet-name GatewaySubnet 
    
  3. 在 Cloud Shell 中运行以下命令以创建“VNG-HQ-Network”虚拟网络网关。

    az network vnet-gateway create \
        --resource-group <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --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            <rgn>[sandbox resource group name]</rgn>  48dc714e-a700-42ad-810f-a8163ee8e001  RouteBased
    False           False        False                    Vpn            southcentralus  VNG-HQ-Network    Succeeded            <rgn>[sandbox resource group name]</rgn>  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 <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --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-1”到“LNG-HQ-Network”的连接。

    az network vpn-connection create \
        --resource-group <rgn>[sandbox resource group name]</rgn> \
        --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-Network”到“LNG-Azure-VNet-1”的连接。

    az network vpn-connection create \
        --resource-group <rgn>[sandbox resource group name]</rgn> \
        --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 <rgn>[sandbox resource group name]</rgn> \
        --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 连接,“服务”和“应用程序”子网中部署的虚拟机现可彼此通信。

Diagram of resources deployed during unit 4 exercise.