在您的模块上拥有正确的时间对于各种活动都是至关重要的,包括日志同步和安全证书验证。从15.1版开始,VOS提供了一个网络时间协议守护程序(ntpd)的端口,强烈建议你运行它。
通常情况下,要运行ntpd,你需要向它提供一个时间服务器的列表,网络上的主机也运行ntpd,并且会向任何询问的主机提供时间。互联网上有大量的时间服务器,你可以使用。看看http://www.pool.ntp.org/en/,它是按地区组织服务器的。
我建议列出一台或三台(或更多)服务器,千万不要列出两台。ntpd试图通过比较服务器的响应来确定哪台服务器最好。如果只列出两个服务器,ntpd有可能无法做出决定,最终不使用任何一个服务器。
但是,如果你的公司的政策阻止你访问互联网上的时间服务器,而你又没有公司指定的时间服务器,你应该怎么办?在这种情况下,你也许可以使用本地的Microsoft Windows域控制器(DC)或备份域控制器(BDC)。大多数DC和BDC都会提供时间服务。
那么作为一个VOS管理员,如何才能找到本地的DC或BDC呢?最简单的方法是询问,但假设这不是一个选项,你可以运行数据包监控,自己寻找。工作站和域控制器都会在UDP138端口上定期广播。
命令
>system>stcp>command_library>packet_monitor -interface #INTERFACE-numeric(数字)。
-time_stamp -verbose -pkt_hdr -hex_header -hex_dump -length 1500 -filter -port 138。
|
图1 - packet_monitor命令 |
将会显示这些广播(确保用你的IP接口的名称代替INTERFACE)。不幸的是,为了找到时间服务器,你需要查看数据包中的十六进制数据,而且由于可能会有很多数据包要经过,你需要将数据包转储到一个文件中。我的pm.cm命令宏(你可以在这里找到这个宏)会自动创建一个out文件,并作为一个启动的进程运行跟踪。out文件的名字是pm.(date).(time).out。命令如下
pm #INTERFACE-no_arp -no_icmp -port 138。 |
图2 - pm命令宏 |
无论你如何开始跟踪,让它运行15到20分钟,你应该从网络上的每个DC和BDC得到一个广播。接下来搜索其中含有字符串'c0 3'和'c0 2'的行;也就是小写的C、0、四个空格和3或2。这个数字对应的是偏移量c0处的上位字节。该字节可以被解码为
ABCD EFGH ^^^^ ^^^^ |||| ||||--主机为工作站 |||| ||||------主机是服务器 |||||---- 主机不是SQL服务器。 |||| |----- 主机不是域控制器。 ||||------- 主机是备份域控制器 |||-------- 主机是一个时间服务器。 |--------- 主机不是苹果主机。 |---------- 呼叫:---------- 主机不是Novell主机。 |
图3 - 服务器类型字节解码 |
正如你所看到的,搜索前三两个可能不会得到所有的时间服务器,但除非你运行一个专属的小说或苹果网站,它应该得到至少一个DC或BDC。
d pm.11-02-06.17:25:06.out -match 'c0 2'
ready 17:47:13
d pm.11-02-06.17:25:06.out -match 'c0 3'
%phx_vos#m15_mas>SysAdmin>Noah_Davids>pm.11-02-06.17:25:06.out 11-02-06 17:47
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
ready 17:47:29
|
图4--packet_monitor线路匹配时间服务器和备份域控制器 |
仅仅找到"c0"行是不够的。你还需要找到发送数据包的主机的地址。在 >system>gnu_library>bin 目录下的 grep 命令可以在多行中找到匹配的内容。
grep -e 'c0 3' -e 'c0 2' -e UDP pm.11-02-06.17:25:06.out
. . . .
UDP from 192.168.33.180.138 to 192.168.33.255.138 Cksum 7ca3, 220 data bytes.
UDP from 192.168.33.249.138 to 192.168.33.255.138 Cksum c89a, 209 data bytes.
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
. . . .
UDP from 192.168.33.50.138 to 192.168.33.255.138 Cksum 9526, 193 data bytes.
UDP from 192.168.33.248.138 to 192.168.33.255.138 Cksum d05f, 209 data bytes.
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
. . . .
UDP from 192.168.33.202.138 to 192.168.33.255.138 Cksum cf35, 219 data bytes.
UDP from 192.168.33.253.138 to 192.168.33.255.138 Cksum 9505, 209 data bytes.
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
. . . .
UDP from 192.168.33.131.138 to 192.168.33.255.138 Cksum aa35, 222 data bytes.
UDP from 192.168.33.252.138 to 192.168.33.255.138 Cksum 7343, 209 data bytes.
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
. . . . .
|
图5--packet_monitor线显示被发现的时间服务器。 |
时间服务器的地址出现在紧靠"c0"行的那几行。在上图中,我们已经确定了192.168.33.249、192.168.33.248、192.168.33.253和192.168.33.252。
现在我们已经确定了那些宣传自己是时间服务器的主机,那么我们如何确保它们能够工作呢?ntpdate命令可以用来手动查询每个时间服务器。使用"-q"参数只查询时间服务器,此时我们不希望ntpdate也设置模块的时间。
ntpdate -q 192.168.33.248。
寻找主机192.168.33.248和服务ntp。
找到主机:dc48.noahslab.stratus.com。
服务器192.168.33.248,stratum 4,偏移量-0.117418,延迟0.04202。
2月6日 17:53:10 ntpdate[1427079382]: 调整时间服务器 192.168.33.248 偏移量 -0。
+.117418秒
准备好了 17:53:10
ntpdate -q 192.168.33.249。
寻找主机192.168.33.249和服务ntp。
找到主机:dc49.noahslab.stratus.com。
服务器192.168.33.249,stratum 4,偏移量-0.038709,延迟0.04355。
2月6日 17:53:25 ntpdate[1427079382]: 调整时间服务器 192.168.33.249 偏移量 -0。
+.038709秒
准备好了 17:53:25
ntpdate -q 192.168.33.252。
查找主机192.168.33.252和服务ntp。
找到主机:dc52.noahslab.stratus.com。
服务器192.168.33.252,层数3,偏移量0.015733,延迟0.04216。
6 Feb 17:53:38 ntpdate[1427079382]: 调整时间服务器 192.168.33.252 offset 0.
+015733 秒
准备好了 17:53:38
|
图6 - 使用ntpdate测试发现的时间服务器 - 工作服务器 |
假设其中一个服务器有一个防火墙策略,即使它建议它提供时间,它也不能提供时间,ntpdate将显示以下内容。
ntpdate -q 192.168.33.254。
寻找主机192.168.33.254和服务ntp。
找到主机:dc54.noahslab.stratus.com。
服务器192.168.33.254。 0层,偏移量0.000000,延迟0.00000。
6 Feb 17:54:00 ntpdate[1427079382]: 没有适合同步的服务器
+d
准备就绪 17:54:00
|
图7 - 使用ntpdate测试发现的时间服务器 - 非工作服务器 |
现在你已经知道了你可以使用什么时间服务器,你可以按以下方式编写>system>ntp>ntp.conf文件。所有黑色的内容都来自sample_ntp.conf.17.0文件,新的字符是在 绿化.注 意在"server foo.bar.somewhere.com"一行前面加上的注释字符。restrict语句通过防止其他主机对ntp守护进程进行非时间查询,提高了系统的安全地位。
# 服务器指令表示从哪里获取时间。
# 它们可以是DNS或IP值,每个指令一个。
# 服务器foo.bar.somewhere.com
服务器192.168.33.248 burst iburst
服务器192.168.33.249 burst iburst
服务器192.168.33.252 burst iburst
# logile的家。 选择一个好的相对路径--VOS绝对路径
# 路径名无法正确解析。
logfile >system>ntp>ntp.logfile。
# driftfile的主页。
driftfile >system>ntp>ntp.drift。
# 这些语句将防止从本地主机以外的任何主机进行非时间查询。
限制默认noquery
限制127.0.0.1
|
图8 - 更新的 >system>ntp>ntp.conf文件 |
启动ntpd命令(在>system>ntp目录下有一个sample_start_ntpd.17.0),几分钟后你应该会看到类似下面的内容。192.168.33.252 前面的"*"表示那是 ntpd 选择的服务器。192.168.33.248前面的"+"表示在192.168.33.252没有响应的情况下的另一个好选择。只要在第一列中有一行是"*",您就知道该模块的时间将与时间服务器同步。但是,请记住,当模块和时间服务器之间的初始差异较大时,时间可能需要一段时间才能收敛。
ntpq -n
ntpq> 同行
遥测达到延时偏移抖动时,远程遥控遥控遥控。
==============================================================================
+192.168.33.248 192.168.33.252 4 u - 1024 377 1.312 -1549.3 639.489
192.168.33.249 192.168.33.252 4 u 626 1024 377 132.423 15.202 27.797
*192.168.33.252 192.168.33.51 3 u 802 1024 377 0.964 -27.486 2.993
|
图9 - 使用ntpq确认时间同步。 |
最后,ntpd既是客户端又是服务器,所以一旦它在一个VOS模块上运行,它就可以作为其他模块或网络上任何其他模块的时间服务器。