使用 PowerShell 为 P2S 连接配置用户组和 IP 地址池(预览版)

点到站点 (P2S) 配置提供通过创建用户组基于特定地址池中的用户 IP 地址或身份验证凭据分配用户 IP 地址的功能。 本文可帮助你配置用户组、组成员和设置组的优先级。 有关使用用户组的详细信息,请参阅 “关于用户组”。

重要

P2S 连接的用户组和 IP 地址池目前为预览版。 有关适用于 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}
    • Finance {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

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

  • 具有相应Microsoft Entra 租户 ID 的 {TenantID}不含大括号)。
  • 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 的值。
成员名称 身份验证类型 属性值
member1 CertificateGroupId marketing.contoso.com
member2 CertificateGroupId 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}" `

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

该配置创建三个网关策略组,这些策略组负责使用数字证书在公用名(CN)字段中指定以下内容,并Microsoft指定 ObjectID 组的 Entra ID 组:

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

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

策略组名称 默认策略 Priority 策略成员对象
policyGroup1 0 member1
policyGroup2 10 member2
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 member1 CertificateGroupId marketing.contoso.com x.x.1.0/24
policyGroup2 10 member2 CertificateGroupId 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

Troubleshooting

  • 验证数据包是否具有正确的属性? 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 ID 身份验证,请确保服务器配置 (https://login.chinacloudapi.cn/<tenant ID>) 中的租户 URL 输入不会以结尾 \。 如果 URL 输入为结尾 \,则网关将无法正确处理Microsoft Entra 用户组,并且所有用户都分配到默认组。 若要修正,请修改服务器配置以删除尾随 \ 并修改网关上配置的地址池,以将更改应用到网关。 这是一个已知问题。
  • 尝试邀请外部用户使用 Multipool 功能? 如果使用 Microsoft Entra ID 身份验证,并且计划邀请外部用户(不属于 VPN 网关上配置的 Microsoft Entra 域的用户)连接到 VPN 网关,请确保外部用户的用户类型为“成员”而不是“来宾”。 此外,请确保用户的“名称”设置为用户的电子邮件地址。 如果未正确设置连接用户的用户类型和名称,或者无法将外部成员设置为 Microsoft Entra 域的“成员”,则连接用户将分配到默认组,并从默认 IP 地址池分配 IP。

后续步骤