从NTP协议原理分析,排查ntpdate报错原因

从NTP协议原理分析,排查ntpdate报错原因


NTP协议

NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。

NTP工作原理

NTP的基本工作原理如图所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设:
在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时钟设定为11:00:00am。
Device B作为NTP时间服务器,即Device A将使自己的时钟与Device B的时钟同步。
NTP报文在Device A和Device B之间单向传输所需要的时间为1秒。
img
系统时钟同步的工作过程如下:
Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。
当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。
当此NTP报文离开Device B时,Device B再加上自己的时间戳,该时间戳为11:00:02am(T3)。
当Device A接收到该响应报文时,Device A的本地时间为10:00:03am(T4)。
至此,Device A已经拥有足够的信息来计算两个重要的参数:
NTP报文的往返时延Delay=(T4-T1)-(T3-T2)=2秒。
Device A相对Device B的时间差offset=((T2-T1)+(T3-T4))/2=1小时。
这样,Device A就能够根据这些信息来设定自己的时钟,使之与Device B的时钟同步。

NTP报文格式

NTP有两种不同类型的报文,一种是时钟同步报文,另一种是控制报文。控制报文仅用于需要网络管理的场合,它对于时钟同步功能来说并不是必需的,这里不做介绍。下图为时钟同步报文。
img
主要字段的解释如下:

  • LI(Leap Indicator):长度为2比特,值为“11”时表示告警状态,时钟未被同步。为其他值时NTP本身不做处理。
  • VN(Version Number):长度为3比特,表示NTP的版本号,目前的最新版本为3。
  • Mode:长度为3比特,表示NTP的工作模式。不同的值所表示的含义分别是:0未定义、1表示主动对等体模式、2表示被动对等体模式、3表示客户模式、4表示服务器模式、5表示广播模式或组播模式、6表示此报文为NTP控制报文、7预留给内部使用。
  • Stratum:系统时钟的层数,取值范围为1~16,它定义了时钟的准确度。层数为1的时钟准确度最高,准确度从1到16依次递减,层数为16的时钟处于未同步状态,不能作为参考时钟。
  • Poll:轮询时间,即两个连续NTP报文之间的时间间隔。
  • Precision:系统时钟的精度。
  • Root Delay:本地到主参考时钟源的往返时间。
  • Root Dispersion:系统时钟相对于主参考时钟的最大误差。
  • Reference Identifier:参考时钟源的标识。
  • Reference Timestamp:系统时钟最后一次被设定或更新的时间。
  • Originate Timestamp:NTP请求报文离开发送端时发送端的本地时间。
  • Receive Timestamp:NTP请求报文到达接收端时接收端的本地时间。
  • Transmit Timestamp:应答报文离开应答者时应答者的本地时间。
  • Authenticator:验证信息。

NTP的工作模式

设备可以采用多种NTP工作模式进行时间同步:

  • 客户端/服务器模式
  • 对等体模式
  • 广播模式
  • 组播模式

用户可以根据需要选择合适的工作模式。在不能确定服务器或对等体IP地址、网络中需要同步的设备很多等情况下,可以通过广播或组播模式实现时钟同步;客户端/服务器和对等体模式中,设备从指定的服务器或对等体获得时钟同步,增加了时钟的可靠性。
1. 客户端/服务器模式
img
在客户端/服务器模式中,客户端向服务器发送时钟同步报文,报文中的Mode字段设置为3(客户模式)。服务器端收到报文后会自动工作在服务器模式,并发送应答报文,报文中的Mode字段设置为4(服务器模式)。客户端收到应答报文后,进行时钟过滤和选择,并同步到优选的服务器。
在该模式下,客户端能同步到服务器,而服务器无法同步到客户端。

2. 对等体模式
img

在对等体模式中,主动对等体和被动对等体之间首先交互Mode字段为3(客户端模式)和4(服务器模式)的NTP报文。之后,主动对等体向被动对等体发送时钟同步报文,报文中的Mode字段设置为1(主动对等体),被动对等体收到报文后自动工作在被动对等体模式,并发送应答报文,报文中的Mode字段设置为2(被动对等体)。经过报文的交互,对等体模式建立起来。主动对等体和被动对等体可以互相同步。如果双方的时钟都已经同步,则以层数小的时钟为准

3. 广播模式
img
在广播模式中,服务器端周期性地向广播地址255.255.255.255发送时钟同步报文,报文中的Mode字段设置为5(广播模式)。客户端侦听来自服务器的广播报文。当客户端接收到第一个广播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入广播客户端模式,继续侦听广播报文的到来,根据到来的广播报文对系统时钟进行同步。

4. 组播模式
img
在组播模式中,服务器端周期性地向用户配置的组播地址(若用户没有配置组播地址,则使用默认的NTP组播地址224.0.1.1)发送时钟同步报文,报文中的Mode字段设置为5(组播模式)。客户端侦听来自服务器的组播报文。当客户端接收到第一个组播报文后,客户端与服务器交互Mode字段为3(客户模式)和4(服务器模式)的NTP报文,以获得客户端与服务器间的网络延迟。之后,客户端就进入组播客户模式,继续侦听组播报文的到来,根据到来的组播报文对系统时钟进行同步。

NTP基本用法

yum -y install ntp                            # 安装ntp
ntpdate <NTP服务器的域名或IP>                   # ntpdate同步服务器时间

NTP端口测试

nc测试

yum install -y nc
nc -vuz 120.25.115.20 123

image-20220210144743579

nmap测试

yum install -y nmap
nmap -sU 203.107.6.88 -p 123 -Pn

image-20220210145328159

Advanced PortChecker

下载链接:https://codedead.com/Software/Advanced%20PortChecker/AP_portable.zip
image-20220210221357271
❗️❗️❗️注意

由于UDP是无连接的,数据包发出去没有消息就是好消息,也就是认为成功了。只有少数几种情况才会出现错误,比如本地的路由不可达,中间的路由不可达会不会出错不清楚,但只要中间的路由器回ICMP包就会出错,最后一个才是对方没开端口的时候响应ICMP报文说端口不可达的出错情况。

下面是注释掉网卡配置中的网关参数,也就是缺少目标IP的路由信息的情况,nc和nmap测试返回结果:
image-20220210152914858
image-20220210162232322

报错1:the NTP socket is in use, exiting

image-20220210171739654

原因分析

ntp端口被占用

netstat -tunlp |grep 123

image-20220210173113520

解决方法

先停止ntpd服务

systemctl status ntpd
systemctl stop ntpd && systemctl status ntpd
netstat -tunlp |grep 123

image-20220210173455177
再同步测试
image-20220210173826735

报错2:no servers can be used, exiting

image-20220210174334454

原因分析

找不到NTP服务器,域名解析失败

ping ntp2.aliyun.cn

image-20220210175213726

解决方法

更换正确的NTP服务器域名或IP地址
image-20220210175446190

报错3:no server suitable for synchronization found

image-20220210180330062
可以打开调试模式或者抓包分析,做进一步的排查。

打开调试模式

man ntpdate
ntpdate -d ntp2.aliyun.com

打开调试模式,ntpdate将完成时间同步的所有步骤,但不调整本地时钟
image-20220210184156139
从上面debug信息中可以看到,在同步的过程中,数据包的来回是正常的,既有transmit,也有receive。
返回报文中携带的服务端时间戳是与当前相近的时间
image-20220210185919952
以下是报错域名的debug,只有transmit,也就是说服务端没有响应或客户端没有收到回包
返回报文中的时间戳为:Mon, Jan 1 1900 8:05:43.000(1900年1月1日+时区时间)
image-20220210184735363

抓包分析

yum install -y tcpdump
tcpdump -i ens33 host 120.25.115.20
tcpdump -i ens33 host 203.107.6.88 -w ntp.cap

正常同步时间的数据包,可以看到客户端与服务器之间的双向数据流
image-20220210204728877
异常数据包,则只有客户端到服务器的单向数据流
image-20220210192103578
NTP数据报文-client
image-20220210211505880
NTP数据报文-server
image-20220210211656137

原因分析

没有找到适合同步的服务器。这种情况较为常见,但也有多种可能的原因:
debug信息提示:Server dropped: no data

  • 服务器不存在,但能匹配路由出去,不存在的服务器肯定不会有响应(udp无连接特性导致)
  • 服务器地址有误,但能匹配路由出去,非ntp服务器不响应(udp无连接特性导致)
  • 数据包转发过程中有拦截(防火墙策略)
  • restrict参数配置影响(ntp服务器对客户端的限制,在ntp.conf中配置)

debug信息提示:Server dropped: strata too high

  • ntp服务器的ntp.conf,stratum配置缺失(未验证是否为ntpd版本 >4.2导致)

解决方法

  • 确认服务器地址正确且可达
  • 确认没有设置restrict限制了客户端,若有则根据实际情况去掉(私有ntp服务器)
  • 确认服务器的ntp.conf中存在stratum配置,若没有请添加上(私有ntp服务器)
  • 查看防火墙日志,排查防火墙策略,包括客户端、服务端(私有ntp服务器)、及流量需要经过的安全设备等,若确认为防火墙拦截,则考虑添加放行规则或关闭防火墙

这里的测试环境为VMware虚拟机,电脑上安装了McAfee并开启了防火墙策略,经排查McAfee的防火墙日志发现,物理机访问120.25.115.20的ntp流量被拦截
image-20220210215338023
image-20220210215828783
在防火墙在添加放行规则
image-20220210220613558
再次同步时间测试,正常无报错
image-20220210220940820

restrict测试

restrict说明
restrict [ 客户端IP ]  mask  [ IP掩码 ]  [参数]

“客户端IP” 和 “IP掩码” 指定了对网络中哪些范围的计算机进行控制,如果使用default关键字,则表示对所有的计算机进行控制,参数指定了具体的限制内容,常见的参数如下:

  • ignore:拒绝连接到NTP服务器
  • nomodiy:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时
  • noquery:不提供客户端的时间查询
  • notrap:不提供trap远程登录功能,trap服务是一种远程时间日志服务
  • notrust:客户端除非通过认证,否则该客户端来源将被视为不信任子网
  • nopeer:提供时间服务,但不作为对等体
  • kod:向不安全的访问者发送Kiss-Of-Death报文
报错复现

ntp服务器,编辑ntp.conf

vi /etc/ntp.conf

添加restrict配置

restrict default ignore
restrict 127.0.0.1
restrict ::1
restrict 192.168.64.0 mask 255.255.255.0 notrust

重启ntpd服务

systemctl restart ntpd

image-20220211103411607
客户端同步测试
image-20220211104050188

解决方法

ntp服务器添加restrict配置,只允许192.168.64.101同步时间,其他IP拒绝

restrict default ignore
restrict 127.0.0.1
restrict ::1
restrict 192.168.64.101 mask 255.255.255.255
restrict 192.168.64.0 mask 255.255.255.0 notrust

测试效果符合预期
image-20220211105622095

stratum测试

stratum说明

stratum为时间服务器的层次,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。
ntpd根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。
这里写图片描述

报错复现

在ntp服务器,将/etc/ntp.conf中的stratum配置注释掉(本次测试环境中的ntpq 4.2.6p5,默认有以下两行配置)

#server 127.127.1.0
#fudge 127.127.1.0 stratum 10

image-20220211111337564

解决方法

在/etc/ntp.conf加入stratum配置:

server 127.127.1.0 
fudge 127.127.1.0 stratum 10

转载或参考文章

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值