Udostępnij za pośrednictwem


Samouczek: wdrażanie zawsze włączonej sieci VPN — konfigurowanie zawsze włączonego profilu sieci VPN dla klientów z systemem Windows 10 lub nowszym

W ostatniej części samouczka dowiesz się, jak używać skryptu konfiguracji programu PowerShell ProfileXML w celu skonfigurowania ustawień zawsze włączonej sieci VPN i utworzenia tunelu użytkownika dla połączeń klienckich.

Aby uzyskać bardziej szczegółowe informacje na temat opcji konfiguracji zawsze włączonej sieci VPN dla dostawcy usług konfiguracji (CSP), zobacz VPNv2 configuration service provider.

Wymagania wstępne

Ukończ Samouczek: Wdrażanie Always On VPN — konfigurowanie szablonów Urzędu Certyfikacji.

Tworzenie zawsze włączonego profilu klienta sieci VPN

W tej sekcji utworzymy połączenie klienta sieci VPN, aby sprawdzić, czy testowy klient sieci VPN może nawiązać pomyślne połączenie sieci VPN. Umożliwi to również utworzenie ustawień protokołu EAP na potrzeby eksportu w następnej sekcji.

Aby uzyskać więcej informacji na temat ustawień protokołu EAP, zobacz Konfiguracja protokołu EAP.

  1. Zaloguj się na komputerze klienckim sieci VPN przyłączonym do domeny jako użytkownik sieci VPN utworzony w sekcji Tworzenie użytkownika testowego usługi Active Directory.

  2. W menu Start wpisz VPN , aby wybrać pozycję Ustawienia sieci VPN. Naciśnij ENTER.

  3. W okienku szczegółów wybierz pozycję Dodaj połączenie sieci VPN.

  4. W polu Dostawca sieci VPN wybierz pozycję Windows (wbudowane).

  5. W polu Nazwa połączenia wprowadź wartość Contoso VPN.

  6. W polu Nazwa serwera lub adres wprowadź zewnętrzną nazwę FQDN serwera sieci VPN (na przykład vpn.contoso.com).

  7. W polu Typ sieci VPN wybierz pozycję IKEv2.

  8. W polu Typ informacji logowania wybierz pozycję Certyfikat.

  9. Wybierz Zapisz.

  10. W obszarze Powiązane ustawienia wybierz pozycję Zmień opcje adaptera.

  11. Kliknij prawym przyciskiem myszy pozycję Contoso VPN, a następnie wybierz pozycję Właściwości.

  12. Na karcie Zabezpieczenia w polu Szyfrowanie danych wybierz pozycję Maksymalna siła szyfrowania.

  13. Wybierz pozycję Użyj rozszerzonego protokołu uwierzytelniania (EAP). Następnie w obszarze Użyj rozszerzonego protokołu uwierzytelniania (EAP) wybierz pozycję Microsoft: Protected EAP (PEAP) (Szyfrowanie włączone).

  14. Wybierz Właściwości, aby otworzyć właściwości zabezpieczonego EAP i wykonaj następujące kroki:

    1. W polu Połącz z tymi serwerami wprowadź nazwę serwera NPS.

    2. W sekcji Zaufane główne urzędy certyfikacji wybierz urząd certyfikacji, który wystawił certyfikat serwera NPS (na przykład contoso-CA).

    3. W obszarze Powiadomienia przed nawiązaniem połączenia wybierz pozycję Nie pytaj użytkownika o autoryzowanie nowych serwerów ani zaufanych urzędów certyfikacji.

    4. W obszarze Wybierz metodę uwierzytelniania wybierz pozycję Karta inteligentna lub inny certyfikat.

    5. Wybierz Konfiguruj.

      1. Wybierz pozycję Użyj certyfikatu na tym komputerze.

      2. W polu Połącz z tymi serwerami wprowadź nazwę serwera NPS.

      3. W sekcji Zaufane główne urzędy certyfikacji wybierz urząd certyfikacji, który wydał certyfikat dla serwera NPS.

      4. Wybierz pozycję Nie monituj użytkownika o autoryzację nowych serwerów ani zaufanych urzędów certyfikacji.

      5. Wybierz przycisk OK , aby zamknąć kartę inteligentną lub inne właściwości certyfikatu.

      6. Wybierz przycisk OK , aby zamknąć chronione właściwości protokołu EAP.

    6. Wybierz przycisk OK , aby zamknąć pozycję Właściwości sieci VPN firmy Contoso.

  15. Zamknij okno Połączenia sieciowe.

  16. W obszarze Ustawienia wybierz pozycję Contoso VPN, a następnie wybierz pozycję Połącz.

Ważne

Upewnij się, że połączenie szablonu VPN z serwerem VPN zakończyło się pomyślnie. Dzięki temu ustawienia protokołu EAP są poprawne przed użyciem ich w następnym kroku. Przed kontynuowaniem należy nawiązać połączenie co najmniej raz; w przeciwnym razie profil nie będzie zawierać wszystkich informacji niezbędnych do nawiązania połączenia z siecią VPN.

Konfigurowanie klienta sieci VPN systemu Windows

W tej sekcji ręcznie skonfigurujesz klienta sieci VPN systemu Windows przy użyciu skryptu programu PowerShell.

  1. Zaloguj się jako użytkownik sieci VPN na komputerze klienckim sieci VPN.

  2. Otwórz zintegrowane środowisko skryptów programu Windows PowerShell (ISE) jako administrator.

  3. Skopiuj i wklej następujący skrypt:

    
    # 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. Ustaw wartość następujących zmiennych w górnej części skryptu: $Domain, , $TemplateName, $ProfileName$Servers, $DnsSuffix$DomainNamei $DNSServers. Aby uzyskać bardziej szczegółowe informacje na temat ustawiania tych zmiennych, zobacz : VPNv2 CSP.

  5. Naciśnij ENTER, aby uruchomić skrypt.

  6. Sprawdź, czy skrypt zakończył się pomyślnie, uruchamiając następujące polecenie w środowisku Windows PowerShell ISE:

        Get-CimInstance -Namespace root\cimv2\mdm\dmmap -ClassName MDM_VPNv2_01
    
  7. Powinny zostać wyświetlone następujące dane wyjściowe (wartość ProfileXML została obcięta w celu zapewnienia czytelności):

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

Masz teraz skonfigurowany tunel użytkownika dla zawsze włączonej sieci VPN. Jeśli chcesz dowiedzieć się, jak skonfigurować tunel urządzenia, zobacz Konfigurowanie tuneli urządzeń sieci VPN w kliencie systemu Windows.

Następne kroki