About The NTP

一.NTP

Network Time ProtocolNTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。

原理

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

 

可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1时间服务器是整个系统的基础。

计算机主机一般同多个时间服务器连接, 利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。

为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。

二.Ubuntu下配置ntp服务器

 

/etc/ntp.conf 文件

/etc/ntp.conf 文件是Linux NTP的主要配置文件,你可以设置NTP服务器的ip地址.下面是建立互联网基础的NTP服务器的步骤

1) 首先指定有兴趣的服务器:

server  otherntp.server.org     # A stratum 1 server at server.org

server  ntp.research.gov        # A stratum 2 server at research.gov 

 


2)限制你允许的这些服务器的访问类型,在这个例子中的服务器是不容许修改运行时配置或查询您的Linux NTP服务器:

restrict otherntp.server.org mask 255.255.255.255 nomodify notrap noquery

restrict ntp.research.gov mask 255.255.255.255 nomodify notrap noquery 

 


The mask 255.255.255.255 statement is really a subnet mask limiting access to the single IP address of the remote NTP servers.

3)如果此服务器也是要提供时间给其他计算机,PC,其他Linux服务器和网络设备,那么您必须界定网络从这个服务器接受NTP同步的请求。你要修改restric语句,去掉noquery关键字,让网络查询您的NTP服务器。语法是:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 

 


在这种情况下,mask包括所有255个在本地网络内可能的IP地址.

4) 还要确保localhost(这个常用的IP地址用来指Linux服务器本身)有足够权限.使用没有任何限制关键词的语法

restrict 127.0.0.1 

 


5) 保存文件并重新启动NTP,这些设置才会生效.现在,您可以用相似的方式设定您的网络上其他的Linux主机与这个新的主NTP服务器同步.

怎样开始NTP

当你修改了配置信息,你必须重新启动NTP进程以取得及时的效果.

开始配置NTP,用下面的命令:

[root@bigboy tmp]# chkconfig ntpd on 

 

启动,停止,重启NTP,用下面的命令:

[root@bigboy tmp]# service ntp start

[root@bigboy tmp]# service ntp stop

[root@bigboy tmp]# service ntp restart 

 

测试和解决NTP问题

在配置和启动NTP,你应该测试以确定NTP是否在工作,参考下面的指引去检测NTP的工作.

检查NTP运行

使用下面的命令检查NTP服务是否运行

[root@bigboy tmp]# pgrep ntpd 

 


这时你应该能得到一个进程ID.

同步初始化

如果本地主机的时间和主时间服务器的差距很大,你的NTP的进程可能会终止,并且在/var/log/messages 留下错误信息.你应该在同步服务器时间之前,运行ntpdate -u命令预先得道时间.不过ntpdate命令不会一直运行,你仍然需要运行ntpd后台进程去自动同步时间.

下面的范例中,服务器最初的时间是在午夜,然后同步时间到am 8:03.

  • 先检查自己的服务器的时间

[root@smallfry tmp]# date

Thu Aug 12 00:00:00 PDT 2004

[root@smallfry tmp]# 

 

  • ntpdate 命令在smallfry机器上运行了3次去同步192.168.1.100服务器的时间,不过它必须在ntpd进程停止的时候运行,所以你要先停止ntpd,运行ntpdate,然后再运行ntpd.

[root@smallfry tmp]# service ntpd stop

[root@smallfry tmp]# ntpdate -u 192.168.1.100

Looking for host 192.168.1.100 and service ntp

host found : bigboy.my-site.com

12 Aug 08:03:38 ntpdate[2472]: step time server 192.168.1.100 offset 28993.084943 sec

[root@smallfry tmp]# ntpdate -u 192.168.1.100

Looking for host 192.168.1.100 and service ntp

host found : bigboy.my-site.com

12 Aug 08:03:40 ntpdate[2472]: step time server 192.168.1.100 offset 2.467652 sec

[root@smallfry tmp]# ntpdate -u 192.168.1.100

Looking for host 192.168.1.100 and service ntp

host found : bigboy.my-site.com

12 Aug 08:03:42 ntpdate[2472]: step time server 192.168.1.100 offset 0.084943 sec

[root@smallfry tmp]# service ntpd start

[root@smallfry tmp]# 

 

  • 现在时间改正过来了.

[root@smallfry tmp]# date

Thu Aug 12 08:03:45 PDT 2004

[root@smallfry tmp]# 

 

检定NTP 同步

使用ntpq命令查看与您同步的服务器.它提供你一份时间服务器配置清单,包括延误值(delay),偏差值(offset)和抖动值(jitter).为了能正确同步,延迟值和偏移值应该不为零,抖动值(jitter)应小于100 .

[root@bigboy tmp]# ntpq -p 

 

这是命令输出的结果:

remote refid st t when poll reach delay offset jitter

==============================================================================

-jj.cs.umb.edu gandalf.sigmaso 3 u 95 1024 377 31.681 -18.549 1.572 

milo.mcs.anl.go ntp0.mcs.anl.go 2 u 818 1024 125 41.993 -15.264 1.392

-mailer1.psc.edu ntp1.usno.navy. 2 u 972 1024 377 38.206 19.589 28.028

-dr-zaius.cs.wis ben.cs.wisc.edu 2 u 502 1024 357 55.098 3.979 0.333

+taylor.cs.wisc. ben.cs.wisc.edu 2 u 454 1024 347 54.127 3.379 0.047

-ntp0.cis.strath harris.cc.strat 3 u 507 1024 377 115.274 -5.025 1.642

*clock.via.net .GPS. 1 u 426 1024 377 107.424 -3.018 2.534

ntp1.conectiv.c 0.0.0.0 16 u - 1024 0 0.000 0.000 4000.00 


Linux NTP 客户端无法同步

下表的迹象表明你没有得到适当的同步,因为所有远程服务器的jitter值为4000,delayreach值为0

remote refid st t when poll reach delay offset jitter

 =============================================================================

LOCAL(0) LOCAL(0) 10 l - 64 7 0.000 0.000 0.008

ntp-cup.externa 0.0.0.0 16 u - 64 0 0.000 0.000 4000.00

snvl-smtp1.trim 0.0.0.0 16 u - 64 0 0.000 0.000 4000.00

nist1.aol-ca.tr 0.0.0.0 16 u - 64 0 0.000 0.000 4000.00 

 

可能的原因:

  • 如果您使用的DNS名称做为NTP服务器时旧版本的的NTP包会工作不正常.在这样的情况下,您要使用的实际IP地址代替.
  • 防火墙阻止访问NTP服务器.这可能是NTP服务器和它的时间源之间有防火墙软件如iptables的限制.
  • NTP客户端的restrict字段里面有notrust nomodify notrap的关键字.Fedora Core 2的某些版本中除非NTP客户端的restrict字段里面删除notrust nomodify notrap的关键字,否则不能执行NTP同步.

在下面例子中,restrict字段只是客户端网络的定义而没有任何关键字:

#-- CLIENT NETWORK -------

#restrict 172.16.1.0 mask 255.255.255.0 notrust nomodify notrap

restrict 172.16.1.0 mask 255.255.255.0

 

三.通过ntp服务定时同步时间

命令行:Ntpdate ntp服务器域名(ntp服务器ip地址)

 

   

 

 四.Ntp客户端和服务端占用端口

命令行:Ntpdate ntp服务器域名(ntp服务器ip地址)

 

封掉服务器的udp123端口,客户端无法正常获取时间戳

 

封掉客户端的udp123端口,客户端无法正常获取时间戳

 

 

图一:报错信息

 

 

图二:解封之后恢复正常

 

 

 

posted @ 2013-11-13 15:08  sky of chuanqingchen  阅读(610)  评论(0)    收藏  举报