赞
踩
简单了解下ntp。需要完成:
参考https://www.cnblogs.com/pipci/p/12833228.html
ntpdate 和 ntpd都已经太旧了,ubuntu 18上面的时钟同步是systemd-timesyncd 服务(只有客户端)。所以我们需要安装一个新的utpserver端。
要成为NTP服务器,可以安装chrony、ntpd,或者open-ntp。推荐chrony。
https://blog.csdn.net/weixin_67155214/article/details/123785360
安装
apt install chrony
配置
vim /etc/chrony/chrony.conf
# Welcome to the chrony configuration file. See chrony.conf(5) for more # information about usuable directives. # This will use (up to): # - 4 sources from ntp.ubuntu.com which some are ipv6 enabled # - 2 sources from 2.ubuntu.pool.ntp.org which is ipv6 enabled as well # - 1 source from [01].ubuntu.pool.ntp.org each (ipv4 only atm) # This means by default, up to 6 dual-stack and up to 2 additional IPv4-only # sources will be used. # At the same time it retains some protection against one of the entries being # down (compare to just using one of the lines). See (LP: #1754358) for the # discussion. # # About using servers from the NTP Pool Project in general see (LP: #104525). # Approved by Ubuntu Technical Board on 2011-02-08. # See http://www.pool.ntp.org/join.html for more information. # 因为想修改本地时间,不去和其他服务器同步,将下面这四个pool注释掉 #pool ntp.ubuntu.com iburst maxsources 4 #pool 0.ubuntu.pool.ntp.org iburst maxsources 1 #pool 1.ubuntu.pool.ntp.org iburst maxsources 1 #pool 2.ubuntu.pool.ntp.org iburst maxsources 2 # 添加自己作为服务器 server 192.168.1.1 iburst # 为了方便客户端连接权限设置为允许所有 allow all # 当无法和其他同步时,使用本地的时间去给客户端同步 local stratum 10 # This directive specify the location of the file containing ID/key pairs for # NTP authentication. keyfile /etc/chrony/chrony.keys # This directive specify the file into which chronyd will store the rate # information. driftfile /var/lib/chrony/chrony.drift # Uncomment the following line to turn logging on. #log tracking measurements statistics # Log files location. logdir /var/log/chrony # Stop bad estimates upsetting machine clock. maxupdateskew 100.0 # This directive enables kernel synchronisation (every 11 minutes) of the # real-time clock. Note that it can’t be used along with the 'rtcfile' directive. rtcsync # Step the system clock instead of slewing it if the adjustment is larger than # one second, but only in the first three clock updates. makestep 1 3
服务重启(这个去搜下,也可以用systemctl restart chronyd.service)
service chrony restart
然后我想修改时间,用来确定是和这个服务器同步了。(这个服务器不联网,只用一个网线和客户端机器连接)
先看下时间
timedatectl status
再关掉同步,不然无法修改
timedatectl set-ntp no
timedatectl set-time HH:MM:SS
# 是否再开启?存疑
timedatectl set-ntp yes
再次查看时间。
root@fh:~# date 2023年 04月 10日 星期一 15:44:51 CST root@fh:~# chronyc tracking Reference ID : C0A80101 (fh) Stratum : 11 Ref time (UTC) : Mon Apr 10 07:17:27 2023 System time : 0.000000024 seconds fast of NTP time Last offset : +0.000005521 seconds RMS offset : 0.000005521 seconds Frequency : 0.298 ppm fast Residual freq : +0.031 ppm Skew : 2.872 ppm Root delay : 0.000015881 seconds Root dispersion : 0.006503564 seconds Update interval : 0.0 seconds Leap status : Normal
找了一个ubuntu16的虚拟机作为客户端。
一样的安装。
apt install chrony
配置
vim /etc/chrony/chrony.conf
# This the default chrony.conf file for the Debian chrony package. After # editing this file use the command 'invoke-rc.d chrony restart' to make # your changes take effect. John Hasler <jhasler@debian.org> 1998-2008 # See www.pool.ntp.org for an explanation of these servers. Please # consider joining the project if possible. If you can't or don't want to # use these servers I suggest that you try your ISP's nameservers. We mark # the servers 'offline' so that chronyd won't try to connect when the link # is down. Scripts in /etc/ppp/ip-up.d and /etc/ppp/ip-down.d use chronyc # commands to switch it on when a dialup link comes up and off when it goes # down. Code in /etc/init.d/chrony attempts to determine whether or not # the link is up at boot time and set the online status accordingly. If # you have an always-on connection such as cable omit the 'offline' # directive and chronyd will default to online. # # Note that if Chrony tries to go "online" and dns lookup of the servers # fails they will be discarded. Thus under some circumstances it is # better to use IP numbers than host names. # 注释掉这个pool。我们只用上面的server #pool 2.debian.pool.ntp.org offline iburst # Look here for the admin password needed for chronyc. The initial # password is generated by a random process at install time. You may # change it if you wish. keyfile /etc/chrony/chrony.keys # This directive sets the key ID used for authenticating user commands via the # 'chronyc' program at run time. commandkey 1 # I moved the driftfile to /var/lib/chrony to comply with the Debian # filesystem standard. driftfile /var/lib/chrony/chrony.drift # Comment this line out to turn off logging. log tracking measurements statistics logdir /var/log/chrony # Stop bad estimates upsetting machine clock. maxupdateskew 100.0 # Dump measurements when daemon exits. dumponexit # Specify directory for dumping measurements. dumpdir /var/lib/chrony # This directive lets 'chronyd' to serve time even if unsynchronised to any # NTP server. #添加了一个server server 192.168.1.1 minpoll 4 maxpoll 10 iburst #local stratum 10 # This directive designates subnets (or nodes) from which NTP clients are allowed # to access to 'chronyd'. #allow foo.example.net #allow 10/8 #allow 0/0 (allow access by any IPv4 node) #allow ::/0 (allow access by any IPv6 node) # 这里我也加了,但是似乎客户端是不需要加的 allow all # This directive forces `chronyd' to send a message to syslog if it # makes a system clock adjustment larger than a threshold value in seconds. logchange 0.5 # This directive defines an email address to which mail should be sent # if chronyd applies a correction exceeding a particular threshold to the # system clock. # mailonchange root@localhost 0.5 # This directive tells 'chronyd' to parse the 'adjtime' file to find out if the # real-time clock keeps local time or UTC. It overrides the 'rtconutc' directive. hwclockfile /etc/adjtime # This directive enables kernel synchronisation (every 11 minutes) of the # real-time clock. Note that it can’t be used along with the 'rtcfile' directive. rtcsync
一样的重启chrony的服务。
先确定下两个的chrony服务状态没问题
# 18
systemctl status chronyd
# 16
service chrony status
检查客户端的时间和服务器的不一致。
root@controller:~# timedatectl status
Local time: Mon 2023-04-10 16:02:17 CST
Universal time: Mon 2023-04-10 08:02:17 UTC
RTC time: Mon 2023-04-10 08:02:17
Time zone: Asia/Shanghai (CST, +0800)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no
坑:这里发现NTP synchronized: no
,查了半天解决不了。
会导致没法一段时间自己同步?
客户端和服务器的ip能互相ping通;
服务器的123udp端口开启。我们可以抓包;
tcpdump -i ens33 port 123
服务端执行,看看有没有连上客户端。
chronyc clients
客户端执行,查看源是不是正常
root@controller:~# 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 root@controller:~# chronyc sourcestats -v 210 Number of sources = 1 .- Number of sample points in measurement set. / .- Number of residual runs with same sign. | / .- Length of measurement set (time). | | / .- Est. clock freq error (ppm). | | | / .- Est. error in freq. | | | | / .- Est. offset. | | | | | | On the -. | | | | | | samples. \ | | | | | | | Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ============================================================================== 192.168.1.1 14 11 247 +0.004 1.547 +35ns 101us root@controller:~# chronyc sources -v 210 Number of sources = 1 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined, | / '?' = unreachable, 'x' = time may be in error, '~' = time too variable. || .- xxxx [ yyyy ] +/- zzzz || Reachability register (octal) -. | xxxx = adjusted offset, || Log2(Polling interval) --. | | yyyy = measured offset, || \ | | zzzz = estimated error. || | | \ MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 192.168.1.1 11 9 377 64 +179us[ +216us] +/- 6878us
^?
就是源有问题,等两分钟再试。^*
表示正常。
track一下,看看。
root@controller:~# chronyc tracking
Reference ID : 192.168.1.1 (192.168.1.1)
Stratum : 12
Ref time (UTC) : Mon Apr 10 07:43:06 2023
System time : 57402.121093750 seconds fast of NTP time
Last offset : +0.000036663 seconds
RMS offset : 0.000126418 seconds
Frequency : 9.823 ppm slow
Residual freq : +0.007 ppm
Skew : 0.307 ppm
Root delay : 0.001302 seconds
Root dispersion : 0.000698 seconds
Update interval : 282.2 seconds
Leap status : Normal
看System time
和NTP不同步。
看服务输出了什么错误信息
root@controller:~# service chrony status ● chrony.service - LSB: Controls chronyd NTP time daemon Loaded: loaded (/etc/init.d/chrony; bad; vendor preset: enabled) Active: active (running) since Tue 2023-04-11 07:16:56 CST; 33min ago Docs: man:systemd-sysv-generator(8) Process: 19400 ExecStop=/etc/init.d/chrony stop (code=exited, status=0/SUCCESS) Process: 19410 ExecStart=/etc/init.d/chrony start (code=exited, status=0/SUCCESS) Tasks: 1 Memory: 272.0K CPU: 35ms CGroup: /system.slice/chrony.service └─19418 /usr/sbin/chronyd Apr 11 07:16:54 controller systemd[1]: Starting LSB: Controls chronyd NTP time daemon... Apr 11 07:16:54 controller chronyd[19418]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP -DEBUG +ASYNCDNS +IPV6 +SECH Apr 11 07:16:54 controller chronyd[19418]: Frequency -9.839 +/- 0.638 ppm read from /var/lib/chrony/chrony.drift Apr 11 07:16:56 controller chrony[19410]: chronyd is running and online. Apr 11 07:16:56 controller systemd[1]: Started LSB: Controls chronyd NTP time daemon. Apr 11 07:16:58 controller chronyd[19418]: Selected source 192.168.1.1 Apr 11 07:16:58 controller chronyd[19418]: System clock wrong by -57534.054360 seconds, adjustment started
找了半天,用chronyc -a makestep
在客户端上强制同步。(好几次)
root@controller:~# timedatectl status Local time: Tue 2023-04-11 07:53:36 CST Universal time: Mon 2023-04-10 23:53:36 UTC RTC time: Tue 2023-04-11 00:00:18 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: no RTC in local TZ: no root@controller:~# chronyc -a makestep 200 OK 200 OK root@controller:~# timedatectl status Local time: Mon 2023-04-10 16:00:58 CST Universal time: Mon 2023-04-10 08:00:58 UTC RTC time: Tue 2023-04-11 00:03:14 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: no RTC in local TZ: no root@controller:~# timedatectl status Local time: Mon 2023-04-10 16:01:49 CST Universal time: Mon 2023-04-10 08:01:49 UTC RTC time: Tue 2023-04-11 00:04:05 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: no RTC in local TZ: no root@controller:~# chronyc -a makestep 200 OK 200 OK root@controller:~# chronyc -a makestep 200 OK 200 OK root@controller:~# timedatectl status Local time: Mon 2023-04-10 16:02:02 CST Universal time: Mon 2023-04-10 08:02:02 UTC RTC time: Mon 2023-04-10 08:02:01 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: no RTC in local TZ: no root@controller:~# timedatectl status Local time: Mon 2023-04-10 16:02:09 CST Universal time: Mon 2023-04-10 08:02:09 UTC RTC time: Mon 2023-04-10 08:02:09 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: no RTC in local TZ: no
逐渐同步到与服务器时间相同,服务器抓包也可以看到输出。
root@fh:~# tcpdump -i ens33 port 123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
15:52:34.734949 IP 192.168.1.10.59947 > fh.ntp: NTPv4, Client, length 48
15:52:34.735118 IP fh.ntp > 192.168.1.10.59947: NTPv4, Server, length 48
16:01:49.376551 IP 192.168.1.10.34716 > fh.ntp: NTPv4, Client, length 48
16:01:49.377012 IP fh.ntp > 192.168.1.10.34716: NTPv4, Server, length 48
16:19:06.195222 IP 192.168.1.10.43636 > fh.ntp: NTPv4, Client, length 48
16:19:06.195547 IP fh.ntp > 192.168.1.10.43636: NTPv4, Server, length 48
16:36:30.731287 IP 192.168.1.10.42798 > fh.ntp: NTPv4, Client, length 48
16:36:30.731652 IP fh.ntp > 192.168.1.10.42798: NTPv4, Server, length 48
尚不明确客户端如何能一段时间自动同步。但是可以验证这个服务器应该是没什么问题的。
四、自动同步的猜测
参考https://qastack.cn/server/948974/force-systemd-timesyncd-to-sync-time-with-ntp-server-immediately。调整到足以被视为“同步”时,“系统时钟同步:否”将变为“是”。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。