Udostępnij za pośrednictwem


Samouczek: tworzenie zawsze włączonego połączenia sieci VPN na urządzeniach klienckich z systemem Windows

W tym samouczku pokazano, jak utworzyć zawsze włączone połączenie sieci VPN na urządzeniach klienckich z systemem Windows. Kontynuuje serię wdrażania zawsze włączonej sieci VPN w przykładowym środowisku. Wcześniej w tej serii wdrożono przykładową infrastrukturę i skonfigurowano szablony urzędu certyfikacji.

W tym samouczku nauczysz się następujących rzeczy:

  • Utwórz i przetestuj ręczne połączenie sieci VPN użytkownika, które jest używane jako szablon dla połączenia zawsze włączonej sieci VPN.
  • Przekonwertuj ręczne połączenie sieci VPN na zawsze włączone połączenie sieci VPN przy użyciu programu PowerShell.

Zawsze włączone połączenia sieci VPN można skonfigurować jako tunel urządzenia lub tunel użytkownika:

  • Device tunnel: connects to specified VPN servers before users signs in to the device. Tunel urządzenia jest używany do scenariuszy łączności przed logowaniem i zarządzania urządzeniami.

  • User tunnel: connects only after a user logs on to the device. Tunel użytkownika umożliwia użytkownikom dostęp do zasobów organizacji za pośrednictwem serwerów sieci VPN.

Aby uzyskać więcej informacji na temat różnic między tunelem urządzenia i tunelem użytkownika, zobacz Konfigurowanie tuneli urządzeń sieci VPN w kliencie systemu Windows.

Always On VPN connections, whether a device tunnel or a user tunnel, are configured using the ProfileXML node in the VPNv2 configuration service provider (CSP). Kroki opisane w tym samouczku pokazują, jak skonfigurować tunel użytkownika na jednym urządzeniu klienckim z systemem Windows. Te kroki można wykonać w małych środowiskach lub w celach testowych.

W przypadku większych środowisk należy użyć usługi Microsoft Intune lub programu Microsoft Configuration Manager do wdrożenia profilu zawsze włączonej sieci VPN na urządzeniach klienckich z systemem Windows. Aby uzyskać więcej informacji, zobacz Wdrażanie profilu zawsze włączonej sieci VPN na klientach z systemem Windows przy użyciu programu Microsoft Intune i Wdrażanie profilu zawsze włączonej sieci VPN na klientach z systemem Windows przy użyciu programu Microsoft Configuration Manager.

Prerequisites

Aby ukończyć kroki w tym samouczku, potrzebujesz:

Tworzenie i testowanie ręcznego połączenia sieci VPN użytkownika

Najpierw należy utworzyć połączenie klienta sieci VPN, aby sprawdzić, czy testowy klient sieci VPN może nawiązać pomyślne połączenie sieci VPN. To połączenie umożliwia również utworzenie ustawień protokołu EAP (Extensible Authentication Protocol) do użycia dla połączenia zawsze włączonej sieci VPN. For more information about EAP settings, see EAP configuration.

  1. Zaloguj się do urządzenia klienckiego z systemem Windows przyłączonego do domeny jako użytkownik sieci VPN utworzony wcześniej w sekcji Tworzenie użytkownika testowego usługi Active Directory.

  2. On the Start menu, type VPN to select VPN Settings. Press ENTER.

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

  4. For VPN Provider, select Windows (built-in).

  5. For Connection Name, enter Contoso VPN.

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

  7. For VPN type, select IKEv2.

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

  9. Select Save.

  10. Under Related Settings, select Change adapter options.

  11. Right-click Contoso VPN, and select Properties.

  12. On the Security tab, for Data encryption, select Maximum strength encryption.

  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. Select Properties to open Protected EAP Properties, and complete the following steps:

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

    2. W obszarze 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. Select Configure.

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

      2. W polu Połącz z tymi serwerami wprowadź nazwę hosta 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. Select OK to close Smart Card or other Certificate Properties.

      6. Select OK to close Protected EAP Properties.

    6. Select OK to close Contoso VPN Properties.

  15. Close the Network Connections window.

  16. In Settings, select Contoso VPN, and then select Connect. Połączenie sieci VPN powinno zostać nawiązane pomyślnie. You can verify the connection by checking the Network Connections window. The Contoso VPN connection should show as Connected. Sprawdź, czy możesz połączyć się z zasobem po drugiej stronie tunelu VPN, na przykład z udziałem plików lub serwerem internetowym.

  17. Po upewnieniu się, że połączenie sieci VPN zakończy się pomyślnie, odłącz się od połączenia sieci VPN.

Important

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 ich użyciem w następnej sekcji. Przed kontynuowaniem należy nawiązać połączenie co najmniej raz; w przeciwnym razie profil nie zawiera wszystkich informacji niezbędnych do nawiązania połączenia z siecią VPN.

Konwertowanie ręcznego połączenia sieci VPN na zawsze włączone połączenie sieci VPN

Następnie przekonwertujesz ręczne połączenie sieci VPN na zawsze włączone połączenie sieci VPN przy użyciu skryptu programu PowerShell.

  1. Jako ten sam użytkownik na urządzeniu klienckim z systemem Windows otwórz Windows PowerShell ISE jako Administrator.

  2. Skopiuj i wklej następujący skrypt programu PowerShell w Windows PowerShell ISE oknie edytora, a następnie pamiętaj, aby zmienić osiem wartości zmiennych dla własnych.

    Rozwiń tę sekcję, aby wyświetlić skrypt programu 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. Uruchom skrypt.

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

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

    Dane wyjściowe powinny być podobne do poniższego przykładu ( ProfileXML wartość jest obcięta w celu 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          : 
    
  5. Połączenie VPN typu „Zawsze włączone” powinno zostać utworzone i nawiązane pomyślnie. You can verify the connection by checking the Network Connections window. Zawsze włączone połączenie sieci VPN firmy Contoso powinno być wyświetlane jako Połączone. Sprawdź, czy możesz połączyć się z zasobem po drugiej stronie tunelu VPN, na przykład z udziałem plików lub serwerem internetowym.

Teraz połączysz się z serwerem sieci VPN przy użyciu połączenia zawsze włączonej sieci VPN, oto kilka dodatkowych zasobów, które ułatwiają wdrożenie zawsze włączonej sieci VPN: