将定义的池中的 IP 地址分配给 P2S VPN 用户 - Azure PowerShell

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

先决条件

本文假定你具有 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。

后续步骤