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


Руководство по созданию VPN-подключения AlwaysOn на клиентских устройствах Windows

В этом руководстве показано, как создать VPN-подключение AlwaysOn на клиентских устройствах Windows. Данный материал продолжает серию по развертыванию Always On VPN в образце среды развертывания. Ранее в серии вы развернули пример инфраструктуры и настроили шаблоны центра сертификации.

Изучив это руководство, вы:

  • Создайте и проверьте vpn-подключение вручную, которое используется в качестве шаблона для VPN-подключения AlwaysOn.
  • Преобразуйте vpn-подключение вручную в VPN-подключение AlwaysOn с помощью PowerShell.

VPN-подключения AlwaysOn можно настроить в виде туннеля устройства или пользовательского туннеля:

  • Туннель устройств: подключается к указанным VPN-серверам перед входом пользователей на устройство. Туннель устройства используется для сценариев подключения до входа и управления устройствами.

  • Туннель пользователя: подключается только после входа пользователя на устройство. Пользовательский туннель позволяет пользователям получать доступ к ресурсам организации через VPN-серверы.

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

Vpn-подключения AlwaysOn, будь то туннель устройства или пользовательский туннель, настраиваются с помощью узла ProfileXML в поставщике служб конфигурации VPNv2 (CSP). В этом руководстве показано, как настроить туннель пользователя на одном клиентском устройстве Windows. Эти действия можно использовать для небольших сред или для тестирования.

Для больших сред следует использовать Microsoft Intune или Microsoft Configuration Manager для развертывания профиля AlwaysOn VPN на клиентских устройствах Windows. Дополнительные сведения см. в статье "Развертывание профиля VPN AlwaysOn на клиентах Windows с помощью Microsoft Intune " и развертывание профиля AlwaysOn VPN на клиентах Windows с помощью Microsoft Configuration Manager.

Требования

Для выполнения шагов из этого руководства требуется следующее:

Создание и проверка vpn-подключения пользователя вручную

Сначала необходимо создать ПОДКЛЮЧЕНИЕ VPN-клиента, чтобы убедиться, что тестовый клиент VPN может установить успешное VPN-подключение. Это подключение также позволяет создавать параметры расширяемого протокола проверки подлинности (EAP), которые будут использоваться для VPN-подключения AlwaysOn. Дополнительные сведения о параметрах EAP см. в разделе "Конфигурация EAP".

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

  2. В меню введите VPN, чтобы выбрать параметры VPN. Нажмите клавишу ВВОД.

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

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

  5. В поле "Имя подключения" введите VPN Contoso.

  6. Для имени или адреса сервера введите внешнее полное доменное имя (FQDN) вашего 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. Для уведомлений перед подключением выберите Не запрашивать у пользователя авторизацию новых серверов или доверенных УЦ.

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

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

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

      2. Для подключения к этим серверам введите имя узла сервера NPS.

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

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

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

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

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

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

  16. В разделе "Параметры" выберите CONTOSO VPN и нажмите кнопку "Подключить". VPN-подключение должно быть успешно установлено. Чтобы проверить подключение, проверьте окно сетевых подключений . VPN-подключение Contoso должно отображаться как подключено. Протестируйте подключение к ресурсу на другой стороне VPN-туннеля, например общую папку или веб-сервер.

  17. Убедившись, что VPN-подключение выполнено успешно, отключитесь от VPN-подключения.

Внимание

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

Преобразование vpn-подключения вручную в VPN-подключение AlwaysOn

Затем вы преобразуете ручное VPN-подключение в VPN-подключение AlwaysOn с помощью скрипта PowerShell.

  1. Под тем же пользователем на клиентском устройстве Windows, откройте Windows PowerShell ISE с правами администратора.

  2. Скопируйте и вставьте следующий скрипт PowerShell в Windows PowerShell ISE окно редактора, затем убедитесь, что вы изменили восемь значений переменных в соответствии с вашими нуждами.

    Разверните этот раздел, чтобы отобразить скрипт PowerShell.
    # Set the variables for the VPN profile.
    $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 = "Always On VPN connection created successfully."
    Write-Host "$message"
    
  3. Запустите скрипт.

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

    Get-CimInstance -Namespace root\cimv2\mdm\dmmap -ClassName MDM_VPNv2_01
    

    Выходные данные должны быть похожи на следующий пример ( 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          : 
    
  5. Vpn-подключение AlwaysOn должно быть создано и установлено успешно. Чтобы проверить подключение, проверьте окно сетевых подключений . VPN-подключение Contoso AlwaysOn должно отображаться как подключено. Протестируйте подключение к ресурсу на другой стороне VPN-туннеля, например общую папку или веб-сервер.

Теперь вы подключаетесь к VPN-серверу с помощью VPN-подключения Always On, вот некоторые дополнительные ресурсы, которые помогут вам в развертывании VPN AlwaysOn: