企业网络基础服务-时间服务-NTP

企业网络基础服务-时间服务-NTP

Scroll Down

一、时间标准

从古至今,时间都是一个永恒的话题。运动员100米比赛,需要精确的计时、航天倒计时、一天的时间需要进行度量。从以前到现在,采用的计时方法也越来越先进,从原来的太阳照影、滴水、一炷香、机械表计时、电子表计时再到石英原子时钟计时,人们对时间的精确追求越来越疯狂,基于铯133的原子时钟每3亿年误差仅为1s。在生活中不仅对时间有着极高的精确要求,比如网上购物、证券交易、金融交易等。网络对时间的要求也精确到了极致,如服务器同步配置需要基于时间、GPS定位需要基于时间、数据包传输需要基于时间进行控制,否则数据传输会出现问题、分布式计算同步需要基于时间、系统内的文件需要根据时间来记录修改行为、电子邮件也极度依赖时间。

个人电脑使用的石英钟(即晶体振荡器)准确度很低,一般一天能够达到十几秒,所以一般电脑会有两种计时方法:第一种基于自身的硬件时钟(即石英钟,一般称为RTC,在BIOS硬件上),第二种连接网络后去找NTP服务器同步校准时间。

常见的时间标准有:

  • GMT 格林尼治时间
  • UTC 世界协调时间
  • CST 北京标准时间

二、NTP

1、NTP

NTPnetwork time protocol,网络时间协议)是互联网服务的基础服务之一。目前最新的NTP版本是第4版(NTPv4),其标准化文档为 RFC 5905。网络时间同步技术也将向更高精度、更强的兼容性和多平台的适应性方向发展。NTP用于把计算机的时钟同步到UTC,其精度在局域网内可达0.1ms,在Internet上绝大多数的地方其精度可以达到1-50ms。

NTP提供准确时间,首先要有准确的时间来源,这一时间应该是UTC(国际标准时间)。 NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。

有了准确的时间源,时间按NTP服务器的等级传播,按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。计算机主机一般同多个时间服务器连接, 利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。NTP时间同步报文中包含的时间是格林威治时间,是从1900年开始计算的秒数。

总之NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。

NTP有效防止基于时间的重放攻击

2、NTP架构

NTP架构为适应internet层次结构,也采用了层次分布模型,NTP的网络架构包括主时间服务器、从时间服务器、客户与节点传输路径。时间源和时间服务器使用startum(即层)来表示,从数字0-15共16层,0表示时钟源,1-15表示时间同步服务器,越接近时钟源,则时间同步服务器的时间越准确。原理上从时钟源到最外层时间同步服务器的层数为15,但是在现网环境中,部署的时间同步服务器不大于stratum-5。

ntp5.png

NTP的服务架构为C/S模型。客户端和服务器均采用UDP 123端口同步时间。现网中每个移动设备都会安装并运行NTP协议,去获取最准确的时间。

3、NTP同步原理

ntp6.png

在A和B的系统时钟同步之前,A的时钟设定为10:00:00am,B的时钟设定为11:00:00am。B作为NTP时间服务器,即A将使自己的时钟与B的时钟同步。NTP报文在A和B之间单向传输所需要的时间为1秒。系统时钟同步工作过程如下:
1st. A发送ntp-message给B,ntp-message时间戳为报文离开A的时间T1(10:00:00am)
2nd. B接收到ntp-message时,B加上自己的时间戳T2(11:00:01am)
3rd. B将ntp-response重新发回给A,B再次给该报文加上离开B时的时间戳T3(11:00:02am)
4th. A收到响应报文时,A的RTC时间为T4(10:00:03am)
5th. A得到两个结论:

  • ntp-message往返延时=(T4-T1)-(T3-T2)=2s
  • A相对B的时间差offset=((T2-T1)+(T3-T4))/2=1h

6th. A根据这些信息来设置自己的时钟,使之与B进行时钟同步

三、NTP部署

1、NTP服务器

安装NTP服务:apt-get install ntp
查看/重启服务状态:systemctl status/restart ntpd.service
开机自启:systemctl enable ntpd.service

查看时间:date
设置日期:date --set 2021-5-02
设置时间:date --set 18:17:59
查看时区:cat /etc/timezone

NTP服务器配置位于/etc/ntp.conf,内容如下:

restrict x.x.x.x mask x.x.x.x {nomodify | ignore | noquery | notrap | notrust }  #权限控制
server x.x.x.x/domain_name prefer  #设定首选NTP服务器
fudge 127.0.0.1 stratum 10 #设定本机为备用时间源

权限控制的参数说明:

  1. nomodify:不允许客户端采用ntpq、ntpc等命令来修改服务器的时间参数,但是可以同步时间
  2. noquery:不提供NTP服务
  3. notrap:拒绝远程登录请求
  4. notrust:拒绝没有通过认证的客户端
  5. ignore:忽略所有类型的NTP连接

同步时间:ntpdate -u ntpserver_ip/ntpserver_domain
查看更新时间的详细信息:ntpdate -d x.x.x.x
查看同步状态:ntpstat

ntpq -pn回显说明

首字符:
- 空:表示无效服务器
- X:表示不再同步
- -:表示不再同步
- #:表示良好但是未使用
- +:表示良好且优先使用
- *:表示首选同步的时间服务器
remote:NTP服务器的IP/域名
refid:上层NTP服务器的地址
st:层级,0-16
t:协议类型;比如unicast、broadcast、multicast、anycast
when:几秒前进行过同步时间
poll:下一次同步时间在几秒后
reach:已向上层NTP服务器要求同步时间的次数
delay:网络传输过程中延迟的时间,单位为微秒
offset:时间补偿结果,单位毫秒
jitter:系统时间和RTC的差异时间,单位微秒

推荐采用的公有NTP服务器

阿里云(服务器在国内)

time1.aliyun.com
time2.aliyun.com
time3.aliyun.com
time4.aliyun.com
time5.aliyun.com
time6.aliyun.com
time7.aliyun.com

谷歌(服务器在国外)

time1.google.com
time2.google.com
time3.google.com
time4.google.com

国家授时中心

ntp.ntsc.ac.cn

2、NTP客户端

Ubuntu18.04开始使用了timesyncd客户端程序替代了原有的ntpd来同步时间。客户端timesyncd配置文件位置/etc/system/timesyncd.conf

查看时间:timedatectl
ntp7.png
查看所有时区:timedatectl -list-timezones

设置时区:timedatectl set-timezone “Asia/Shanghai”

设置系统时间:timedatectl set-time “2021-5-2 18:09:50”

需要先关闭网络时间同步服务(timedatectl set-ntp false)

启用网络时间同步服务:timedatectl set-ntp true

查看/重启ntp服务:systemctl status/restart system-timesyncd.service

将系统时间写入RTC:hwclock -w

将RTC写入系统时间:hwclock -s

设置RTC:hwclock --set --date=’ 2021-5-2 18:09:50’

四、NTP最佳实践

1、Centos7.x部署NTP

本次部署采用离线方式,NTP服务器172.28.7.5,需要部署NTP的服务器127.0.0.1

1)安装准备

centos7.x上安装NTP服务,需要用到三个安装包:

  • autogen-libopts-5.18-5.el7.x86_64.rpm
  • ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm
  • ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm

首先需要检查服务器是否安装了NTP,如果安装了需要删除掉旧的安装包,否则会出现依赖错误,在安装的时候注意安装包的顺序不要颠倒,因为包和包之间具有依赖关系。

检查服务器是否安装了NTP:rpm -qa | grep ntp

删除原有NTP程序:rpm -e --nodeps xxxxxx(你的程序名称)

2)安装NTP

安装NTP:rpm -ivh autoxxxx ntpdatexxxx ntpxxxx

设置开机自启:systemctl enable ntpd && systemctl start ntpd

修改配置文件:vi /etc/ntp.conf

# 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
server 172.28.7.5 prefer

重启NTP服务:systemctl restart ntpd

3)手动从NTP服务器同步时间

同步时间:ntpdate -n 172.28.7.5

ntpdate -d可以看查看到同步详细过程,便于排错

查看NTP同步状态:ntpstat

查看NTP服务器可用状态:ntpq- pn

4)可能出现的问题

ntp2.png

如果出现上图这种问题,就需要排查:

  1. NTP服务起了没
  2. NTP服务器的123/udp是否被防火墙放通