错误 720 出现在凭据被接受之后,这正是它把人们打发回密码框的原因。连接已经走到协商地址的阶段,却没有拿到地址。两种截然不同的故障会产生同一个对话框:服务器没有可分配的地址,或者这台客户端无法完成协商。在动手之前先把这两者分开,就是修复的大部分工作,这一区分记录在 Microsoft 的错误 720 疑难解答页面上。

对话框没有说出的部分

这条消息描述的是PPP 协商失败,而且它故意含糊,因为客户端看不到服务器为什么拒绝。它不是凭据错误,也不是关于隧道加密的结论。它的意思是地址或协商参数没有被送达。

在服务器一侧,常见原因是分配:没有空闲地址的 RRAS 静态地址池,或者作用域已耗尽或不可达的 DHCP 配置,会让每一个尝试的客户端都出现完全相同的症状。在客户端一侧,常见原因是绑定。承载 PPP 的 WAN Miniport 必须绑定到正确的组件,被禁用的绑定或插入的网络筛选器可以在没有任何可见设备问题的情况下中断协商。这两类问题需要不同的证据,而区分它们最快的办法是数一数有多少客户端受影响。

先分清范围,再看地址池

在阅读任何配置之前,先统计受影响的客户端数量。同时击中所有人的故障是服务器状态,而跟随单台机器跨网络出现的故障是客户端状态。这次统计只需在聊天频道里发一条消息,却能省下一个下午。

ArtifactHow you get itWhat it rules outWhat it cannot rule out
Affected-client countOne message to the people who failed, or a search of today's ticketsA client-only fault, when every client failed within minutesWhich server-side component stopped allocating
RRAS event for one attemptGet-WinEvent on the System log, filtered to the allocation event idAn allocation failure, when no event matches that attemptA binding fault that appears later in the same negotiation
Hidden WAN Miniport bindingsGet-NetAdapter with hidden adapters, then the binding list on the returned nameA disabled ms_wanarp binding or an inserted filter on this clientPool exhaustion that would also have hit other clients
Free-address countThe RRAS pool view, or the DHCP scope statisticsA committed static range or an exhausted scopeWhy the address was not delivered to one specific client

然后把一次失败尝试与服务器自身的记录对应起来,因为 RRAS 在无法分配时会记录一个事件,而该事件指出的是故障而不是症状。如果故障跟随某台特定客户端,服务器日志对那次尝试不会显示任何内容,这本身就是信息。分配错误缺失,就把问题收窄到该客户端的协商上,并告诉你接下来该运行哪些命令。

Get-WinEvent -LogName System -MaxEvents 500 | Where-Object { $_.Id -eq 20167 }
Get-NetAdapter -IncludeHidden | Where-Object { $_.InterfaceDescription -like "WAN Miniport*" }

读取服务器的分配状态

在 RRAS 一侧,要确认实际配置的是哪种分配方式,而不是文档假设的那一种。静态地址池和经 DHCP 转发的配置失败方式不同,修复属于正在使用的那一种。对于静态地址池,统计空闲地址,并查找那些持有无人记得授予的租约的按用户分配,因为看起来很大的地址池可能已被完全占用。对于 DHCP,检查中继能否到达服务器,以及作用域是否还有空闲租约。

被普通客户端耗尽的作用域会产生与配置错误的地址池相同的 720,而 RRAS 控制台在两种情况下看起来都完全健康。不要沿用把地址池拆成更小范围的旧做法:最初的建议只描述了一位管理员的结果,而且它并不能修复服务器自身事件可以直接指名的分配故障。

在不破坏绑定的前提下读取客户端绑定

如果证据指向单台客户端,就检查隐藏的适配器,而不是重装协议栈。第一条命令列出 WAN Miniport 接口及其名称;第二条使用的是它返回的名称,而不是从指南里抄来的名称。

Get-NetAdapterBinding -Name "<name>" -IncludeHidden -AllBindings

阅读列表时要留意地址解析绑定和第三方筛选器。被禁用的绑定是有针对性的修复,而筛选器的存在则该去问那款软件的负责人,而不是当作关闭安全产品的许可。删除所有适配器是唯一会毁掉证据的举动,一旦故障复发你就需要这些证据。

修正之后,重试同一个配置文件,如果那是最初的症状,再重复双客户端的情形,因为第一次连接成功会掩盖第二个客户端才暴露的分配问题。把记录控制在四个字段:哪台客户端、哪个绑定、哪个事件、改了什么。每次尝试也只改动一层,因为客户端修复和地址池改动同时施加就无法归因,而下一次故障看起来会是新的,其实还是同一个。

相关文章