Compartir a través de


Tutorial: Creación de una conexión VPN AlwaysOn en dispositivos cliente Windows

En este tutorial se muestra cómo crear una conexión VPN AlwaysOn en dispositivos cliente Windows. Continúa la serie para implementar VPN AlwaysOn en un entorno de ejemplo. Anteriormente en la serie, implementó una infraestructura de ejemplo y configuró plantillas de entidad de certificación.

En este tutorial, usted hará lo siguiente:

  • Cree y pruebe una conexión VPN de usuario manual que se usa como plantilla para la conexión VPN AlwaysOn.
  • Convierta la conexión VPN manual a una conexión VPN AlwaysOn mediante PowerShell.

Las conexiones VPN AlwaysOn se pueden configurar como un túnel de dispositivo o un túnel de usuario:

  • Túnel de dispositivo: se conecta a los servidores VPN especificados antes de que los usuarios inicien sesión en el dispositivo. Un túnel de dispositivo se usa para escenarios de conectividad previos al inicio de sesión y fines de administración de dispositivos.

  • Túnel de usuario: solo se conecta después de que un usuario inicie sesión en el dispositivo. Un túnel de usuario permite a los usuarios acceder a los recursos de la organización a través de servidores VPN.

Para obtener más información sobre las diferencias entre el túnel de dispositivo y el túnel de usuario, consulte Configuración de túneles de dispositivo VPN en el cliente de Windows.

Las conexiones VPN AlwaysOn, ya sea un túnel de dispositivo o un túnel de usuario, se configuran mediante el nodo ProfileXML en el proveedor de servicios de configuración (CSP) VPNv2. Los pasos de este tutorial muestran cómo configurar un túnel de usuario en un único dispositivo cliente Windows. Puede usar estos pasos para entornos pequeños o con fines de prueba.

Para entornos más grandes, debe usar Microsoft Intune o Microsoft Configuration Manager para implementar el perfil de VPN AlwaysOn en dispositivos cliente Windows. Para obtener más información, consulte Implementación de un perfil de VPN AlwaysOn en clientes windows con Microsoft Intune e Implementación de un perfil de VPN AlwaysOn en clientes de Windows con Microsoft Configuration Manager.

Requisitos previos

Para completar los pasos de este tutorial, necesitará lo siguiente:

Creación y prueba de una conexión VPN de usuario manual

En primer lugar, debe crear una conexión de cliente VPN para comprobar que el cliente de prueba de VPN puede establecer una conexión VPN correcta. Esta conexión también permite crear la configuración del Protocolo de autenticación extensible (EAP) que se usará para la conexión VPN AlwaysOn. Para obtener más información sobre la configuración de EAP, consulte Configuración de EAP.

  1. Inicie sesión en el dispositivo cliente Windows unido a un dominio como usuario vpn que creó anteriormente en Creación de un usuario de prueba de Active Directory.

  2. En el menú Inicio, escriba VPN para seleccionar Configuración de VPN. Presione ENTRAR.

  3. En el panel de detalles, seleccione Agregar una conexión VPN.

  4. En Proveedor de VPN, seleccione Windows (integrado).

  5. En Nombre de conexión, escriba CONTOSO VPN.

  6. En Nombre o dirección del servidor, escriba el nombre de dominio completo externo (FQDN) del servidor VPN (por ejemplo, vpn.contoso.com).

  7. En Tipo de VPN, seleccione IKEv2.

  8. En Tipo de información de inicio de sesión, seleccione Certificado.

  9. Seleccione Guardar.

  10. En Configuración relacionada, seleccione Cambiar opciones de adaptador.

  11. Haga clic con el botón derecho en VPN de Contoso y seleccione Propiedades.

  12. En la pestaña Seguridad , en Cifrado de datos, seleccione Cifrado de intensidad máxima.

  13. Seleccione Usar protocolo de autenticación extensible (EAP) . A continuación, en Usar protocolo de autenticación extensible (EAP), seleccione Microsoft: Protected EAP (PEAP) (cifrado habilitado).

  14. Seleccione Propiedades para abrir Propiedades protegidas de EAP y complete los pasos siguientes:

    1. En Conectar a estos servidores, escriba el nombre de host del servidor NPS.

    2. En Entidades de certificación raíz de confianza, seleccione la ENTIDAD de certificación que emitió el certificado del servidor NPS (por ejemplo, contoso-CA).

    3. En Notificaciones antes de conectarse, seleccione No pedir al usuario que autorice nuevos servidores o CA de confianza.

    4. En Seleccionar método de autenticación, seleccione Tarjeta inteligente u otro certificado.

    5. Seleccione Configurar.

      1. Seleccione Usar un certificado en este equipo.

      2. En Conectar a estos servidores, escriba el nombre de host del servidor NPS.

      3. En Entidades de certificación raíz de confianza, seleccione la ENTIDAD de certificación que emitió el certificado del servidor NPS.

      4. Seleccione No pedir al usuario que autorice nuevos servidores o entidades de certificación de confianza.

      5. Seleccione Aceptar para cerrar tarjeta inteligente u otras propiedades de certificado.

      6. Seleccione Aceptar para cerrar propiedades de EAP protegidas.

    6. Seleccione Aceptar para cerrar Las propiedades de VPN de Contoso.

  15. Cierre la ventana Conexiones de red .

  16. En Configuración, seleccione Vpn de Contoso y, a continuación, seleccione Conectar. La conexión VPN debe establecerse correctamente. Puede comprobar la conexión comprobando la ventana Conexiones de red . La conexión VPN de Contoso debe mostrarse como Conectada. Pruebe que puede conectarse a un recurso en el otro lado del túnel VPN, por ejemplo, un recurso compartido de archivos o un servidor web.

  17. Después de comprobar que la conexión VPN se realiza correctamente, desconecte de la conexión VPN.

Importante

Asegúrese de que la conexión VPN de plantilla al servidor VPN se realiza correctamente. Al hacerlo, se garantiza que la configuración de EAP sea correcta antes de usarlas en la sección siguiente. Debe conectarse al menos una vez antes de continuar; De lo contrario, el perfil no contiene toda la información necesaria para conectarse a la VPN.

Conversión de la conexión VPN manual a una conexión VPN AlwaysOn

A continuación, convierta la conexión VPN manual a una conexión VPN AlwaysOn mediante un script de PowerShell.

  1. Inicie sesión como el mismo usuario en el dispositivo cliente de Windows y abra Windows PowerShell ISE con privilegios de administrador.

  2. Copie y pegue el siguiente script de PowerShell en la ventana del Windows PowerShell ISE editor y, a continuación, asegúrese de cambiar los ocho valores de variable por sus propios.

    Expanda esta sección para mostrar el script de 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. Ejecute el script.

  4. Compruebe que el script se realizó correctamente ejecutando el comando siguiente en la ventana del Windows PowerShell ISE editor:

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

    La salida debe ser similar al ejemplo siguiente (el valor se trunca para mejorar la ProfileXML legibilidad):

    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. La conexión VPN AlwaysOn debe crearse y establecerse correctamente. Puede comprobar la conexión comprobando la ventana Conexiones de red . La conexión VPN AlwaysOn de Contoso debe mostrarse como Conectada. Pruebe que puede conectarse a un recurso en el otro lado del túnel VPN, por ejemplo, un recurso compartido de archivos o un servidor web.

Ahora que se conecta al servidor VPN mediante la conexión VPN AlwaysOn, estos son algunos recursos adicionales que le ayudarán con la implementación de VPN AlwaysOn: