Apache Guacamole 使用域 A 中的用户登录,通过 rdp 连接到域 B 中的服务器

Apache Guacamole 使用域 A 中的用户登录,通过 rdp 连接到域 B 中的服务器

概述

我们以域 A 的用户身份登录 Gucamole,然后选择与域 B 的服务器的 rdp 连接。

信托

DomainA 到 DomainB 以及反之亦然:

  • 类型: 外部
  • Kerberos AES 加密支持:否
  • 方向:双向
  • 及物性:否
  • 身份验证:全域

权限

域 A 中的用户已加入域 B 服务器上的本地远程桌面用户组。还临时尝试加入本地管理员组。

鳄梨

整个设置不是我做的,而且由于它由另一个团队管理,所以我没有太多见解。我所知道的是,它可以很好地与来自 DomainA 的用户和来自 DomainA 的服务器配合使用。用户使用 upn 登录并使用 OpenOTP 的 2FA。如果你们认为分享一些 Guacamole 的配置会有所帮助,请告诉我你们想看到什么,我会与团队核实。

鳄梨酱上的联系

  • 协议:rdp
  • 主机名:DomainB 的服务器 IP
  • 端口:3389
  • 用户名:${GUAC_USERNAME}
  • 密码:${GUAC_PASSWORD}
  • 域名:空白
  • 安全模式:NLA
  • 禁用身份验证:否
  • 忽略服务器证书:是
  • 其余一切都设置为默认/未配置

当然,我们尝试了多种不同的设置。

症状

现在发生了以下事情。

  • 我使用 DomainA 中的用户登录 Guacamole
  • 接收 OpenOTP 推送并确认
  • 登录 Guacamole 并选择连接到 DomainB 的服务器
  • 收到错误信息:

远程桌面服务器当前无法连接。如果问题仍然存在,请通知您的系统管理员,或检查您的系统日志。

  • 重试几次后我有时会收到此消息:

由于服务器响应时间过长,此连接已关闭。这通常是由网络问题引起的,例如无线信号不稳定或网速慢。请检查您的网络连接并重试或联系您的系统管理员。

  • 现在到了让我抓狂的搞笑部分:我能够通过直接 RDP 使用来自 DomainA 的用户登录到 DomainB 的服务器,如果我这样做,保持连接打开并在 Guacamole 上启动连接,我能够接管会议!

日志

鳄梨酱日志根本没有显示任何有用的东西。

Windows 安全日志在登录错误时显示此事件:

EventID 4625, Logon
An account failed to log on.

Subject:
    Security ID:        NULL SID
    Account Name:       -
    Account Domain:     -
    Logon ID:       0x0

Logon Type:         3

Account For Which Logon Failed:
    Security ID:        NULL SID
    Account Name:       User (correct)
    Account Domain:     DomainA (correct)

Failure Information:
    Failure Reason:     An Error occured during Logon.
    Status:         0xC000005E
    Sub Status:     0x0

Process Information:
    Caller Process ID:  0x0
    Caller Process Name:    -

Network Information:
    Workstation Name:   f7054e3b9dd7
    Source Network Address: Guacamole-Server-IP
    Source Port:        0

Detailed Authentication Information:
    Logon Process:      NtLmSsp 
    Authentication Package: NTLM
    Transited Services: -
    Package Name (NTLM only):   -
    Key Length:     0

This event is generated when a logon request fails. It is generated on the computer where access was attempted.

The Subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.

The Logon Type field indicates the kind of logon that was requested. The most common types are 2 (interactive) and 3 (network).

The Process Information fields indicate which account and process on the system requested the logon.

The Network Information fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.

The authentication information fields provide detailed information about this specific logon request.
    - Transited services indicate which intermediate services have participated in this logon request.
    - Package name indicates which sub-protocol was used among the NTLM protocols.
    - Key length indicates the length of the generated session key. This will be 0 if no session key was requested.

故障排除

现在,我不知道下一个焦点应该放在哪里。我们已经尝试了 Guacamole rdp 连接的多种设置。在网上做了很多研究,但找不到有人尝试与我们相同操作的示例信息。由于常规 rdp 工作正常,我们认为我们的信任和权限应该没问题。

你们能给我一些提示,告诉我应该朝哪个方向调查吗?

是否有人以类似的方式使用鳄梨酱?

编辑 用户 Swisstone 建议的附加事件查看器信息:

RemoteDesktopServices-RdpCoreTS
08:38:23 Info: The server accepted a new TCP connection from client *Guacamole-IP*:53494.
08:38:23 Info: Connection RDP-Tcp#78 created 
08:38:23 Info: Interface method called: PrepareForAccept
08:38:23 Info: Interface method called: SendPolicyData
08:38:23 Info: PerfCounter session started with instance ID 78
08:38:23 Warning: TCP socket was gracefully terminated
08:38:23 Info: Interface method called: OnDisconnected
08:38:23 Info: The server has terminated main RDP connection with the client.
08:38:23 Info: During this connection, server has not sent data or graphics update for 0 seconds (Idle1: 0, Idle2: 0).
08:38:23 Info: Channel rdpinpt has been closed between the server and the client on transport tunnel: 0.
08:38:23 Info: Channel rdpcmd has been closed between the server and the client on transport tunnel: 0.
08:38:23 Info: Channel rdplic has been closed between the server and the client on transport tunnel: 0.
08:38:23 Info: The disconnect reason is 14

TerminalServices-LocalSessionManager
nothing during this time

TerminalServices-RemoteConnectionManager
nothing during this time

忘了说了,服务器是2019版1809

編輯2

好的,我通过将连接上的安全模式更改为 tls 使其现在正常工作。我记得以前尝试过 tls,当时它不起作用。也许我在整个故障排除过程中所做的某些更改产生了影响。到现在为止,我不知道那是什么。

在我发现 guacamole 使用 freerdp 进行 rdp 连接后,我通过随机尝试使用 freerdp 进行连接的不同选项找到了这个“解决方案”。

在这种情况下,有人认为使用 tls 而不是 nla 存在问题吗?

答案1

我让整个事情为我工作,并在此总结我以这种方式收集的信息:

相信

我的问题中提到的信托就非常适合这个目的。我相信其他一些选择也会有效。

权限

DomainA 中的用户是 DomainA 的 UniversalGroup 的成员。此 UniversalGroup 是 DomainB 中的 LocalGroup 的成员,而后者又是目标服务器的本地管理员组的成员。

鳄梨

我们使用upn进行登录,设置连接如下:

protocol: rdp
hostname: ip of server from DomainB
port: 3389
username: ${GUAC_USERNAME}
password: ${GUAC_PASSWORD}
domain: blank
security mode: tls
disable authentication: no
ignore server certificate: yes
everything else is set to default / not configured

网络

确保允许域控制器之间的连接:如何为 Active Directory 域和信任配置防火墙

如果您想从域 B 的服务器浏览域 A 的 GC,请允许此连接的 LDAP 端口。

我仍然不知道

如果 NLA 是一个优势,我将如何利用它。

现在我会保持原样。

编辑

现在我很确定我需要一个森林信托使用 NLA 的方式尝试登录服务器 (UPN)

編輯2

现在我 100% 确定我需要使用 UPN 的 NLA 进行 RDP 的森林信任。我找到了一个,测试过,有效。

相关内容