为 S2S VPN 和 VNet 到 VNet 配置自定义 IPsec/IKE 连接策略:PowerShell
本文分步讲解了如何使用 PowerShell 为 VPN 网关的站点到站点 VPN 连接或 VNet 到 VNet 连接配置自定义 IPsec/IKE 策略。
工作流
本文中的说明可帮助你设置和配置 IPsec/IKE 策略,如下图所示。
- 创建虚拟网络和 VPN 网关。
- 创建用于跨界连接的本地网关,或用于 VNet 到 VNet 的连接的另一虚拟网络和网关。
- 使用选定的算法和参数创建 IPsec/IKE 策略。
- 创建采用 IPsec/IKE 策略的连接(IPsec 或 VNet2VNet)。
- 为现有连接添加/更新/删除 IPsec/IKE 策略。
策略参数
IPsec 和 IKE 协议标准支持采用各种组合的各种加密算法。 请参阅关于加密要求和 Azure VPN 网关,了解如何据此确保跨界的和 VNet 到 VNet 的连接满足符合性或安全性要求。 请注意以下事项:
- IPsec/IKE 策略仅适用于以下网关 SKU:
- VpnGw1~5 和 VpnGw1AZ~5AZ
- Standard 和 HighPerformance
- 只能为一个给定的连接指定一个策略组合。
- 必须指定 IKE(主模式)和 IPsec(快速模式)的所有算法和参数。 不允许指定部分策略。
- 请查阅 VPN 设备供应商规范,确保本地 VPN 设备支持该策略。 如果策略不兼容,则无法建立 S2S 或 VNet 到 VNet 连接。
加密算法和密钥强度
下表列出了受支持的可配置加密算法和密钥强度。
IPsec/IKEv2 | 选项 |
---|---|
IKEv2 加密 | GCMAES256、GCMAES128、AES256、AES192、AES128 |
IKEv2 完整性 | SHA384、SHA256、SHA1、MD5 |
DH 组 | DHGroup24、ECP384、ECP256、DHGroup14、DHGroup2048、DHGroup2、DHGroup1、无 |
IPsec 加密 | GCMAES256、GCMAES192、GCMAES128、AES256、AES192、AES128、DES3、DES、无 |
IPsec 完整性 | GCMAES256、GCMAES192、GCMAES128、SHA256、SHA1、MD5 |
PFS 组 | PFS24、ECP384、ECP256、PFS2048、PFS2、PFS1、无 |
快速模式 SA 生存期 | (可选;如果未指定,则使用默认值) 秒(整数;最小值为 300,默认值为 27,000) KB(整数;最小值为 1,024,默认值为 10,2400,000) |
流量选择器 | UsePolicyBasedTrafficSelectors ($True 或 $False ,但可选;如果未指定,则使用默认值 $False ) |
DPD 超时 | 秒(整数;最小值为 9,最大值为 3,600,默认值为 45) |
本地 VPN 设备配置必须匹配或者包含你在 Azure IPsec 或 IKE 策略上指定的以下算法和参数:
- IKE 加密算法(主模式,阶段 1)
- IKE 完整性算法(主模式,阶段 1)
- DH 组(主模式,阶段 1)
- IPsec 加密算法(快速模式,阶段 2)
- IPsec 完整性算法(快速模式,阶段 2)
- PFS 组(快速模式,阶段 2)
- 流量选择器(如果使用
UsePolicyBasedTrafficSelectors
) - SA 生存期(不需要匹配的本地规范)
如果使用 GCMAES 作为 IPsec 加密算法,则必须为 IPsec 完整性选择相同的 GCMAES 算法和密钥长度。 例如,对这两者使用 GCMAES128。
在算法和密钥表中:
- IKE 对应于主模式或阶段 1。
- IPsec 对应于快速模式或阶段 2。
- DH 组指定在主模式或阶段 1 中使用的 Diffie-Hellman 组。
- PFS 组指定在快速模式或阶段 2 中使用的 Diffie-Hellman 组。
在 Azure VPN 网关上,IKE 主模式 SA 生存期固定为 28,800 秒。
UsePolicyBasedTrafficSelectors
是连接上的可选参数。 如果在连接上将UsePolicyBasedTrafficSelectors
设置为$True
,则会将 VPN 网关配置为连接到基于策略的本地 VPN 防火墙。如果启用
UsePolicyBasedTrafficSelectors
,请确保 VPN 设备已使用本地网络(本地网关)前缀与 Azure 虚拟网络前缀的所有组合定义了匹配的(而不是任意到任意的)流量选择器。 VPN 网关接受远程 VPN 网关建议的任何流量选择器,无论 VPN 网关上采用了哪种配置。例如,如果本地网络前缀为 10.1.0.0/16 和 10.2.0.0/16,虚拟网络前缀为 192.168.0.0/16 和 172.16.0.0/16,则需指定以下流量选择器:
- 10.1.0.0/16 <====> 192.168.0.0/16
- 10.1.0.0/16 <====> 172.16.0.0/16
- 10.2.0.0/16 <====> 192.168.0.0/16
- 10.2.0.0/16 <====> 172.16.0.0/16
有关基于策略的流量选择器的详细信息,请参阅将 VPN 网关连接到多个基于策略的本地 VPN 设备。
将超时设置为较短的时长会导致 IKE 更主动地重新生成密钥。 这可能会导致连接在某些实例中看起来是断开的。 在本地位置离 VPN 网关所在的 Azure 区域较远时,或者物理链接条件可能会导致数据包丢失时,你可能不希望出现这种情况。 我们通常建议将超时设置为 30 至 45 秒。
注意
IKEv2 完整性同时用于完整性和 PRF(伪随机函数)。 如果指定的 IKEv2 加密算法为 GCM*,则 IKEv2 完整性中传递的值将仅用于 PRF,并且会隐式将 IKEv2 完整性设置为 GCM*。 在所有其他情况下,在 IKEv2 完整性中传递的值将同时用于 IKEv2 完整性和 PRF。
Diffie-Hellman 组
下表列出了自定义策略支持的相应 Diffie-Hellman 组:
Diffie-Hellman 组 | DHGroup | PFSGroup | 密钥长度 |
---|---|---|---|
1 | DHGroup1 | PFS1 | 768 位 MODP |
2 | DHGroup2 | PFS2 | 1024 位 MODP |
14 | DHGroup14 DHGroup2048 |
PFS2048 | 2048 位 MODP |
19 | ECP256 | ECP256 | 256 位 ECP |
20 | ECP384 | ECP384 | 384 位 ECP |
24 | DHGroup24 | PFS24 | 2048 位 MODP |
如需更多详细信息,请参阅 RFC3526 和 RFC5114。
创建采用 IPsec/IKE 策略的 S2S VPN 连接
本部分将逐步介绍如何创建采用 IPsec/IKE 策略的 S2S VPN 连接。 下面的步骤将创建如图所示的连接:
请参阅创建 S2S VPN 连接,详细了解创建 S2S VPN 连接的分步介绍。
安装 Azure 资源管理器 PowerShell cmdlet。 有关安装 PowerShell cmdlet 的详细信息,请参阅如何安装和配置 Azure PowerShell。
步骤 1 - 创建虚拟网络、VPN 网关和本地网关资源
打开 PowerShell 控制台并连接到帐户。 有关详细信息,请参阅将 Windows PowerShell 与资源管理器配合使用。 使用下面的示例来帮助连接:
Connect-AzAccount -Environment AzureChinaCloud
Select-AzSubscription -SubscriptionName <YourSubscriptionName>
1.声明变量
对于本练习,我们首先要声明变量。 在运行命令前,可以将变量替换为自己的变量。
$RG1 = "TestRG1"
$Location1 = "China North"
$VNetName1 = "TestVNet1"
$FESubName1 = "FrontEnd"
$BESubName1 = "Backend"
$GWSubName1 = "GatewaySubnet"
$VNetPrefix11 = "10.1.0.0/16"
$FESubPrefix1 = "10.1.0.0/24"
$BESubPrefix1 = "10.1.1.0/24"
$GWSubPrefix1 = "10.1.255.0/27"
$DNS1 = "8.8.8.8"
$GWName1 = "VNet1GW"
$GW1IPName1 = "VNet1GWIP1"
$GW1IPconf1 = "gw1ipconf1"
$Connection16 = "VNet1toSite6"
$LNGName6 = "Site6"
$LNGPrefix61 = "10.61.0.0/16"
$LNGPrefix62 = "10.62.0.0/16"
$LNGIP6 = "131.107.72.22"
2. 创建虚拟网络、VPN 网关和本地网关
以下示例创建具有三个子网的虚拟网络 TestVNet1 和 VPN 网关。 替换值时,请务必始终将网关子网特意命名为 GatewaySubnet。 如果命名为其他名称,网关创建会失败。 创建虚拟网络网关可能需要 45 分钟或更长时间。
New-AzResourceGroup -Name $RG1 -Location $Location1
$fesub1 = New-AzVirtualNetworkSubnetConfig -Name $FESubName1 -AddressPrefix $FESubPrefix1
$besub1 = New-AzVirtualNetworkSubnetConfig -Name $BESubName1 -AddressPrefix $BESubPrefix1
$gwsub1 = New-AzVirtualNetworkSubnetConfig -Name $GWSubName1 -AddressPrefix $GWSubPrefix1
New-AzVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1 -Location $Location1 -AddressPrefix $VNetPrefix11 -Subnet $fesub1,$besub1,$gwsub1
$gw1pip1 = New-AzPublicIpAddress -Name $GW1IPName1 -ResourceGroupName $RG1 -Location $Location1 -AllocationMethod Dynamic
$vnet1 = Get-AzVirtualNetwork -Name $VNetName1 -ResourceGroupName $RG1
$subnet1 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1
$gw1ipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GW1IPconf1 -Subnet $subnet1 -PublicIpAddress $gw1pip1
New-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1 -Location $Location1 -IpConfigurations $gw1ipconf1 -GatewayType Vpn -VpnType RouteBased -GatewaySku VpnGw1
创建本地网关。 如果 PowerShell 超时,则可能需要重新连接并再次声明以下变量。
声明变量。
$RG1 = "TestRG1"
$Location1 = "China North"
$LNGName6 = "Site6"
$LNGPrefix61 = "10.61.0.0/16"
$LNGPrefix62 = "10.62.0.0/16"
$LNGIP6 = "131.107.72.22"
$GWName1 = "VNet1GW"
$Connection16 = "VNet1toSite6"
创建本地网络网关 Site6。
New-AzLocalNetworkGateway -Name $LNGName6 -ResourceGroupName $RG1 -Location $Location1 -GatewayIpAddress $LNGIP6 -AddressPrefix $LNGPrefix61,$LNGPrefix62
步骤 2 - 创建含 IPsec/IKE 策略的 S2S VPN 连接
1.创建 IPsec/IKE 策略
下方示例脚本使用以下算法和参数创建 IPsec/IKE 策略:
- IKEv2:AES256、SHA384、DHGroup24
- IPsec:AES256、SHA256、PFS 无、SA 生存期 14400 秒和 102400000KB
$ipsecpolicy6 = New-AzIpsecPolicy -IkeEncryption AES256 -IkeIntegrity SHA384 -DhGroup DHGroup24 -IpsecEncryption AES256 -IpsecIntegrity SHA256 -PfsGroup None -SALifeTimeSeconds 14400 -SADataSizeKilobytes 102400000
如果将 GCMAES 用于 IPsec,必须为 IPsec 加密和完整性使用相同的 GCMAES 算法和密钥长度。 对于以上示例,使用 GCMAES256 时的对应参数会是“-IpsecEncryption GCMAES256 -IpsecIntegrity GCMAES256”。
2.创建采用 IPsec/IKE 策略的 S2S VPN 连接
创建 S2S VPN 连接并应用之前创建的 IPsec/IKE 策略。
$vnet1gw = Get-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1
$lng6 = Get-AzLocalNetworkGateway -Name $LNGName6 -ResourceGroupName $RG1
New-AzVirtualNetworkGatewayConnection -Name $Connection16 -ResourceGroupName $RG1 -VirtualNetworkGateway1 $vnet1gw -LocalNetworkGateway2 $lng6 -Location $Location1 -ConnectionType IPsec -IpsecPolicies $ipsecpolicy6 -SharedKey 'AzureA1b2C3'
可选择将“-UsePolicyBasedTrafficSelectors $True”添加到 create connection cmdlet 中,使 Azure VPN 网关能够连接到基于策略的本地 VPN 设备。
重要
对连接指定 IPsec/IKE 策略后,Azure VPN 网关将仅发送或接收对特定连接采用指定的加密算法和密钥强度的 IPsec/IKE 提议。 确保连接的本地 VPN 设备使用或接受确切策略组合,否则无法建立 S2S VPN 隧道。
创建采用 IPsec/IKE 策略的 VNet 到 VNet 的连接
创建采用 IPsec/IKE 策略的 VNet 到 VNet 的连接的步骤与创建 S2S VPN 连接的类似。 下面的示例脚本将创建如图所示的连接:
请参阅创建 VNet 到 VNet 的连接,详细了解创建 VNet 到 VNet 的连接的步骤。
步骤 1:创建第二个虚拟网络和 VPN 网关
1.声明变量
$RG2 = "TestRG2"
$Location2 = "China North"
$VNetName2 = "TestVNet2"
$FESubName2 = "FrontEnd"
$BESubName2 = "Backend"
$GWSubName2 = "GatewaySubnet"
$VNetPrefix21 = "10.21.0.0/16"
$VNetPrefix22 = "10.22.0.0/16"
$FESubPrefix2 = "10.21.0.0/24"
$BESubPrefix2 = "10.22.0.0/24"
$GWSubPrefix2 = "10.22.255.0/27"
$DNS2 = "8.8.8.8"
$GWName2 = "VNet2GW"
$GW2IPName1 = "VNet2GWIP1"
$GW2IPconf1 = "gw2ipconf1"
$Connection21 = "VNet2toVNet1"
$Connection12 = "VNet1toVNet2"
2. 创建第二虚拟网络和 VPN 网关
New-AzResourceGroup -Name $RG2 -Location $Location2
$fesub2 = New-AzVirtualNetworkSubnetConfig -Name $FESubName2 -AddressPrefix $FESubPrefix2
$besub2 = New-AzVirtualNetworkSubnetConfig -Name $BESubName2 -AddressPrefix $BESubPrefix2
$gwsub2 = New-AzVirtualNetworkSubnetConfig -Name $GWSubName2 -AddressPrefix $GWSubPrefix2
New-AzVirtualNetwork -Name $VNetName2 -ResourceGroupName $RG2 -Location $Location2 -AddressPrefix $VNetPrefix21,$VNetPrefix22 -Subnet $fesub2,$besub2,$gwsub2
$gw2pip1 = New-AzPublicIpAddress -Name $GW2IPName1 -ResourceGroupName $RG2 -Location $Location2 -AllocationMethod Dynamic
$vnet2 = Get-AzVirtualNetwork -Name $VNetName2 -ResourceGroupName $RG2
$subnet2 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet2
$gw2ipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GW2IPconf1 -Subnet $subnet2 -PublicIpAddress $gw2pip1
New-AzVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG2 -Location $Location2 -IpConfigurations $gw2ipconf1 -GatewayType Vpn -VpnType RouteBased -VpnGatewayGeneration Generation2 -GatewaySku VpnGw2
创建 VPN 网关可能需要花费大约 45 分钟或更长时间。
步骤 2:创建采用 IPsec/IKE 策略的 VNet 到 VNet 连接
使用与创建 S2S VPN 连接类似的方法,创建 IPsec/IKE 策略,然后将其应用于新连接。
$GWName1 = "VNet1GW"
$GWName2 = "VNet2GW"
$RG1 = "TestRG1"
$RG2 = "TestRG2"
$Location1 = "China North"
$Location2 = "China North"
$Connection21 = "VNet2toVNet1"
$Connection12 = "VNet1toVNet2"
1. 创建 IPsec/IKE 策略
下方示例脚本使用以下算法和参数创建其他 IPsec/IKE 策略:
- IKEv2:AES128、SHA1、DHGroup14
- IPsec:GCMAES128、GCMAES128、PFS24、SA 有效期 14400 秒和 102400000KB
$ipsecpolicy2 = New-AzIpsecPolicy -IkeEncryption AES128 -IkeIntegrity SHA1 -DhGroup DHGroup14 -IpsecEncryption GCMAES128 -IpsecIntegrity GCMAES128 -PfsGroup PFS24 -SALifeTimeSeconds 14400 -SADataSizeKilobytes 102400000
2.创建采用 IPsec/IKE 策略的 VNet 到 VNet 的连接
创建 VNet 到 VNet 的连接并应用创建的 IPsec/IKE 策略。 在此示例中,这两个网关位于同一订阅中。 因此,可在同一 PowerShell 会话中创建并配置采用相同 IPsec/IKE 策略的两个连接。
$vnet1gw = Get-AzVirtualNetworkGateway -Name $GWName1 -ResourceGroupName $RG1
$vnet2gw = Get-AzVirtualNetworkGateway -Name $GWName2 -ResourceGroupName $RG2
New-AzVirtualNetworkGatewayConnection -Name $Connection12 -ResourceGroupName $RG1 -VirtualNetworkGateway1 $vnet1gw -VirtualNetworkGateway2 $vnet2gw -Location $Location1 -ConnectionType Vnet2Vnet -IpsecPolicies $ipsecpolicy2 -SharedKey 'AzureA1b2C3'
New-AzVirtualNetworkGatewayConnection -Name $Connection21 -ResourceGroupName $RG2 -VirtualNetworkGateway1 $vnet2gw -VirtualNetworkGateway2 $vnet1gw -Location $Location2 -ConnectionType Vnet2Vnet -IpsecPolicies $ipsecpolicy2 -SharedKey 'AzureA1b2C3'
重要
对连接指定 IPsec/IKE 策略后,Azure VPN 网关将仅发送或接收对特定连接采用指定的加密算法和密钥强度的 IPsec/IKE 提议。 确保两个连接的 IPsec 策略相同,否则无法建立 VNet 到 VNet 的连接。
完成这些步骤后,将在几分钟内建立连接,你将拥有如开头所示的以下网络拓扑:
更新连接的 IPsec/IKE 策略
最后一部分介绍如何管理现有 S2S 或 VNet 到 VNet 的连接的 IPsec/IKE 策略。 以下练习将逐步介绍如何对连接执行以下操作:
- 显示连接的 IPsec/IKE 策略
- 添加 IPsec/IKE 策略到连接或更新策略
- 删除连接的 IPsec/IKE 策略
同样的步骤适用于 S2S 和 VNet 到 VNet 的连接。
重要
IPsec/IKE 策略仅受基于路由的标准 VPN 网关和高性能 VPN 网关支持 。 它不适用于基本网关 SKU 或基于策略的 VPN 网关。
1. 显示连接的 IPsec/IKE 策略
以下示例演示如何对连接配置 IPsec/IKE 策略。 该脚本也源自上面的练习。
$RG1 = "TestRG1"
$Connection16 = "VNet1toSite6"
$connection6 = Get-AzVirtualNetworkGatewayConnection -Name $Connection16 -ResourceGroupName $RG1
$connection6.IpsecPolicies
最后一个命令列出了对连接配置的最新 IPsec/IKE 策略(如果存在)。 下面是连接的示例输出:
SALifeTimeSeconds : 14400
SADataSizeKilobytes : 102400000
IpsecEncryption : AES256
IpsecIntegrity : SHA256
IkeEncryption : AES256
IkeIntegrity : SHA384
DhGroup : DHGroup24
PfsGroup : PFS24
如果没有配置的 IPsec/IKE 策略,则命令 (PS> $connection6.IpsecPolicies) 返回的值为空。 这并不意味着未对连接配置 IPsec/IKE,而是表示没有自定义 IPsec/IKE 策略。 实际连接使用本地 VPN 设备和 Azure VPN 网关之间协商的默认策略。
2.为连接添加或更新 IPsec/IKE 策略
对连接添加新策略或更新现有策略的步骤相同,即:创建新策略,然后将新策略应用于连接。
$RG1 = "TestRG1"
$Connection16 = "VNet1toSite6"
$connection6 = Get-AzVirtualNetworkGatewayConnection -Name $Connection16 -ResourceGroupName $RG1
$newpolicy6 = New-AzIpsecPolicy -IkeEncryption AES128 -IkeIntegrity SHA1 -DhGroup DHGroup14 -IpsecEncryption AES256 -IpsecIntegrity SHA256 -PfsGroup None -SALifeTimeSeconds 14400 -SADataSizeKilobytes 102400000
Set-AzVirtualNetworkGatewayConnection -VirtualNetworkGatewayConnection $connection6 -IpsecPolicies $newpolicy6
连接到基于策略的本地 VPN 设备时,若要启用“UsePolicyBasedTrafficSelectors”,请将“-UsePolicyBaseTrafficSelectors”参数添加到 cmdlet,或将其设置为 $False,禁用该选项:
Set-AzVirtualNetworkGatewayConnection -VirtualNetworkGatewayConnection $connection6 -IpsecPolicies $newpolicy6 -UsePolicyBasedTrafficSelectors $True
与“UsePolicyBasedTrafficSelectors”类似,可以在要应用的 IPsec 策略之外执行 DPD 超时配置:
Set-AzVirtualNetworkGatewayConnection -VirtualNetworkGatewayConnection $connection6 -IpsecPolicies $newpolicy6 -DpdTimeoutInSeconds 30
“基于策略的流量选择器”和“DPD 超时”选项之一/两者均可以使用“默认”策略指定,无需使用自定义 IPsec/IKE 策略(根据需要)。
Set-AzVirtualNetworkGatewayConnection -VirtualNetworkGatewayConnection $connection6 -UsePolicyBasedTrafficSelectors $True -DpdTimeoutInSeconds 30
可再次获取连接,检查策略是否更新。 若要检查更新策略的连接,请运行以下命令。
$connection6 = Get-AzVirtualNetworkGatewayConnection -Name $Connection16 -ResourceGroupName $RG1
$connection6.IpsecPolicies
示例输出:
SALifeTimeSeconds : 14400
SADataSizeKilobytes : 102400000
IpsecEncryption : AES256
IpsecIntegrity : SHA256
IkeEncryption : AES128
IkeIntegrity : SHA1
DhGroup : DHGroup14
PfsGroup : None
3.删除连接的 IPsec/IKE 策略
从连接中删除自定义策略后,Azure VPN 网关会还原为默认的 IPsec/IKE 提议列表,并再次与本地 VPN 设备重新协商。
$RG1 = "TestRG1"
$Connection16 = "VNet1toSite6"
$connection6 = Get-AzVirtualNetworkGatewayConnection -Name $Connection16 -ResourceGroupName $RG1
$currentpolicy = $connection6.IpsecPolicies[0]
$connection6.IpsecPolicies.Remove($currentpolicy)
Set-AzVirtualNetworkGatewayConnection -VirtualNetworkGatewayConnection $connection6
可使用相同脚本来检查是否已删除连接的策略。
IPsec/IKE 策略常见问题解答
若要查看常见问题,请转到 VPN 网关常见问题解答的“IPsec/IKE 策略”部分。
后续步骤
有关基于策略的流量选择器的详细信息,请参阅连接多个基于策略的本地 VPN 设备。