Dela via


Självstudie: Skapa en AlwaysOn VPN-anslutning på Windows-klientenheter

Den här handledningen visar hur du skapar en Always On VPN-anslutning på Windows-klientenheter. Serien fortsätter att distribuera Always On VPN i en exempelmiljö. Tidigare i serien distribuerade du en exempelinfrastruktur och konfigurerade mallar för certifikatutfärdare.

I den här handledningen kommer du att:

  • Skapa och testa en manuell VPN-anslutning för användare som används som mall för AlwaysOn VPN-anslutningen.
  • Konvertera den manuella VPN-anslutningen till en AlwaysOn VPN-anslutning med PowerShell.

AlwaysOn VPN-anslutningar kan konfigureras som en enhetstunnel eller en användartunnel:

  • Enhetstunnel: ansluter till angivna VPN-servrar innan användarna loggar in på enheten. En enhetstunnel används för anslutningsscenarier före inloggning och för enhetshantering.

  • Användartunnel: Ansluter endast efter att en användare loggar in på enheten. Med en användartunnel kan användare komma åt organisationsresurser via VPN-servrar.

Mer information om skillnaderna mellan enhetstunnel och användartunnel finns i Konfigurera VPN-enhetstunnlar i Windows-klienten.

Always On VPN-anslutningar, oavsett om det är en enhetstunnel eller en användartunnel, konfigureras med hjälp av ProfileXML-noden i VPNv2-konfigurationstjänstprovidern (CSP). Stegen i den här självstudien visar hur du konfigurerar en användartunnel på en enda Windows-klientenhet. Du kan använda de här stegen för små miljöer eller i testsyfte.

För större miljöer bör du använda Microsoft Intune eller Microsoft Configuration Manager för att distribuera AlwaysOn VPN-profilen till Windows-klientenheter. Mer information finns i Distribuera en AlwaysOn VPN-profil till Windows-klienter med Microsoft Intune och Distribuera en AlwaysOn VPN-profil till Windows-klienter med Microsoft Configuration Manager.

Prerequisites

För att slutföra stegen i den här självstudien behöver du:

Skapa och testa en manuell VPN-anslutning för användare

Först måste du skapa en VPN-klientanslutning för att verifiera att VPN-testklienten kan upprätta en lyckad VPN-anslutning. Med den här anslutningen kan du också skapa EAP-inställningarna (Extensible Authentication Protocol) som ska användas för Always On VPN-anslutningen. Mer information om EAP-inställningar finns i EAP-konfiguration.

  1. Logga in på den domänanslutna Windows-klientenheten som den VPN-användare som du skapade tidigare i Skapa Active Directory-testanvändare.

  2. På Start-menyn skriver du VPN för att välja VPN-inställningar. Tryck på RETUR.

  3. I informationsfönstret väljer du Lägg till en VPN-anslutning.

  4. För VPN-provider väljer du Windows (inbyggd).

  5. Som Anslutningsnamn anger du Contoso VPN.

  6. För Servernamn eller -adress anger du det externa fullständigt kvalificerade domännamnet (FQDN) för VPN-servern (till exempel vpn.contoso.com).

  7. För VPN-typ väljer du IKEv2.

  8. För Typ av inloggningsinformation väljer du Certifikat.

  9. Välj Spara.

  10. Under Relaterade inställningar väljer du Ändra kortalternativ.

  11. Högerklicka på Contoso VPN och välj Egenskaper.

  12. På fliken Säkerhet för Datakryptering väljer du Maximal styrka kryptering.

  13. Välj Använd EAP (Extensible Authentication Protocol). För Använd EAP (Extensible Authentication Protocol) väljer du Sedan Microsoft: Skyddad EAP (PEAP) (kryptering aktiverat).

  14. Välj Egenskaper för att öppna Skyddade EAP-egenskaper och slutför följande steg:

    1. För Anslut till dessa servrar anger du värdnamnet för NPS-servern.

    2. För Betrodda rotcertifikatutfärdare väljer du den certifikatutfärdare som utfärdade NPS-serverns certifikat (till exempel contoso-CA).

    3. För Meddelanden innan du ansluter väljer du Be inte användaren att auktorisera nya servrar eller betrodda certifikatutfärdare.

    4. För Välj autentiseringsmetod väljer du Smartkort eller annat certifikat.

    5. Välj Konfigurera.

      1. Välj Använd ett certifikat på den här datorn.

      2. För Anslut till dessa servrar anger du värdnamnet för NPS-servern.

      3. För Betrodda rotcertifikatutfärdare väljer du den certifikatutfärdare som utfärdade NPS-serverns certifikat.

      4. Välj Uppmana inte användaren att auktorisera nya servrar eller betrodda certifikatutfärdare.

      5. Välj OK för att stänga smartkort eller andra certifikategenskaper.

      6. Välj OK för att stänga skyddade EAP-egenskaper.

    6. Välj OK för att stänga Contosos VPN-egenskaper.

  15. Stäng fönstret Nätverksanslutningar .

  16. I Inställningar väljer du Contoso VPN och sedan Anslut. VPN-anslutningen bör upprättas framgångsrikt. Du kan verifiera anslutningen genom att kontrollera fönstret Nätverksanslutningar . Contoso VPN-anslutningen bör visas som Ansluten. Testa att du kan ansluta till en resurs på andra sidan VPN-tunneln, till exempel en filresurs eller webbserver.

  17. När du har kontrollerat att VPN-anslutningen har lyckats kopplar du från VPN-anslutningen.

Important

Säkerställ att VPN-mallanslutningen till din VPN-server lyckas. Detta säkerställer att EAP-inställningarna är korrekta innan du använder dem i nästa avsnitt. Du måste ansluta minst en gång innan du fortsätter. Annars innehåller profilen inte all information som krävs för att ansluta till VPN.

Konvertera den manuella VPN-anslutningen till en AlwaysOn VPN-anslutning

Därefter konverterar du den manuella VPN-anslutningen till en AlwaysOn VPN-anslutning med hjälp av ett PowerShell-skript.

  1. Som samma användare på Windows-klientenheten, öppna Windows PowerShell ISE som administratör.

  2. Kopiera och klistra in följande PowerShell-skript i Windows PowerShell ISE redigeringsfönstret och se sedan till att ändra de åtta variabelvärdena för dina egna.

    Expandera det här avsnittet för att visa PowerShell-skriptet.
    # 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. Kör skriptet.

  4. Kontrollera att skriptet lyckades genom att köra följande kommando i redigeringsfönstret Windows PowerShell ISE :

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

    Utdata bör likna följande exempel (värdet ProfileXML trunkeras för läsbarhet):

    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. AlwaysOn VPN-anslutningen ska skapas och upprättas framgångsrikt. Du kan verifiera anslutningen genom att kontrollera fönstret Nätverksanslutningar . Contoso Always On VPN-anslutningen bör visas som Ansluten. Testa att du kan ansluta till en resurs på andra sidan VPN-tunneln, till exempel en filresurs eller webbserver.

Nu när du ansluter till VPN-servern med hjälp av Always On VPN-anslutningen, här är några extra resurser som hjälper dig med din AlwaysOn VPN-distribution: