Ntp服务
在NTP的网络结构中,主要存在如下概念
(1)同步子网。
由主时间服务器、二级时间服务器、PC客户端和它们之间互连的传输路径组成同步子网。
(2)主时间服务器。
通过线缆或无线电直接同步到标准参考时钟,标准参考时钟通常是 Radio Clock或卫星定位系统等。
(3)二级时间服务器。
通过网络中的主时间服务器或者其他二级服务器来取得同步。二级时间服务器通过NTP将时间信re息传送到局域网内部的其他主机。
(4)层数( Stratum)。
层数是对时钟同步情况的一个分级标准,代表了—个时钟的精确度,取值范围是1~16,数值越小,精确度越高。1表示时钟精确度最高,而16表示未同步。
当同步子网中的一台时间服务器发生意外或遭到恶意攻击时,通常不应该导致子网中其他时间服务器的计时错误。在安全性要求较高的网络中,可以启用NTP认证功能。这样就对网络的安全性提供了保障不同工作模式下可配置不同的密钥。当用户在某一NTP工作模式下启用NTP认证时,系统会记录此工作模式下相应的密钥ID
(1)发送过程
首先判断在此工作模式下是否需要认证。如果不需要则直接发送报文;如果需要则根据相应密钥I和加密算法对报文进行加密,然后发送报文
(2)接收过程。
在接收报文时,首先判断是否要对报文进行认证处理。如果不需要认证,则直接对报文进行后续处理;如果需要认证,则根据对应密钥ID和解密算法来认证。如果认证失败,则直接丢弃报文;如果认证通过,则对接收到的报文进行处理。
NTP的基本工作原理如所示。Device A和Device B通过网络相连,Device A和Device B的时间不同,需要通过NTP实现时间的自动同步。为便于理解,作如下假设:
- 在Device A和Device B的时间同步之前,Device A的时间设定为10:00:00 am,Device B的时间设定为11:00:00 am。
- DeviceB作为NTP时间服务器,即Device A与Device B的时间同步。
- NTP报文从Device A到Device B、从Device B到Device A单向传输所需要的时间均为1秒。
- DeviceB处理NTP报文所需的时间是1秒。
[
]
Device A和Device B时间同步的工作过程如下:
(1) Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00 am(T1)。
(2) 当此NTP报文到达Device B时,Device B在NTP报文上增加该报文到达Device B时的时间戳,该时间戳为11:00:01 am(T2)。
(3) 当此NTP报文离开Device B时,Device B再在NTP报文上增加该报文离开Device B时的时间戳,该时间戳为11:00:02 am(T3)。
(4) 当Device A接收到该响应报文时,Device A的本地时间为10:00:03 am(T4)。
至此,Device A可以根据上述时间戳计算两个重要的参数:
- NTP报文的往返时延Delay = (T4-T1) – (T3-T2) = 2秒。
- DeviceA相对Device B的时间差offset = ((T2-T1) + (T3-T4)) / 2 = 1小时。
这样,Device A就能够根据这些信息来设定自己的时间,使之与Device B的时间同步。
以上内容只是对NTP工作原理的一个粗略描述,详细内容请参阅相关的协议规范。
NTP通过时钟层数来定义时钟的准确度。时钟层数的取值范围为1~16,取值越小,时钟准确度越高。层数为1~15的时钟处于同步状态;层数为16的时钟处于未同步状态。
通常将从权威时钟(如原子时钟)获得时间同步的NTP服务器的层数设置为1,并将其作为主时间服务器,为网络中其他设备的时钟提供时间同步。网络中的设备与主时间服务器的NTP距离,即NTP同步链上NTP服务器的数目,决定了设备上时钟的层数。例如,从主时间服务器获得时间同步的设备的时钟层数为2,即比主时间服务器的时钟层数大1;从时钟层数为2的时间服务器获得时间同步的设备的时钟层数为3,以此类推。
stratum根据上层server的层次而设定(+1)。
对于提供network time service provider的主机来说,stratum的设定要尽可能准确。
而作为局域网的time service provider,通常将stratum设置为10

0层的服务器采用的是原子钟、GPS钟等物理设备,stratum 1与stratum 0 是直接相连的,
往后的stratum与上一层stratum通过网络相连,同一层的server也可以交互。
ntpd对下层client来说是service server,对于上层server来说它是client。
| 模式 | 工作过程 | 时间同步方向 | 应用场合 |
|---|---|---|---|
| 客户端/服务器模式 | 客户端上需要手工指定NTP服务器的地址。客户端向NTP服务器发送NTP时间同步报文。NTP服务器收到报文后会自动工作在服务器模式,并回复应答报文。 如果客户端可以从多个时间服务器获取时间同步,则客户端收到应答报文后,进行时钟过滤和选择,并与优选的时钟进行时间同步。 | 客户端能够与NTP服务器的时间同步 NTP服务器无法与客户端的时间同步 | 如上图所示,该模式通常用于下级的设备从上级的时间服务器获取时间同步 |
| 对等体模式 | 主动对等体(Symmetricactivepeer)上需要手工指定被动对等体(Symmetricpassivepeer)的地址。主动对等体向被动对等体发送NTP时间同步报文。被动对等体收到报文后会自动工作在被动对等体模式,并回复应答报文。 如果主动对等体可以从多个时间服务器获取时间同步,则主动对等体收到应答报文后,进行时钟过滤和选择,并与优选的时钟进行时间同步。 | 主动对等体和被动对等体的时间可以互相同步 如果双方的时钟都处于同步状态,则层数大的时钟与层数小的时钟的时间同步 | 如上图所示,该模式通常用于同级的设备间互相同步,以便在同级的设备间形成备份。如果某台设备与所有上级时间服务器的通信出现故障,则该设备仍然可以从同级的时间服务器获得时间同步 |
| 广播模式 | 广播服务器周期性地向广播地址255.255.255.255发送NTP时间同步报文。广播客户端侦听来自广播服务器的广播报文,根据接收的广播报文将设备的时间与广播服务器的时间进行同步。 广播客户端接收到广播服务器发送的第一个NTP报文后,会与广播服务器进行报文交互,以获得报文的往返时延,为时间同步提供必要的参数。之后,只有广播服务器单方向发送报文 | 广播客户端能够与广播服务器的时间同步 广播服务器无法与广播客户端的时间同步 | 广播服务器广播发送时间同步报文,可以同时同步同一个子网中多个广播客户端的时间。 如上图所示,使用同一个时间服务器为同一个子网中的大量设备提供时间同步时,可以使用广播模式,以简化网络配置由于只有广播服务器单方向发送报文,广播模式的时间准确度不如客户端/服务器模式和对等体模式 |
| 组播模式 | 组播服务器周期性地向指定的组播地址发送NTP时间同步报文。客户端侦听来自服务器的组播报文,根据接收的组播报文将设备的时间与组播服务器的时间进行同步 | 组播客户端能够与组播服务器的时间同步 组播服务器无法与组播客户端的时间同步 | 组播模式对广播模式进行了扩展,组播服务器可以同时为同一子网、不同子网的多个组播客户端提供时间同步组播模式的时间准确度不如客户端/服务器模式和对等体模式 |
yum install -y ntp
ntp服务器默认监听端口是udp的123。
#默认配置文件
[root@prometheus2 ~]# cat /etc/ntp.conf
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift #记录系统时间与BIOS时间的偏差记录(ntp必须对当前文件具有写权限)
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery #restrict对指定请求主机进行相关权限的限制,以实现控制相关权限。
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1 #对回环地址不进行任何权限的限制
restrict ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap #对内网主机进行较少的限制
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst #设置上游的时间同步服务器
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
#下面的配置为广播模式、秘钥认证相关的配置,很少使用
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
# Enable public key cryptography.
#crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
# Disable the monitoring facility to prevent amplification attacks using ntpdc
# monlist command when default restrict does not include the noquery flag. See
# CVE-2013-5211 for more details.
# Note: Monitoring will not be disabled with the limited restriction flag.
disable monitor
官方文档:http://doc.ntp.org/4.1.1/confopt.htm
1、driftfile /var/lib/ntp/drift
记录系统时间与BIOS时间的偏差记录(ntp必须对当前文件具有写权限)。如果文件存在,则在ntp启动时读取它以设置初始偏移值,然后每小时使用daemon计算的当前频率偏移更新一次。如果文件不存在或未给出此命令,则假定初始频率偏移为零。在这种情况下,频率可能需要几个小时才能稳定下来,剩余的计时误差才会消退。
我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确. NTP会自动来监测我们时钟的误差值并予以调整.但问题是这个校准调整过程是一个冗长的过程,所以它会把记录下来的误差先写入driftfile.这样即使你重新开机以后之前的计算结果也就不会丢失了
2、restrict default nomodify notrap nopeer noquery
restrict对指定请求主机进行相关权限的限制,以实现控制相关权限。
语法为: restrict IP地址 mask 子网掩码 参数
其中IP地址也可以是default ,default 就是指所有的IP
参数有以下几个:
- ignore :关闭所有的 NTP 联机服务
- nomodify:client不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
- notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
- noquery :不提供客户端的时间查询:用户端不能使用ntpq,ntpc等命令来查询ntp服务器
- notrap :不提供trap远程登录功能,trap服务是一种远程时间日志服务:拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq 控制消息协议的子系统,用于远程事件日志记录程序。
- nopeer : 提供时间服务,但不作为对等体。用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
- kod : 访问违规时发送 KoD 包。向不安全的访问者发送Kiss-Of-Death报文。
- restrict -6 表示IPV6地址的权限设置。
3、server 0.centos.pool.ntp.org iburst
语法为:server host [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]
其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:
- key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。
- version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。
- prefer: 如果有多个server选项,具有该参数的服务器优先使用。
- mode: 指定数据报文mode字段的值。
- minpoll n: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。
- maxpoll n: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。
- iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。
4、同步硬件时钟
ntp服务,默认只会同步系统时间。
如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,
在/etc/sysconfig/ntpd文件中,添加【SYNC_HWCLOCK=yes】这样,就可以让硬件时间与系统时间一起同步。
允许BIOS与系统时间同步,也可以通过hwclock -w 命令。
5、配置内部时钟
# 默认的一个内部时钟数据,用在没有外部 NTP 服务器时,通过配置如下配置,让该服务器作为局域网内的ntp server,为局域网用户提供服务:
server 127.127.1.0 # local clock(内部时钟),127.127.1.0 表示回环网卡的地址,即服务器自己。
fudge 127.127.1.0 stratum 10 #不能省略上行。stratum是代表层级。
# vim /etc/ntp.conf
restrict 192.168.6.3 nomodify notrap nopeer noquery #当前节点IP地址
restrict 192.168.6.0 mask 255.255.255.0 nomodify notrap #当前子网
#在server部分添加一下部分,并(可选)注释掉server [0-n].centos.pool.ntp.org iburst
# vi /etc/ntp.conf
server 127.127.1.0
Fudge 127.127.1.0 stratum 10
#在server部分添加如下语句,将server指向主节点。
# vi /etc/ntp.conf
server 192.168.6.3 iburst
Fudge 192.168.6.3 stratum 10
===修改前===

===修改后===
节点1(192.168.6.3):

节点2(192.168.6.4):

节点3(192.168.6.5):

查看ntp服务器与上层ntp的状态

remote:配置文件中指定的可以用于时间同步的上层NTP服务器的IP或主机名。
“*”表示优先:它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供。一般出现”*“表示与NTP服务器已经完成同步了。- “+”表示次优先:它将作为辅助的NTP Server和带有
*号的服务器一起为我们提供同步服务. 当*号服务器不可用时它就可以接管 - ”-“表示远程服务器被认为是不合格的NTP Server
- ”x“表示远程服务器不可用
refid:参考上一层ntp主机地址(NTP服务器使用的更高一级服务器的名称,是给远程服务器提供时间同步的服务器)
st: 正在响应请求的NTP服务器stratum阶层
t:
- u: unicast or manycast client,
- b: broadcast or multicast client,
- l: local (reference clock),
- s: symmetric (peer),
- A: manycast server,
- B: broadcast server,
- M: multicast server
when:多少秒前曾经同步过时间(秒)(上一次成功请求之后到现在的秒数)
poll(轮询):下次更新的时间间隔(秒),即when值达到poll值后,就开始发送新的更新请求(指出轮询间隔时间。该值会根据本地时钟的精度相应增加。即:本地和远程服务器多少时间进行一次同步,单位秒,在一开始运行NTP的时候这个poll值会比较小,服务器同步的频率大,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小。)
reach:用来测试衡量前八次查询是否成功和服务器连接。已经向上层ntp服务器请求更新的次数。每成功连接一次它的值就会增加,需要等到reach值到达377(八进制377 = 二进制11111111,表示都成功),NTP服务才能作为服务器被使用。该值是一个8位的左移移位寄存器值,用来测试能否和服务器连接,每成功连接一次它的值就会增加(先左移1位,然后更新最右边的二进制为0或1),以 8 进制显示,能够表示最新的连续8次的请求是否成功。
delay:网络延迟,单位μs(从本地机发送同步要求到ntp服务器的往返时间)
offset:时间补偿,是源时钟与本地时钟的时间差(毫秒),offset越接近于0,主机和ntp服务器的时间越接近
jitter(抖动):系统时间与bios时间差
查看ntp服务器有无和上层ntp连通

查看ntp状态时,可能会出现如下所示情况
① unsynchronised time server re-starting polling server every 8 s

② unsynchronised polling server every 8 s

这种情况属于正常,ntp服务器配置完毕后,需要等待5-10分钟才能与/etc/ntp.conf中配置的标准时间进行同步。
等一段时间之后,再次使用ntpstat命令查看状态,就会变成如下正常结果:

[root@controller ~]# ntpdate -q 0.hk.pool.ntp.org
server 203.95.213.129, stratum 2, offset -0.020632, delay 0.06477
server 209.58.185.100, stratum 2, offset -0.011884, delay 0.06216
server 218.189.210.4, stratum 0, offset 0.000000, delay 0.00000
server 218.189.210.3, stratum 2, offset -0.036728, delay 0.11096
6 Apr 12:51:43 ntpdate[10190]: adjust time server 209.58.185.100 offset -0.011884 sec
下面是网上关于ntpd与ntpdate区别的相关资料。如下所示所示:
使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别。
ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,
并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行。
时钟的跃变,对于某些程序会导致很严重的问题。
许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,
一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。
不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,
这有几个非常明显的问题:
【一】这样做不安全。
ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。
由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。
【二】这样做不精确。
一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。
与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。
【三】这样做不够优雅。
由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错
(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。
因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。
其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。
NTPD在和时间服务器的同步过程中,会把BIOS计时器的振荡频率偏差——或者说Local Clock的自然漂移(drift)——记录下来。
这样即使网络有问题,本机仍然能维持一个相当精确的走时。
210.72.145.44 (国家授时中心服务器IP地址)
133.100.11.8 日本 福冈大学
time-a.nist.gov 129.6.15.28 NIST, Gaithersburg, Maryland
time-b.nist.gov 129.6.15.29 NIST, Gaithersburg, Maryland
time-a.timefreq.bldrdoc.gov 132.163.4.101 NIST, Boulder, Colorado
time-b.timefreq.bldrdoc.gov 132.163.4.102 NIST, Boulder, Colorado
time-c.timefreq.bldrdoc.gov 132.163.4.103 NIST, Boulder, Colorado
utcnist.colorado.edu 128.138.140.44 University of Colorado, Boulder
time.nist.gov 192.43.244.18 NCAR, Boulder, Colorado
time-nw.nist.gov 131.107.1.10 Microsoft, Redmond, Washington
nist1.symmetricom.com 69.25.96.13 Symmetricom, San Jose, California
nist1-dc.glassey.com 216.200.93.8 Abovenet, Virginia
nist1-ny.glassey.com 208.184.49.9 Abovenet, New York City
nist1-sj.glassey.com 207.126.98.204 Abovenet, San Jose, California
nist1.aol-ca.truetime.com 207.200.81.113 TrueTime, AOL facility, Sunnyvale, California
nist1.aol-va.truetime.com 64.236.96.53 TrueTime, AOL facility, Virginia
————————————————————————————————————
ntp.sjtu.edu.cn 202.120.2.101 (上海交通大学网络中心NTP服务器地址)
s1a.time.edu.cn 北京邮电大学
s1b.time.edu.cn 清华大学
s1c.time.edu.cn 北京大学
s1d.time.edu.cn 东南大学
s1e.time.edu.cn 清华大学
s2a.time.edu.cn 清华大学
s2b.time.edu.cn 清华大学
s2c.time.edu.cn 北京邮电大学
s2d.time.edu.cn 西南地区网络中心
s2e.time.edu.cn 西北地区网络中心
s2f.time.edu.cn 东北地区网络中心
s2g.time.edu.cn 华东南地区网络中心
s2h.time.edu.cn 四川大学网络管理中心
s2j.time.edu.cn 大连理工大学网络中心
s2k.time.edu.cn CERNET桂林主节点
s2m.time.edu.cn 北京大学
配置了ntp服务之后,发现时间仍然无法同步,在网上查了半天,
通过命令timedatectl查看,之后,发现ntp服务没有生效(NTP enabled: no),如下图所示

执行命令timedatectl set-ntp yes之后,问题得以解决。
判断:在ntp客户端用ntpdate –d serverIP查看,发现有“Server dropped: strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。
原因:NTP server还没有和其自身或者它的server同步上。在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。
https://blog.csdn.net/qq_27721925/article/details/52332750
https://blog.csdn.net/zhaomax/article/details/82458283
https://blog.csdn.net/weixin_43751619/article/details/88246563
