我最近将我的主要时间服务器移到了另一个系统,例如old.fqdn
。new.fqdn
所有下属 ntpd 守护进程都使用ntp.fqdn
作为服务器,该服务器现在是一个指向的 CNAME new.fqdn
,即host ntp.fqdn
在该系统上产生:
ntp.fqdn is an alias for new.fqdn.
new.fqdn has address xxx.xxx.xxx.xxx
然而ntpq -p
结果是:
remote refid st t when poll reach delay offset jitter
==============================================================================
old.fqdn .INIT. 16 u - 1024 0 0.000 0.000 0.000
这是一致的,因为old.fqdn
已被关闭。但为什么它会坚持使用那台服务器呢?这是/etc/ntp.conf
:
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server ntp.fqdn iburst
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
当然,ntpd
在 DNS 更改后已经重新启动。还ntpdate -s ntp.fqdn
能够同步,网络上使用完全相同配置的其他系统可以完美运行。唯一明显的区别是这些系统old.fqdn
以前从未使用过。还有其他地方ntpd
可以保存其父服务器的记录吗?
系统是当前的 Debian Jessie:ntp 1:4.2.6.p5+dfsg-7+deb8u2,amd64
更新:apt-get --purge remove ntp && apt-get install ntp
我开始在工作站上重新安装 ntp ( )。重新安装后,相同的配置按预期工作。
解决方案:原因是 ntpd 不是用 启动的/etc/ntp.conf
,而是用 启动的/var/lib/ntp/ntp.conf.dhcp
。后者的 IP 是old.fqdn
硬编码的。是的,过去系统是通过 DHCP 配置的,但现在不是了。
Debian 启动脚本/etc/init.d/ntp
会检查该文件是否存在,并将其用于配置。因此,解决问题的方法是删除/var/lib/ntp/ntp.conf.dhcp
。不知道为什么我没有ps aux
早点检查。
答案1
使用该指令时,NTP 不会自动重试 DNS 查找server
。切换server
到pool
并重新启动 NTP 以获取此行为。
答案2
我认为,ntpd
将第一个 PTR 记录作为服务器名称返回,并且它是old.fqdn
。如果您删除此记录,您将获得new.fqdn
与时间服务器相同的 ip 地址的第二个 PTR 记录。Ntpd 使用 ip 地址,它在启动时将域名解析为 ip。
你可以在工作站上通过命令查看这个IP地址:
ntpq -p -n localhost