ntpd -g 不同步时钟

ntpd -g 不同步时钟

来自ntpd手册页

If time is more than 1000s from the server time, ntpd assumes something must be terribly wrong and the only reliable action is for the operator to intervene and set the clock by hand. This causes ntpd to exit with a panic message to the system log. The -g option overrides this check and the clock will be set to the server time regardless of the chip time

我做了一个小实验来测试-gntpd 选项。首先,我使用 date 命令将系统时钟时间更改为某个旧时间。

date -s 2021.06.15-19:10:21

之后我创建了/etc/ntp.conf包含以下信息的小文件

driftfile  /etc/ntp.drift
logconfig =syncstatus
server time.google.com minpoll 3 maxpoll 4

之后我ntpd使用以下命令运行

ntpd -g -n -4 -c /etc/ntp.conf &

请注意我的ntp.drift文件是空的。

我没有看到系统时间的变化,事实上 ntp 状态显示时钟未同步。

GW:/# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
  ==============================================================================
    time2.google.co .GOOG.           1 u    -   64    1    0.000   +0.000   0.000


Clock is not synchronized, stratum 16, reference is INIT
frequency is +0.000 Hz, precision is -19
reference time is (no time),
clock offset is +0.000000 msec, root delay is 0.000 msec
root dispersion is N/A

有人能帮帮我吗?我是否遗漏了任何配置或其他数据。

除此之外,我还有一个小问题

ntp 时钟是否需要同步才能进行 ntp 身份验证?如果 ntp 时钟不同步,则 ntp 服务器身份验证将通过。

编辑:

以下是我启动 ntpd 时产生的日志

GW:~/var/log# cat ntpd.log
15 Jun 19:21:03 ntpd[14560]: Listen and drop on 0 v4wildcard 0.0.0.0:123
15 Jun 19:21:03 ntpd[14560]: Listen normally on 1 lo 127.0.0.1:123
15 Jun 19:21:03 ntpd[14560]: Listen normally on 2 srcr2 192.168.0.2:123
15 Jun 19:21:03 ntpd[14560]: Listen normally on 3 log0 1.0.0.1:123
15 Jun 19:21:03 ntpd[14560]: Listening on routing socket on fd #20 for interface updates
15 Jun 19:21:03 ntpd[14560]: kernel reports TIME_ERROR: 0x2041: Clock Unsynchronized
15 Jun 19:21:03 ntpd[14560]: kernel reports TIME_ERROR: 0x2041: Clock Unsynchronized

更新

@John 我按照你的建议做了但仍然遇到同样的问题

GW:~/var/log# systemctl status ntpd
ntpd.service - NTPD daemon


Loaded: loaded (/etc/systemd/system/ntpd.service; disabled;   vendor  preset: enabled)
Active: active (running) since Fri 2021-07-09 08:17:46 UTC; 6min ago
Process: 21151 ExecStart=/bin/sh -c /sbin/ntpd -g  >> /var/log  /ntpd.log 2>&1  (code=exited, status=0/SUCCESS)
Main PID: 21153 (ntpd)
CGroup: /system.slice/ntpd.service
       └─21153 /sbin/ntpd -g
       

cat /etc/ntp.conf 
 # use a random selection of 4 public stratum 2 servers
 # see http://twiki.ntp.org/bin/view/Servers/NTPPoolServers
 #restrict default nomodify notrap noquery
 #restrict default noquery

logfile /var/log/ntpd.log
driftfile  /etc/ntp.drift
logconfig =syncstatus

server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst
#tried pool time.google.com also


GW:~/var/log# ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
1  8426  9014   yes   yes  none    reject   reachable  1
2  8427  9014   yes   yes  none    reject   reachable  1
3  8428  9014   yes   yes  none    reject   reachable  1
4  8429  9014   yes   yes  none    reject   reachable  1

GW:~/var/log# ntpq -c lpeer
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 time1.google.co .GOOG.           1 u    -   64  377    0.000   +0.000   0.000
 time2.google.co .GOOG.           1 u    -   64  377    0.000   +0.000   0.000
 time3.google.co .GOOG.           1 u    -   64  377    0.000   +0.000   0.000
 time4.google.co .GOOG.           1 u    -   64  377    0.000   +0.000   0.000


GW:~/var/log# cat ntpd.log
9 Jul 08:17:46 ntpd[21153]: Listen and drop on 0 v6wildcard [::]:123
9 Jul 08:17:46 ntpd[21153]: Listen and drop on 1 v4wildcard 0.0.0.0:123
9 Jul 08:17:46 ntpd[21153]: Listen normally on 2 lo 127.0.0.1:123
9 Jul 08:17:46 ntpd[21153]: Listen normally on 3 srcr2 192.168.0.2:123
9 Jul 08:17:46 ntpd[21153]: Listen normally on 4 log0 1.0.0.1:123
9 Jul 08:17:46 ntpd[21153]: Listening on routing socket on fd #21 for interface updates
9 Jul 08:17:46 ntpd[21153]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized
9 Jul 08:17:46 ntpd[21153]: kernel reports TIME_ERROR: 0x41: Clock Unsynchronized

GW:~/var/log#

你能检查一下吗?我遗漏了什么吗?

更新

Pasting ntpd association output

GW:/# ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1 47211  9014   yes   yes  none    reject   reachable  1
  2 47212  9014   yes   yes  none    reject   reachable  1
  3 47213  9014   yes   yes  none    reject   reachable  1
  4 47214  9014   yes   yes  none    reject   reachable  1

网关:/# 网关:/#

 GW:/# ntpq -c "rv 47211"
 associd=47211 status=9014 conf, reach, sel_reject, 1 event,   reachable, 
srcadr=time1.google.com, srcport=123, dstadr=192.168.0.2,  dstport=123,
leap=00, stratum=1, precision=-20, rootdelay=0.000,   rootdisp=0.107,
refid=GOOG, reftime=e4a0073d.cba4777a  Mon, Jul 19 2021 14:14:21.795,
rec=e4a0073d.cba4777b  Mon, Jul 19 2021 14:14:21.795, reach=017,
unreach=0, hmode=3, pmode=4, hpoll=6, ppoll=6, headway=347,
flash=400 peer_dist, keyid=0, offset=+0.000, delay=0.000,
dispersion=15937.500, jitter=0.000, xleave=0.033,
filtdelay=  2833222 2833222 2833222 2833222 2833222 2833222 2833222 2833222,
filtoffset= +141661 +141661 +141661 +141661 +141661 +141661 +141661 +141661,
filtdisp=   16000.0 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0 16000.0

答案1

通常在允许 NTP 通过任何防火墙后,会处理前几个数据包(增加覆盖范围),选择一个系统对等体,然后第一步修复时间。此系统有可访问的对等体,但拒绝了所有对等体,这很奇怪。

查看 readvar 输出后, rootdelay=0.000发现没有意义。通过互联网远程控制,不能为零。这可能是您收到距离阈值超出的闪存字样的原因。

一个理论来自IRC是 NTP 数据包被某些中间件破坏了。如果这是真的,那就糟了,因为它显然破坏了 NTP。ntpd 应用 dscp到其数据包,但 ntpdate 不。尝试dscp 0在 ntp.conf 中询问路径中是否有区分服务感知框。对 NTP 数据包进行数据包捕获 (tcpdump) 并在 Wireshark 中查看。看看它是否可以解析任何 DSCP 字段,并使用 NTP 时间戳包装 NTP 数据包。

还要在完全不同的网络中研究 ntpd,以对比它在工作时的样子。ntpd 可以在任何东西上运行,因此可能是工作站上的虚拟机。

以下是我原来的回答以及对该配置的批评。


记录的到达时间只有 1。启动 ntpd 后等待 3 分钟。需要一些时间才能返回前几个数据包。

关于您的配置:

server time.google.com minpoll 3 maxpoll 4

考虑添加iburst到您的服务器和池线路。启动时初始突发几个数据包,延迟较短。

我不相信配置minpoolmaxpool一个好主意,Red Hat 也不是。如果持续时间太频繁,公共 NTP 服务可能会阻止您。ntpd 已经擅长动态选择池间隔。

需要更多 NTP 服务器,理想情况下是 4 个,用于通过 n+1 冗余检测虚假报价。Google 公共 NTP有 4 个前端,您可以使用pool指令或多个服务器行。您可以随意添加其他 NTP 服务作为第二种意见,例如2.pool.ntp.org。(但是您将会得到一个混乱的闰秒涂抹如果您的 NTP 服务器不同意这一点。)

不,公共 NTP 服务不需要 NTP 身份验证。身份验证不是您的问题,允许较大的步长和调整轮询速率才是问题。

我建议对服务器行进行如下更改:

pool time.google.com iburst

至于如何启动 ntpd:

ntpd -g -n -4 -c /etc/ntp.conf &

-g选项对于修复如此大的几个小时的偏移量是必要的,请保留它。允许在启动时无限步进一次。通常,较大的偏移量会导致 ntpd 崩溃。-g在启动 ntpd 的任何脚本中使用,这样时间将在启动时固定。

我不明白不使用 fork 加 shell 后台运行的目的。对于后台启动,我使用系统的服务管理器或 init 脚本。例如,带有 systemd 的 Linux ntpd.service 单元。

删除-4。Google 支持 IPv6。

如果您希望设置一次时间并退出,则此-q选项很有用。对于故障排除时的交互使用,正常操作是让 ntpd 保持运行。不要使用 ntpdate,它已经过时了。

ntpd -g -q

相关内容