Руководство по развертыванию Vpn AlwaysOn — настройка профиля VPN AlwaysOn для клиентов Windows 10+

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10, Windows 11

В этой последней части руководства вы узнаете, как использовать скрипт конфигурации ProfileXML PowerShell для настройки параметров VPN Always On и создания туннеля пользователя для клиентских подключений.

Дополнительные сведения о параметрах конфигурации Always on VPN для поставщика служб конфигурации (CSP) см. в разделе поставщик конфигурации VPNv2.

Необходимые компоненты

Полное руководство. Развертывание AlwaysOn VPN — настройка шаблонов центра сертификации.

Создание профиля VPN-клиента AlwaysOn

В этом разделе мы создадим VPN-подключение клиента, чтобы убедиться, что тестовый клиент VPN может установить успешное VPN-подключение. Это также позволит нам создать параметры EAP для экспорта в следующем разделе.

Дополнительные сведения о параметрах EAP см. в разделе "Конфигурация EAP".

  1. Войдите на компьютер клиента VPN, присоединенного к домену, в качестве пользователя VPN, созданного в тестовом пользователе Active Directory.

  2. В меню введите VPN, чтобы выбрать ПАРАМЕТРЫ VPN. Нажмите клавишу ВВОД.

  3. В области сведений выберите "Добавить VPN-подключение".

  4. Для поставщика VPN выберите Windows (встроенное).

  5. В поле Подключение ion Name введите VPN Contoso.

  6. Для имени или адреса сервера введите внешнееполное доменное имя VPN-сервера (например, vpn.contoso.com).

  7. Для типа VPN выберите IKEv2.

  8. В поле "Тип сведений о входе" выберите "Сертификат".

  9. Выберите Сохранить.

  10. В разделе "Связанные Параметры" выберите пункт "Изменить параметры адаптера".

  11. Щелкните правой кнопкой мыши VPN Contoso и выберите пункт "Свойства".

  12. На вкладке "Безопасность " для шифрования данных выберите максимальное шифрование силы.

  13. Выберите "Использовать расширяемый протокол проверки подлинности(EAP)". Затем для использования расширяемого протокола проверки подлинности (EAP) выберите Microsoft: Protected EAP (PEAP) (включено шифрование).

  14. Выберите свойства, чтобы открыть защищенные свойства EAP, и выполните следующие действия.

    1. Чтобы Подключение на этих серверах, введите имя сервера NPS.

    2. Для доверенных корневых центров сертификации выберите ЦС, выдавшего сертификат сервера NPS (например, contoso-CA).

    3. Для уведомлений перед подключением выберите <a0/>Не запрашивать у пользователя авторизацию новых серверов или доверенных ЦС.

    4. Для выбора метода проверки подлинности выберите смарт-карточку или другой сертификат.

    5. Выберите Настроить.

      1. Выберите " Использовать сертификат" на этом компьютере.

      2. Чтобы Подключение на этих серверах, введите имя сервера NPS.

      3. Для доверенных корневых центров сертификации выберите ЦС, выдавшего сертификат сервера NPS.

      4. Выберите Не запрашивать у пользователя авторизацию новых серверов или доверенных центров сертификации.

      5. Нажмите кнопку "ОК ", чтобы закрыть смарт-карту или другие свойства сертификата.

      6. Нажмите кнопку "ОК" , чтобы закрыть защищенные свойства EAP.

    6. Нажмите кнопку "ОК", чтобы закрыть свойства VPN Contoso.

  15. Закройте окно Сетевые подключения .

  16. В Параметры выберите VPN Contoso и выберите Подключение.

Внимание

Убедитесь, что vpn-подключение шаблона к VPN-серверу успешно выполнено. Это гарантирует правильность параметров EAP перед их использованием на следующем шаге. Перед продолжением необходимо подключиться по крайней мере один раз; В противном случае профиль не будет содержать все сведения, необходимые для подключения к VPN.

Настройка VPN-клиента Windows

В этом разделе описано, как вручную настроить VPN-клиент Windows с помощью скрипта PowerShell.

  1. Войдите в качестве vpn-пользователя на клиентский компьютер VPN.

  2. Откройте интегрированную среду сценариев Windows PowerShell (ISE) как Администратор istrator.

  3. Скопируйте и вставьте следующий скрипт.

    
    # Define key VPN profile parameters
    # Replace with your own values
    
    $Domain = 'corp' # Name of the domain.
    
    $TemplateName = 'Contoso VPN' # Name of the test VPN connection you created in the tutorial. 
    
    $ProfileName = 'Contoso AlwaysOn VPN' # Name of the profile we are going to create.
    
    $Servers = 'aov-vpn.contoso.com' #Public or routable IP address or DNS name for the VPN gateway.
    
    $DnsSuffix = 'corp.contoso.com' # Specifies one or more commas separated DNS suffixes. 
    
    $DomainName = '.corp.contoso.com' #Used to indicate the namespace to which the policy applies. Contains `.` prefix.
    
    $DNSServers = '10.10.0.6' #List of comma-separated DNS Server IP addresses to use for the namespace.
    
    $TrustedNetwork = 'corp.contoso.com' #Comma-separated string to identify the trusted network.
    
    
    #Get the EAP settings for the current profile called $TemplateName
    
    $Connection = Get-VpnConnection -Name $TemplateName
    
    if(!$Connection)
    {
        $Message = "Unable to get $TemplateName connection profile: $_"
        Write-Host "$Message"
        exit
    }
    
    $EAPSettings= $Connection.EapConfigXmlStream.InnerXml
    
    $ProfileNameEscaped = $ProfileName -replace ' ', '%20'
    
    # Define ProfileXML
    $ProfileXML = @("
    <VPNProfile>
      <DnsSuffix>$DnsSuffix</DnsSuffix>
      <NativeProfile>
    <Servers>$Servers</Servers>
    <NativeProtocolType>IKEv2</NativeProtocolType>
    <Authentication>
      <UserMethod>Eap</UserMethod>
      <Eap>
        <Configuration>
        $EAPSettings
        </Configuration>
      </Eap>
    </Authentication>
    <RoutingPolicyType>SplitTunnel</RoutingPolicyType>
      </NativeProfile>
    <AlwaysOn>true</AlwaysOn>
    <RememberCredentials>true</RememberCredentials>
    <TrustedNetworkDetection>$TrustedNetwork</TrustedNetworkDetection>
      <DomainNameInformation>
    <DomainName>$DomainName</DomainName>
    <DnsServers>$DNSServers</DnsServers>
    </DomainNameInformation>
    </VPNProfile>
    ")
    
    #Output the XML for possible use in Intune
    $ProfileXML | Out-File -FilePath ($env:USERPROFILE + '\desktop\VPN_Profile.xml')
    
    # Escape special characters in the profile (<,>,")
    $ProfileXML = $ProfileXML -replace '<', '&lt;'
    $ProfileXML = $ProfileXML -replace '>', '&gt;'
    $ProfileXML = $ProfileXML -replace '"', '&quot;'
    
    # Define WMI-to-CSP Bridge properties
    $nodeCSPURI = "./Vendor/MSFT/VPNv2"
    $namespaceName = "root\cimv2\mdm\dmmap"
    $className = "MDM_VPNv2_01"
    
    try
    {
    
        # Determine user SID for VPN profile.
        $WmiLoggedOnUsers = (Get-WmiObject Win32_LoggedOnUser).Antecedent
        If($WmiLoggedOnUsers.Count -gt 1) { 
            $WmiLoggedOnUsers = $WmiLoggedOnUsers -match "Domain=""$Domain"""
        }
    
        $WmiUserValid = ($WmiLoggedOnUsers | Select-Object -Unique -First 1) -match 'Domain="([^"]+)",Name="([^"]+)"'
    
        If(-not $WmiUserValid){
            Throw "Returned object is not a valid WMI string"
        }
    
    
        $UserName = "$($Matches[1])\$($Matches[2])"
    
        $ObjUser = New-Object System.Security.Principal.NTAccount($UserName)
        $Sid = $ObjUser.Translate([System.Security.Principal.SecurityIdentifier])
        $SidValue = $Sid.Value
        $Message = "User SID is $SidValue."
    
        Write-Host "$Message"
    
    }
    catch [Exception] 
    {
    
        $Message = "Unable to get user SID. $_"
        Write-Host "$Message" 
        exit
    }
    
    try 
    {
        # Define WMI session.
        $session = New-CimSession
        $options = New-Object Microsoft.Management.Infrastructure.Options.CimOperationOptions
        $options.SetCustomOption("PolicyPlatformContext_PrincipalContext_Type", "PolicyPlatform_UserContext", $false)
        $options.SetCustomOption("PolicyPlatformContext_PrincipalContext_Id", "$SidValue", $false)
    
    }
    catch {
    
        $Message = "Unable to create new session for $ProfileName profile: $_"
        Write-Host $Message
        exit
    }
    
    try
    {
        #Detect and delete previous VPN profile.
        $deleteInstances = $session.EnumerateInstances($namespaceName, $className, $options)
    
        foreach ($deleteInstance in $deleteInstances)
        {
            $InstanceId = $deleteInstance.InstanceID
            if ("$InstanceId" -eq "$ProfileNameEscaped")
            {
                $session.DeleteInstance($namespaceName, $deleteInstance, $options)
                $Message = "Removed $ProfileName profile $InstanceId" 
                Write-Host "$Message"
            }
            else 
            {
                $Message = "Ignoring existing VPN profile $InstanceId"
                Write-Host "$Message"
            }
        }
    }
    catch [Exception]
    {
        $Message = "Unable to remove existing outdated instance(s) of $ProfileName profile: $_"
        Write-Host $Message
        exit
    
    }
    
    try
    {
        # Create the VPN profile.
        $newInstance = New-Object Microsoft.Management.Infrastructure.CimInstance $className, $namespaceName
        $property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ParentID", "$nodeCSPURI", "String", "Key")
        $newInstance.CimInstanceProperties.Add($property)
        $property = [Microsoft.Management.Infrastructure.CimProperty]::Create("InstanceID", "$ProfileNameEscaped", "String", "Key")
        $newInstance.CimInstanceProperties.Add($property)
        $property = [Microsoft.Management.Infrastructure.CimProperty]::Create("ProfileXML", "$ProfileXML", "String", "Property")
        $newInstance.CimInstanceProperties.Add($property)
        $session.CreateInstance($namespaceName, $newInstance, $options)
    
        $Message = "Created $ProfileName profile."
        Write-Host "$Message"
    
    }
    catch [Exception]
    {
    
        $Message = "Unable to create $ProfileName profile: $_"
        Write-Host "$Message"
        exit
    }
    
    $Message = "Script Complete"
    Write-Host "$Message"
    
    
  4. Задайте значение для следующих переменных в верхней части скрипта: , , , , $Servers$DnsSuffix, $DomainNameи $DNSServers. $ProfileName$TemplateName$Domain Дополнительные сведения о настройке этих переменных см. в статье VPNv2 CSP.

  5. Чтобы запустить скрипт, нажмите клавишу ВВОД.

  6. Убедитесь, что сценарий выполнен успешно, выполнив следующую команду в среде сценариев Windows PowerShell:

        Get-CimInstance -Namespace root\cimv2\mdm\dmmap -ClassName MDM_VPNv2_01
    
  7. Вы должны увидеть следующие выходные данные (значение ProfileXML усечено для удобства чтения):

    
    AlwaysOn                : True
    ByPassForLocal          : 
    DeviceTunnel            : 
    DnsSuffix               : corp.contoso.com
    EdpModeId               : 
    InstanceID              : Contoso%20AlwaysOn%20VPN
    LockDown                : 
    ParentID                : ./Vendor/MSFT/VPNv2
    ProfileXML              : <VPNProfile>...</VPNProfile>
    RegisterDNS             : 
    RememberCredentials     : True
    TrustedNetworkDetection : corp.contoso.com
    PSComputerName          : 
    `
    

Теперь вы настроили туннель пользователя для AlwaysOn VPN. Если вы хотите узнать, как настроить туннель устройств, см. статью "Настройка туннелей VPN-устройств в клиенте Windows".

Следующие шаги