Condividi tramite


Esercitazione: Distribuire VPN Always On - Configurare il profilo VPN Always On per i client Windows 10+

Si applica a: Windows Server 2022, Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows 10, Windows 11

In questa ultima parte dell'esercitazione si apprenderà come usare uno script di configurazione ProfileXML di PowerShell per configurare le impostazioni VPN Always On e creare un tunnel utente per le connessioni client.

Per informazioni più dettagliate sulle opzioni di configurazione VPN Always on per il provider di servizi di configurazione, vedere Provider di servizi di configurazione VPNv2.

Prerequisiti

Completare Esercitazione: Distribuire VPN Always On - Configurare i modelli di autorità di certificazione.

Creare un profilo client VPN Always On

In questa sezione si creerà una connessione client VPN per verificare che il client VPN di prova riesca a stabilirne una correttamente. Ciò consentirà anche di creare le impostazioni EAP per l'esportazione nella sezione successiva.

Per altre informazioni sulle impostazioni EAP, consultare Configurazione EAP.

  1. Accedere al computer client VPN aggiunto al dominio come utente VPN creato in Creare un utente di prova di Active Directory.

  2. Nel menu Start digitare VPN per selezionare Impostazioni VPN. Premere INVIO.

  3. Nel riquadro dei dettagli fare clic su Aggiungi una connessione VPN.

  4. Per Provider VPN, selezionare Windows (predefinito).

  5. Per Nome connessione, immettere VPN Contoso.

  6. Per Nome o indirizzo server digitare il nome di dominio completo esterno del server VPN, ad esempio vpn.contoso.com.

  7. Per Tipo VPN, selezionare IKEv2.

  8. Per Tipo di informazioni di accesso, selezionare Certificato.

  9. Selezionare Salva.

  10. In Impostazioni correlate fare clic su Cambia opzioni adattatore.

  11. Fare clic con il pulsante destro del mouse su Contoso VPN e scegliere Proprietà.

  12. Nella scheda Sicurezza come Crittografia dei dati, selezionare Crittografia massima livello di attendibilità.

  13. Selezionare Usa EAP (Extensible Authentication Protocol). Quindi, per Usa EAP (Extensible Authentication Protocol), selezionare Microsoft: Protected EAP (PEAP) (crittografia abilitata).

  14. Selezionare Proprietà per aprire Proprietà EAP protette e completare i passaggi seguenti:

    1. Per Connessione a questi server, immettere il nome del server dei criteri di rete.

    2. Per Autorità di certificazione radice attendibili selezionare l'autorità di certificazione che ha emesso il certificato del server dei criteri di rete (ad esempio, contoso-CA).

    3. In Notifiche prima della connessione selezionare Non chiedere all'utente di autorizzare nuovi server o autorità di certificazione attendibili.

    4. Per Selezionare il metodo di autenticazione selezionare Smart card o altro certificato.

    5. Selezionare Configura.

      1. Selezionare Usa un certificato nel computer.

      2. Per Connessione a questi server, immettere il nome del server dei criteri di rete.

      3. Per Autorità di certificazione radice attendibili selezionare la l'autorità di certificazione che ha emesso il certificato del server dei criteri di rete.

      4. Selezionare Non richiedere all'utente di autorizzare nuovi server o autorità di certificazione attendibili.

      5. Selezionare OK per chiudere Proprietà Smart Card o altro certificato.

      6. Selezionare OK per chiudere Proprietà EAP protette.

    6. Selezionare OK per chiudere Proprietà VPN di Contoso.

  15. Chiudere la finestra Connessioni di rete .

  16. In Impostazioni selezionare VPN Contoso e quindi selezionare Connetti.

Importante

Assicurarsi che la connessione VPN modello al server VPN abbia esito positivo. In questo modo si conferma che le impostazioni EAP siano corrette prima di usarle nell'esempio successivo. È necessario connettersi almeno una volta prima di continuare. In caso contrario, il profilo non conterrà tutte le informazioni necessarie per connettersi alla VPN.

Configurare il client VPN di Windows

In questa sezione si configurerà manualmente il client VPN di Windows usando uno script di PowerShell.

  1. Accedere come utente VPN al computer client VPN.

  2. Aprire Windows PowerShell ISE come Amministratore.

  3. Copiare e incollare lo script seguente:

    
    # 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. Impostare il valore per le variabili seguenti all'inizio dello script: $Domain, $TemplateName, $ProfileName, $Servers, $DnsSuffix, $DomainName e $DNSServers. Per informazioni più dettagliate su come impostare queste variabili, vedere: CSP VPNv2.

  5. Premere INVIO per eseguire lo script.

  6. Verificare che lo script sia stato eseguito correttamente tramite il comando seguente in Windows PowerShell ISE:

        Get-CimInstance -Namespace root\cimv2\mdm\dmmap -ClassName MDM_VPNv2_01
    
  7. Verrà visualizzato l'output seguente (il valore ProfileXML è stato troncato per motivi di leggibilità):

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

È stato configurato il tunnel utente per la VPN Always On. Per informazioni su come configurare un tunnel del dispositivo, vedere Configurare i tunnel dei dispositivi VPN nel client Windows.

Passaggi successivi