시간을 동기화하기 위해 ntpd(4.2.8p10)를 사용하는 일부 내장 장치가 있습니다. 우리 고객 중 한 명이 내부 네트워크에서 자체 NTP 서버를 사용하고 있습니다. ntpd -dgq 디버그 모드에서 서버에 연결할 수 있고 오프셋, 대기 시간 및 지터 정보를 얻을 수 있음을 확인합니다. 그러나 ntpd는 "ntpd: 서버를 찾을 수 없습니다"그리고 절대 현지 시간을 선택하고 설정하지 마세요.
2 Nov 11:57:05 ntpd[20218]: ntpd [email protected] Thu Jul 26 19:52:20 UTC 2018 (2): Starting
2 Nov 11:57:05 ntpd[20218]: Command line: ntpd -dgq
2 Nov 11:57:05 ntpd[20218]: proto: precision = 2.000 usec (-19)
Finished Parsing!!
restrict: op 1 addr 0.0.0.0 mask 0.0.0.0 mflags 00000000 flags 000005f0
restrict: op 1 addr 127.0.0.1 mask 255.255.255.255 mflags 00000000 flags 00000000
restrict source template mflags 4000 flags 1c0
restrict: op 1 addr (null) mask (null) mflags 00004000 flags 000001c0
move_fd: estimated max descriptors: 1024, initial socket boundary: 16
2 Nov 11:57:05 ntpd[20218]: Listen and drop on 0 v4wildcard 0.0.0.0:123
2 Nov 11:57:05 ntpd[20218]: Listen normally on 1 lo 127.0.0.1:123
restrict: op 1 addr 127.0.0.1 mask 255.255.255.255 mflags 00003000 flags 00000001
2 Nov 11:57:05 ntpd[20218]: Listen normally on 2 eth1 192.168.168.109:123
restrict: op 1 addr 192.168.168.109 mask 255.255.255.255 mflags 00003000 flags 00000001
2 Nov 11:57:05 ntpd[20218]: Listen normally on 3 wlan0 192.168.100.1:123
restrict: op 1 addr 192.168.100.1 mask 255.255.255.255 mflags 00003000 flags 00000001
2 Nov 11:57:05 ntpd[20218]: Listening on routing socket on fd #27 for interface updates
key_expire: at 0 associd 60163
peer_clear: at 0 next 1 associd 60163 refid INIT
restrict: op 1 addr 10.160.129.161 mask 255.255.255.255 mflags 00004000 flags 000001c0
restrict_source: 10.160.129.161 host restriction added
event at 0 10.160.129.161 8011 81 mobilize assoc 60163
newpeer: 192.168.168.109->10.160.129.161 mode 3 vers 4 poll 6 10 flags 0x101 0x1 ttl 0 key 00000000
event at 0 0.0.0.0 c016 06 restart
peer_xmit: at 1 192.168.168.109->10.160.129.161 mode 3 len 48 xmt 0xe52bde52.ddf3c87c
auth_agekeys: at 1 keys 0 expired 0
event at 1 10.160.129.161 8014 84 reachable
clock_filter: n 1 off 30.082946 del 0.048598 dsp 7.945314 jit 0.000002
peer_xmit: at 3 192.168.168.109->10.160.129.161 mode 3 len 48 xmt 0xe52bde54.ddf0a416
clock_filter: n 2 off 30.083616 del 0.047583 dsp 3.949228 jit 0.000670
peer_xmit: at 5 192.168.168.109->10.160.129.161 mode 3 len 48 xmt 0xe52bde56.dde968ab
clock_filter: n 3 off 30.078398 del 0.054469 dsp 1.951189 jit 0.004895
peer_xmit: at 7 192.168.168.109->10.160.129.161 mode 3 len 48 xmt 0xe52bde58.dde80026
clock_filter: n 4 off 30.079499 del 0.074539 dsp 0.952172 jit 0.003164
peer_xmit: at 9 192.168.168.109->10.160.129.161 mode 3 len 48 xmt 0xe52bde5a.ddea03c8
clock_filter: n 5 off 30.083616 del 0.044472 dsp 0.452664 jit 0.003340
2 Nov 11:57:16 ntpd[20218]: ntpd: no servers found
END OF FILE
또한 백그라운드에서 ntpd를 실행하고 사용할 때ntpq-pntpd 상태를 쿼리합니다. 우리는 다음과 같은 결과를 얻었습니다. st, Delay, Offset 및 도달은 모두 좋아 보입니다.
root@S8P20092901:~# ntpq -c as
ind assid status conf reach auth condition last_event cnt
===========================================================
1 59609 9014 yes yes none reject reachable 1
root@S8P20092901:~# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
10.160.129.161 162.159.200.123 4 u 24 64 377 40.404 -180.122 20.122
그러나 ntpd는 ntp 서버를 시간 원본으로 선택하지 않거나(원격 주소 앞에 "*" 또는 "+"를 표시하지 않음) 오랜 대기 후에 로컬 시간을 설정하지 않습니다.
소스코드를 살펴봤습니다. ntpdate(-q) 모드를 사용할 때 시계를 선택/설정하지 않으면 ntpd는 각 서버에 대해 모든 버스트 작업을 수행한 후 종료됩니다.
} else {
peer->burst--;
if (peer->burst == 0) {
/*
* If ntpdate mode and the clock has not been
* set and all peers have completed the burst,
* we declare a successful failure.
*/
if (mode_ntpdate) {
peer_ntpdate--;
if (peer_ntpdate == 0) {
msyslog(LOG_NOTICE,
"ntpd: no servers found");
if (!msyslog_term)
printf(
"ntpd: no servers found\n");
exit (0);
}
}
}
}
그러나 ntpd가 서버에서 시간을 선택하고 설정하지 않는 이유를 아직도 이해하지 못합니다. 도움을 주셔서 미리 감사드립니다.
답변1
이는 근본적인 분산 문제(시간 소스에서 서버로 누적되는 오류)로 보입니다.
귀하는 ntpq -nc associations
다음을 제공했습니다:
ind assid status conf reach auth condition last_event cnt =========================================================== 1 59609 9014 yes yes none reject reachable 1
따라서 지금 필요한 것은 이 문제가 있는 연관의 세부사항을 표시하는 것입니다.
ntpq -nc 'readvar 59609'
다음과 같은 것을 얻어야 합니다(내 NTP 서버에서 가져옴).
associd=33428 status=142a reach, sel_candidate, 2 events, sys_peer,
srcadr=90.255.244.219, srcport=123, dstadr=192.168.1.18, dstport=123,
leap=00, stratum=1, precision=-20, rootdelay=0.000, rootdisp=1.511,
refid=PPS, reftime=e53ca0fb.4d946a30 Mon, Nov 15 2021 9:03:55.303,
rec=e53ca11e.bf1413cd Mon, Nov 15 2021 9:04:30.746, reach=377,
unreach=0, hmode=3, pmode=4, hpoll=10, ppoll=10, headway=0, flash=00 ok,
keyid=0, offset=-0.249, delay=22.177, dispersion=55.975, jitter=56.489,
xleave=0.088,
filtdelay= 157.46 161.45 169.05 22.18 21.68 21.76 186.40 22.04,
filtoffset= 70.21 70.72 74.51 -0.25 -0.03 -0.26 81.90 -0.34,
filtdisp= 0.00 15.39 31.02 47.04 63.23 79.22 86.97 94.76
가치를 찾아보세요 rootdisp
. 값이 높다는 것은 시간 소스에서 여기까지의 경로 오류가 너무 크다는 것을 의미합니다. 다른 업스트림 서버를 사용하는 것 외에는 할 수 있는 일이 많지 않습니다. (고칠 수는 있지만 maxdisp
꼭 해야 한다면 업스트림 서버가 실제로 얼마나 안정적인지 물어봐야 합니다.)
인용하다:
- 시스코——Microsoft Windows에서 ISE 및 NTP 서버 동기화 실패 문제 해결(PDF)
- NTP-참조 문서
ntpq
- 서버 장애 -NTP는 왜 내 서버가 부족하다고 생각합니까?
답변2
나는 같은 문제에 직면했다이 게시물.
솔루션이 실제로 추가되었으며 tos maxdist 30
아래 /etc/ntp.conf
에는 이를 확인하고 해결하는 모든 단계가 나열되어 있습니다. 다른 시간 서버 옵션이 없는 경우에만 이 작업을 수행해야 합니다. 다른 사람들이 언급했듯이 이는 업스트림 NTP 서버가 실제로 신뢰할 수 없다는 의미이기도 합니다.
다음과 같이 진행하세요:
을 사용하면 오류가 ntpd -dgq
발생할 수 있습니다 unable to bind to wildcard address
. 따라서 실행하기 전에 NTP 서비스를 중지 service ntp stop
하거나 NTP를 보유하는 프로세스를 종료 해야 합니다.
lsof -i | grep ntp
kill <pid>
그런 다음 ntpd -dgq
명령을 실행하십시오. 로그의 마지막 부분을 받으면 NTP 서버에 연결할 수 없습니다.
...
...
...
receive: MATCH_ASSOC dispatch: mode 4/server:AM_PROCPKT
filegen 2 3854076120
clock_filter: n 5 off 3.839496 del 0.000455 dsp 0.437525 jit 0.000248
17 Feb 09:42:02 ntpd[1040]: ntpd: no servers found
또한 NTP 서비스( service ntp start
)를 다시 시작한 후 다음 명령을 사용하여 동일한 상황을 볼 수 있습니다. 서버에 액세스할 수 있지만 시간 동기화를 수행할 수 없습니다.
root@akulab1:~# ntpq -c as
ind assid status conf reach auth condition last_event cnt
===========================================================
1 34463 9014 yes yes none reject reachable 1
root@akulab1:~# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 36 64 7 0.579 3917.57 5.842
위에서 언급했듯이 그 이유는 rootdisp
다음의 출력 값( assid
from 을 ntpq -c as
입력으로 사용 readvar
)이 매우 크기 때문입니다.
root@akulab1:~# ntpq -nc 'readvar 34463'
associd=34463 status=9014 conf, reach, sel_reject, 1 event, reachable,
srcadr=172.16.0.25, srcport=123, dstadr=172.16.0.133, dstport=123,
leap=00, stratum=1, precision=-23, rootdelay=0.000, rootdisp=10684.280,
refid=LOCL, reftime=e5b7a483.b4d87c2d Wed, Feb 16 2022 17:27:47.706,
rec=e5b88b72.a5c64a66 Thu, Feb 17 2022 9:53:06.647, reach=377,
unreach=0, hmode=3, pmode=4, hpoll=6, ppoll=6, headway=290,
flash=400 peer_dist, keyid=0, offset=3934.131, delay=0.516,
dispersion=0.987, jitter=14.653, xleave=0.037,
filtdelay= 0.52 0.52 0.56 0.54 0.54 0.58 0.45 0.49,
filtoffset= 3934.13 3930.84 3927.44 3924.11 3920.90 3917.58 3914.35 3911.63,
filtdisp= 0.00 1.02 2.06 3.08 4.10 5.12 6.11 6.95
tos maxdist 30
마지막으로 /etc/ntp.conf
NTP 서비스를 추가하고 다시 시작하는 명령은 다음과 같습니다.
echo 'tos maxdist 30' >> /etc/ntp.conf
service ntp restart
그리고, 짜잔 - 시간이 NTP 서버와 성공적으로 동기화되었습니다.
root@akulab1:~# ntpq -c as
ind assid status conf reach auth condition last_event cnt
===========================================================
1 60446 961a yes yes none sys.peer sys_peer 1
root@akulab1:~# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
*172.16.0.25 .LOCL. 1 u 15 64 1 0.432 0.314 0.171