Partager via


Tutoriel : Créer une connexion VPN Always On sur les appareils clients Windows

Ce tutoriel vous montre comment créer une connexion VPN Always On sur les appareils clients Windows. Il poursuit la série pour déployer un VPN Always On dans un exemple d’environnement. Précédemment dans la série, vous avez déployé un exemple d’infrastructure et configuré des modèles d’autorité de certification.

Dans ce tutoriel, vous allez :

  • Créez et testez une connexion VPN utilisateur manuelle utilisée comme modèle pour la connexion VPN Always On.
  • Convertissez la connexion VPN manuelle en connexion VPN Always On à l’aide de PowerShell.

Les connexions VPN Always On peuvent être configurées en tant que tunnel d’appareil ou tunnel utilisateur :

  • Tunnel d’appareil : se connecte aux serveurs VPN spécifiés avant que les utilisateurs se connectent à l’appareil. Un tunnel d’appareil est utilisé pour les scénarios de connectivité avant la connexion et à des fins de gestion des appareils.

  • Tunnel utilisateur : se connecte uniquement après qu’un utilisateur se connecte à l’appareil. Un tunnel utilisateur permet aux utilisateurs d’accéder aux ressources de l’organisation via des serveurs VPN.

Pour plus d’informations sur les différences entre le tunnel d’appareil et le tunnel utilisateur, consultez Configurer des tunnels d’appareil VPN dans le client Windows.

Les connexions VPN Always On, qu’il s’agisse d’un tunnel d’appareil ou d’un tunnel utilisateur, sont configurées à l’aide du nœud ProfileXML dans le fournisseur de services de configuration VPNv2 (CSP). Les étapes décrites dans ce tutoriel vous montrent comment configurer un tunnel utilisateur sur un seul appareil client Windows. Vous pouvez utiliser ces étapes pour les petits environnements ou à des fins de test.

Pour les environnements plus volumineux, vous devez utiliser Microsoft Intune ou Microsoft Configuration Manager pour déployer le profil VPN Always On sur les appareils clients Windows. Pour plus d’informations, consultez Déployer un profil VPN Always On sur des clients Windows avec Microsoft Intune et déployer un profil VPN Always On sur des clients Windows avec Microsoft Configuration Manager.

Prérequis

Pour suivre les étapes de ce tutoriel, vous devez disposer des éléments suivants :

Créer et tester une connexion VPN utilisateur manuelle

Tout d’abord, vous devez créer une connexion de client VPN pour vérifier que le client de test VPN peut établir une connexion VPN réussie. Cette connexion vous permet également de créer les paramètres EAP (Extensible Authentication Protocol) à utiliser pour la connexion VPN Always On. Pour plus d’informations sur les paramètres EAP, consultez configuration EAP.

  1. Connectez-vous à l’appareil client Windows joint au domaine en tant qu’utilisateur VPN que vous avez créé précédemment dans Créer un utilisateur de test Active Directory.

  2. Dans le menu Démarrer, tapez VPN pour sélectionner Paramètres VPN. Appuyez sur Entrée.

  3. Dans le volet d’informations, sélectionnez Ajouter une connexion VPN.

  4. Pour le fournisseur VPN, sélectionnez Windows (intégré) .

  5. Pour le nom de la connexion, entrez contoso VPN.

  6. Pour le nom ou l’adresse du serveur, entrez le nom de domaine complet externe (FQDN) de votre serveur VPN (par exemple). vpn.contoso.com

  7. Pour le type de VPN, sélectionnez IKEv2.

  8. Pour le type d’informations de connexion, sélectionnez Certificat.

  9. Sélectionnez Enregistrer.

  10. Sous Paramètres associés, sélectionnez Modifier les options de l’adaptateur.

  11. Cliquez avec le bouton droit sur Contoso VPN, puis sélectionnez Propriétés.

  12. Sous l’onglet Sécurité , pour le chiffrement des données, sélectionnez Chiffrement de puissance maximale.

  13. Sélectionnez Utiliser le protocole EAP (Extensible Authentication Protocol). Ensuite, pour utiliser EAP (Extensible Authentication Protocol), sélectionnez Microsoft : Protected EAP (PEAP) (chiffrement activé).

  14. Sélectionnez Propriétés pour ouvrir les propriétés EAP protégées, puis effectuez les étapes suivantes :

    1. Pour vous connecter à ces serveurs, entrez le nom d’hôte de votre serveur NPS.

    2. Pour les autorités de certification racines approuvées, sélectionnez l’autorité de certification qui a émis le certificat du serveur NPS (par exemple, contoso-CA).

    3. Pour les notifications avant de vous connecter, sélectionnez Ne pas demander à l’utilisateur d’autoriser de nouveaux serveurs ou des autorités de certification approuvées.

    4. Pour sélectionner la méthode d’authentification, sélectionnez Carte à puce ou autre certificat.

    5. Sélectionnez Configurer.

      1. Sélectionnez Utiliser un certificat sur cet ordinateur.

      2. Pour vous connecter à ces serveurs, entrez le nom d’hôte du serveur NPS.

      3. Sous Autorités de certification racines de confiance, sélectionnez l’autorité de certification qui a émis le certificat du serveur NPS.

      4. Sélectionnez Ne pas inviter l’utilisateur à autoriser de nouveaux serveurs ou autorités de certification approuvées.

      5. Sélectionnez OK pour fermer la carte à puce ou d’autres propriétés de certificat.

      6. Sélectionnez OK pour fermer les propriétés EAP protégées.

    6. Sélectionnez OK pour fermer les propriétés VPN contoso.

  15. Fermez la fenêtre Connexions réseau.

  16. Dans Paramètres, sélectionnez VPN Contoso, puis connectez-vous. La connexion VPN doit être établie avec succès. Vous pouvez vérifier la connexion en vérifiant la fenêtre Connexions réseau . La connexion VPN Contoso doit s’afficher comme connectée. Testez que vous pouvez vous connecter à une ressource de l’autre côté du tunnel VPN, par exemple un partage de fichiers ou un serveur web.

  17. Une fois que vous avez vérifié que la connexion VPN réussit, déconnectez-vous de la connexion VPN.

Important

Assurez-vous que le modèle de connexion VPN à votre serveur VPN est réussi. Cela garantit que les paramètres EAP sont corrects avant de les utiliser dans la section suivante. Vous devez vous connecter au moins une fois avant de continuer ; sinon, le profil ne contient pas toutes les informations nécessaires pour se connecter au VPN.

Convertir la connexion VPN manuelle en connexion VPN Always On

Ensuite, vous convertissez la connexion VPN manuelle en connexion VPN Always On à l’aide d’un script PowerShell.

  1. En tant que même utilisateur sur l’appareil client Windows, ouvrez Windows PowerShell ISE en tant qu’administrateur.

  2. Copiez et collez le script PowerShell suivant dans la fenêtre de l’éditeur Windows PowerShell ISE , puis veillez à modifier les huit valeurs de variables de votre choix.

    Développez cette section pour afficher le script 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. Exécutez le script.

  4. Vérifiez que le script a réussi en exécutant la commande suivante dans la fenêtre de l’éditeur Windows PowerShell ISE :

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

    La sortie doit être similaire à l’exemple suivant (la ProfileXML valeur est tronquée pour la lisibilité) :

    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 connexion VPN Always On doit être créée et établie avec succès. Vous pouvez vérifier la connexion en vérifiant la fenêtre Connexions réseau . La connexion VPN Always On Contoso doit s’afficher comme connectée. Testez que vous pouvez vous connecter à une ressource de l’autre côté du tunnel VPN, par exemple un partage de fichiers ou un serveur web.

Vous vous connectez maintenant au serveur VPN à l’aide de la connexion VPN Always On, voici quelques ressources supplémentaires pour vous aider à utiliser votre déploiement VPN Always On :