NTP物理机时间同步应用

1、先搭建服务器端:使用yum安装ntp服务端工具。

      (1)、检测ntp和ntpdate是否已经安装,如果已经安装,先卸载重新再安装。

              [root@ ~]# rpm -qa | grep ntp

              ntp-4.2.6p5-25.el7.centos.2.x86_64

              ntpdate-4.2.6p5-25.el7.centos.2.x86_64

       (2)、yum 安装ntp

               yum install ntp

       (3)、安装完成后,编辑ntp.conf

             

物理机无法上网的情况下,可以配置如下:

# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery

# 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 ::1

# Hosts on local network are less restricted.
#restrict 172.16.10.0 mask 255.255.255.0 nomodify notrap

#restrict default  nomodify notrap


# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).

server 127.127.1.0        #把其它server注释掉,设置127.127.1.0本地时间为公用的时间服务器,为客户端提供时间同步服务
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient			# broadcast client
#broadcast 224.0.1.1 autokey		# multicast server
#multicastclient 224.0.1.1		# multicast client
#manycastserver 239.255.254.254		# manycast server
#manycastclient 239.255.254.254 autokey # manycast client

# 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

# Disable the monitoring facility to prevent amplification attacks using ntpdc
# monlist command when default restrict does not include the noquery flag. See
# CVE-2013-5211 for more details.
# Note: Monitoring will not be disabled with the limited restriction flag.
disable monitor


如果物理机可以上网的化,可以配置多个外网的时间服务,时间服务有以下:

server 0.centos.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst

配置完成后,执行以下命令可以启动关闭ntpd服务,

service ntpd start
service ntpd stop
service ntpd restart

服务运行成功后,端口号默认是123,需要防火墙开放,简单操作是关闭防火墙,关闭方法:

centos6.5: service iptables stop

centos7:  

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

好,检测下ntpd服务有开放,执行ps -ef|grep ntpd

[root@ ~]# ps -ef |grep ntpd
ntp       2044     1  0 10:57 ?        00:00:00 /usr/sbin/ntpd -u ntp:ntp -g
root      2129  1301  0 14:19 pts/0    00:00:00 grep --color=auto ntpd

存在这2044进程,说明ntpd服务已经启动运行了。

查看后台运行的进程有没有在定时本地物理机的时间:

输入ntpq -np

[root@~]# ntpq -np
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*127.127.1.0     .LOCL.           5 l   22   64  377    0.000    0.000   0.000


2、搭建客户端,只需安装ntpdate插件即可,yum安装ntpdate

      yum install  ntpdate

     安装完后直接执行ntpdate ip地址即可进行更新操作:

     

[root@ ~]# ntpdate 172.16.10.134
23 Oct 14:24:29 ntpdate[2198]: step time server 172.16.10.134 offset 0.545670 sec
[root@ ~]# ntpdate -u 172.16.10.134
23 Oct 14:24:41 ntpdate[2201]: adjust time server 172.16.10.134 offset 0.000055 sec
[root@ ~]# ntpdate -d 172.16.10.134
23 Oct 14:24:44 ntpdate[2202]: ntpdate [email protected] Wed Apr 12 21:24:06 UTC 2017 (1)
Looking for host 172.16.10.134 and service ntp
host found : 172.16.10.134
transmit(172.16.10.134)
receive(172.16.10.134)
transmit(172.16.10.134)
receive(172.16.10.134)
transmit(172.16.10.134)
receive(172.16.10.134)
transmit(172.16.10.134)
receive(172.16.10.134)
server 172.16.10.134, port 123
stratum 6, precision -22, leap 00, trust 000
refid [172.16.10.134], delay 0.02583, dispersion 0.00000
transmitted 4, in filter 4
reference time:    dd980993.454c4b66  Mon, Oct 23 2017 14:24:19.270
originate timestamp: dd9809b2.f3ca6cfb  Mon, Oct 23 2017 14:24:50.952
transmit timestamp:  dd9809b2.f3bc2ba6  Mon, Oct 23 2017 14:24:50.952
filter delay:  0.02588  0.02583  0.02585  0.02585 
         0.00000  0.00000  0.00000  0.00000 
filter offset: -0.00000 0.000026 0.000032 0.000037
         0.000000 0.000000 0.000000 0.000000
delay 0.02583, dispersion 0.00000
offset 0.000026

23 Oct 14:24:50 ntpdate[2202]: adjust time server 172.16.10.134 offset 0.000026 sec

定时同步时间任务方法:编辑vi /etc/crontab

设置每10分钟同步一次,并写入到硬件时间

*/10 * * * * root ntpdate 172.16.10.154 && clock --systohc 

客户端在ntpdate同步ip的时候可能会出现以下的异常:

异常1:the NTP socket is in use, exiting

该异常是该物理机也安装着ntp服务,只要关闭该服务,有时关闭不掉,可以直接ps -ef|grep ntpd进程直接kill -9 进程id杀掉

异常2:no server suitable for synchronization found

该异常可能是时间服务器上不了网,可以修改为同步当前主机的时间,不要去连接外部的网络,在重启,重启完需要等待3-5分钟才会生效。





以下是ntpd的相关资料学习:--------------------------------------------------------------------------------------------------------------------------------------------

Network Time Protocol(NTP,网络时间协议)用于同步它所有客户端时钟的服务。NTP服务器将本地系统的时钟与一个公共的NTP服务器同步然后作为时间主机提供服务,使本地网络的所有客户端能同步时钟。


  同步时钟最大的好处就是相关系统上日志文件中的数据,如果网络中使用中央日志主机集中管理日志,得到的日志结果就更能反映真实情况。在同步了时钟的网络中,集中式的性能监控、服务监控系统能实时的反应系统信息,系统管理员可以快速的检测和解决系统错误。


  ntp时间服务器是一个简单的常用的服务器,工作中我们只要做到会用就行,能搭建起来就可以了,不用太去深入研究ntp时间服务器的原理。


 


服务端的配置:


  第一步,安装NTP服务:


  1)rpm -ivh ntp-4.2.2p1-8.el5.centos.1.rpm


  2)yum install -y ntp ntpdate


 


  第二步,配置NTP服务:


  编辑配置文件/etc/ntp.conf ,配置之前记得先备份文件。          


  restrict default kod nomodify notrap nopeer noquery               restrict、default定义默认访问规则,nomodify禁止远程主机修改本地服务器


  restrict -6 default kod nomodify notrap nopeer noquery   ===== 》》》》》》》 配置,notrap拒绝特殊的ntpdq捕获消息,noquery拒绝btodq/ntpdc查询  


  restrict 127.0.0.1                                (这里的查询是服务器本身状态的查询)。


  restrict -6 ::1


  


  restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap ===== 》》》》》》 这句是手动增加的,意思是指定的192.168.1.0--192.168.1.254的服务器都


                                            可以使用ntp服务器来同步时间。


  server 192.168.1.117                    ===== 》》》》》》   这句也是手动添加的,可以将局域网中的指定ip作为局域网内的ntp服务器。


  server 0.centos.pool.ntp.org


  server 1.centos.pool.ntp.org                ===== 》》》》》》 这3个域名都是互联网上的ntp服务器,也还有许多其他可用的ntp服务器,能连上


  server 2.centos.pool.ntp.org                           外网时,本地会跟这几个ntp服务器上的时间保持同步。


 


  server  127.127.1.0     # local clock               ===== 》》》》》》  当服务器与公用的时间服务器失去联系时,就是连不上互联网时,以局域网内的时


  fudge   127.127.1.0 stratum 10                         间服务器为客户端提供时间同步服务。


 


  第三步,启动NTP服务:


  /etc/init.d/ntpd start                当前启动ntpd服务


  chkconfig  ntpd on                 下次开机自启ntpd服务


  


  第四步,检查时间服务器是否正确同步


  在服务端执行  ntpq -p  下面是我在自己的服务器上面的测试的结果,仅供参考:


  


  当所有远程服务器(不是本地服务器)的jitter值都为4000,并且reach和dalay的值是0时,就表示时间同步有问题。可能原因有2个:


  1)服务器端的防火墙设置,阻断了123端口(可以用 iptables -t filter -A INPUT -p udp --destination-port 123 -j ACCEPT 解决)


  2)每次重启ntp服务器之后,大约3-5分钟客户端才能与服务端建立连接,建立连接之后才能进行时间同步,否则客户端同步时间时会显示


   no server suitable for synchronization found的报错信息,不用担心,等会就可以了。



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

导读
由于ntp服务器时间的设置,网上错综复杂,资料很多,大家随便找个资料,这个不行,找另外的资料,总之对这个不是太了解,这里找了份资料,详细介绍了ntp。万变不离其中,明白了原理,ntp的配置就不在困难了。
这里面解决了一些疑问:
1.如何查看ntp是否配置成功?
2.如何了解ntp列出的参数的含义?
3.restrict关键字的作用是什么?






贴出关键信息:


# watch ntpq -p
Every 2.0s: ntpq -p                                  Sat Jul  7 00:41:45 2007

     remote           refid      st t when poll reach   delay   offset  jitter
===========================================================
+193.60.199.75   193.62.22.98     2 u   52   64  377    8.578   10.203 289.032
*mozart.musicbox 192.5.41.41      2 u   54   64  377   19.301  -60.218 292.411


现在我就来解释一下其中的含义

  remote: 它指的就是本地机器所连接的远程NTP服务器
      refid: 它指的是给远程服务器(e.g. 193.60.199.75)提供时间同步的服务器
          st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端. 所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的.
            t: 这个.....我也不知道啥意思^_^
    when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步
       poll: 本地机和远程服务器多少时间进行一次同步(单位为秒). 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小
    reach: 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加
    delay: 从本地机发送同步要求到服务器的round trip time
    offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近
     jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小我们和服务器的时间就越精确




NTP安全设置(restrict)

运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务, 但是一些基本的安全设置还是很有必要的
那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器. 第二个就是这些client不能修改我们服务器上的时间

关于权限设定部分 
权限的设定主要以 restrict 这个参数来设定,主要的语法为: 
restrict IP地址 mask 子网掩码 参数 
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP 
参数有以下几个: 
ignore :关闭所有的 NTP 联机服务 
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。 
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网 
noquery :不提供客户端的时间查询




了解更多内容,参考下面:




Network Time Protocol (NTP) 也是RHCE新增的考试要求. 学习的时候也顺便复习了一下如何设置Linux的时间,现在拿出来和大家分享

设置NTP服务器不难但是NTP本身是一个很复杂的协议. 这里只是简要地介绍一下实践方法
和上次一样,下面的实验都在RHEL5上运行


1. 时间和时区

如果有人问你说现在几点? 你看了看表回答他说晚上8点了. 这样回答看上去没有什么问题,但是如果问你的这个人在欧洲的话那么你的回答就会让他很疑惑,因为他那里还太阳当空呢.

这里就有产生了一个如何定义时间的问题. 因为在地球环绕太阳旋转的24个小时中,世界各地日出日落的时间是不一样的.所以我们才有划分时区(timezone) 的必要,也就是把全球划分成24个不同的时区. 所以我们可以把时间的定义理解为一个时间的值加上所在地的时区(注意这个所在地可以精确到城市)

地理课上我们都学过格林威治时间(GMT), 它也就是0时区时间. 但是我们在计算机中经常看到的是UTC. 它是Coordinated Universal Time的简写. 虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC

那么假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式
20:00 CST
12:00 UTC

这里的CST是Chinese Standard Time,也就是我们通常所说的北京时间了. 因为中国处在UTC+8时区,依次类推那么也就是12:00 UTC了.

为什么要说这些呢(呵呵这里不是地理论坛吧...)

第一,不管通过任何渠道我们想要同步系统的时间,通常提供方只会给出UTC+0的时间值而不会提供时区(因为它不知道你在哪里).所以当我们设置系统时间的时候,设置好时区是首先要做的工作
第二,很多国家都有夏令时(我记得小时候中国也实行过一次),那就是在一年当中的某一天时钟拨快一小时(比如从UTC+8一下变成UTC+9了),那么同理到时候还要再拨慢回来.如果我们设置了正确的时区,当需要改变时间的时候系统就会自动替我们调整

现在我们就来看一下如何在Linux下设置时区,也就是time zone


2. 如何设置Linux Time Zone

在Linux下glibc提供了我们事先编译好的许多timezone文件, 他们就放在/usr/share/zoneinfo这个目录下,这里基本涵盖了大部分的国家和城市
代码:
# ls -F /usr/share/zoneinfo/
Africa/      Chile/   Factory    Iceland      Mexico/   posix/      Universal
America/     CST6CDT  GB         Indian/      Mideast/  posixrules  US/
Antarctica/  Cuba     GB-Eire    Iran         MST       PRC         UTC
Arctic/      EET      GMT        iso3166.tab  MST7MDT   PST8PDT     WET
Asia/        Egypt    GMT0       Israel       Navajo    right/      W-SU
Atlantic/    Eire     GMT-0      Jamaica      NZ        ROC         zone.tab
Australia/   EST      GMT+0      Japan        NZ-CHAT   ROK         Zulu
Brazil/      EST5EDT  Greenwich  Kwajalein    Pacific/  Singapore
Canada/      Etc/     Hongkong   Libya        Poland    Turkey
CET          Europe/  HST        MET          Portugal  UCT在这里面我们就可以找到自己所在城市的time zone文件. 那么如果我们想查看对于每个time zone当前的时间我们可以用zdump命令
代码:
# zdump Hongkong
Hongkong  Fri Jul  6 06:13:57 2007 HKT那么我们又怎么来告诉系统我们所在time zone是哪个呢? 方法有很多,这里举出两种

第一个就是修改/etc/localtime这个文件,这个文件定义了我么所在的local time zone.
我们可以在/usr/share/zoneinfo下找到我们的time zone文件然后拷贝去到/etc/localtimezone(或者做个symbolic link)

假设我们现在的time zone是BST(也就是英国的夏令时间,UTC+1)
代码:
# date
Thu Jul  5 23:33:40 BST 2007我们想把time zone换成上海所在的时区就可以这么做
代码:
# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime
# date
Fri Jul  6 06:35:52 CST 2007
这样时区就改过来了(注意时间也做了相应的调整)

第二种方法也就设置TZ环境变量的值. 许多程序和命令都会用到这个变量的值. TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令
代码:
# tzselect
...
TZ='America/Los_Angeles';export TZtzselect
会让你选择所在的国家和城市(我省略了这些步骤),最后输出相应的TZ变量的值.那么如果你设置了TZ的值之后时区就又会发生变化

代码:
# date
Thu Jul  5 15:48:11 PDT 2007
通过这两个例子我们也可以发现TZ变量的值会override /etc/localtime. 也就是说当TZ变量没有定义的时候系统才使用/etc/localtime来确定time zone. 所以你想永久修改time zone的话那么可以把TZ变量的设置写入/etc/profile里

好了现在我们知道怎么设置时区了,下面我们就来看看如何设置Linux的时间吧


3. Real Time Clock(RTC) and System Clock

说道设置时间这里还要明确另外一个概念就是在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(System Clock)

硬件时钟是指嵌在主板上的特殊的电路, 它的存在就是平时我们关机之后还可以计算时间的原因
系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值 在Linux下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了

那么既然两个时钟独自运行,那么时间久了必然就会产生误差了,下面我们来看一个例子
代码:
# date
Fri Jul  6 00:27:13 BST 2007
# hwclock --show
Fri 06 Jul 2007 12:27:17 AM BST  -0.968931 seconds 
通过hwclock --show 命令我们可以查看机器上的硬件时间(always in local time zone), 我们可以看到它和系统时间还是有一定的误差的, 那么我们就需要把他们同步

如果我们想要把硬件时间设置成系统时间我们可以运行以下命令
代码:
# hwclock --hctosys  
反之,我们也可以把系统时间设置成硬件时间
代码:
# hwclock --systohc  
那么如果想设置硬件时间我们可以开机的时候在BIOS里设定.也可以用hwclock命令
代码:
# hwclock --set --date="mm/dd/yy hh:mm:ss"  
如果想要修改系统时间那么用date命令就最简单了
代码:
# date -s "dd/mm/yyyy hh:mm:ss"  

现在我们知道了如何设置系统和硬件的时间. 但问题是如果这两个时间都不准确了怎么办? 那么我们就需要在互联网上找到一个可以提供我们准确时间的服务器然后通过一种协议来同步我们的系统时间,那么这个协议就是NTP了. 注意接下去我们所要说的同步就都是指系统时间和网络服务器之间的同步了


4. 设置NTP Server前的准备

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

好了,前面讲了一大堆理论,现在我们来动手实践一下吧. 架设一个NTP Relay Server其实非常简单,我们先把需要的RPM包装上
是否已经安装了NTP包可以用这条命令来确定:

[root@NTPser ~]# rpm -qa | grep ntp
ntp-4.2.2p1-9.el5_4.1
chkfontpath-1.10.1-1.1
出现以上代码则表示已安装NTP包,否则用下面方法安装:
代码:

# rpm -ivh ntp-4.2.2p1-5.el5.rpm 
那么第一步我们就要找到在互联网上给我们提供同步服务的NTP Server

http://www.pool.ntp.org是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个个NTP Server
那么比如在英国的话就可以选择下面两个服务器
0.uk.pool.ntp.org
1.uk.pool.ntp.org

它的一般格式都是number.country.pool.ntp.org

第二步要做的就是在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间. 
这里我们可以用ntpdate命令手动更新时间
代码:
# ntpdate 0.uk.pool.ntp.org
6 Jul 01:21:49 ntpdate[4528]: step time server 213.222.193.35 offset -38908.575181 sec
# ntpdate 0.pool.ntp.org
6 Jul 01:21:56 ntpdate[4530]: adjust time server 213.222.193.35 offset -0.000065 sec
假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次. 那么为什么在打开NTP服务之前先要手动运行同步呢?
1. 因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步
2. 当你的时间设置和NTP服务器的时间相差很大的时候,NTP会花上较长一段时间进行调整.所以手动同步可以减少这段时间

5. 配置和运行NTP Server

现在我们就来创建NTP的配置文件了, 它就是/etc/ntp.conf. 我们只需要加入上面的NTP Server和一个driftfile就可以了
代码:
# vi /etc/ntp.conf

server 210.72.145.44     #这是中国国家授时中心的IP
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
                                     
fudge 127.127.1.0 stratum 0  stratum  这行是时间服务器的层次。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0

driftfile /var/lib/ntp/ntp.drift  非常的简单. 接下来我们就启动NTP Server,并且设置其在开机后自动运行
代码:
# /etc/init.d/ntpd start
# chkconfig --level 35 ntpd on


6. 查看NTP服务的运行状况

现在我们已经启动了NTP的服务,但是我们的系统时间到底和服务器同步了没有呢? 为此NTP提供了一个很好的查看工具: ntpq (NTP query)

我建议大家在打开NTP服务器后就可以运行ntpq命令来监测服务器的运行.这里我们可以使用watch命令来查看一段时间内服务器各项数值的变化
代码:
# watch ntpq -p
Every 2.0s: ntpq -p                                  Sat Jul  7 00:41:45 2007

     remote           refid      st t when poll reach   delay   offset  jitter
===========================================================
+193.60.199.75   193.62.22.98     2 u   52   64  377    8.578   10.203 289.032
*mozart.musicbox 192.5.41.41      2 u   54   64  377   19.301  -60.218 292.411


现在我就来解释一下其中的含义

  remote: 它指的就是本地机器所连接的远程NTP服务器
      refid: 它指的是给远程服务器(e.g. 193.60.199.75)提供时间同步的服务器
          st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端. 所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的.
            t: 这个.....我也不知道啥意思^_^
    when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步
       poll: 本地机和远程服务器多少时间进行一次同步(单位为秒). 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小
    reach: 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加
    delay: 从本地机发送同步要求到服务器的round trip time
    offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近
     jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小我们和服务器的时间就越精确

那么大家细心的话就会发现两个问题: 第一我们连接的是0.uk.pool.ntp.org为什么和remote server不一样? 第二那个最前面的+和*都是什么意思呢?

第一个问题不难理解,因为NTP提供给我们的是一个cluster server所以每次连接的得到的服务器都有可能是不一样.同样这也告诉我们了在指定NTP Server的时候应该使用hostname而不是IP

第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器还可以正常地给我们提供服务.那么如何知道这些服务器的状态呢? 这就是第一个记号会告诉我们的信息

* 它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供
+ 它将作为辅助的NTP Server和带有*号的服务器一起为我们提供同步服务. 当*号服务器不可用时它就可以接管
- 远程服务器被clustering algorithm认为是不合格的NTP Server
x 远程服务器不可用


了解这些之后我们就可以实时监测我们系统的时间同步状况了


7. NTP安全设置

运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务, 但是一些基本的安全设置还是很有必要的
那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器. 第二个就是这些client不能修改我们服务器上的时间

关于权限设定部分 
权限的设定主要以 restrict 这个参数来设定,主要的语法为: 
restrict IP地址 mask 子网掩码 参数 
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP 
参数有以下几个: 
ignore :关闭所有的 NTP 联机服务 
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。 
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网 
noquery :不提供客户端的时间查询 
注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制!

在/etc/ntp.conf文件中我们可以用restrict关键字来配置上面的要求

首先我们对于默认的client拒绝所有的操作
代码:
restrict default kod nomodify notrap nopeer noquery

然后允许本机地址一切的操作
代码:
restrict 127.0.0.1

最后我们允许局域网内所有client连接到这台服务器同步时间.但是拒绝让他们修改服务器上的时间
代码:
restrict 192.168.1.0 mask 255.255.255.0 nomodify

把这三条加入到/etc/ntp.conf中就完成了我们的简单配置. NTP还可以用key来做authentication,这里就不详细介绍了


8. NTP client的设置

做到这里我们已经有了一台自己的Relay Server.如果我们想让局域网内的其他client都进行时间同步的话那么我们就都应该照样再搭建一台Relay Server,然后把所有的client都指向这两台服务器(注意不要把所有的client都指向Internet上的服务器). 只要在client的/etc/ntp.conf加上这你自己的服务器就可以了
代码:
server ntp1.leonard.com
server ntp2.leonard.com

LINUX客户端使用
ntpdate 172.30.218.114 
来向NTP服务器同步自己的时间
其它LINUX如果仅作为只客户端的话,则不能启动ntpd服务!否则无法运行ntpdata 服务器地址 来同步时间
之后可以使用cron或修改crontab文件定期向NTP服务器更新时间,并用
# hwclock --systohc  
将系统时间设置为硬件时间

9. 一些补充和拾遗(挺重要)

1. 配置文件中的driftfile是什么?
我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确. NTP会自动来监测我们时钟的误差值并予以调整.但问题是这是一个冗长的过程,所以它会把记录下来的误差先写入driftfile.这样即使你重新开机以后之前的计算结果也就不会丢失了

2. 如何同步硬件时钟?
NTP一般只会同步system clock. 但是如果我们也要同步RTC(hwclock)的话那么只需要把下面的选项打开就可以了
代码:
# vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes


3、利用crontab让LINUX NTP定时更新时间
注:让linux运行ntpdate更新时间时,linux不能开启NTP服务,否则会提示端口被占用:如下
[root@ESXI ~]# ntpdate 1.rhel.pool.ntp.org                                 
20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting

crontab文件配置简要说明
命令格式的前一部分是对时间的设定,后面一部分是要执行的命令。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:
分钟 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天
除了数字还有几个个特殊的符号就是“*”、“/”和“-”、“,”,“*”代表所有的取值范围内的数字,“/”代表每的意思,“*/5”表示每5个单位,“-”代表从某个数字到某个数字,“,”分开几个离散的数字。以下举几个例子说明问题:
每天早上6点:
0 6 * * *  command
每两个小时:
0 */2 * * *  command
晚上11点到早上8点之间每两个小时,早上八点:
0 23-7/2,8 * * * command
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点:
0 11 4 * 1-3 command 
1月1日早上4点:
0 4 1 1 * command

3.3、设置开机自动启动服务
运行setup或其它服务设置工具,将crond服务勾选上 
chkconfig --level 2345 crond on  定义在这几个系统运行级别上启用crond (系统安装完默认就是这个设置)
__________________________________________


10.NTP客户端的设置

一、LINUX做为客户端自动同步时间
如果想定时进行时间校准,可以使用crond服务来定时执行。
编辑 /etc/crontab 文件
加入下面一行:

30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w  #192.168.0.1是NTP服务器的IP地址
然后重启crond服务
service crond restart 
这样,每天 8:30 Linux 系统就会自动的进行网络时间校准。


二、WINDOWS 需要打开windows time服务和RPC的二个服务
如果在打开windows time 服务,时报 错误1058,进行下面操作 
1.运行 cmd 进入命令行,然后键入
w32tm /register  进行注册
正确的响应为:W32Time 成功注册。

2.如果上一步正确,用 net start "windows time" 或 net start w32time 启动服务。


11.其它造成无法成功更新的原因:
1、客户端的日期必须要设置正确,不能超出正常时间24小时,不然会因为安全原因被拒绝更新。其次客户端的时区必须要设置好,以确保不会更新成其它时区的时间。
2、fudge 127.127.1.0 stratum 10 如果是LINUX做为NTP服务器,stratum(层级)的值不能太大,如果要向上级NTP更新可以设成2
3、LINUX的NTP服务器必须记得将从上级NTP更新的时间从系统时间写到硬件里去 hwclock --systohc 
     NTP一般只会同步system clock. 但是如果我们也要同步RTC(hwclock)的话那么只需要把下面的选项打开就可以了
      代码:
      # vi /etc/sysconfig/ntpd
      SYNC_HWCLOCK=yes
4、Linux如果开启了NTP服务,则不能手动运行ntpdate更新时间(会报端口被占用),它只能根据/etc/ntp.conf 里server 字段后的服务器地址按一定时间间隔自动向上级NTP服务器更新时间。可以运行命令 ntpstat 查看每次更新间隔如:
[root@ESXI ~]# ntpstat
synchronised to NTP server (210.72.145.44) at stratum 2    #本NTP服务器层次为2,已向210.72.145.44 NTP同步过
   time correct to within 93 ms                                               #时间校正到相差93ms之内
   polling server every 1024 s                                                 #每1024秒会向上级NTP轮询更新一次时间


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

10、NTPD服务端设置

(1)确认NTPD服务已经开启,时区设置正确,如有问题参见本章3、4、5、6条的描述。

(2)确认NTPD能够作为客户端从上级NTP服务器获取时间,如有问题参见本章3、4、5、6条的描述。

(3)NTPD服务的主要配置文件默认是/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,上级时钟源的层次是1,NTPD从上级时钟源获取到时间,对外宣布的时间层次为2。只有在上级时钟源失效时,NTPD才会使用127.127.1.0的本地时钟。

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

 

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

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

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

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

层的概念

这些问题主要涉及到NTP的层(stratum)的概念,顶层是1,值为0时表示层数不明,层的值是累加的,比如NTP授时方向是A-〉B-〉C,假设A的stratum值是3,那么B从A获取到时间,B的stratum置为4,C从B获取到时间,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字段为0的NTP包,客户端接收后,发现stratum字段无效,拒绝更新时间,造成时间更新失败。

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

在NTPD上级服务器不可用的情况下,NTPD将本机时钟服务模拟为一个上级NTP服务器,地址使用环回127.127.1.0,服务启动几分钟后,NTPD从127.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。

 

12、NTPD测试实验

NTP服务器两台,A机地址10.138.1.240,采用卫星时钟,stratum为1。B机10.138.1.32,使用NTPD服务,从本地时钟源更新,本地时钟源stratum为5。对应的配置行为:

server 127.127.1.0

fudge  127.127.1.0 stratum 5

 

NTP客户机一台,C机IP地址10.138.104.8,采用WindowsXP操作系统。

(1)NTPD启动后的同步情况实验

启动B机上的NTPD服务,设置C从B同步,发现同步失败,检查NTP数据包,发现C发出的数据包statum值为0:

检查NTP数据包,发现B返回的数据包statum值为0:

几分钟后,再次更新时间,发现更新成功,检查NTP数据包,发现C发出的数据包statum值为0:

检查NTP数据包,发现B返回的数据包stratum值为6,表明B成功本地的时钟源更新的时间,由于本地时钟源statum值设置为5,故B的stratum置为6,如下图:

 

(2)不同NTP服务的同步实验

C先从A同步,成功后更改为从B同步,发现同步不成功。

C从A同步成功,检查NTP数据包,发现C发出的NTP数据包stratum为0。如下图:

检查NTP数据包,发现A返回给C的NTP数据包stratum为1。如下图:

设置C从B更新,发现更新失败,提示如下:

检查C发出的数据包,发现stratum为2,这是因为C刚从A成功更新,C为A的下一级,stratum置为2。如下图:

检查B返回的数据包,发现stratum为6,比C的值还要大,C认为本机时间比来源于B的更可靠,拒绝更新,如下图:

重新启动C机上的“windows time”服务,再次更新,发现C的stratum重置为0,顺利从B机更新。



======================
 ntpd时间同步 2008-04-17 12:16:08
分类: LINUX
                    NTPD服务
           时间服务器:172.18.3.200 172.18.3.200 
[root@localhost log]# service ntpd start
鍚?姩 ntpd锛?[60G[ 纭?畾 ]
 ====================================
 
 
NTP服务的端口是123,使用的是udp协议,所以NTP服务器的防火墙必须对外开放udp 123这个端口。
方法如下,使用以下规则:
#/sbin/iptables -A INPUT -p UDP -i eth0 -s 172.18.3.0/24 --dport 123 -j ACCEPT

注意:Ntpd启动的时候通常需要一段时间进行时间同步,所以在ntpd刚刚启动的时候还不能正常提
供时钟服务,最长大概有5分钟吧,如果超过了这个时间请检查一下您的配置文件。 123端口和ntp
系统进程判断ntp服务器是否工作正常
[root@localhost log]# ps ux|grep ntpd
root 4537 0.1 3.2 4048 4048 ? SLs 10:54 0:00 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g
[root@localhost ~]# netstat -nul|grep 123
udp 0 0 172.18.3.200:123 0.0.0.0:*
udp 0 0 127.0.0.1:123 0.0.0.0:*
udp 0 0 0.0.0.0:123 0.0.0.0:* 
udp 0 0 :::123 :::* 
==============================================
 
 

其他服务器与时间服务器进行同步
172.18.3.201
*/30 * * * * /usr/sbin/ntpdate 172.18.3.200 ;/usr/sbin/ntpdate 172.18.3.200; /sbin/hwclock -w 
注意被同步的服务器不能启动ntpd服务,否则会同步失败
====================================================
 
3.ntp.conf配置文件实例:
以互联网的时间服务器为时间服务器的时钟设置要求:
以time.data-hotel.net为时间服务器,
在ntp.conf中增加以下内容:
restrict default ignore # 关闭所有的 NTP 要求封包 
restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify server time.data-hotel.net #设置时间服务器
server 127.127.1.1 #开启内部递归网络接口 lo
fudge 127.127.1.1 stratum 10 refid NIST # LCL 不同步 driftfile /etc/ntp.drift logfile /var/log/ntp.log
Broadcastdelay 0.008 #广播延迟时间#
=========================================== 
 
 
查看该服务器与时间服务器相差的时间
[5a-s03-a4:root/1001]#ntpdate -q time.data-hotel.net
Looking for host time.data-hotel.net and service ntp host found :
time.data-hotel.net server 203.174.65.165, stratum 3, offset -2.798689, delay 0.02588 13
Apr 13:28:34 ntpdate[10033]: step time server 203.174.65.165 offset -2.798689 sec
该服务器于时间服务器进行同步
[5a-s03-a4:root/1004]#ntpdate time.data-hotel.net 
Looking for host time.data-hotel.net and service ntp host found : 
time.data-hotel.net 13 Apr 14:03:08 ntpdate[12175]: step time server 203.174.65.165 offset -2.850472 sec
查看状态 
[5a-s03-a4:root/1006]#ntpdate -q time.data-hotel.net
Looking for host time.data-hotel.net and service ntp host found : time.data-hotel.net server
203.174.65.165, stratum 2, offset -0.000327, delay 0.02588 13 Apr 14:03:32 ntpdate[12193]: 
adjust time server 203.174.65.165 offset -0.000327 sec
 
=======================================================
 
 
ntp软件包的结构和相关命令
/etc/ntp.conf ntp
服务的主要配置文件,不同的linux版本文件所在的目录可能会不同 
 
/usr/share/zoneinfo
规定了各主要的时间设定文件,例如中国大陆地区的时区设置文件/usr/share/zoneinfo/Asia/Shanghai
/etc/sysconfig/clock
linux的主要时区设定文件,每次启动后linux操作系统会自动读取这个文件来设定系统预要显示的时间,如这个文件内容为"ZONE=Asia/Shanghai",这表示linux系统的时间设定使用 /usr/share/zoneinfo/Asia/Shanghai这个文件.
 
/etc/localtime
本地系统的是时间设定文件,如果clock文件里面规定了使用的时间设定文件为 /usr/share/zoneinfo/Asia/Shanghai,linux操作系统就会将Shanghai
那个文件复制为/etc/localtime,所以系统的时间显示就会以Shanghai 那个时间设定文件为准.
=================================================
NTP 及系统时间有关的执行文件
/bin/date linux
系统上面的日期与时间修改及输出命令
/sbin/hwclock
主机BIOS时间与linux系统时间是分开的,所以使用date这个命令调整时间之后,只是调整了linux的系统时间,还需要使用 hwclock才能将修改的时间写入BIOS,这个命令必须root用户才能执行.
/usr/sbin/ntpd
ntp服务的守护进程文件,需要启动才能提供ntp服务 /usr/sbin/ntpdate ntp客户端用来连接ntp服务器文件 
/usr/sbin/nptq
标准的网络计时(ntp)查询程序 
/usr/sbin/ntprace
跟踪网络计时协议主机连到他们的控制时间源 
/sbin/clock
调整RTC时间,RTC是电脑内建的硬件时间,执行这项指令可以显示现在时刻,调整硬件时钟时间,
将系统时间设成与硬件时钟之时间一致,或是把系统时间回寸到硬件时间
======================================================
 
 
 
两台机器模拟实验: 
(172.18.3.200)--充当时间服务器的时间源,不在去同步上层时间服务器 
(172.18.3.205)--充当客户端,去连接时间服务器(172.18.3.200)来同步自己的系统时间
实验步骤
首先配置172.18.3.200 配置文件如下
[root@localhost wangzm]# cat /etc/ntp.conf
restrict default nomodify notrap noquery
restrict 127.0.0.1   mask 255.0.0.0
restrict 172.18.3.0 mask 255.255.255.0 nomodify
server  127.127.1.0
fudge   127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay  0.008
keys            /etc/ntp/keys
 

======================================
 
 
[root@localhost wangzm]# ntpstat
synchronised to local net at stratum 11 time correct to within 12 ms polling server every 64 s
说明:这个指令可以列出我们的ntp服务器的跟上层连接否,(由于没有连接上层时间服务器,所以显示本机就是上层的时间服务器)时间有效正约12*10^(-6),且每隔64秒主动去更新时间服务器(即本机器)
 

============================================
[root@localhost wangzm]# ntptrace -n 127.0.0.1
127.0.0.1: stratum 16, offset 0.000000, synch distance 0.002295 
ntp服务器与上层ntp服务器彼此之间的关系

=============================================== 
[root@localhost wangzm]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 LOCAL(0)        LOCAL(0)        10 l   29   64    7    0.000    0.000   0.008
nptq -q 可以列出目前我们的ntp与相关上层ntp的状态.
=========================================
 
 
客户端(172.18.3.205)
[root@localhost etc]# cat /etc/ntp.conf 
 172.18.3.200

[root@localhost etc]# ntpdate -d 172.18.3.200
12 Apr 02:52:49 ntpdate[19271]: ntpdate [email protected] Thu Apr 14 07:47:27 EDT 2005 (1)
Looking for host 172.18.3.200 and service ntp
host found : localhost.localdomain
transmit(172.18.3.200)
receive(172.18.3.200)
transmit(172.18.3.200)
receive(172.18.3.200)
transmit(172.18.3.200)
receive(172.18.3.200)
transmit(172.18.3.200)
receive(172.18.3.200)
transmit(172.18.3.200)
server 172.18.3.200, port 123
stratum 11, precision -17, leap 00, trust 000
refid [172.18.3.200], delay 0.02763, dispersion 0.00542
transmitted 4, in filter 4
reference time:    c9c7ad12.0cd434a0  Thu, Apr 12 2007  2:53:06.050
originate timestamp: c9c7ad2f.cc956c0d  Thu, Apr 12 2007  2:53:35.799
transmit timestamp:  c9c7ad01.f8e7ff58  Thu, Apr 12 2007  2:52:49.972
filter delay:  0.03053  0.02844  0.02957  0.02763 
         0.00000  0.00000  0.00000  0.00000 
filter offset: 45.83489 45.83120 45.82801 45.82460
         0.000000 0.000000 0.000000 0.000000
delay 0.02763, dispersion 0.00542
offset 45.824606
12 Apr 02:52:49 ntpdate[19271]: step time server 172.18.3.200 offset 45.824606 sec

 以上表示连接成功(要等上一段时间才能连接上)
 ======================================================= 


你可能感兴趣的:(linux)