@cdmonkey
2018-11-02T11:31:22.000000Z
字数 7367
阅读 1823
网络服务
http://blog.sina.com.cn/s/blog_659b48590100v4uf.html
http://blog.chinaunix.net/uid-20690190-id-1894436.html
NTP(Network Time Protocol)是一种采用Server/Client(服务器与客户端之间)以及Master/Slave(服务器与服务器之间)架构来实现的时间同步服务。NTP服务器采用的是类似分级架构(stratum)来处理时间的同步,所以它们使用的是M/S的主从架构。网络上一般会提供一些主要与次要的时间同步服务器,这些均属于第一级(stratum-1)或者是第二级(stratum-2)的服务器。我们一般使用的国内标准时间服务器属于次级服务器。如果需要架设NTP服务器,可以直接选择我国的时间同步服务器作为上层服务器。
时间同步方式一般有两种:使用ntpdate命令直接同步和使用ntpd服务平滑同步。
我想你已经懂了ntpdate时间同步的隐患,当然这个例子有些极端,但的确是有风险的,生产环境我不打算这么干,还是稳妥点好。所以,解决该问题的办法就是时间平滑更改,不会让一个时间点在一天内经历两次,这就是ntpd服务方式来平滑同步时间——它每次同步时间的偏移量不会太陡,是慢慢的进行同步(没有细究,只晓得一次一点的同步,完全同步好需要较长时间,所以一般开启ntpd服务同步前先用“ntpdate”指令先手动同步一次)。
指令 | 说明 |
---|---|
/bin/date |
|
/sbin/hwclock |
|
/usr/sbin/ntpd |
|
/usr/sbin/ntpdate |
其实这里应该说是搭建“NTP Relay Server”更加合适。因为不论我们的计算机配置多好,运行时间久了都会产生时间上的误差,所以不足以给互联网上的其他服务器做NTP服务器。真正能够精确地测算时间的还是原子钟,但由于原子钟十分的昂贵,只有少部分组织拥有,他们连接到计算机之后就成了一台真正的时间同步服务器。而我们所要做的就是连接到这些服务器上同步我们系统的时间,然后把我们自己的服务器做成“NTP Relay Server”,再给互联网或者是局域网内的用户提供同步服务。
[root@NTP-A ~]# yum install -y ntp
[root@NTP-A ~]# rpm -qa|grep ^ntp
ntpdate-4.2.6p5-1.el6.centos.x86_64
ntp-4.2.6p5-1.el6.centos.x86_64
#绝大多数情况下,CentOS 6.5系统自带NTP套件。
-----------------------
#设置服务自启动:
[root@NTP-A ~]# chkconfig ntpd on
[root@NTP-A ~]# chkconfig --list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#在配置前,先使用ntpdate手动同步下时间,免得本机与外部时间服务器时间差距太大,使ntpd不能正常同步。
[root@NTP-A ~]# ntpdate -u 202.112.10.36
10 Oct 12:00:38 ntpdate[3850]: step time server 202.112.10.36 offset 87510.549276 sec
通过上面的操作,我们的前期工作都已完成,接下来我们就要找到在互联网上给我们提供同步服务的服务器。
第二步要做的就是在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间。
[root@NTP-A ~]# ntpdate 1.cn.pool.ntp.org
11 Jan 23:18:27 ntpdate[12469]: the NTP socket is in use, exiting
#当前如果已经启动了ntpd服务,则无法运行ntpdata指令来同步时间,必须停掉服务后再手动同步时间。
[root@NTP-A ~]# /etc/init.d/ntpd stop
Shutting down ntpd: [ OK ]
----------------------
[root@NTP-A ~]# ntpdate 1.cn.pool.ntp.org
8 Feb 18:32:44 ntpdate[12509]: step time server 202.112.31.197 offset 2400480.878732 sec
[root@NTP-A ~]# ntpdate 1.asia.pool.ntp.org
8 Feb 18:33:27 ntpdate[12510]: adjust time server 157.7.152.213 offset -0.014699 sec
#假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次。
那么为什么在打开NTP服务之前先要手动运行同步呢?
对于配置文件的编辑,最主要的就是设置好上层的时间同步服务器。鸟哥的资料:
http://linux.vbird.org/linux_server/0440ntp.php#server_ntp.conf
[root@NTP-A ~]# vim /etc/ntp.conf
# 该文件是时间同步服务的唯一的配置文件。
# 第一部分是先处理权限方面的问题,包括放行上层服务器以及开放局域网用户来源。
# 使用指定的文件记录时间差异:
driftfile /var/lib/ntp/drift
因为默认情况下NTP服务器本身的时间计算是依据BIOS的芯片振荡周期频率来计算的,但是这个时间值与上层的服务器不见得一致。
运行一个时间同步服务并不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多主机提供时间同步服务,但是一些基本的安全设定还是很有必要的。那么这里一个很简单的思路就是首先,我们只允许局域网内一部分的主机连接到我们的服务器,其次,就是这部分主机不能修改我们服务器上的时间。权限的设定主要以restrict
这个参数来设定,主要的语法为:
restrict [IP] mask [netmask_IP] [parameters]
------------------
#其中的IP可以是IP地址,也可以是“default”,即是指所有的地址。
#如果参数没有设定,那就表示该IP(或子网)没有任何限制。
以下是默认的权限控制:
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
# 禁用全部地址对时间同步各服务的访问,但是允许任意客户端进行时间同步:
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
注意:上面的默认设置条目并不会阻止客户端通过该服务进行时间同步(英文原文解释的很清楚),但会阻止客户端查询时间同步服务的状态信息以及对时间同步服务的修改。而一旦客户端试图进行操作时,往往会报超时。
参数 | 说明 |
---|---|
nomodify |
客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。 |
noquery |
用户端不能使用“ntpq/ntpc”等命令来查询NTP服务器。相当于不提供NTP的同步服务。 |
notrap |
不提供trap远端登陆功能。 |
notrust |
拒绝没有认证的客户端。客户端除非通过认证,否则该客户端来源将被视为不信任子网。 |
如果在“参数”内容上没有添加任何参数,则表示“该地址或网段不受任何的限制”。一般来说,我们可以先关闭默认的权限,然后再依据实际情况逐个地放行允许访问的网段。
允许本地主机的一切操作:
# 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 -6 ::1
最后我们允许局域网内所有主机连接到这台服务器同步时间,但是拒绝让他们修改服务器上的时间:
# Hosts on local network are less restricted.
# 放行(允许)指定的受信任主机进行同步时间:
restrict 172.16.1.0 mask 255.255.255.0 nomodify notrap
---------------------
# 下面要放行外部的上层服务器进入本时间同步服务器(这一步目前看来是无用的,忽略之)。
restrict 202.112.10.36
restrict 59.124.196.83
http://www.pool.ntp.org
上面是NTP的官方网站,在这上面我们可以找到离我们城市最近的时间同步服务器。官方建议我们为了保障时间同步的准确性,最少找两个服务器。如果是中国,则可以选择下面的服务器:
server 1.cn.pool.ntp.org
server 1.asia.pool.ntp.org
server 0.asia.pool.ntp.org
使用server
关键字设定上层时间同步服务源,prefer
表示优先使用:
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 这里请先将原本的同步服务器:[0-3].centos.pool.ntp.org注释掉。(下面已经注释掉)
# 中国这边最活跃的时间服务器:http://www.pool.ntp.org/zone/cn
server 1.cn.pool.ntp.org perfer
server 1.asia.pool.ntp.org
server 0.asia.pool.ntp.org
上层NTP服务器的设置方式为:
server [IP or hostname] [prefer]
# 第二部分(配置内容一般无需改动)。
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available.
server 127.127.1.0 # local clock
# 把本地主机的时钟也看作外部时钟源来处理,一点没有可用的外部时间同步源可用时,则使用本地时间源,分配的地址是:127.127.1.0
fudge 127.127.1.0 stratum 10
# 设置本地时钟源的层次为1,这样如果时间同步服务从本地时钟源获取时间的话,服务对外宣布的时间层次为2。
注意:上面的设置项目说明一旦时间同步服务器无法从上层时间源同步时间的话,那么服务器将把本地时间作为时间源进行时间同步。而下面这部分设置内容则一般无需进行更改。
# 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
设定时间同步日志:
# 对于日志的设定默认的配置文件里没有,需要手动进行设定:
logfile /var/log/ntp.log
注意:修改完设置文件后需要对服务进行重启,而使用reload
参数目前测试无效果,所以还是使用restart
进行服务的重启。
通常上层时钟源的层次是“1”,那么从上层时钟源获取到时间,对外宣布的时间层次为“2”。上级时间源失效时,如果设定允许将自身时间作为时间源,那么时间同步服务器将会使用本地时间进行同步。
http://blog.sina.com.cn/s/blog_539438c70101j3z7.html
[root@NTP-A ~]# /etc/init.d/ntpd start
Starting ntpd: [ OK ]
# 例行性检查(可以检查进行及端口123,具体的指令就不再赘述了)。
这样,我们的时间同步服务器已经正式启动上线了。不过要与上层时间源连接则还需要一些时间,通常启动服务后通常大约会在十五分钟内才会和上层时间源顺利的进行同步。那么,如何确认我们的时间同步服务器已经顺利的同步了自己的时间呢?可以使用下面几个命令来查看(需要等几分钟后再进行查看):
# 时间同步刚刚启动时会显示下面的信息,表明还未与上层时间源完成同步,需要等几分钟。
[root@Node-A5 ~]# ntpstat
unsynchronised
time server re-starting
polling server every 8 s
---------------
# 时间同步服务器与上层时间源正常同步后会输出下面的信息:
[root@NTP-A ~]# ntpstat
synchronised to NTP server (202.112.10.36) at stratum 4
time correct to within 269 ms
polling server every 64 s
# 从这个指令可以显示出我们的时间同步服务器是否已经和上层服务器连接。
# 从上面的输出结果可以看出,时间已经校正约269ms,且每隔64秒会主动去更新时间。
现在我们已经启动了NTP的服务,但是我们的系统时间到底和服务器同步了没有呢?所以这里提供了一个很好的查看工具:ntpq(NTP query)。
[root@NTP-A ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
gus.buptnet.edu 29.252.179.249 3 u 141 64 4 7.363 3090312 0.000
send.mx.cdnetwo .INIT. 16 u - 1024 0 0.000 0.000 0.000
27.114.150.13 130.133.1.10 2 u 136 64 104 423.336 3094756 81.524
#通过该指令可以列出当前我们的时间同步服务器与相关的上层服务器之间的的连接状态。
下面所示的是一台无法与外部时间源进行时间同步,而同时设定能够将自身时间作为时间源的状态信息:
[root@Nagios ~]# ntpstat
synchronised to local net at stratum 11
time correct to within 12 ms
polling server every 1024 s
[root@Nagios ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 10 l 60 64 377 0.000 0.000 0.001
#能够看到,由于没有连接上层时间服务器,所以显示本机就是上层的时间服务器。
[root@Nagios ~]# ntptrace -n 127.0.0.1
127.0.0.1: stratum 11, offset 0.000000, synch distance 0.011007
网上有很多是在客户端主机上编辑ntp.conf
來进行客戶端的时间同步,但其实是很沒必要,就因为进行时间同步,就要额外开放一个端口?其实通过定时任务完全可以胜任矣。当然如果非要如此也不是不可以,配置如下:
[root@WEB-A1 ~]# vi /etc/ntp.conf
#添加一行:
server 192.168.0.199
#启动服务:
[root@WEB-A1 ~]# /etc/init.d/ntpd start
直接与外网时间同步服务器进行同步:
#time sync
00 1 * * * /usr/sbin/ntpdate pool.ntp.org > /dev/null 2>&1 && /sbin/hwclock -w
http://acooly.iteye.com/blog/1993484
[root@Node-A6 ~]# ntpdate 172.16.1.25
25 Jan 15:18:47 ntpdate[3541]: no server suitable for synchronization found
该报错一般说明服务端没有与时间源进行同步,而新设置的时间同步服务往往需要几分钟才能够与外部时间源完成同步。