Wednesday, July 25, 2012

AD时间同步原理分析

对于加入域环境的客户端是与在父域中的权威服务器进行时间同步的。默认的同步时间的方法就是使用域层次,客户端会使用其所连接域中的域控来同步时间,而域控会反过来从整个林中的权威时间源来同步时间。如果在森林的根域中没有指定某个域控为权威时间源,那么拥有PDC角色域控会担当这个权威时间服务器。这台PDC会使用自己内部的时钟来为整个林的域控提供时间。
1.       如何保证所有域控制器和层次结构的PDC同步时间?如何保证所有成员服务器(客户端)与验证服务器同步时间。
由于PDC是林中默认的时间源,因此我们必须确保这个DC是永远在线的。如果我们发现PDC负载过高的话,那么就应该使用林中另外一台域控做为权威的时间源。
在森林根中的权威时间源获取时间的方式有两种。第一种就是从内网中所安装的硬件时钟设备上去获取时间。第二种就是从外部的时间服务器去获取时间。需要注意的是,如果我们没有配置权威时间服务器是从内部获取时间还是从外部获取时间,那么PDC就会使用其自己的内部时钟,也就是整个森林可靠的时间源了。
在与外部时间源进行同步时,我们是使用NTP协议来进行同步的,但NTP 协议使用的是UDP 123这个端口,因此我们一定要确保这个端口的入站和出站流量,以确保windows时间服务的正常工作。
也就是说,我们首先要保证默认情况下这个PDC这个时间源要是正确的,那么客户端与服务端就会自动进行同步了。否则就无法靠域的层级结构来同步整个域的时间了。
2.       所有与服务器、PDC服务器时间各不相同。该如何检查?
如果想使用默认的PDC来作为权威的时间源,建议是这样的
1)       首先确保PDC时间源才准确性,通常建议PDC使用外部的权威时间源(这样可以减少时间偏差和我们管理工作量)。
我们先通过下面的命令来检查,PDC现在的所使用时间源的状态:
w32tm /query /configuration
2)       如果我们想要指定外部权威时间服务器作为源,我们可以使用,下面这个命令:
w32tm /config [/computer:目标计算机] [/update] [/manualpeerlist:peers] [/syncfromflags:flag] [/reliable: (yes|No)]
例如:
        w32tm /config /update /manualperrlist:time.windows.com,time.nist.gov,time-nw.nist.lov /syncfromflags:manual /reliable:Yes
使用这个命令我们就把PDC设置成了使用time.windows.com, time.nist.gov, time-nw.nist.lov这三个作为时间源,并且是森林中的权威时间服务器。我们可以通过上面的方法,来对我们觉得有必要的所有服务进行配置。
3)       如果客户端中的windows时间服务有问题的话,我们可以通过下面的方法来重置这个服务(恢复到默认状态)。
1、打开命令行
2、键入net stop w32time来停止这服务
3、键入w32tm /unregister 来删除现在的w32时间服务配置
4、键入w32tm /register 来导入默认的时间配置
5、键入 net start w32time 来开启这个服务。
4)       如果上面所述的方法还是不能解决我们的问题,我可以使用下面的方法来启用客户端上的windows时间服务日志文件来进行排错。
1.启动注册表编辑器。
2.找到并单击下面的注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
3. 编辑 菜单上单击 新值,然后添加以下注册表值:
·  值名称: FileLogSize
数据类型: DWORD
值数据: 10000000
·  值名称: FileLogName
数据类型: 字符串
值数据: C:\Windows\Temp\w32time.log
·  值名称: FileLogEntries
数据类型: 字符串
值: 300
4. 在有问题的客户端上运行这个命令w32tm /config /update
5. 收集这个日志文件,与PDC  任意两台有问题DC的时间服务配置信息(w32tm /query /configuration
还有一些相关的问题,请参考如下问答:
1、域控制器和PDC之间同步时间这个是理论上。但是它们之间同步是否有一个确定的标准或机制?如果没有他们之间时间同步我是否可以通过一些日志或文件证明他们的同步。
首先,Windows时间服务是设计用来同步网络上计算机的时钟的。网络时钟同步的过程,也叫做时间收敛,这个过程发生于当每个计算机通过网络访问来自一个更可靠时间服务器时。时间收敛这个过程,涉及一个权威服务器把当前的时间以NTP包的形式发送给每个客户端计算机。而在这个包中所提供的信息表示了是否需要调整客户端计算机当前的时钟时间,这样就可以与更准确的服务器进行同步了。
作为时间收敛过程的一部分,域成员会试图与其在相同域内的域控进行同步时间。如果该计算机就是域控,那么它会试图与更权威的域控进行同步。
关于我们是否可以验证他们之间是否同步的问题,其实也就是监测的问题:要监测某个特定域中或计算机上的时间服务时,我们可以使用 /monitor 参数。该命令的基本语法如下:
    w32tm /monitor [/domain: 域名] [/computers: 计算机1,计算机2,计算机3,…] [/threads: N]
这里,域名是指要监测的域的DNS名,和由DNS名或IP地址指定的计算机名。如果我们没有指定某个域或计算机,那么就会使用目前我们所登录的这个域。我们要确保计算机名之间用逗号隔开,并且没有空格。 /thread参数指定了同时分析的计算机数量。默认的值是3;而允许的范围值在150之间。
2、成员服务器和客户端与它们验证服务器间同步。每台DC 的时间不一样,经过检查是它们是通过各自的硬件时钟同步的。针对这类型问题是如何引起的?怎样进一步去确认?
针对这个问题,就像我们之前说的那样,默认情况下DC是会去找PDC去同步时间的,至于为什么会变成通过各自的硬件时钟去同步,这有很多种多可能的原因,如第三方程序的干预等等。但如果Windows time service工作是正常的话,那么我们也就没必要去找其中的原因了,只有当与我们的预期不符时,我们需要知道它到底在干什么的时候,我们可以通过启用在我上一次回复中的Debug log来看时间服务到底在干什么。
3、关于无法运行命令w32tm /query,及其w32tm /register 的问题
如果无法运行这个命令是因为这个命令是windows vista windows server 2008时引入的。那么我们可以换一种办法来查看这个状态,我们可以查看这个注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\
·  Nosync表示客户端没有同步时间(就是所谓的硬件时钟)
·  NTP表示客户端从外部时间源同步时间,并且NTPServer字段定义了这个时间源
·   NT5DS表示客户端配置了使用域架构作为自己的时间同步
·  AllSync表示客户端会从任何可靠的时间源处同步时间,包括域结构和外部时间源的。
就该注册表项而言,在DC上默认值是NT5DS,在独立的客户端或服务器上是NTP
w32tm /register 这个命令不需要指定某个时间源,因为这个命令的用意是,把时间服务注册一下并向注册表添加默认的值。而这个默认值会牵涉到许多的注册表项,因此可以通过下面的这篇文档来进一步了解。

source: http://kms.lenovots.com/kb/article.php?id=7146

No comments: