none
Always On VPN - user Tunnel profil RRS feed

  • Frage

  • Hi,

    wir experimentieren aktuell mit Always on VPN.
    Das Ziel ist es das vor der Anmeldung ein Geräte-Tunnel aufgebaut wird und nach der Anmeldung in einen User-Tunnel gewechselt wird.

    Nun haben wir folgendes in der Doku gefunden mit dem wir nicht gerechnet haben:
    WMI-to-CSP bridge requires local admin rights, by design. To deploy per user VPN profiles you should be using SCCM or MDM.

    Gibt es wirklich keine Möglichkeit die Einstellungen für den User Tunnel über eine andere Lösung zu verteilen?
    Ich meine die Settings sollen ja auch nicht pro User unterschiedlich sein sondern sollen für alle gleichermaßen gelten.

    Gruß

    Tobias

    Mittwoch, 13. März 2019 13:20

Alle Antworten

  • Hallo ,

    1. Du erstellst dir ein manuelles VPN Profil auf dem Client selbst mit den vorgekonfigurierten Settings.

    2. Dann musst du das MakeProfile.ps1 Full PS Script herunterladen(https://docs.microsoft.com/en-us/windows-server/remote/remote-access/vpn/always-on-vpn/deploy/vpn-deploy-client-vpn-connections) und die spezifischen Settings im Script angeben, wie zum Beispiel den VPN Adapter Namen(vom manuell erstellen VPN Adapter), Servername, Full Tunnel oder Split Tunnel usw.

    3. Danach lässt du das Script laufen und danach wird dir auf dem Desktop eine ps1 script und eine XML Script erstellt. Das XML Script wäre für Intune gedacht und PS1 script kannst du einfach verteilen lassen.

    4. Das Powershell Script kannst du dann mit jeglicher Softwareverteilungsmethode verteilen lassen.Script als Admin verteilen, aber unter dem User Context ausführen. Bei den meisten Softwareverteilmethoden kann man einstellen, dass das Script als Admin ausgeführt werden soll, aber auf den User appliziert werden soll.

    Gruss

    Sushmithan


    • Bearbeitet Sushmithan Montag, 27. Mai 2019 09:37 Ergänzung
    Montag, 27. Mai 2019 09:28
  • Das wäre das Script, welches du laufen lasssen musst, damit du eine PS1 Script erstellt kriegst.

    Die Variablen musst du noch ausfüllen und die Splitting Option richtig angeben ob "ForceTunnel" oder "SplitTunnel". Die Setting kannst du unter dem <RoutingPolicyType> Tag definieren

     $TemplateName = 'Contoso Template(<--den namen des Manuell erstellten VPN)'
     $ProfileName = 'Contoso AlwaysOn VPN'
     $Servers = 'aovpn.contoso.com'
     $DnsSuffix = 'contoso.com'
     $DomainName = '.contoso.com'
     $DNSServers = '192.168.10.1,192.168.20.1'
     $TrustedNetwork = 'contoso.com'


     $Connection = Get-VpnConnection -Name $TemplateName
     if(!$Connection)
     {
     $Message = "Unable to get $TemplateName connection profile: $_"
     Write-Host "$Message"
     exit
     }
     $EAPSettings= $Connection.EapConfigXmlStream.InnerXml

     $ProfileXML =
     '<VPNProfile>
       <DnsSuffix>' + $DnsSuffix + '</DnsSuffix>
       <NativeProfile>
     <Servers>' + $Servers + '</Servers>
     <NativeProtocolType>Automatic</NativeProtocolType>
     <Authentication>
       <UserMethod>Eap</UserMethod>
       <Eap>
        <Configuration>
      '+ $EAPSettings + '
        </Configuration>
       </Eap>
     </Authentication>
     <RoutingPolicyType>ForceTunnel</RoutingPolicyType>
       </NativeProfile>
     <AlwaysOn>True</AlwaysOn
     <RememberCredentials>true</RememberCredentials>
     <TrustedNetworkDetection>' + $TrustedNetwork + '</TrustedNetworkDetection>
       <DomainNameInformation>
     <DomainName>' + $DomainName + '</DomainName>
     <DnsServers>' + $DNSServers + '</DnsServers>
     </DomainNameInformation>
     </VPNProfile>'

    $ProfileXML | Out-File -FilePath ($env:USERPROFILE + '\desktop\VPN_Profile.xml')

    $Script = '$ProfileName = ''' + $ProfileName + '''
    $ProfileNameEscaped = $ProfileName -replace '' '', ''%20''

    $ProfileXML = ''' + $ProfileXML + '''

    $ProfileXML = $ProfileXML -replace ''<'', ''&lt;''
    $ProfileXML = $ProfileXML -replace ''>'', ''&gt;''
    $ProfileXML = $ProfileXML -replace ''"'', ''&quot;''

     $nodeCSPURI = "./Vendor/MSFT/VPNv2"
     $namespaceName = "root\cimv2\mdm\dmmap"
     $className = "MDM_VPNv2_01"

     try
     {
     $username = Gwmi -Class Win32_ComputerSystem | select username
     $objuser = New-Object System.Security.Principal.NTAccount($username.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. User may be logged on over Remote Desktop: $_"
     Write-Host "$Message"
     exit
     }

     $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)

         try
     {
         $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
     {
         $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"'

     $Script | Out-File -FilePath ($env:USERPROFILE + '\desktop\VPN_Profile.ps1')

     $Message = "Successfully created VPN_Profile.xml and VPN_Profile.ps1 on the desktop."
     Write-Host "$Message"

    Viele Grüsse

    Sushmithan

    Montag, 27. Mai 2019 09:35