练习 - 使用 Azure CLI 命令创建站点到站点 VPN 网关
现已准备好通过创建公共 IP 地址、虚拟网络网关和连接来完成站点到站点 VPN 网关的创建。 回想一下,在创建本地网络网关时,对公共 IP 地址引用使用的是占位符。 因此现在的任务之一就是使用分配给虚拟网络网关的实际公共 IP 地址来更新这些网关。
理想情况下,应在创建本地网络网关之前创建公共 IP 地址和虚拟网络网关。 在本练习中,你将了解如何更新本地网络网关。 可以使用相同的命令来更新本地网络网关中的任何配置元素,例如远程网络地址空间。
创建 Azure 端 VPN 网关
首先,为连接的 Azure 端创建 VPN 网关。 最多需要 45 分钟就可创建虚拟网络网关。 为节省时间,请使用带有 --no-wait
参数的 Azure CLI 命令。 此参数允许同时创建两个虚拟网络网关,最大限度地缩短创建这些资源所需的总时间。
在 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
在 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
在 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 设备。
在 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
在 Cloud Shell 中运行以下命令以创建“VNG-HQ-Network”虚拟网络。
az network vnet create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --name VNG-HQ-Network \ --subnet-name GatewaySubnet
在 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
创建网关大约需要至少 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
在每个 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 地址并将其与之关联之前,无法更新本地网络网关。
运行以下 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 地址和网络等信息。
在 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)
在 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
在 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)
在 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 地址引用)之间的连接来完成配置。
创建用于连接的共享密钥。 在以下命令中,将
<shared key>
替换为用于 IPSec 预共享密钥的文本字符串。 预共享密钥是一个由可打印 ASCII 字符组成的字符串,长度不得超出 128 个字符。 它不能包含特殊字符,例如连字符和波形符。 同时对两个连接使用此预共享密钥。注意
在此示例中,任何一组数字都将用于共享密钥:SHAREDKEY=123456789。 在生产环境中,建议使用长度不超过 128 个字符的可打印 ASCII 字符串,不带有特殊字符,如连字符或波形符。
SHAREDKEY=<shared key>
记住,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
记住,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 隧道是否已连接。
运行以下命令,确认 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
显示为Connecting
或Unknown
,请等待一两分钟,然后重新运行此命令。 需要几分钟才能完全连接。Name ConnectionStatus -------------------------- ------------------ Azure-VNet-1-To-HQ-Network Connected
现已完成站点到站点的配置。 下图显示最终拓扑,包括子网和连接,以及逻辑连接点。 既然已成功建立 VPN 连接,“服务”和“应用程序”子网中部署的虚拟机现可彼此通信。