答案1
有几个原因:
计算机名称可能与多种的IP 地址。例如,IPv4 地址和 IPv6 地址是典型的。
在双栈 (v4+v6) 网络中,按名称建立的连接将首先尝试 IPv6 地址 - 因此,如果 IPv4 地址错误或没有路由,则很长时间内都不会有人注意到。
在 PowerShell 中使用
Resolve-DnsName <host> | fl
来验证您正在尝试的域实际上解析为您拥有的地址。在 Active Directory 环境中,RDP 使用 Kerberos 进行身份验证。Kerberos 有点像 TLS,它不仅对客户端进行身份验证,还会对服务器进行身份验证 - 它会验证您请求的计算机名称是否是您实际访问的名称。
然而,在几乎所有的设置中,仅有的该名称(而不是任何 IP 地址)在 Kerberos 中注册(这再次很像大多数网站仅为其域名而不是其 IP 地址提供 TLS 证书;毕竟,后者是有点短暂的)。
这意味着通过 IP 地址(或任何未在 Kerberos 注册为服务器 SPN 的名称)进行连接将阻止客户端完成 Kerberos 身份验证。通常它会回退到 NTLM(与非 AD 环境中相同),但如果 AD 环境得到妥善处理,它将完全禁用 NTLM或者至少启用 NTLM SPN 强制执行(后者再次要求输入的名称与到达的名称匹配),因此无法连接到 IP 地址。
现代 RDP 使用 TLS 进行传输安全,并且服务器具有 TLS 证书。在 AD 环境中,您通常看不到它(Kerberos 会覆盖 TLS 证书检查),但如果 Kerberos 因名称不匹配而失败并且客户端回退到 NTLM,则将要检查服务器的 TLS 证书。
再次强调,该证书通常仅针对 RDP 服务器的名称颁发。通常不匹配会导致 RDP 客户端弹出“接受此证书”提示,但客户端计算机很可能配置了策略,需要证书验证成功。(连接到不受信任的 RDP 服务器比 SSH 等具有更大的风险。)