Remotedesktopserverfarm ist über DirectAccess nicht verfügbar (einzelne/mehrere Standorte)

In diesem Artikel wird ein Problem behoben, durch das eine Remotedesktopserverfarm (RDS) in einer Windows Server 2008-Umgebung nicht verfügbar ist.

Ursprüngliche Produktversion:   Windows Server 2012 R2
Ursprüngliche KB-Nummer:   3123137

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie verfügen über eine DirectAccess-Umgebung (zwei Netzwerkadapter am Edge, zwei Netzwerkadapter hinter Edge oder einen einzelnen Netzwerkadapter hinter Edge), einschließlich Force Tunnel.
  • Sie verfügen über Benutzer, die über den DirectAccess-Tunnel über ein externes Netzwerk eine Verbindung mit einer Remotedesktopdienstebereitstellung herstellen.
  • Die Sitzungsumleitung wird in der RDS-Farm über die Verbindungsbrokerrolle aktiviert.

In diesem Szenario führen alle umgeleiteten RDS-Verbindungen zu einem Fehler.

Ursache

Das Problem tritt auf, weil die Remotedesktopdiensterollen und -dienste nicht IPv6- aware sind. Wenn der Client versucht, eine Verbindung mit der RDS-Bereitstellung herzustellen, gibt der Verbindungsbroker ein Umleitungspaket zurück und enthält die IP-Adresse der RDSH des Endpunkts, an die der Client umgeleitet wird. Wenn den RDSH-Servern nur eine IPv4-Adresse zugewiesen ist, gibt der Verbindungsbroker nur diese IPv4-Adresse zurück. Daher versuchen Clients, über den DA-Tunnel eine Verbindung mit der IPv4-Adresse herzustellen, und dies schlägt fehl.

Lösung

Voraussetzungen

Windows 7- und Windows 8.1-Clients müssen das folgende Update installiert haben, um eine Verbindung mit RDP über eine DA-Verbindung herzustellen. Dieses Update behebt ein Problem, bei dem der Client nicht versucht, eine Verbindung mit der IPv6-Adresse herzustellen, wenn eine Verbindung mit der IPv4-Adresse fehlschlägt:

Windows 8.1 oder Windows 7 kann keine Verbindung über DirectAccess mit einer Hostserverfarm für Remotedesktopsitzungen herstellen.

Um das Problem zu beheben, müssen IPv6-IP-Adressen aktiviert und angewendet werden, und das interne Netzwerk muss in der Lage sein, das IPv6-Routing zu verwenden. Verwenden Sie eine der folgenden Methoden, um diese Funktionalität zu aktivieren:

  • Aktivieren und verwenden Sie einen ISATAP-Adapter auf den Remotedesktop-Sitzungshostservern. Beachten Sie, dass diese Methode nur bei einer einzelnen Standort-DA-Bereitstellung unterstützt wird. Die Verwendung eines ISATAP-Adapters in Umgebungen, die eine DA-Bereitstellung mit mehreren Standorten enthalten, wird weder empfohlen noch unterstützt.
  • Wenden Sie die im Abschnitt "Problemumgehung" beschriebene Methode an.

Weitere Informationen

Weitere DA-bezogene Fixes finden Sie unter "Empfohlene Hotfixes und Updates für Windows Server 2012 DirectAccess und Windows Server 2012 R2 DirectAccess"

Problemumgehung

Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben:

  1. Führen Sie an einer administrativen PowerShell-Eingabeaufforderung auf dem DA-Server den folgenden Befehl aus:

    Get-NetNatTransitionConfiguration
    

    Hinweis

    Notieren Sie sich das Präfix (in der Regel ist es mit :7777:: eingebettet).

  2. Injizieren Sie das Präfix in das folgende Skript, entsprechend Ihrer Version von Windows Server. Fügen Sie bei mehreren DA-Bereitstellungen jedes Suffix durch ein Komma (,) getrennt hinzu. Außerdem sind die Anführungszeichen ("") erforderlich.

    Für Windows Server 2012 und spätere Versionen

    $prefix = ""
    $add = Get-NetIPAddress -AddressFamily IPv4 -Type Unicast -PrefixOrigin Manual
    foreach ($a in $add)
    {
    
    
    $n = ($a.IPAddress).Split(".")
    Clear-Variable c -ErrorAction SilentlyContinue
    $c;
    foreach($num in $n)
    {if ($c.Length -eq 4)
    {$c = $c + ":"
    }
    $c = $c + ("{0:X2}" -f [int]$num)
    }
    $ip = $prefix + $c;
    New-NetIPAddress -IPAddress $ip -InterfaceAlias $a.InterfaceAlias -AddressFamily IPv6 -PrefixLength 64 -Type Unicast
    }
    

    Für Windows Server 2008 R2

    $prefix = ""
    $addresses = get-wmiObject -Class Win32_NetworkAdapterConfiguration | Where-Object { ($_.IPEnabled -eq $true) } | Select-object IPAddress,InterfaceIndex
    
    Write-Host "Prefix: $prefix" -ForegroundColor Yellow
    
    foreach ($address in $addresses)
    {
    
    $a = $address.IPAddress[0];
    $idx = $address.InterfaceIndex;
    
    $n = $a.ToString().Split(".")
    foreach($num in $n)
    {
    if ($c.Length -eq 4)
    {
    $c = $c + ":"
    }
    $c = $c + ("{0:X2}" -f [int]$num)
    }
    $ip = $prefix + $c;
    Clear-Variable c;
    Write-Host "Adding DNS64 IP : $a == $ip " -ForegroundColor Green
    netsh int ipv6 add address $idx $ip
    }
    
  3. Führen Sie dieses Skript auf allen RDS-Servern aus. Das Skript nimmt die statische IP vom Netzwerkadapter auf, generiert eine NAT64-D-IPv6-Adresse und weist die Adresse dem Netzwerkadapter zu.