是否可以配置ntpd
来伪造网络源的层数?
乍一看,我认为该fudge
指令可以实现这一点,但是浏览ntp.conf(5)
手册页后,我发现该指令仅适用于参考时钟。
一些细节:
我有一个本地服务器,ntpd
作为 LAN 上客户端的主要时间源。此服务器指向 ntp.org 池,通常维护层级 3。
除了主服务器之外,我还有一个第三方网络设备,其主要任务是通过 RF 传输无线同步挂钟。该设备的规格说明称,它是“符合 RFC2030 的时间服务器”,但除此之外,它几乎就是一个黑匣子。我已将设备配置为使用主服务器作为其唯一时间源:
黑盒配置 http://www.freeimagehosting.net/uploads/21bafb12bd.png
ntpd
当我在个人电脑上配置使用主 NTP 服务器时,问题就出现了。和无线发射器作为时间源。查询本地 ntpd 时,我注意到“黑匣子”(10.xxZ)是首选的时间源:
$ ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
x10.x.x.X 69.164.222.108 3 u 48 64 177 0.501 370.029 1.530
*10.x.x.Z 10.x.x.Z 2 u 50 64 377 1.354 -23.681 14.179
由于服务器10.x.x.Z
的唯一时间源是服务器10.x.x.X
(第 3 层),它应该是层数 4。我相信制造商已经对其层数进行了硬编码。
有什么方法可以让我的机器偏向“好”(10.xxX)服务器,尽管它的层级更高?我也尝试了prefer
本地ntp.conf
文件中的指令,但无济于事,小黑盒总是获胜 :/
不管怎样,我的本地机器运行的是 Mac OS X 10.6。
$ ntpq -c rv | grep version
version="ntpd [email protected] Mon May 18 19:38:25 UTC 2009 (1)",
答案1
经过进一步的研究,似乎“捏造”了网络无法获取来源。因此我继续尝试dtoubeli 的回答令我惊讶的是,仅仅将我的本地时间服务器设置为 2 级(与第三方设备相同)并不总是会让它成为首选时间源。我的本地 ntpd 仍然会将它们都判定为“错误计时”。至于原因,我不确定,但我猜是因为它们是仅有的两个时间源,而且它们的时间相差太大。
这里最大的问题是,我的第三方设备似乎无法保持非常一致的时间,事实上它波动很大。解决我的问题的方法是将其他几个准确的时间源 (pool.ntp.org) 添加到我的/etc/ntp.conf
。现在,我的本地服务器始终被选为首选时间源,尽管它的层级比池中的某些服务器高。
答案2
您可以尝试在层 2 运行本地 ntpd。无需将其指向 pool.ntp.org,只需创建 5-7 个层 1 服务器的列表并直接将它们添加到配置中。使用层 1 的参考服务器,您的服务器将运行在层 2。然后您的prefer
选择可能会奏效。
但是,根据我的经验,层级并不总是主源选举的制胜因素。我认为延迟和抖动也有很大的影响。我曾多次注意到,尽管有几台较高层的服务器可用,但较低层的服务器被选为主源,只是因为它的延迟最低。这就是为什么我不能保证建议的方法会起作用。
答案3
我本地网络中有一个“高层 (10)”硬件 GPS 时间源,它在 ntpq 中给我一个 falsetick 状态 (x),我发现server [x.x.x.x] true
在 ntp.conf 中使用 (x=IP 地址) 将绕过 falsetick 检查,使其成为可能的候选者。看来层数并不总是意味着更高的优先级。
答案4
首选该服务器的原因之一是您的其他时间服务器最近无法访问。看到“访问量”列了吗?