NTP服务器搭建

当本机时间不准确时,我们需要对时间进行校准,
那么我们就需要在互联网上找到一个可以提供我们准确时间的服务器然后通过一种协议来同步我们的系统时间,那么这个协议就是NTP了

因为不论我们的计算机配置多好运行时间久了都会产生误差,所以不足以给互联网上的其他服务器做NTP Server. 真正能够精确地测算时间的还是原子钟. 但由于原子钟十分的昂贵,只有少部分组织拥有, 他们连接到计算机之后就成了一台真正的NTP Server. 而我们所要做的就是连接到这些服务器上同步我们系统的时间,然后把我们自己的服务器做成NTP Relay Server再给互联网或者是局域网内的用户提供同步服务

现在我们就来自己搭建一台ntp-server

寻找NTP SERVER

那么第一步我们就要找到在互联网上给我们提供同步服务的NTP Server
http://www.pool.ntp.org是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个个NTP Server
我们找到对应的中国NTPserver

server 0.cn.pool.ntp.org 
server 1.cn.pool.ntp.org 
server 2.cn.pool.ntp.org 
server 3.cn.pool.ntp.org

安装NTP服务

安装前检查
rpm -qa ntp
yum list installed ntp ntpdate
安装
yum install -y ntp ntpdate

手动同步

ntpdate server 0.cn.pool.ntp.org
因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步

修改配置文件:

vim /etc/ntp.conf
这个配置文件是ntp服务唯一的配置文件

配置文件模版:

driftfile /var/lib/ntp/drift  #这是预设时间差异分析文件,我们暂时用不到,就这样留着就好啦
restrict default kod nomodify notrap nopeer noquery        #拒绝ipv4的用户
restrict -6 default kod nomodify notrap nopeer noquery    #拒绝ipv6的用户
restrict 127.0.0.1  #放行本机来源
restrict -6 ::1       #放行本机 ipv6 来源
restrict 0.0.0.0 mask 0.0.0.0  nomodify   #放行所有来源,这里可以写192.169.0.0. mask 255.255.255.0 只放行一个网断
server 0.cn.pool.ntp.org prefer   #以这个主机最为优先
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org

其他配置选添:
下面这两项的意思是当上述四个都不行的情况下,使用本机地址

server 127.0.0.1 #外界同步源无法联系时,使用本地时间为同步服务
local clockfudge 127.0.0.1 stratum 10 #这行是时间服务器的层次。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0
个人认为: 不要添加上面两行配置文件,因为当ntp服务器出现问题,我们应该及时发现,而不应该去使用本地时钟同步

在 ntp.conf 配置文件内可以利用『 restrict 』來控管权限,这个参数的设定方式为:
restrict [你的IP] mask [netmask_IP] [parameter]
其中 parameter 的參數主要有底下這些:
1.ignore: 拒絕所有類型的 NTP 連線;
2.nomodify: 用戶端不能使用 ntpc 與 ntpq 這兩支程式來修改伺服器的時間參數, 但用戶端仍可透過這部主機來進行網路校時的;
3.noquery: 用戶端不能夠使用 ntpq, ntpc 等指令來查詢時間伺服器,等於不提供 NTP 的網路校時囉;
4.notrap: 不提供 trap 這個遠端事件登錄 (remote event logging) 的功能。
5.notrust: 拒絕沒有認證的用戶端。
那如果你沒有在 parameter 的地方加上任何參數的話,這表示『該 IP 或網段不受任何限制』的意思喔!一般來說,我們可以先關閉 NTP 的使用權限,然後再一個一個的啟用允許登入的網段。

启动

/etc/init.d/ntpd start
/etc/init.d/ntpd status 
chkconfig ntpd on
tail /var/log/messages #检查下有无错误
netstat -tunpl | grep ntp #检查下端口,主要是123端口

这样就表示我们的ntp服务器已经启动了,不过要与上层ntp服务器创建连线需要一些时间,通常需要启动ntp后约15分钟才会与上层ntp服务器顺利连接上,那我们如何确认我们的ntp服务器已经顺利的更新了自己的时间呢?

[root@ES02 /]# ntpstat
synchronised to NTP server (166.111.206.172) at stratum 3 
   time correct to within 1322 ms
   polling server every 64 s
[root@ES02 /]# ntpq -p 
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*biisoni.miuku.n 207.224.49.219   2 u   17   64  337  207.200   -4.285  26.350
+166.111.206.172 200.98.196.212   2 u   15   64  377    2.007  -11.973   8.802
-marla.ludost.ne 87.120.164.97    2 u   73   64  206  279.094   38.163  10.628
+188-39-37-91.st .GPS.            1 u    5   64  377  288.730   -4.415   5.937
如果有『 * 』代表目前正在作用當中的上層 NTP
如果是『 + 』代表也有連上線,而且可作為下一個提供時間更新的候選者

客户端主机与NTP服务器同步

至此我们的NTP服务器已经搭建完毕,下面流程就是其他主机与NTP服务器同步了,比如说我的NTP服务器为1.1.1.1

[root@ES01 ~]# ntpdate 1.1.1.1
8 Mar 19:13:10 ntpdate[23744]: adjust time server 1.1.1.1  offset -0.013530 sec

但是这样的话是即时生效,如果设备重启时间会丢失,所以我们要使用crontab来定时更新

vim /etc/crontab  
*/15 * * * *  root   /usr/sbin/ntpdate 10.0.70.2

问题处理

[root@del-wangxin ~]# timedatectl set-time 12:00:00
[root@del-wangxin ~]# date
Tue May 17 12:00:01 CST 2022

[root@esx4 ~]# ntpdate ntp.api.bz
21 Sep 14:39:09 ntpdate[24744]: the NTP socket is in use, exiting

[root@esx4 ~]# service ntpd stop
Shutting down ntpd:                                        [  OK  ]
 
[root@esx4 ~]# ntpdate ntp.api.bz
21 Sep 15:22:43 ntpdate[25723]: step time server 114.80.81.1 offset 2312.159684 sec

参考链接:

鸟哥私房菜:http://linux.vbird.org/linux_server/0440ntp.php#theory_NTP
linux公社:http://www.linuxidc.com/Linux/2012-12/76836.htm

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐