Tutorial: implantar VPN Always On – Configurar o perfil da VPN Always On para clientes Windows 10+

Aplica-se a: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10, Windows 11

Nesta última parte do tutorial, você aprenderá a usar um script de configuração do PowerShell ProfileXML para definir configurações de VPN Always On e criar um túnel de usuário para conexões de cliente.

Para obter informações mais detalhadas sobre as opções de configuração de VPN Always On para o provedor de serviços de configuração (CSP), consulte Provedor de serviços de configuração VPNv2.

Pré-requisitos

Tutorial completo: implantar a VPN Always On – Configurar modelos de Autoridade de Certificação.

Criar um perfil de cliente na VPN Always On

Nesta seção, criaremos uma conexão de cliente VPN para verificar se o cliente de teste pode estabelecer uma conexão de VPN bem-sucedida. Isso também nos permitirá criar as configurações de EAP para exportação na próxima seção.

Para obter mais informações sobre configurações de EAP, consulte Configuração de EAP.

  1. Entre no computador cliente VPN ingressado no domínio como o usuário de VPN criado 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. Em Provedor de VPN, selecione Windows (interno).

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

  6. Em Nome ou endereço do servidor, insira o FQDN externo do servidor VPN (por exemplo, vpn.contoso.com).

  7. Em 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 VPN da Contoso e selecione Propriedades.

  12. Na guia Segurança, em 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 de Protected EAP e conclua as seguintes etapas:

    1. Para Conectar a esses servidores, insira o nome do servidor NPS.

    2. Em 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 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 as propriedades do Cartão Inteligente ou outro certificado.

      6. Selecione OK para fechar Propriedades de EAP protegido.

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

  15. Feche a janela Conexões de Rede.

  16. Em Configurações, selecione VPN da Contoso e, em seguida, selecione Conectar.

Importante

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 etapa. Você deve se conectar pelo menos uma vez antes de continuar; caso contrário, o perfil não conterá todas as informações necessárias para se conectar à VPN.

Configurar o seu cliente VPN para Windows

Nesta seção, você configurará manualmente o cliente VPN do Windows usando um script do PowerShell.

  1. Entre com seu Usuário de VPN no computador cliente de VPN.

  2. Abra o ISE (ambiente de script integrado) do Windows PowerShell como Administrador.

  3. Copie e cole o seguinte script:

    
    # 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. Defina o valor para as seguintes variáveis na parte superior do script: $Domain, $TemplateName, $ProfileName, $Servers, $DnsSuffix, $DomainName, e $DNSServers. Para obter informações mais detalhadas sobre como definir essas variáveis, consulte: CSP VPNv2.

  5. Pressione ENTER para executar o script.

  6. Verifique se o script foi bem-sucedido executando o seguinte comando no ISE do Windows PowerShell:

        Get-CimInstance -Namespace root\cimv2\mdm\dmmap -ClassName MDM_VPNv2_01
    
  7. Você deverá ver a seguinte saída (o valor ProfileXML foi truncado para facilitar a leitura):

    
    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          : 
    `
    

Agora você configurou o túnel do usuário para VPN Always On. Se você quiser saber como configurar um túnel de dispositivo, consulte Configurar túneis de dispositivo VPN no cliente Windows.

Próximas etapas