搭建自己的NTP时间服务器

网络时间协议NTPNetwork Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTCUniversal Time Coordinated)。NTP的主要开发者是美国特拉华大学的David L. Mills教授。

NTP对于我们个人来说有什么用呢,简单的讲,当你的计算机时间不准确了,你可以接入到互联网,从网上同步一下时间,看多方便。

对于企业来说,当你有成百上千的计算机,都不能直接连接互联网,时间不统一影响业务,如果一台一台的修改,那不得累死人啊。这时搭建一个自己的NTP服务器就显出它的优势了。

下面我们就来学习一下如何搭建自己的NTP时间服务器。

一、NTP服务器的安装

想要学习当然是得先安装上,不然怎么学?

安装方法有:

1RPM安装

 

NTP时间服务器_第1张图片

2YUM安装

 

NTP时间服务器_第2张图片

3、源码编译安装

# wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p4.tar.gz
# tar zxvf ntp-4.2.6.tar.gz
# cd ntp-4.2.6
# ./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
# make && make install

二、NTP的配置文件和相关命令

NTP的配置文件:

/etc/ntp.conf      NTP服务的配置文件。

1)、权限的设定主要以 restrict 这个参数来设定,主要的语法为:
restrict IP
地址 mask 子网掩码 参数
其中 IP 可以是IP地址,也可以是 default default 就是指所有的IP
参数有以下几个:
ignore
:关闭所有的 NTP 联机服务
nomodify
:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust
:客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery
:不提供客户端的时间查询 
2
)、用server这个参数设定上级时间服务器,语法为:
server  IP
地址或域名 [prefer]
IP
地址或域名就是我们指定的上级时间服务器,如果 Server 参数最后加上 prefer,表示我们的 NTP 服务器主要以该部主机时间进行校准。
3
)、解决NTP服务器校准时间时的传送延迟
使用driftfile参数设置:
driftfile
文件名 
在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件内。
注意:  driftfile 后面接的文件需要使用完整的路径文件名,不能是链接文件,并且文件的权限需要设定成 ntpd守护进程可以写入。

/usr/share/zoneinfo/     这个目录下存放的是各个时区对应的设定文件。

/etc/localtime    本地系统时间设定文件。

/etc/sysconfig/clock   本机时区设定文件。

 

当我们修改了上图中ZONE选项中的时区时,系统就对去/usr/share/zoneinfo/取对应的时区设定文件,复制为本地/etc/localtime

相关命令:

date    修改和显示日期和时间的命令。

hwclock    将当前系统时间写入CMOS的命令,只有root用户才可以使用。

ntpd     NTP服务的守护进程文件,需要先启动它才能提供NTP服务。

ntpdate     客户端时间同步

三、配置NTP

# vi /etc/ntp.conf

#========权限控制============
restrict default kod nomodify notrap nopeer noquery    
拒绝IPV4用户
restrict -6 default kod nomodify notrap nopeer noquery  
拒绝IPV6用户
restrict 210.72.145.44
授权国家授时中心服务器访问本地NTP       
restrict 133.100.11.8 
授权133.100.11.8访问本地NTP
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify    
本地网段授权访问
#=========
源服务器===========
server 210.72.145.44 prefer  
指定上级更新时间服务器,优先使用这个地址
server 133.100.11.8
#=========
差异分析===========
driftfile /var/lib/ntp/drift
keys    /etc/ntp/keys

# service ntpd start    RPMYUM安装的启动方式

#/usr/local/ntp/bin/ntpd -c /etc/ntp.conf -p /tmp/ntpd.pid   源码编译安装的启动方式

ntpd启动后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。

# netstat -tlunp | grep ntp       如果看到123端口,说明ntp服务成功启动。

# ntpstat    查看ntp服务器与上级服务器是否通讯

# ntpq p   查看本地NTP与上级服务器的通讯情况

四、客户端如何更新时间

linux上:

# ntpdate 192.168.100.10

手工更新太麻烦,我们写个任务计划定时更新

# vi /var/spool/cron/root

0 1 * * * /usr/sbin/ntpdate 192.168.18.2

windows上:

 

NTP时间服务器_第3张图片

 五、NTPD服务端设置

1)确认NTPD服务已经开启,时区设置正确,

2)确认NTPD能够作为客户端从上级NTP服务器获取时间,

3NTPD服务的主要配置文件默认是/etc/ntp.conf

4)设置配置文件中的“restrict”项,主要用于控制客户端对服务器的访问,一般设置如下:

restrict default  kod nomodify notrap nopeer noquery

#禁用全部地址对NTPD各服务的访问

restrict  127.0.0.1

#允许本机地址(127.0.0.1)对NTPD各服务的访问

restrict  xx.xx.xx.xx  mask  xx.xx.xx.xx  nomodify

#允许设置的可信任地址段对NTPD各服务的访问,但不允许此地址段内客户端修改NTPD服务器时间(nomodify)。

5)设置配置文件中的“server”项,主要用于NTPD的上级服务器、本机时钟的同步,以及时钟的层次stratum

server 127.127.1.0

#NTPD把本地主机的时钟也看作外部时钟源来处理,分配的地址是127.127.1.0

fudge  127.127.1.0 stratum 1

#设置本地时钟源的层次为1,这样如果NTPD服务从本地时钟源获取时间的话,NTPD对外宣布的时间层次为2

server 10.138.1.240

#设置上级时钟源为10.138.1.240,上级时钟源的层次是1NTPD从上级时钟源获取到时间,对外宣布的时间层次为2。只有在上级时钟源失效时,NTPD才会使用127.127.1.0的本地时钟。

6)配置完毕,重启NTPD服务,使配置更改生效。

 

六、NTPD服务调试过程遇到的问题

NTP时间同步失败的原因很多,但排除配置不当和外部因素后,NTP协议本身的特性也需要考虑到,在Linux NTPD服务调试的过程中,遇到以下问题:

1NTPD服务刚启动后,客户端无法同步时间,在过了几分钟之后,客户端才能成功成功同步时间。

2)网络上存在多个NTP服务器时,客户端单独只从A服务器或B服务器同步时间都能成功,但如果把从A服务同步时间的客户机重新设置,改为从B服务器同步,很有可能不能成功同步时间,重启客户机上的同步服务之后,发现客户机又能够成功从B服务器同步了。

层的概念

这些问题主要涉及到NTP的层(stratum)的概念,顶层是1,值为0时表示层数不明,层的值是累加的,比如NTP授时方向是A-B-C,假设Astratum值是3,那么BA获取到时间,Bstratum置为4CB获取到时间,C的值被置为5。一般只有整个NTP系统最顶层的服务器stratum才设为1

NTP同步的方向是从stratum值较小的节点向较大的节点传播,如果某个NTP客户端接收到stratum比自己还要大,那么NTP客户端认为自己的时间比接受到的时间更为精确,不会进行时间的更新。

对于大部分NTP软件系统来说,服务启动后,stratum值初始是0,一旦NTP服务获取到了时间,NTP层次就设置为上级服务器stratum+1。对于具备卫星时钟、原子钟的专业NTP设备,一般stratum值初始是1

NTPD的运行过程

NTPD启动后,stratum值初始是0,此时NTPD接收到NTP请求,回复stratum字段为0NTP包,客户端接收后,发现stratum字段无效,拒绝更新时间,造成时间更新失败。

几分钟后,NTPD从上级服务器获取到了更新,设置了正确的stratum,回复stratum字段为n+1NTP包,客户端接收后,确认stratum有效,成功进行时间更新。

NTPD上级服务器不可用的情况下,NTPD将本机时钟服务模拟为一个上级NTP服务器,地址使用环回127.127.1.0,服务启动几分钟后,NTPD127.127.1.0更新了时钟,设置了有效的stratum,客户端接收后,成功进行时间更新。

对应的/etc/ntp.conf配置项如下:

server 127.127.1.0

#NTPD把本地主机的时钟也看作外部时钟源来处理,分配的地址是127.127.1.0

fudge  127.127.1.0 stratum 1

#设置本地时钟源的层次为1,这样如果NTPD服务从本地时钟源获取时间的话,NTPD对外宣布的时间层次为2