SMB 2240 与 VPN:检查登录工作站列表
错误 2240 表示该账户可能无法从该工作站登录。请阅读失败登录记录并修正账户,而不是 DNS 或隧道。
通过隧道打开共享会返回错误 2240,而第一反应往往是检查路由。这个编号比那更具体。Windows 报告的是该账户可能无法从这台工作站登录,这是关于一个账户的策略声明,而不是关于可达性的声明。
把错误编号留在工单里。它把排查范围缩小到一个属性和一个事件。
2240 究竟命名了什么
网络管理错误列表把 2240 标识为 NERR_InvalidWorkstation,这个名字值得照字面理解。该账户被限制在一组允许登录的计算机之内,而正在提交凭据的这台机器并不在其中。这个定义里没有提到隧道、文件共享或密码。该属性位于账户之上,并在尝试登录时被评估。
同一家族的其他编号含义不同。违反允许登录时段是另一个代码,密码错误也是。把它们全都当作访问问题来报告,就浪费了操作系统刚刚给出的那份具体性。
限制活在账户上,所以它会跟随身份到任何进行身份验证的地方。一个每天在办公室上班、把笔记本带回家的用户,只有在机器名改变时才会遇到它,因此这个故障可以像 VPN 问题一样持续几个月,直到有人认出这个模式。
两个相关事实并不能解释它。NAT 设备可以改变观察到的源地址而不触碰账户属性,而 DNS 后缀的改变可以修正一个短名称,同时让登录限制原封不动地留在原处。两者都值得排除,而二者都不能替代读取属性。
先读失败登录记录
确定文件服务器认证的是哪个身份,以及是哪台机器提交了它。域账户、名称相近的本地账户和单独的 VPN 账户不可互换,只有知道确切是哪一个,这个错误才有意义。
安全日志会连同账户和调用方工作站名称记录这次尝试,而限制正是针对这一对来评估的:
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddHours(-2)} |
Select-Object TimeCreated,Message | Format-List
Get-ADUser -Identity jdoe -Properties LogonWorkstations |
Select-Object SamAccountName,LogonWorkstations 第一条命令显示失败以及服务器收到的工作站字符串,第二条显示账户上的允许列表。把两者对比,而不是假定客户端自己的计算机名就是服务器记录的那个。日志里看起来错误的名字通常才是有用的发现,因为它指出了服务器实际认为自己在与之通信的那台机器。限制检查的正是这个认知。
不要因为流量经过 VPN 网关就把网关的名字加进去。网关不是通过认证的调用方,把它加入列表不会改变任何东西,只会让账户更难复核。
在最小范围内修正限制
如果这台机器应该被允许,就只把这一条条目加入账户的工作站列表,其余一切保持不动。如果不应该,正确答案是换一台获批的机器,而不是移除限制,因为限制的存在就是为了限定这些凭据可以在哪里使用。
批量编辑在这里很常见,而且通常是错的。一个拥有很长允许机器列表的账户,是一个其限制已经不再意味任何东西的账户。
知道身份是否被共享也有帮助。当多个人从多台笔记本使用同一个服务账户时,工作站列表会一直增长到策略失去意义,这是设计问题,而不是管理问题。
读下一个结果,而不是读它的缺席
在获批的更改之后,用预期的账户发起新的请求,并记录发生了什么。出现另一个错误就是进展,因为它指出了下一阶段,而不是重复上一阶段。
一条 DFS 路径可能引入多台服务器和多个访问决策。清理一个账户属性只解决其中一个。引用目标仍然必须可达,每台目标上的共享和文件系统权限仍然必须接纳该账户。用同样的方式处理下一个错误,而不是假定第一次修复已经覆盖了全部。
在 Windows 报告工作站限制时,没有理由重建 VPN 配置文件或重置密码。Microsoft 的 网络错误列表 正因如此值得常开:代码会告诉你,在动手之前该检查哪个属性。