【问题背景】
某用户反馈域成员的时间突然跟域控不同步了,时间同步走了ntpupdate.tencentyun.com,如下图
【排查步骤】
查到用户的自定义镜像是基于公共镜像制作的,所以先拿公共镜像做个检验,先排除公共镜像影响
1、测试发现公共镜像2008R2~2019的确都引入了ntpserver: ntpupdate.tencentyun.com,并且时间服务(w32time)都是开机自启模式
powershell -command "& { (gwmi win32_service|where {$_.name -eq 'w32time'}).startmode }"
-command可以简写-c
powershell -c $psversiontable
powershell -v 2 -c "get-service -DisplayName *windows*time*|select Name,StartType,DisplayName
powershell -v 3 -c "get-service -DisplayName *windows*time*|select Name,StartType,DisplayName
powershell -v 4 -c "get-service -DisplayName *windows*time*|select Name,StartType,DisplayName
powershell -v 5 -c "get-service -DisplayName *windows*time*|select Name,StartType,DisplayName
PowerShell3.0后,Get-Service的结果自带了“启动类型(StartType)”,在3.0之前需要用win32_service的startmode属性
2、用regscanner扫描注册表字符串ntpupdate.tencentyun.com发现公共镜像的默认注册表如下
3、前面2点说明公共镜像配置了时间服务并且设置了开机启动,一般设置时间服务有2种方式:注册表和组策略,可参考这个帖子
运行gpedit.msc查看组策略发现是未配置,说明是通过导入.reg或其他修改注册表的方式实现的时间服务
4、对比阿里云也是跟第3点一样的注册表实现方式,这种方式有一定误导性
不同的是,阿里云时间服务启动模式是AUTO_START (DELAYED)--自动(延迟启动)
5、解析事件本身
用户反馈的域成员的时间突然跟域控不同步了,说明在某个时刻之前时间同步正常,之后才走了ntpupdate.tencentyun.com。
排查日志发现有更新记录,明确提示必须重启才能启用更新,接着就看到已启用,说明发生了重启动作。
在重启前,用户在配置域控同步时间时把域成员的时间服务关闭了,所以当时域成员走的域控同步时间,重启后由于时间服务是自动启动状态,所以就近走了域成员自身的ntpupdate.tencentyun.com同步时间。
【正确用法】域控时间同步的场景下,域成员无需任何配置,只需入域即可。以Windows系统光盘安装的系统为例,其时间服务默认并未配置,也不是开机启动。下图是我在腾讯云CVM上用.iso光盘镜像安装的2012R2原版系统,任何改动都没做。
ntpserver默认是time.windows.com
对域成员来说,无需任何配置,只需入域即可实现跟域控一样的时间。如果域成员配置了时间服务并且设置了开机启动,那么时间同步则就近走域成员自己的设置。
【思考改进】由于普通用户一般通过图形界面配置服务,高阶用户才使用注册表,当普通用户看到组策略这里显示“未配置”就以为是未配置,会对后续的其他相关配置比如域控时间同步产生误导。后续的公共镜像制作应该通过组策略的方式启用时间服务。