Поделиться через


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

В этой последней части руководства вы узнаете, как использовать скрипт конфигурации 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. В поле "Имя подключения" введите 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. В разделе "Параметры" выберите CONTOSO VPN и нажмите кнопку "Подключить".

Внимание

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

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

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

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

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

  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".

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