为 S2S VPN 和 VNet 到 VNet 配置自定义 IPsec/IKE 连接策略:PowerShell

本文分步讲解了如何使用 PowerShell 为 VPN 网关的站点到站点 VPN 连接或 VNet 到 VNet 连接配置自定义 IPsec/IKE 策略。

工作流

本文中的说明可帮助你设置和配置 IPsec/IKE 策略,如下图所示。

Diagram showing IPsec/IKE policy architecture.

  1. 创建虚拟网络和 VPN 网关。
  2. 创建用于跨界连接的本地网关,或用于 VNet 到 VNet 的连接的另一虚拟网络和网关。
  3. 使用选定的算法和参数创建 IPsec/IKE 策略。
  4. 创建采用 IPsec/IKE 策略的连接(IPsec 或 VNet2VNet)。
  5. 为现有连接添加/更新/删除 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、无
QM SA 生存期 可选:如果未指定,则使用默认值)
秒(整数;至少为 300 秒/默认为 27000 秒)
KB(整数;至少为 1024 KB/默认为 102400000 KB)
流量选择器 UsePolicyBasedTrafficSelectors**($True/$False; 可选,如果未指定,则使用默认值 $False)
DPD 超时 秒(整数:最小值为 9/最大值为 3600;默认值为 45 秒)
  • 本地 VPN 设备配置必须匹配,或者必须包含可在 Azure IPsec/IKE 策略中指定的以下算法和参数:

    • IKE 加密算法(主模式 / 阶段 1)
    • IKE 完整性算法(主模式 / 阶段 1)
    • DH 组(主模式 / 阶段 1)
    • IPsec 加密算法(快速模式 / 阶段 2)
    • IPsec 完整性算法(快速模式 / 阶段 2)
    • PFS 组(快速模式 / 阶段 2)
    • 流量选择器(如果使用了 UsePolicyBasedTrafficSelectors)
    • SA 生存期只是本地规范,不需要匹配。
  • 如果使用 GCMAES 作为 IPsec 加密算法,则必须选择相同的 GCMAES 算法和密钥长度以保证 IPsec 完整性,例如对这两者使用 GCMAES128。

  • 在“算法和密钥”表中:

    • IKE 对应于主模式或阶段 1。
    • IPsec 对应于快速模式或阶段 2。
    • DH 组指定在主模式或阶段 1 中使用的 Diffie-Hellman 组。
    • PFS 组指定在快速模式或阶段 2 中使用的 Diffie-Hellmen 组。
  • 在 Azure VPN 网关上,IKE 主模式 SA 生存期固定为 28,800 秒。

  • “UsePolicyBasedTrafficSelectors”是连接上的可选参数。 如果你在连接上将 UsePolicyBasedTrafficSelectors 设置为 $True,则它将配置 Azure VPN 网关,以连接到基于策略的本地 VPN 防火墙。 如果启用 PolicyBasedTrafficSelectors,则需确保对于本地网络(本地网关)前缀与 Azure 虚拟网络前缀的所有组合,VPN 设备都定义了与之匹配的流量选择器(而不是任意到任意)。 Azure VPN 网关将接受远程 VPN 网关建议的任何流量选择器,无论 Azure 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 设备

  • DPD 超时 - 在 Azure VPN 网关上,默认值为 45 秒。 将超时设置为较短的时长会导致 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

如需更多详细信息,请参阅 RFC3526RFC5114

创建采用 IPsec/IKE 策略的 S2S VPN 连接

本部分将逐步介绍如何创建采用 IPsec/IKE 策略的 S2S VPN 连接。 下面的步骤将创建如图所示的连接:

Diagram showing policy architecture.

请参阅创建 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 连接的类似。 下面的示例脚本将创建如图所示的连接:

Diagram shows vnet-to-vnet architecture.

请参阅创建 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 的连接。

完成这些步骤后,将在几分钟内建立连接,你将拥有如开头所示的以下网络拓扑:

Diagram shows IPsec/IKE policy.

更新连接的 IPsec/IKE 策略

最后一部分介绍如何管理现有 S2S 或 VNet 到 VNet 的连接的 IPsec/IKE 策略。 以下练习将逐步介绍如何对连接执行以下操作:

  1. 显示连接的 IPsec/IKE 策略
  2. 添加 IPsec/IKE 策略到连接或更新策略
  3. 删除连接的 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 设备