本文有助于修复使远程桌面服务器(RDS)场在 Windows Server 2008 环境中不可用的问题。
原始 KB 数: 3123137
现象
假设出现了下面这种情景:
- 你有一个 DirectAccess 环境(Edge 上的两个网络适配器、Edge 后面的两个网络适配器或 Edge 后面的单个网络适配器),包括强制隧道。
- 你有用户通过 DirectAccess 隧道从外部网络连接到远程桌面服务部署。
- 通过连接代理角色在 RDS 场上启用会话重定向。
在此方案中,所有重定向的 RDS 连接都失败。
原因
出现此问题的原因是远程桌面服务角色和服务无法识别 IPv6。 当客户端尝试连接到 RDS 部署时,连接代理将返回重定向数据包,其中包含客户端将重定向到的终结点 RDSH 的 IP 地址。 如果 RDSH 服务器只分配了 IPv4 地址,则连接代理仅返回此 IPv4 地址。 因此,客户端尝试通过 DA 隧道连接到 IPv4 地址,并且此操作会失败。
解决方法
先决条件
Windows 7 和 Windows 8.1 客户端必须安装以下更新才能通过 DA 连接连接到 RDP。 此更新修复了以下问题:如果连接到 IPv4 地址失败,客户端不会尝试连接到 IPv6 地址:
Windows 8.1 或 Windows 7 无法通过 DirectAccess 连接到远程桌面会话主机服务器场。
若要解决此问题,必须启用和应用 IPv6 IP 地址,并且内部网络必须能够进行 IPv6 路由。 若要启用此功能,请使用以下方法之一:
- 在远程桌面会话主机服务器上启用和使用 ISATAP 适配器。 请注意,此方法仅支持单个站点 DA 部署。 建议也不支持在包含多站点 DA 部署的环境中使用 ISATAP 适配器。
- 应用“解决方法”部分中介绍的方法。
详细信息
有关与 DA 相关的更多修补程序,请参阅 Windows Server 2012 DirectAccess 和 Windows Server 2012 R2 DirectAccess 的建议修补程序和更新
解决方法
若要解决此问题,请执行以下步骤:
在 DA 服务器上的管理 PowerShell 提示符下,运行以下命令:
Get-NetNatTransitionConfiguration
注意
记下前缀(它通常有 :7777::嵌入其中)。
根据你的 Windows Server 版本,将前缀注入到以下脚本中。 对于多个 DA 部署,请添加以逗号(,)分隔的每个后缀。 此外,还需要引号(“”)。
对于 Windows Server 2012 及更高版本
$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 }
对于 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 }
在所有 RDS 服务器上运行此脚本。 该脚本从网络适配器中选取静态 IP,生成 NAT64'd IPv6 地址,并将该地址分配给网络适配器。
数据收集
如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集信息中的 步骤收集用户体验问题来收集信息。