Tutoriel : Déployer VPN Always On - Configurer un profil VPN Always On pour les clients Windows 10+

S’applique à : Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10, Windows 11

Dans cette dernière partie du tutoriel, vous allez apprendre à utiliser un script de configuration ProfileXML PowerShell pour configurer des paramètres de VPN Always On et créer un tunnel utilisateur pour les connexions clientes.

Pour plus d’informations sur les options de configuration VPN Always on pour le fournisseur de services de configuration (CSP), consultez Fournisseur de services de configuration VPNv2.

Prérequis

Tutoriel complet : Déployer VPN Always On - Configurer des modèles d’autorité de certification.

Créer un profil client VPN Always On

Dans cette section, nous allons créer une connexion client VPN afin de vérifier que le client de test VPN peut établir une connexion VPN réussie. Cela nous permettra également de créer les paramètres EAP pour l’exportation dans la section suivante.

Pour plus d'informations sur les paramètres EAP, consultez Configuration EAP.

  1. Connectez-vous à l’ordinateur client VPN joint au domaine en tant qu’utilisateur VPN que vous avez créé 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, cliquez sur Ajouter une connexion VPN.

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

  5. Pour Nom de la connexion, entrez CONTOSO VPN.

  6. Pour Nom ou adresse du serveur, tapez le FQDN externe de votre serveur VPN (par exemple, vpn.contoso.com).

  7. Pour Type de VPN, sélectionnez IKEv2.

  8. Pour 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 Chiffrement des données, sélectionnez Chiffrement de la force maximale.

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

  14. Cliquez sur Propriétés pour ouvrir la boîte de dialogue Propriétés EAP protégées, puis effectuez les étapes suivantes :

    1. Pour la Connexion à ces serveurs, entrez le nom du serveur NPS.

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

    3. Pour Notifications avant la connexion, sélectionnez Ne pas demander à l’utilisateur d’autoriser de nouveaux serveurs ou des autorités de certification approuvées.

    4. Pour la liste 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 la Connexion à ces serveurs, entrez le nom 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 demander à l'utilisateur d'autoriser de nouveaux serveurs ou des autorités de certification approuvées.

      5. Sélectionnez OK pour fermer la boîte de dialogue Propriétés des cartes à puce ou des autres certificats.

      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 Se connecter.

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 à l’étape suivante. Vous devez vous connecter au moins une fois avant de continuer ; sinon, le profil ne contiendra pas toutes les informations nécessaires pour se connecter au VPN.

Configurer votre client VPN Windows

Dans cette section, vous allez configurer manuellement le client VPN Windows à l’aide d’un script PowerShell.

  1. Connectez-vous en tant qu’utilisateur VPN à l’ordinateur client VPN.

  2. Ouvrez l’environnement d’écriture de scripts intégré (ISE) de Windows PowerShell en tant qu’Administrateur.

  3. Copiez et collez le script suivant :

    
    # 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. Définissez la valeur des variables suivantes en haut du script : $Domain, $TemplateName, $ProfileName, $Servers, $DnsSuffix, $DomainName et $DNSServers. Pour plus d’informations sur la définition de ces variables, consultez : VPNv2 CSP.

  5. Appuyez sur Entrée pour exécuter le script.

  6. Vérifiez que le script a réussi en exécutant la commande suivante dans le Windows PowerShell ISE :

        Get-CimInstance -Namespace root\cimv2\mdm\dmmap -ClassName MDM_VPNv2_01
    
  7. Vous devez voir la sortie suivante (la valeur ProfileXML a été tronquée pour plus de 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          : 
    `
    

Vous avez maintenant configuré votre tunnel utilisateur pour VPN Always On. Si vous souhaitez savoir comment configurer un tunnel d’appareil, consultez Configurer des tunnels d’appareil VPN dans le client Windows.

Étapes suivantes