本文介绍了如何排查在 SMB 协商、会话设置和树连接请求期间发生的故障。
协商失败
SMB 服务器从 SMB 客户端收到一个 SMB NEGOTIATE 请求。 连接超时,并且在 60 秒后重置。 大约 200 微秒后可能存在 ACK 消息。
此问题通常是由防病毒程序引起的。
如果使用 Windows Server 2008 R2,则存在此问题的修补程序。 请确保 SMB 客户端和 SMB 服务器是最新的。
会话设置失败
SMB 服务器从 SMB 客户端接收 SMB SESSION_SETUP请求,但未能响应。
如果在通用命名约定(UNC)路径中使用服务器的完全限定域名(FQDN)或网络基本输入/输出系统(NetBIOS)名称,Windows 将使用 Kerberos 进行身份验证。
在协商响应之后,将尝试获取服务器的通用 Internet 文件系统 (CIFS) 服务主体名称 (SPN) 的 Kerberos 票证。 查看 TCP 端口 88 上的 Kerberos 流量,确保 SMB 客户端获取令牌时没有 Kerberos 错误。
注意
Kerberos 预身份验证期间发生的错误是正常的。 Kerberos 预身份验证之后发生的错误(身份验证不起作用的实例)是导致 SMB 问题的错误。
此外,请执行以下检查:
- 查看 SMB SESSION_SETUP 请求中的安全 Blob,以确保发送正确的凭据。
- 尝试禁用 SMB 服务器名称强化 (SmbServerNameHardeningLevel = 0)。
- 确保在通过 CNAME DNS 记录访问 SMB 服务器时具有 SPN。
- 确保 SMB 签名正常工作。 (这对于较旧的第三方设备尤其重要。)
树连接失败
确保用户帐户凭据对文件夹具有共享和 NT 文件系统 (NTFS) 权限。
可以在 3.3.5.7 接收 SMB2 TREE_CONNECT 请求中找到常见树连接错误的原因。 下面是两个常见状态代码的解决方案。
-
[STATUS_BAD_NETWORK_NAME]确保共享存在于服务器上,并且它在 SMB 客户端请求中拼写正确。
-
[STATUS_ACCESS_DENIED]验证共享使用的磁盘和文件夹是否存在且可访问。
如果使用的是 SMBv3 或更高版本,请检查服务器和共享是否需要加密,但客户端不支持加密。 为此,请执行以下操作:
-
通过运行以下 cmdlet 检查服务器。
Get-SmbServerConfiguration | select Encrypt*如果
EncryptData且RejectUnencryptedAccess为 true,服务器需要加密。 -
通过运行以下 cmdlet 检查共享:
Get-SmbShare | select name, EncryptData如果
EncryptData共享上为 true,且RejectUnencryptedAccess在服务器上为 true,则共享需要加密
在进行故障排除时,请遵循以下准则:
- Windows 8、Windows Server 2012 及更高版本的 Windows 支持客户端加密(SMBv3 及更高版本)。
- Windows 7、Windows Server 2008 R2 和早期版本的 Windows 不支持客户端加密。
- Samba 和第三方设备可能不支持加密。 有关详细信息,可能需要查阅产品文档。
参考
有关详细信息,请参阅以下文章。