Chrony 3.1이 ntp 서버와의 동기화를 거부합니다.

Chrony 3.1이 ntp 서버와의 동기화를 거부합니다.

저는 NTP 서버 프로토콜 v3과 완벽하게 동기화된 CentOS 7.2 및 chrony 버전 2.1.1이 설치된 70대의 시스템을 보유하고 있습니다.

최근에 30대의 머신을 추가했습니다. CentOS 7.4 and chrony version 3.1, 그러나 이 30대의 컴퓨터는 동기화를 거부했습니다. 모든 문제 해결 절차를 따랐지만 이 문제를 해결하는 방법을 전혀 모릅니다. 명령 출력:

chronyc tracking
Reference ID    : 00000000 ()
Stratum         : 0
Ref time (UTC)  : Thu Jan 01 00:00:00 1970
System time     : 0.000000013 seconds fast of NTP time
Last offset     : +0.000000000 seconds
RMS offset      : 0.000000000 seconds
Frequency       : 11.390 ppm fast
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 0.0 seconds
Leap status     : Not synchronised


chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 172.17.172.220                4   7   377   644   -11.6s[ -11.6s] +/- 8147ms



tcpdump -n -i lo port 323 [Note: I applied "chronyc sources" in other terminal but nothing captured, in the working machines it capture some packets!]

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel


 tcpdump -n -i eno2  port 123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno2, link-type EN10MB (Ethernet), capture size 262144 bytes
15:03:09.870958 IP 192.168.0.100.44841 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:03:10.112707 IP 172.17.172.220.ntp > 192.168.0.100.44841: NTPv3, Server, length 48
15:11:45.678320 IP 192.168.0.100.46832 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:11:45.892482 IP 172.17.172.220.ntp > 192.168.0.100.46832: NTPv3, Server, length 48
15:20:22.634981 IP 192.168.0.100.41310 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:20:22.871226 IP 172.17.172.220.ntp > 192.168.0.100.41310: NTPv3, Server, length 48
15:28:55.820943 IP 192.168.0.100.39143 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:28:55.873988 IP 172.17.172.220.ntp > 192.168.0.100.39143: NTPv3, Server, length 48
15:37:35.840998 IP 192.168.0.100.57333 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:37:35.913139 IP 172.17.172.220.ntp > 192.168.0.100.57333: NTPv3, Server, length 48
15:46:15.814980 IP 192.168.0.100.56932 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:46:15.882518 IP 172.17.172.220.ntp > 192.168.0.100.56932: NTPv3, Server, length 48
15:54:48.587705 IP 192.168.0.100.33711 > 172.17.172.220.ntp: NTPv4, Client, length 48
15:54:48.632963 IP 172.17.172.220.ntp > 192.168.0.100.33711: NTPv3, Server, length 48
^C
14 packets captured
14 packets received by filter
0 packets dropped by kernel

chronyc activity
200 OK
1 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address


chronyc ntpdata  172.17.172.220
Remote address  : 172.17.172.220 (AC11ACDC)
Remote port     : 123
Local address   : 192.168.0.100 (C0A80064)
Leap status     : Normal
Version         : 3
Mode            : Server
Stratum         : 4
Poll interval   : 8 (256 seconds)
Precision       : -6 (0.015625000 seconds)
Root delay      : 0.031219 seconds
Root dispersion : 8.063156 seconds
Reference ID    : AC11AC88 ()
Reference time  : Sun Nov 12 09:21:36 2017
Offset          : +11.719727516 seconds
Peer delay      : 0.215471357 seconds
Peer dispersion : 0.015626255 seconds
Response time   : 0.000000000 seconds
Jitter asymmetry: -0.47
NTP tests       : 111 111 1101
Interleaved     : No
Authenticated   : No
TX timestamping : Kernel
RX timestamping : Kernel
Total TX        : 35
Total RX        : 35
Total valid RX  : 35


chronyc serverstats
NTP packets received       : 0
NTP packets dropped        : 0
Command packets received   : 6
Command packets dropped    : 0
Client log records dropped : 0

고치려면 어떻게 해야 해?:

참조 ID: 00000000()
레이어: 0
NTP 패킷 수신: 0

전체 OS를 재부팅하고 makestep 및 waitsync와 같은 모든 chronyc 명령을 시도했습니다. 그러나 아무것도 작동하지 않습니다. 보고된 버그도 찾아보았으나 관련 버그를 찾을 수 없었습니다.

방화벽이 비활성화되어 있습니다. /etc/chrony.conf는 실행 중인 70개 시스템의 정확한 복사본입니다.

고쳐 쓰다:
tcpdump의 상세 모드를 활성화하면 chrony 3.1 타임스탬프가 손상된 것 같고 chronyc makestep 1 -1동기화하려고 해도 동기화되지 않는 것 같습니다. "아래 참조" 디버그 모드도 실행했습니다.

tcpdump -n -i eno2  port 123 -vvvvv
tcpdump: listening on eno2, link-type EN10MB (Ethernet), capture size 262144 bytes
20:25:15.708374 IP (tos 0x0, ttl 64, id 399, offset 0, flags [DF], proto UDP (17), length 76)
    192.168.0.100.49105 > 172.17.172.220.ntp: [bad udp cksum 0x1a45 -> 0xf15f!] NTPv4, length 48
        Client, Leap indicator:  (0), Stratum 0 (unspecified), poll 6 (64s), precision 32
        Root Delay: 0.000000, Root dispersion: 0.000000, Reference-ID: (unspec)
          Reference Timestamp:  0.000000000
          Originator Timestamp: 3719492661.028820399 (2017/11/12 20:24:21)
          Receive Timestamp:    1089474065.361510029 (2070/08/17 02:09:21)
          Transmit Timestamp:   2540453432.493019109 (1980/07/03 13:30:32)
            Originator - Receive Timestamp:  +1664948700.332689629
            Originator - Transmit Timestamp: -1179039228.535801290
20:25:15.964038 IP (tos 0x0, ttl 122, id 18400, offset 0, flags [none], proto UDP (17), length 76)
    172.17.172.220.ntp > 192.168.0.100.49105: [udp sum ok] NTPv3, length 48
        Server, Leap indicator:  (0), Stratum 4 (secondary reference), poll 6 (64s), precision -6
        Root Delay: 0.031219, Root dispersion: 8.154785, Reference-ID: 172.17.172.136
          Reference Timestamp:  3719467375.940868199 (2017/11/12 13:22:55)
          Originator Timestamp: 2540453432.493019109 (1980/07/03 13:30:32)
          Receive Timestamp:    3719492726.471868199 (2017/11/12 20:25:26)
          Transmit Timestamp:   3719492726.471868199 (2017/11/12 20:25:26)
            Originator - Receive Timestamp:  +1179039293.978849090
            Originator - Transmit Timestamp: +1179039293.978849090

디버그 모드 출력:

/usr/sbin/chronyd -d -d
2017-11-12T17:32:37Z main.c:473:(main) chronyd version 3.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 +DEBUG)
2017-11-12T17:32:37Z conf.c:406:(CNF_ReadFile) Reading /etc/chrony.conf
2017-11-12T17:32:37Z conf.c:572:(CNF_ParseLine) commandkey directive is no longer supported
2017-11-12T17:32:37Z conf.c:572:(CNF_ParseLine) generatecommandkey directive is no longer supported
2017-11-12T17:32:37Z local.c:149:(calculate_sys_precision) Clock precision 0.000000016 (-26)
2017-11-12T17:32:37Z sys_linux.c:317:(get_version_specific_details) Linux kernel major=3 minor=10 patch=0
2017-11-12T17:32:37Z sys_linux.c:338:(get_version_specific_details) hz=100 nominal_tick=10000 max_tick_bias=1000
2017-11-12T17:32:37Z local.c:663:(lcl_RegisterSystemDrivers) Local freq=11.390ppm
2017-11-12T17:32:37Z util.c:1172:(UTI_DropRoot) Dropped root privileges: UID 998 GID 996
2017-11-12T17:32:37Z reference.c:209:(REF_Initialise) Frequency 11.390 +/- 0.031 ppm read from /var/lib/chrony/drift
2017-11-12T17:32:37Z sys_generic.c:251:(update_slew) slew offset=0.000000e+00 corr_rate=0.000000e+00 base_freq=11.389873 total_freq=11.389862 slew_freq=-1.093958e-11 duration=10000.000000 slew_error=1.203354e-13
2017-11-12T17:32:37Z ntp_core.c:1089:(transmit_timeout) Transmit timeout for [172.17.172.220:123]
2017-11-12T17:32:37Z ntp_io.c:831:(NIO_SendPacket) Sent 48 bytes to 172.17.172.220:123 from [UNSPEC] fd 8
2017-11-12T17:32:37Z ntp_io_linux.c:652:(NIO_Linux_ProcessMessage) Received 90 (48) bytes from error queue for 172.17.172.220:123 fd=8 if=3 tss=1
2017-11-12T17:32:37Z ntp_core.c:1994:(update_tx_timestamp) Updated TX timestamp delay=0.000010086
2017-11-12T17:32:38Z ntp_io.c:669:(process_message) Received 48 bytes from 172.17.172.220:123 to 192.168.0.100 fd=8 if=3 tss=1 delay=0.000014398
2017-11-12T17:32:38Z ntp_core.c:1563:(receive_packet) NTP packet lvm=34 stratum=4 poll=6 prec=-6 root_delay=0.031219 root_disp=8.201569 refid=ac11ac88 []
2017-11-12T17:32:38Z ntp_core.c:1568:(receive_packet) reference=1510478575.936134800 origin=3724568162.405584875 receive=1510507968.499134800 transmit=1510507968.499134800
2017-11-12T17:32:38Z ntp_core.c:1570:(receive_packet) offset=10.547374307 delay=0.099570973 dispersion=0.015824 root_delay=0.130790 root_dispersion=8.217393
2017-11-12T17:32:38Z ntp_core.c:1573:(receive_packet) remote_interval=0.000000000 local_interval=0.099570973 server_interval=0.000000000 txs=K rxs=K
2017-11-12T17:32:38Z ntp_core.c:1577:(receive_packet) test123=111 test567=111 testABCD=1111 kod_rate=0 interleaved=0 presend=0 valid=1 good=1 updated=1
2017-11-12T17:32:38Z sources.c:353:(SRC_AccumulateSample) ip=[172.17.172.220] t=1510507957.951760493 ofs=-10.547374 del=0.130790 disp=8.217393 str=4
2017-11-12T17:32:38Z sourcestats.c:658:(SST_GetSelectionData) n=1 off=-10.547374 dist=8.282888 sd=4.000000 first_ago=0.049800 last_ago=0.049800 selok=0
2017-11-12T17:32:38Z sources.c:770:(SRC_SelectSource) badstat=1 sel=0 badstat_reach=1 sel_reach=0 max_reach_ago=0.000000

버전 3.1에서 확인된 문제:

3.1을 제거 yum remove chrony하고 chronyd 버전 2.1.1로 되돌리면 yum localinstall /home/chrony-2.1.1-1.el7.centos.x86_64.rpm동기화가 완벽하게 작동합니다!

답변1

RH Bugzilla에도 비슷한 버그가 존재하며 노타버그로 분류되어 폐쇄되었습니다. 문제는 품질이 낮은 시간 서버와 이를 사용하지 않도록 새로운 크로니의 기본 변경이 결합된 것입니다.

https://bugzilla.redhat.com/show_bug.cgi?id=1525833

"클럭 동기화로 인해 서버가 너무 부정확하기 때문에 무시됩니다. "chronycsources" 출력에는 기본 최대 거리인 3초보다 큰 "+/- 4695ms"가 있습니다. chrony-에 maxdistance 옵션이 추가되었습니다. 2.2, 이것이 바로 chrony-2.1에서 작동하는 이유입니다. 루트 분산에 대한 하드코드 제한은 16초 미만입니다.

tcpdump 출력은 NTP 서버의 루트 분산이 약 3.6초임을 보여줍니다. Windows NTP 서버입니까? "chronyc ntpdata"를 사용하여 루트 분산을 확인할 수도 있습니다.

chronyd가 동기화를 위해 서버를 사용할 수 있도록 하려면 chrony.conf에 더 큰 maxdistance를 설정해야 합니다. "

답변2

타이밍 3.1.

우리는 아래 스레드를 기반으로 솔루션을 엮었지만 간결하고 확인하기 쉬운 답변을 얻으려면 다음을 시도해 보십시오. 다음 명령(-v explain 열)을 사용하여 수신한 시간 동기화 상태를 확인하세요.

chronyc sources -v

가장 오른쪽 열(예: +/- 10.5초)은 문제의 서버로부터 수신된 시간 업데이트의 "추정 오류"를 나타냅니다.

문제는 Windows NTP 서버에서 수신한 시간이 "최대 추정 오류" 임계값인 3초(+/- 10초)를 초과하므로 chrony가 이에 따라 시스템 시간을 업데이트하지 않는다는 것입니다. 영국 NTP 풀 서버를 사용하도록 서버를 설정하면 문제가 해결되었습니다(+/- 50ms).

답변3

Windows 기반 NTP 서버가 있는 경우 아마도 이것이 귀하의 솔루션이 될 것입니다(비슷한 문제에서 저에게 효과적이었습니다).

https://chrony.tuxfamily.org/faq.html

3.4.Windows NTP 서버를 사용하시겠습니까? Windows NTP 서버의 일반적인 문제는 매우 큰 루트 분산(예: 3초 이상)을 보고하므로 chronyd가 서버를 너무 부정확하다고 무시하게 된다는 것입니다. source 명령이 유효한 측정값을 표시할 수 있지만 동기화를 위해 선택된 서버가 없습니다. chronyc의 ntpdata 명령을 사용하여 서버의 루트 분산을 확인할 수 있습니다.

해당 서버와의 동기화를 활성화하려면 chrony.conf의 maxdistance 값을 늘려야 합니다. 예를 들어:

최대 거리 16.0

관련 정보