将 IP 地址从定义的池分配给 P2S VPN 用户 - Azure PowerShell(预览版)

通过创建策略组(用户组),可以根据用户的身份或身份验证凭据,将连接到点对站点(P2S)VPN 网关的用户分配到特定地址池中的 IP 地址。 本文介绍如何使用Azure PowerShell配置策略组、组成员和设置组的优先级。 有关使用策略组和组成员进行 P2S 连接的详细信息,包括注意事项和限制,请参阅 “关于用户组”。

重要

此功能目前处于预览状态。 有关适用于 Beta 版、预览版或尚未正式发布的 Azure 功能的法律条款,请参阅 Azure 预览版补充使用条款

先决条件

本文假定你具有 VPN 网关 P2S 配置。 如果尚未设置 P2S VPN 网关,请参阅以下文章:

Workflow

本文使用以下工作流来帮助为 P2S VPN 网关连接设置用户组和 IP 地址池。

  1. 考虑配置要求。
  2. 选择身份验证机制。
  3. 创建用户组。
  4. 配置网关设置

考虑配置要求

本部分列出了用户组和 IP 地址池的配置要求和限制。

  • 单个 P2S VPN 网关可以引用的最大组数为 90。 分配给网关的组中,用于标识连接用户所属组的最大策略/组成员数为 390。 但是,如果一个组被分配到同一网关上的多个连接配置,此组及其成员会被重复计算至限额中。 例如,如果有一个策略组包含 10 个成员,该组分配给网关上的三个 VPN 连接配置。 此配置将计为 30 个总成员的三个组,而不是一个包含 10 个成员的组。 连接到网关的并发用户总数受网关缩放单元的限制,以及分配给每个用户组的 IP 地址数,而不是与网关关联的策略/组成员数。

  • 创建组作为 VPN 服务器配置的一部分后,无法修改组的名称和默认设置。

  • 组名称应不同。

  • 在具有较高数值优先级的组之前,将处理具有较低数值优先级的组。 如果连接用户是多个组的成员,网关会将其视为具有较低数值优先级的组的成员,以便分配 IP 地址。

  • 无法删除现有点到站点 VPN 网关使用的组。

  • 可以通过单击对应于该组的向上箭头按钮对组的优先级重新排序。

  • 地址池不能与其他连接配置中使用的地址池重叠(相同或不同的网关)。
  • 地址池也不能与虚拟网络地址空间、虚拟中心地址空间或本地地址重叠。
  • 地址池的大小不能小于 /24。 例如,不能分配 /25 或 /26 的范围。

选择身份验证机制

以下部分列出了可在创建用户组时使用的可用身份验证机制。

Microsoft Entra 组

若要创建和管理Microsoft Entra 组,请参阅 “管理Microsoft Entra 组和组成员身份

  • 需要将 Microsoft Entra 用户组 对象 ID (而不是组名称)指定为点到站点配置的一部分。

    • 对于此特定情况,我们将使用:

      • 工程组为 {ObjectId1}
      • 财务组作为 {ObjectId2}

      Microsoft Entra ID 组和对象 ID 图示

  • Microsoft Entra 用户可以分配为多个 Active Directory 组的一部分,VPN 网关将用户视为 VPN 用户/策略的一部分。 如果用户属于多个组,则在点到站点连接中选择具有最低数值优先级的组。

RADIUS - NPS 供应商特定的属性

有关网络策略服务器(NPS)供应商特定属性的配置信息,请参阅 RADIUS - 为供应商特定的属性配置 NPS

证书

若要生成自签名证书,请参阅 使用 PowerShell 为点到站点生成和导出证书。 若要生成具有特定公用名的证书,请运行 PowerShell 命令时,将 xx@domain.com 参数更改为相应的值(例如New-SelfSignedCertificate)。 例如,可以使用以下 主题生成证书:

数字证书字段 价值 Description
主题 CN= cert@marketing.contoso.com 营销部门的数字证书
主题 CN= cert@sale.contoso.com 销售部门的数字证书

具有数字证书身份验证的多个地址池功能适用于基于 “使用者” 字段的特定用户组。 选择条件不适用于主题备用名称(SAN)证书。

如果要在其证书中指定 SAN,则必须与主题相同,以便多池功能能够正常工作。 主题与 SAN 之间的差异将导致问题。

创建用户组

1.声明变量

$rg           = "TestRG2"
$location     = "ChinaNorth3"
$VNetName     = "TestVNet"
$AppSubName   = "AppSubnet"
$GWSubName    = "GatewaySubnet"
$VNetPrefix   = "10.0.0.0/24"
$AppSubPrefix = "10.0.0.0/26"
$GWSubPrefix  = "10.0.0.192/26"
$GWName       = "gw"
$GWIPName     = "gwIP1"
$GWIPconf     = "gwipconf1"

2.创建虚拟网络和 VPN 网关

打开 PowerShell 控制台并连接到帐户。 有关详细信息,请参阅 将 Windows PowerShell 与资源管理器配合使用。 使用以下示例帮助你连接:

Connect-AzAccount
Select-AzSubscription -SubscriptionName <YourSubscriptionName>
New-AzResourceGroup -Name $rg -Location $location

$appsub = New-AzVirtualNetworkSubnetConfig -Name $AppSubName -AddressPrefix $AppSubPrefix
$gwsub = New-AzVirtualNetworkSubnetConfig -Name $GWSubName -AddressPrefix $GWSubPrefix

New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $RG -Location $Location -AddressPrefix $VNetPrefix -Subnet $appsub,$gwsub

$gwpip    = New-AzPublicIpAddress -Name $GW2IPName1 -ResourceGroupName $RG -Location $Location -AllocationMethod Static `
               -Sku Standard -Tier Regional -Zone 1, 2, 3
$vnet     = Get-AzVirtualNetwork -Name $VNetName -ResourceGroupName $RG
$subnet   = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet
$gwipconf = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconf1 -Subnet $subnet -PublicIpAddress $gwpip

New-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG -Location $Location `
        -IpConfigurations $gwipconf `
        -GatewayType Vpn `
        -VpnType RouteBased `            
        -VpnGatewayGeneration Generation2 `
        -GatewaySku VpnGw2AZ

创建 VPN 网关可能需要大约 45 分钟或更多时间。

3.验证是否具有正确的 VPN 网关

$gw = Get-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG

4.创建用户组

在此方案中,我们考虑四个用户组的情况:具有数字证书身份验证的两个用户组和两个具有Microsoft Entra ID 身份验证的用户组:

  • 具有公用名的两组客户端证书。

    • yourServiceName@marketing.contoso.com
    • yourServiceName@sale.contoso.com
  • 在 Microsoft Entra ID 中创建了两个组(将 ObjectId1/ObjectId2 替换为您的对象 ID 值)。

    • 工程组 {ObjectId1}
    • 财务 {ObjectId2}

5.将 P2S 配置添加到 VPN 网关

以下 cmdlet 配置将 VPN 网关设置为使用客户端地址池 VpnClientAddressPool 和身份验证选项:

  • 基于证书的身份验证: 证书
  • Microsoft Entra ID: AAD

有关 P2S Microsoft Entra ID 身份验证值的详细信息,请参阅 配置 P2S VPN 网关以Microsoft Entra ID 身份验证

以 .cer 格式导出根证书的公共数据,收集数据并在变量中分配根证书的公共数据$rootCert:

$rootCert = 'MIIC5zCCAc+gAwIBAgIQH0n3xp1vV7FBfqhwRvJOljA...............'

注释

收集根证书(.cer 文件)公共数据时,分配给变量 $rootCer 的值不应包括头部和尾部。

接下来,设置虚拟网络网关。 在以下命令中,替换以下值:

  • {TenantID} 对应的 Microsoft Entra 租户 ID(不含大括号)。
  • AadAudienceID 的值对应于 Microsoft 注册的 Azure VPN 客户端应用 ID。 还可以在此字段中使用 自定义受众
  • x.x.0.0/24 地址池,用于连接不属于多地址池配置的 VPN 客户端。
$gw = Set-AzVirtualNetworkGateway -VirtualNetworkGateway $gw1 `
-VpnAuthenticationType Certificate, AAD -VpnClientAddressPool x.x.0.0/24 `
-VpnClientRootCertificates $rootCert -VpnClientProtocol IkeV2, OpenVPN `
-AadTenantUri 'https://login.chinacloudapi.cn/{TenantID}' `
-AadIssuerUri 'https://sts.chinacloudapi.cn/{TenantID}/' `
-AadAudienceId 'c632b3df-fb67-4d84-bdcf-b95ad541b5c8'

6. 创建策略组成员

为四个组中的每个组配置一个成员:

  • member1 和 member2 基于数字证书身份验证(身份验证类型: CertificateGroupID)。

  • member3 和 member4 基于 Microsoft Entra ID 身份验证(身份验证类型:AADGroupID

    • {ObjectId1} 和 {ObjectId2} 是表示Microsoft Entra ID 租户中两个不同的组 ID 的值。
成员名称 身份验证类型 属性值
成员1 证书组ID marketing.contoso.com
成员2 证书组ID sale.contoso.com
member3 AADGroupID {ObjectId1}
member4 AADGroupID {ObjectId2}
$member1 = New-AzVirtualNetworkGatewayPolicyGroupMember -Name "member1" `
-AttributeType "CertificateGroupId" -AttributeValue "marketing.contoso.com"

$member2 = New-AzVirtualNetworkGatewayPolicyGroupMember -Name "member2" `
-AttributeType "CertificateGroupId" -AttributeValue "sale.contoso.com"

$member3 = New-AzVirtualNetworkGatewayPolicyGroupMember -Name "member3" `
-AttributeType "AADGroupId" -AttributeValue "{ObjectId1}"

$member4 = New-AzVirtualNetworkGatewayPolicyGroupMember -Name "member4" `
-AttributeType "AADGroupId" -AttributeValue "{ObjectId2}"

注释

我们使用大括号 {} 来指示占位符,例如 {ObjectId1}。 将 {ObjectId1} 替换为实际值,并且不包括最终值中的大括号。

7. 创建虚拟网络网关策略组

该配置创建三个网关策略组,这些策略组使用数字证书在通用名称(CN)字段中指定以下内容,并通过 Microsoft Entra ID 中的对象 ID 来授权连接。

  • policyGroup1:marketing.contoso.com、$member 1
  • policyGroup2:sale.contoso.com、$member 2
  • policyGroup3:{ObjectId1},也称为$member 3
  • policyGroup4:{ObjectId2},也称为$member 4

按表中所述创建三个网关策略组:

策略组名称 默认策略 Priority 策略成员对象
policyGroup1 0 成员1
policyGroup2 10 成员2
policyGroup3 20 member3
policyGroup4 30 member4
$policyGroup1 = New-AzVirtualNetworkGatewayPolicyGroup -Name "policyGroup1" `
     -Priority 0 -DefaultPolicyGroup -PolicyMember $member1 

$policyGroup2 = New-AzVirtualNetworkGatewayPolicyGroup -Name "policyGroup2" `
     -Priority 10 -PolicyMember $member2 

$policyGroup3 = New-AzVirtualNetworkGatewayPolicyGroup -Name "policyGroup3" `
    -Priority 20 -PolicyMember $member3 

$policyGroup4 = New-AzVirtualNetworkGatewayPolicyGroup -Name "policyGroup4" `
    -Priority 30 -PolicyMember $member4 

8. 创建 VPN 客户端连接配置

VPN 配置定义了四个不同的地址池,每个池都链接到特定的 policyGroup。

VPN 配置名称 地址池 PolicyGroup
config1 x.x.1.0/24 policyGroup 1:marketing.contoso.com
config2 x.x.2.0/24 PolicyGroup 2:sale.contoso.com
config3 x.x.3.0/24 PolicyGroup 3 :工程 {ObjectId1}
config4 x.x.4.0/24 PolicyGroup4:Finance {ObjectId2}
$vngconnectionConfig1 = New-AzVpnClientConnectionConfiguration -Name "config1" `
-VirtualNetworkGatewayPolicyGroup $policyGroup1 `
-VpnClientAddressPool "x.x.1.0/24" 

$vngconnectionConfig2 = New-AzVpnClientConnectionConfiguration -Name "config2" `
-VirtualNetworkGatewayPolicyGroup $policyGroup2 `
-VpnClientAddressPool "x.x.2.0/24" 

$vngconnectionConfig3 = New-AzVpnClientConnectionConfiguration -Name "config3" `
-VirtualNetworkGatewayPolicyGroup $policyGroup3 `
-VpnClientAddressPool "x.x.3.0/24"

$vngconnectionConfig4 = New-AzVpnClientConnectionConfiguration -Name "config4" `
-VirtualNetworkGatewayPolicyGroup $policyGroup4 `
-VpnClientAddressPool "x.x.4.0/24" 

9. 将配置应用到 VPN 网关

$gw = Set-AzVirtualNetworkGateway -VirtualNetworkGateway $gw `
      -VirtualNetworkGatewayPolicyGroup `
$policyGroup1, $policyGroup2, $policyGroup3, $policyGroup4 `
     -ClientConnectionConfiguration $vngconnectionConfig1, $vngconnectionConfig2, `
      $vngconnectionConfig3, $vngconnectionConfig4 

在多个地址池设置结束时,可以通过以下逻辑结构来表示配置:

策略组名称 默认策略 Priority 策略成员 身份验证类型 组配置值 VPN 客户端地址池
policyGroup1 0 成员1 证书组ID marketing.contoso.com x.x.1.0/24
policyGroup2 10 成员2 证书组ID sale.contoso.com x.x.2.0/24
policyGroup3 20 member3 AADGroupID {ObjectId1} x.x.3.0/24
policyGroup4 30 member4 AADGroupID {ObjectId2} x.x.4.0/24

如果出现问题

以下是为 P2S 连接配置策略组和 IP 地址池时可能会遇到的一些常见问题,以及帮助你解决这些问题的故障排除步骤。

  • 验证数据包是否具有正确的属性? Wireshark 或其他数据包捕获可以在 NPS 模式下运行,并使用共享密钥解密数据包。 可以验证数据包是否正从 RADIUS 服务器发送到配置了正确的 RADIUS VSA 的点到站点 VPN 网关。

  • 是否为用户分配了错误的 IP? 设置并检查 NPS 事件日志记录以进行身份验证,无论用户是否匹配策略。

  • 遇到地址池问题? 每个地址池都在网关上指定。 地址池拆分为两个地址池,并分配给点到站点 VPN 网关对中的每个主动-主动实例。 这些拆分地址应显示在有效的路由表中。 例如,如果指定 10.0.0.0/24,则应在有效路由表中看到两个“/25”路由。 如果不是这种情况,请尝试更改网关上定义的地址池。

  • P2S 客户端无法接收路由? 确保所有点到站点 VPN 连接配置都关联到 defaultRouteTable,并传播到同一组路由表。 如果使用门户,则应自动配置此项,但如果使用的是 REST、PowerShell 或 CLI,请确保正确设置所有传播和关联。

  • 您无法使用 Azure VPN 客户端启用多池吗? 如果使用 Azure VPN 客户端,请确保安装在用户设备上的 Azure VPN 客户端是最新版本。 需要再次下载客户端才能启用此功能。

  • 所有用户都被分配到默认组了吗? 如果使用Microsoft Entra身份验证,请确保服务器配置中的租户 URL 输入(https://login.chinacloudapi.cn/<tenant ID>)不会以 \ 结尾。 如果 URL 的输入以\结尾,网关将无法正确处理 Microsoft Entra 用户组,并且所有用户都将被分配到默认组。 若要修正,请修改服务器配置以删除尾随 \ 并修改网关上配置的地址池,以将更改应用到网关。 这是一个已知问题。

  • 尝试邀请外部用户使用 Multipool 功能? 如果使用Microsoft Entra身份验证,并且计划邀请外部用户(不属于 VPN 网关上配置的Microsoft Entra域的用户)连接到 VPN 网关,请确保外部用户的用户类型为 Member 而不是 Guest。 此外,请确保用户的“名称”设置为用户的电子邮件地址。 如果未正确设置连接用户的用户类型和名称,或者无法将外部成员设置为 Microsoft Entra 域的“成员”,则连接用户将分配到默认组,并从默认 IP 地址池分配 IP。

后续步骤