Partilhar via


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

Este tutorial mostra como criar uma conexão VPN Always On em dispositivos cliente Windows. Continua a série de implementação do Always On VPN num 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 que é usada como modelo para a conexão VPN Always On.
  • Converta a conexão VPN manual em uma conexão VPN Always On 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 de 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 antes do login e para fins de gerenciamento de dispositivos.

  • 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 os recursos da organização por meio de servidores VPN.

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

As conexões VPN Always On, seja como túnel de dispositivo ou túnel de utilizador, são configuradas usando o nó ProfileXML no fornecedor de serviços de configuração VPNv2 CSP. 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 Always On em dispositivos cliente Windows. Para obter mais informações, consulte Implantar um perfil VPN Always On para clientes Windows com o Microsoft Intune e Implantar um perfil VPN Always On para clientes Windows com o Microsoft Configuration Manager.

Pré-requisitos

Para concluir as etapas neste tutorial, você precisa:

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

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

  1. Entre no dispositivo cliente Windows associado ao domínio como o usuário VPN que você criou anteriormente em Criar usuário de teste do Ative 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 VPN.

  4. Para Fornecedor de VPN, selecione Windows (integrado).

  5. Em Nome da Conexão, insira Contoso VPN.

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

  7. Para Tipo de VPN, selecione IKEv2.

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

  9. Selecione Salvar.

  10. Em Configurações relacionadas, selecione Alterar opções do adaptador.

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

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

  13. Selecione Usar protocolo de autenticação extensível (EAP). Em seguida, para Usar protocolo de autenticação extensível (EAP), selecione Microsoft: EAP protegido (PEAP) (criptografia habilitada).

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

    1. Em Conectar a esses servidores, digite o nome do host do seu servidor NPS.

    2. Para Autoridades de Certificação Raiz Confiáveis, selecione a CA que emitiu o certificado do servidor NPS (por exemplo, contoso-CA).

    3. Em Notificações antes de se conectar, selecione Não pedir ao usuário para autorizar novos servidores ou CAs 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, digite o nome do host do servidor NPS.

      3. Para Autoridades de Certificação Raiz Confiáveis, selecione a CA que emitiu o certificado do servidor NPS.

      4. Selecione Não solicitar que o usuário autorize novos servidores ou autoridades de certificação confiáveis.

      5. Selecione OK para fechar o cartão inteligente ou outras propriedades do certificado.

      6. Selecione OK para fechar Propriedades EAP Protegidas.

    6. Selecione OK para fechar Propriedades de VPN da Contoso.

  15. Feche a janela de Conexões de Rede.

  16. Em Configurações, selecione Contoso VPN 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 da Contoso deve ser mostrada como Conectada. Teste que 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.

Importante

Certifique-se de que a conexão VPN do modelo com seu servidor VPN seja bem-sucedida. Isso garante que as configurações do 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 Always On

Em seguida, converta a conexão VPN manual em uma conexão VPN Always On 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 seguinte script do PowerShell na janela do editor Windows PowerShell ISE e, em seguida, certifique-se de alterar os oito valores das variáveis para os seus próprios.

    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. Executa 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 Always On 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 que você pode se conectar a um recurso do outro lado do túnel VPN, por exemplo, um compartilhamento de arquivos ou servidor Web.

Agora que 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: