你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
VPN 选项为动态数据在通过 TLS 从 Azure Stack Edge Mini R 或 Azure Stack Edge Pro R 设备传输到 Azure 时提供第二层加密。 可以通过 Azure 门户或 Azure PowerShell 在 Azure Stack Edge Mini R 设备上配置 VPN。
本文介绍使用 Azure PowerShell 脚本在 Azure Stack Edge Mini R 设备上配置点到站点 (P2S) VPN 以在云中创建配置所需的步骤。 Azure Stack Edge 设备上的配置是通过本地 UI 完成的。
关于 VPN 设置
通过 P2S VPN 网关连接,可以从单个客户端计算机或 Azure Stack Edge Mini R 设备创建与虚拟网络的安全连接。 从客户端计算机或设备启动 P2S 连接。 在本例中,P2S 连接使用基于标准的 IPsec VPN 解决方案 IKEv2 VPN。
典型的工作流包括以下步骤:
- 配置先决条件。
- 在 Azure 上设置必要的资源。
- 创建和配置虚拟网络和所需的子网。
- 创建和配置 Azure VPN 网关(虚拟网络网关)。
- 设置 Azure 防火墙并添加网络和应用规则。
- 创建 Azure 路由表并添加路由。
- 在 VPN 网关中启用点到站点。
- 添加客户端地址池。
- 配置隧道类型。
- 配置身份验证类型。
- 创建证书。
- 上传证书。
- 下载电话簿。
- 在设备的本地 Web UI 中设置 VPN。
- 提供电话簿。
- 提供服务标记 (json) 文件。
以下部分提供了详细步骤。
配置先决条件
根据 安装 Azure Stack Edge Mini R 设备中的说明,您应该已经成功安装 Azure Stack Edge Mini R 设备并能够访问它。 此设备将与 Azure 建立 P2S 连接。
你应该有权访问在 Azure 中为 Azure Stack Edge 服务启用的有效 Azure 订阅。 使用此订阅在 Azure 中创建相应的资源来管理 Azure Stack Edge Mini R 设备。
你可以使用 Windows 客户端访问 Azure Stack Edge Mini R 设备。 你将使用此客户端以编程方式在云中创建配置。
若要在 Windows 客户端上安装所需的 PowerShell 版本,请运行以下命令:
Install-Module -Name Az -AllowClobber -Scope CurrentUser Import-Module Az.Accounts若要连接到 Azure 帐户和订阅,请运行以下命令:
Connect-AzAccount Set-AzContext -Subscription "<Your subscription name>"提供用于 Azure Stack Edge Mini R 设备的 Azure 订阅名称以配置 VPN。
下载 在云中创建配置所需的脚本。 该脚本将会:
- 创建 Azure 虚拟网络和以下子网: GatewaySubnet 和 AzureFirewallSubnet。
- 创建和配置 Azure VPN 网关。
- 创建和配置 Azure 本地网络网关。
- 在 Azure VPN 网关和本地网络网关之间创建和配置 Azure VPN 连接。
- 创建 Azure 防火墙并添加网络规则、应用规则。
- 创建 Azure 路由表并向其添加路由。
在要在其中创建 Azure 资源的 Azure 门户中创建资源组。 转到 Azure 门户中的服务列表,选择 “资源组 ”,然后选择“ + 添加”。 提供资源组的订阅信息和名称,然后选择“ 创建”。 如果转到此资源组,此时该资源组下不应有任何资源。
需要您为 Azure Stack Edge Mini R 设备准备一个 Base 64 编码的证书,并确保其格式为
.cer。 此证书应以私钥形式作为pfx上传到 Azure Stack Edge 设备。 此证书还需要安装在尝试建立 P2S 连接的客户端上的存储的受信任根目录中。
使用脚本
首先修改 parameters-p2s.json 文件以输入参数。 接下来,使用修改后的 json 文件运行脚本。
以下各节将讨论上述每个步骤。
下载服务标记文件
你可能已在下载脚本的文件夹中有一个 ServiceTags.json 文件。 如果没有,您可以下载服务标签文件。
将服务标记从 Azure 下载到本地客户端,并将其另存为包含脚本的同一文件夹中的 json 文件: https://www.microsoft.com/download/details.aspx?id=56519
此文件将在后续步骤的本地 Web UI 中上传。
修改参数文件
第一步是修改 parameters-p2s.json 文件并保存更改。
对于创建的 Azure 资源,请提供以下名称:
| 参数名称 | Description |
|---|---|
| virtualNetworks_vnet_name | Azure 虚拟网络名称 |
| azureFirewalls_firewall_name | Azure 防火墙名称 |
| routeTables_routetable_name | Azure 路由表名称 |
| publicIPAddresses_VNGW_public_ip_name | 虚拟网络网关的公共 IP 地址名称 |
| 虚拟网络网关_VNGW_名称 | Azure VPN 网关(虚拟网络网关)名称 |
| publicIPAddresses_firewall_public_ip_name (公共IP地址_防火墙_公共IP名称) | Azure 防火墙的公共 IP 地址名称 |
| 位置 | 这是要在其中创建虚拟网络的区域。 选择与设备关联的相同的区域。 |
| RouteTables_routetable_onprem_name | 这是其他路由表的名称,可帮助防火墙将数据包路由回 Azure Stack Edge 设备。 该脚本将创建两个附加路由,并将 default 和 FirewallSubnet 与此路由表相关联。 |
为创建的 Azure 资源提供以下 IP 地址和地址空间,包括虚拟网络和关联的子网(默认、 防火墙、 GatewaySubnet)。
| 参数名称 | Description |
|---|---|
| VnetIPv4AddressSpace | 这是与虚拟网络关联的地址空间。 提供 Vnet IP 范围作为专用 IP 范围(https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses)。 |
| 默认子网IPv4地址空间 | 这是与虚拟网络子网 Default 关联的地址空间。 |
| Firewall子网IPv4地址空间 | 这是与虚拟网络子网 Firewall 关联的地址空间。 |
| 网关子网IPv4地址空间 | 这是与 GatewaySubnet 虚拟网络关联的地址空间。 |
| GatewaySubnetIPv4bgpPeeringAddress | 这是为 BGP 通信保留的 IP 地址,该地址源自与 GatewaySubnet 虚拟网络关联的地址空间。 |
| 客户端地址池 | 此 IP 地址用于 Azure 门户中 P2S 配置中的地址池。 |
| PublicCertData | VPN 网关使用公共证书数据对连接到它的 P2S 客户端进行身份验证。 若要获取证书数据,请安装根证书。 确保证书使用 .cer 扩展进行 Base-64 编码。 打开此证书,并在一个连续行中复制证书中的 ==BEGIN CERTIFICATE== 和 ==END CERTIFICATE== 之间的文本。 |
运行脚本
按照以下步骤使用修改 parameters-p2s.json 后的脚本并运行脚本来创建 Azure 资源。
运行 PowerShell。 切换到脚本所在的目录。
运行脚本。
.\AzDeployVpn.ps1 -Location <Location> -AzureAppRuleFilePath "appRule.json" -AzureIPRangesFilePath "<Service tag json file>" -ResourceGroupName "<Resource group name>" -AzureDeploymentName "<Deployment name>" -NetworkRuleCollectionName "<Name for collection of network rules>" -Priority 115 -AppRuleCollectionName "<Name for collection of app rules>"注释
在此版本中,该脚本仅适用于美国东部位置。
运行脚本时需要输入以下信息:
参数 Description 位置 这是必须在其中创建 Azure 资源的区域。 AzureAppRuleFilePath 这是 appRule.json的文件路径。AzureIPRangesFilePath 这是在前面的步骤中下载的服务标记 json 文件。 ResourceGroupName 这是在其中创建所有 Azure 资源的资源组的名称。 AzureDeploymentName 这是 Azure 部署的名称。 NetworkRuleCollectionName 这是创建并添加到 Azure 防火墙的所有网络规则集合的名称。 Priority 这是分配给创建的所有网络和应用程序规则的优先级。 应用程序规则集合名称 (AppRuleCollectionName) 这是创建并添加到 Azure 防火墙的所有应用程序规则集合的名称。 下面显示了一个示例输出。
PS C:\Offline docs\AzureVpnConfigurationScripts> .\AzDeployVpn.ps1 -Location eastus -AzureAppRuleFilePath "appRule.json" -AzureIPRangesFilePath ".\ServiceTags_Public_20200203.json" -ResourceGroupName "mytmarg3" -AzureDeploymentName "tmap2stestdeploy1" -NetworkRuleCollectionName "testnrc1" -Priority 115 -AppRuleCollectionName "testarc2" validating vpn deployment parameters Starting vpn deployment C:\Offline docs\AzureVpnConfigurationScripts\parameters-p2s.json C:\Offline docs\AzureVpnConfigurationScripts\template-p2s.json vpn deployment: tmap2stestdeploy1 started and status: Running Waiting for vpn deployment completion.... ==== CUT ==================== CUT ============== Adding route 191.236.0.0/18 for AzureCloud.eastus Adding route 191.237.0.0/17 for AzureCloud.eastus Adding route 191.238.0.0/18 for AzureCloud.eastus Total Routes:294, Existing Routes: 74, New Routes Added: 220 Additional routes getting added重要
- 运行脚本大约需要 90 分钟。 请确保在脚本启动前立即登录到网络。
- 如果出于任何原因,脚本会话失败,请确保删除资源组以删除其下创建的所有资源。
脚本完成后,会在脚本所在的同一文件夹中生成部署日志。
验证 Azure 资源
成功运行脚本后,请验证是否已在 Azure 中创建所有资源。 转到创建的资源组。 您应该能看到以下资源:
下载 VPN 配置文件的电话簿
在此步骤中,下载设备的 VPN 配置文件。
在 Azure 门户中,转到资源组,然后选择在前面的步骤中创建的虚拟网络网关。
转到“设置”>“点到站点配置”。 选择 “下载 VPN 客户端”。
保存压缩的配置文件并在 Windows 客户端上提取。
转到 WindowsAmd64 文件夹,然后提取
.exe: VpnClientSetupAmd64.exe。
创建临时路径。 例如:
C:\NewTemp\vnet\tmp运行 PowerShell 并转到所在
.exe目录。 若要执行.exe,请键入:.\VpnClientSetupAmd64.exe /Q /C /T:"C:\NewTemp\vnet\tmp"临时路径将具有新文件。 下面是示例输出:
PS C:\windows\system32> cd "C:\Users\Ase\Downloads\vngw5\WindowsAmd64" PS C:\Users\Ase\Downloads\vngw5\WindowsAmd64> .\VpnClientSetupAmd64.exe /Q /C /T:"C:\NewTemp\vnet\tmp" PS C:\Users\Ase\Downloads\vngw5\WindowsAmd64> cd "C:\NewTemp\vnet" PS C:\NewTemp\vnet> ls .\tmp Directory: C:\NewTemp\vnet\tmp Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2/6/2020 6:18 PM 947 8c670077-470b-421a-8dd8-8cedb4f2f08a.cer -a---- 2/6/2020 6:18 PM 155 8c670077-470b-421a-8dd8-8cedb4f2f08a.cmp -a---- 2/6/2020 6:18 PM 3564 8c670077-470b-421a-8dd8-8cedb4f2f08a.cms -a---- 2/6/2020 6:18 PM 11535 8c670077-470b-421a-8dd8-8cedb4f2f08a.inf -a---- 2/6/2020 6:18 PM 2285 8c670077-470b-421a-8dd8-8cedb4f2f08a.pbk -a---- 2/6/2020 6:18 PM 5430 azurebox16.ico -a---- 2/6/2020 6:18 PM 4286 azurebox32.ico -a---- 2/6/2020 6:18 PM 138934 azurevpnbanner.bmp -a---- 2/6/2020 6:18 PM 46064 cmroute.dll -a---- 2/6/2020 6:18 PM 196 routes.txt PS C:\NewTemp\vnet>.pbk 文件是 VPN 配置文件的电话簿。 在本地 UI 中会用到它。
设备上的 VPN 配置
在 Azure Stack Edge 设备的本地 UI 上执行以下步骤。
在本地 UI 中,转到 VPN 页。 在 VPN 状态下,选择“ 配置”。
在配置 VPN边栏中:
- 在“上传电话簿”文件中,指向在前面的步骤中创建的 .pbk 文件。
- 在“上传公共 IP 列表配置文件”中,提供 Azure 数据中心 IP 范围 JSON 文件作为输入。 你已在前面的步骤中下载了此文件,网址为 https://www.microsoft.com/download/details.aspx?id=56519。
- 选择 eastus 作为区域,然后选择 “应用”。
在 仅能使用 VPN 访问的 IP 地址范围 部分,输入您为 Azure 虚拟网络选择的 Vnet IPv4 范围。
验证客户端连接
- 在 Azure 门户中,转到 VPN 网关。
- 转到
“设置”下的“点对站点配置” 。 在 “分配的 IP 地址”下,Azure Stack Edge 设备的 IP 地址应显示。
通过 VPN 验证数据传输
若要确认 VPN 正常工作,请将数据复制到 SMB 共享。 请按照 Azure Stack Edge 设备上 添加共享 中的操作步骤进行操作。
将文件(例如 \data\pictures\waterfall.jpg)复制到客户端系统上装载的 SMB 共享。
在复制数据的同时,验证数据是否正在通过 VPN:
转到 Azure 门户中的 VPN 网关。
转到 “监控 > 指标”.
在右窗格中,选择 “范围” 作为 VPN 网关,“指标” 作为网关 P2S 带宽,并将 “聚合” 作为平均值。
复制数据时,带宽利用率将增加,数据复制完成后,带宽利用率会下降。
验证此文件是否显示在云上的存储帐户中。
调试问题
若要调试任何问题,请使用以下命令:
Get-AzResourceGroupDeployment -DeploymentName $deploymentName -ResourceGroupName $ResourceGroupName
示例输出如下所示:
PS C:\Projects\TZL\VPN\Azure-VpnDeployment> Get-AzResourceGroupDeployment -DeploymentName "tznvpnrg14_deployment" -ResourceGroupName "tznvpnrg14"
DeploymentName : tznvpnrg14_deployment
ResourceGroupName : tznvpnrg14
ProvisioningState : Succeeded
Timestamp : 1/21/2020 6:23:13 PM
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=========================================== ========================= ==========
virtualNetworks_vnet_name String tznvpnrg14_vnet
azureFirewalls_firewall_name String tznvpnrg14_firewall
routeTables_routetable_name String tznvpnrg14_routetable
publicIPAddresses_VNGW_public_ip_name String tznvpnrg14_vngwpublicip
virtualNetworkGateways_VNGW_name String tznvpnrg14_vngw
publicIPAddresses_firewall_public_ip_name String tznvpnrg14_fwpip
localNetworkGateways_LNGW_name String tznvpnrg14_lngw
connections_vngw_lngw_name String tznvpnrg14_connection
location String East US
vnetIPv4AddressSpace String 172.24.0.0/16
defaultSubnetIPv4AddressSpace String 172.24.0.0/24
firewallSubnetIPv4AddressSpace String 172.24.1.0/24
gatewaySubnetIPv4AddressSpace String 172.24.2.0/24
gatewaySubnetIPv4bgpPeeringAddress String 172.24.2.254
customerNetworkAddressSpace String 10.0.0.0/18
customerPublicNetworkAddressSpace String 207.68.128.0/24
dbeIOTNetworkAddressSpace String 10.139.218.0/24
azureVPNsharedKey String 1234567890
dbE-Gateway-ipaddress String 207.68.128.113
Outputs :
Name Type Value
======================= ========================= ==========
virtualNetwork Object {
"provisioningState": "Succeeded",
"resourceGuid": "dcf673d3-5c73-4764-b077-77125eda1303",
"addressSpace": {
"addressPrefixes": [
"172.24.0.0/16"
]
================= CUT ============================= CUT ===========================
Get-AzResourceGroupDeploymentOperation -ResourceGroupName $ResourceGroupName -DeploymentName $AzureDeploymentName