Compartilhar via


Tutorial: Criar uma conexão VPN AlwaysOn em dispositivos cliente Windows

Este tutorial mostra como criar uma conexão VPN AlwaysOn em dispositivos cliente Windows. Ele continua a série para implantar a VPN Always On em um ambiente de exemplo. Anteriormente na série, você implantou uma infraestrutura de exemplo e configurou modelos de Autoridade de Certificação.

Neste tutorial, você:

  • Crie e teste uma conexão VPN de usuário manual usada como modelo para a conexão VPN Always On.
  • Converta a conexão VPN manual em uma conexão VPN AlwaysOn usando o PowerShell.

As conexões VPN Always On podem ser configuradas como um túnel de dispositivo ou um túnel de usuário:

  • Túnel do dispositivo: conecta-se a servidores VPN especificados antes que os usuários entrem no dispositivo. Um túnel de dispositivo é usado para cenários de conectividade de pré-logon e para fins de gerenciamento de dispositivo.

  • Túnel do usuário: conecta-se somente depois que um usuário faz logon no dispositivo. Um túnel de usuário permite que os usuários acessem recursos da organização por meio de servidores VPN.

Para obter mais informações sobre as diferenças entre o túnel do dispositivo e o túnel do usuário, consulte Configurar túneis de dispositivo VPN no cliente Windows.

As conexões VPN Always On, seja um túnel de dispositivo ou um túnel de usuário, são configuradas usando o nó ProfileXML no CSP (provedor de serviços de configuração) VPNv2. As etapas neste tutorial mostram como configurar um túnel de usuário em um único dispositivo cliente Windows. Você pode usar essas etapas para ambientes pequenos ou para fins de teste.

Para ambientes maiores, você deve usar o Microsoft Intune ou o Microsoft Configuration Manager para implantar o perfil vpn AlwaysOn em dispositivos cliente Windows. Para obter mais informações, consulte Implantar um perfil VPN AlwaysOn em clientes do Windows com o Microsoft Intune e implantar um perfil VPN AlwaysOn em clientes do Windows com o Microsoft Configuration Manager.

Prerequisites

Para concluir as etapas deste tutorial, você precisará do seguinte:

Criar e testar uma conexão VPN de usuário manual

Primeiro, você precisa criar uma conexão de cliente VPN para verificar se o cliente de teste de VPN pode estabelecer uma conexão VPN bem-sucedida. Essa conexão também permite que você crie as configurações do Protocolo de Autenticação Extensível (EAP) a serem usadas para a conexão VPN AlwaysOn. Para obter mais informações sobre as configurações de EAP, consulte a configuração do EAP.

  1. Entre no dispositivo cliente Windows ingressado no domínio como o usuário VPN que você criou anteriormente em Criar usuário de teste do Active Directory.

  2. No menu Iniciar, digite VPN para selecionar Configurações de VPN. Pressione ENTER.

  3. No painel de detalhes, selecione Adicionar uma conexão de VPN.

  4. Para o Provedor de VPN, selecione Windows (interno).

  5. Para o Nome da Conexão, insira a VPN da Contoso.

  6. Para nome ou endereço do servidor, insira o FQDN (nome de domínio totalmente qualificado) externo do servidor VPN (por exemplo, vpn.contoso.com).

  7. Para o tipo VPN, selecione IKEv2.

  8. Em Tipo de informações de entrada, selecione Certificado.

  9. Clique em Salvar.

  10. Em Configurações Relacionadas, selecione Opções do Adaptador de Alteração.

  11. Clique com o botão direito do mouse na VPN da Contoso e selecione Propriedades.

  12. Na guia Segurança , para criptografia de dados, selecione Criptografia de força máxima.

  13. Selecione Usar EAP (Extensible Authentication Protocol). Em seguida, em Usar EAP (Extensible Authentication Protocol), selecione Microsoft: PEAP (EAP protegido), criptografia habilitada.

  14. Selecione Propriedades para abrir propriedades EAP protegidas e conclua as seguintes etapas:

    1. Para conectar-se a esses servidores, insira o nome do host do servidor NPS.

    2. Para autoridades de certificação raiz confiáveis, selecione a AC que emitiu o certificado do servidor NPS (por exemplo, contoso-CA).

    3. Em Notificações antes de se conectar, selecione Não solicitar que o usuário autorize novos servidores ou ACs confiáveis.

    4. Em Selecionar método de autenticação, selecione Cartão Inteligente ou outro certificado.

    5. Selecione Configurar.

      1. Selecione Usar um certificado neste computador.

      2. Para conectar a esses servidores, insira o nome do host do servidor NPS.

      3. Em Autoridades de certificação raiz confiáveis, selecione a AC que emitiu o certificado do servidor NPS.

      4. Selecione Não solicitar ao usuário autorização para novos servidores ou autoridades de certificação confiáveis.

      5. Selecione OK para fechar o Cartão Inteligente ou outras Propriedades de Certificado.

      6. Selecione OK para fechar propriedades EAP protegidas.

    6. Selecione OK para fechar as Propriedades vpn da Contoso.

  15. Feche a janela Conexões de Rede .

  16. Em Configurações, selecione a VPN contoso e, em seguida, selecione Conectar. A conexão VPN deve ser estabelecida com êxito. Você pode verificar a conexão verificando a janela Conexões de Rede . A conexão VPN contoso deve ser exibida como Conectada. Teste se você pode se conectar a um recurso do outro lado do túnel VPN, por exemplo, um compartilhamento de arquivos ou servidor Web.

  17. Depois de verificar se a conexão VPN foi bem-sucedida, desconecte-se da conexão VPN.

Important

Verifique se a conexão de VPN do modelo com o servidor VPN foi bem-sucedida. Isso garante que as configurações de EAP estejam corretas antes de usá-las na próxima seção. Você deve se conectar pelo menos uma vez antes de continuar; caso contrário, o perfil não contém todas as informações necessárias para se conectar à VPN.

Converter a conexão VPN manual em uma conexão VPN AlwaysOn

Em seguida, você converte a conexão VPN manual em uma conexão VPN AlwaysOn usando um script do PowerShell.

  1. Como o mesmo usuário no dispositivo cliente Windows, abra Windows PowerShell ISE como administrador.

  2. Copie e cole o script do PowerShell a seguir na janela do Windows PowerShell ISE editor e, em seguida, altere os oito valores de variável para seus próprios valores.

    Expanda esta seção para mostrar o script do 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. Executar o script.

  4. Verifique se o script foi bem-sucedido executando o seguinte comando na janela do Windows PowerShell ISE editor:

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

    A saída deve ser semelhante ao exemplo a seguir (o ProfileXML valor é truncado para legibilidade):

    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. A conexão VPN AlwaysOn deve ser criada e estabelecida com êxito. Você pode verificar a conexão verificando a janela Conexões de Rede . A conexão VPN Always On da Contoso deve ser exibida como Conectada. Teste se você pode se conectar a um recurso do outro lado do túnel VPN, por exemplo, um compartilhamento de arquivos ou servidor Web.

Agora você se conecta ao servidor VPN usando a conexão VPN Always On, aqui estão alguns recursos extras para ajudá-lo com sua implantação de VPN Always On: