为什么 VPN 修不好域内笔记本的时钟
隧道运送的是数据包,而不是共享时钟。先确定域时间的归属,再在 Kerberos 报错之前检查时间源与漫游行为。
一名远程员工连上 VPN,隧道建立起来,登录却开始失败,报出的身份验证错误里提到了时间。隧道本身并没有坏。VPN 只在网络之间转发数据包;它不会让两台机器拥有共同的时钟,而域身份验证、证书校验和审计关联都依赖彼此足够接近的时钟。由此有三个决定:域内时间归谁管、设备实际在用哪个时间源,以及设备漫游时会发生什么。
路径不是时钟
Kerberos 身份验证包含对时间敏感的数据,并会拒绝超出配置容差(Windows 域中默认为五分钟)的请求。证书带有有效期,因此时钟超前太多的设备会把有效证书当成尚未生效。多台机器的审计记录只有时钟足够接近才能相互关联,而事故复盘第一次追问“哪件事先发生”时,这一点就派上了用场。
这三种依赖都与隧道无关。建立 VPN 改变的是可达性,而可达性只是让设备能够找到时间源,它本身不是时间源。
把显示的时区与时钟本身分开。两台显示不同本地时间的笔记本可能完全同步,而两台显示同一小时的笔记本也可能相差几分钟——只要它们的时区设置不同。改时区并不是在修一块走错的表;为了让过期证书生效而把日期往回拨,会破坏机器上所有其他依赖时间的检查。
确定域内时间归谁管
加入域的 Windows 成员通常遵循 Active Directory 的时间层级,而不是每次都去询问公共服务器。这条链最终落到林根 PDC 模拟器上,它的参照就是组织权威的时间源。
有两个条件决定这个参照:策略是否允许使用外部时间服务,以及网络能否从每个站点可靠地访问到获批的内部时间源。如果两者都不明确,务实的做法是保持层级完整、修好可达性,而不是把客户端指向公共池。第三个条件决定失败路径:两个源都不可达时设备该怎么办。提前定好这一点,就能避免“在某一台笔记本上钉死公共服务器”这种临时补救。
这个选择属于域管理员和时间管理员,不属于远程接入的设计。把笔记本自己配置成可靠的时间权威,是另一种架构,而且很少是安全评审批准的那种。
读一读设备实际在用什么
在被管理的 Windows 设备上,有两条只读命令可以记录当前状态,值得在变更前后各留一份:
w32tm /query /source
w32tm /query /status
w32tm /query /configuration
记录选中的时间源、最近一次成功同步,以及 stratum 或参照标识,与设备的管理策略放在一起。一次手动同步成功,只能证明命令能用,不能证明策略能扛过重启或角色变更。
如果时间源显示的是本地 CMOS 时钟,说明设备根本没有在同步,这通常意味着启动时联系不上域控制器,或者时间服务被策略禁用了。如果显示的是公共服务器,说明有域层级之外的东西在起作用,这是策略问题,不是网络问题。
确定漫游时会发生什么
断开网络时,设备只能依靠本地时钟和它能访问到的时间提供者。笔记本会漂移,离线数周的设备偏差可能大到让重连后的第一个 Kerberos 请求失败。
重连时,设备需要域发现和预期的时间服务路径,而不仅仅是一条通往文件共享的路由。验证方法是:在网外重启、连上 VPN、再读一次时间源,而不是假设层级自己恢复了。
虚拟机又多了一个提供者。许多设计里,虚拟化平台的时间集成是合法来源,但它的角色应当有意识地选择,并与域策略协调。两个不一致的提供者会造出一块看起来稳定、其实是错的时钟。
把成员策略与权威分开
普通成员配置和权威服务器配置是两个不同的问题,变更控制也不同。把它们混在一起,正是一次例行的笔记本策略变更最终改动了整片林的参照的原因。
把决定写成四行:权威时间源、承载它的层级、漫游时的行为,以及能在设备上验证状态的命令。如果前三行有文档、第四行可重复,那么一次与时间有关的登录失败就变成五分钟的检查,而不是翻遍 VPN 日志。