NTP时间服务器实现linux时间同步
在linux下,我们可以通过自带的NTP(NetworkTimeProtocol)协议通过网络使自己的系统保持精确的时间。可用的公共时间服务器列表可以从下面的地址获取:http://ntp.isc.org/bin/view/Servers/NTPPoolServers什么是NTPNTP是用来使系统和一个精确的时间源保持时间同步的协议。建议大家在自己管理的网络中建立至少一台时间服务器来同步本地时间,这样可以使得在不同的系统上处理和收集日志和管理更加容易。同样,也有很多免费的NTP客户端可供Windows使用,你可以用它们来同步你windows的系统时间。下载和安装本文介绍如何在AS4上安装时间服务器(本文也同样适用于redhat和fedoracore的其他版本),如果想获得NTP的最新版本,你可以下载tar包自己编译,这里只介绍RPM方式安装的NTP服务软件。AS4带的NTP版本是4.2.0,你可以用下面的命令查看是否已经安装了这个软件包:#rpm-qa|grepntpntp-4.2.0.a.20040617-4.2如果发现没有安装,请从光盘上安装这个软件。执行下面命令安装NTP的RPM包:#rpm-ivhntp-4.2.0.a.20040617-4.2.i386.rpm/etc/ntp.conf这是NTP的主要配置文件,里面设置了你用来同步时间的时间服务器的域名或者IP地址,下面是到互联网同步时间的最基本的配置:首先定义我们喜欢的时间服务器:serverpool.ntp.org接下来,我们设置上面两台服务器的访问权限,在这个例子中我们不允许它们修改或者查询我们配置在Linux上的NTP服务器restrictdefaultnomodifynotrapnoquery(这个默认在配置文件中就存在)接下来设置允许访问我们时间服务器的客户机地址,通常这些服务器都应该位于我们自己局域网内。请注意,配置中noquery已经去掉了:restrict192.168.0.0mask255.255.255.0nomodifynotrap在上例中,掩码地址扩展为255,因此从192.168.0.1-192.168.0.254的服务器都可以使用我们的NTP服务器来同步时间。最后,也是最重要的是默认的限制配置要从你配置文件中删除,否则它将覆盖你所有的配置选项,你将发现如果不删除该配置,你的时间服务器将只能和自己通讯。如果ntp.conf中有以下一行,请将它注释(AS4附带的ntp默认没有):#restrictdefaultignore保存你的配置文件,然后对每个你在ntp.conf里配置的时间服务器执行2编查询命令:#ntpdatepool.ntp.org27Jun10:12:01ntpdate[25475]:adjusttimeserverpool.ntp.orgoffset-0.127154sec#ntpdatentp.research.gov27Jun10:12:06ntpdate[25478]:adjusttimeserverpool.ntp.orgoffset0.010008sec使NTP进程自启动为了使NTP服务可以在系统引导的时候自动启动,执行:#chkconfigntpdon启动/关闭/重启NTP的命令是:#/etc/init.d/ntpdstart#/etc/init.d/ntpdstop#/etc/init.d/ntpdrestart默认情况下,我们配置的NTP服务器不会去时间源那里同步时间,所以必须修改/etc/ntp/step-tickers文件,加入我们的时间源0.pool.ntp.org1.pool.ntp.org2.pool.ntp.org这样每次通过/etc/init.d/ntpd来启动服务的时候就会自动更新时间了切记每次修改了配置文件后都需要重新启动服务来使配置生效。可以使用下面的命令来检查NTP服务是否启动,你应该可以得到一个进程ID号:#pgrepntpd检查时间服务器是否正确同步使用下面的命令检查时间服务器同步的状态:#ntpq-p输出:remoterefidsttwhenpollreachdelayoffsetjitter==============================================================================-jj.cs.umb.edugandalf.sigmaso3u95102437731.681-18.5491.572milo.mcs.anl.gontp0.mcs.anl.go2u818102412541.993-15.2641.392-mailer1.psc.eduntp1.usno.navy.2u972102437738.20619.58928.028-dr-zaius.cs.wisben.cs.wisc.edu2u502102435755.0983.9790.333+taylor.cs.wisc.ben.cs.wisc.edu2u454102434754.1273.3790.047-ntp0.cis.strathharris.cc.strat3u5071024377115.274-5.0251.642*clock.via.net.GPS.1u4261024377107.424-3.0182.534ntp1.conectiv.c0.0.0.016u-102400.0000.0004000.00一个可以证明同步问题的证据是所有远程服务器的jitter值是4000并且delay和reach的值是0。remoterefidsttwhenpollreachdelayoffsetjitter==============================================================================LOCAL(0)LOCAL(0)10l-6470.0000.0000.008ntp-cup.externa0.0.0.016u-6400.0000.0004000.00snvl-smtp1.trim0.0.0.016u-6400.0000.0004000.00nist1.aol-ca.tr0.0.0.016u-6400.0000.0004000.00可能的原因有:配置文件中的restrictdefaultignore没有被注释有防火墙阻断了与server之间的通讯此外每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接,否则你执行ntpdateip的时候将返回:27Jun10:20:17ntpdate[21920]:noserversuitableforsynchronizationfound配置Linux客户端在linux客户端上执行ntpdatentp_server_ip就可以根据时间服务器统一局域网的时间了,将上面的命令放到cron里每天早上3点定期执行,crontab–e然后输入03***/usr/sbin/ntpdatentp_server_ip中国大概能用的NTP时间服务器地址本上都能使server133.100.11.8preferserver210.72.145.44server203.117.180.36----windows我就用这个server131.107.1.10servertime.asia.apple.comserver64.236.96.53server130.149.17.21server66.92.68.246serverwww.freebsd.orgserver18.145.0.30serverclock.via.netserver137.92.140.80server133.100.9.2server128.118.46.3serverntp.nasa.govserver129.7.1.66serverntp-sop.inria.frserver210.72.145.44(国家授时中心服务器IP地址)ntpdate131.107.1.10ntpdate-stime.asia.apple.com/////////////////////////////////////////////////////////////////////当用ntpdate-d来查询时会发现导致noserversuitableforsynchronizationfound的错误的信息有以下2个:错误1.Serverdropped:Stratatoohigh在ntp客户端运行ntpdateserverIP,出现noserversuitableforsynchronizationfound的错误。在ntp客户端用ntpdate–dserverIP查看,发现有“Serverdropped:stratatoohigh”的错误,并且显示“stratum16”。而正常情况下stratum这个值得范围是“0~15”。这是因为NTPserver还没有和其自身或者它的server同步上。以下的定义是让NTPServer和其自身保持同步,如果在/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。server127.127.1.0fudge127.127.1.0stratum8在ntpserver上重新启动ntp服务后,ntpserver自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生noserversuitableforsynchronizationfound的错误。那么如何知道何时ntpserver完成了和自身同步的过程呢?在ntpserver上使用命令:#watchntpq-p出现画面:Every2.0s:ntpq-pThuJul1002:28:322008remoterefidsttwhenpollreachdelayoffsetjitter==============================================================================192.168.30.22LOCAL(0)8u226412.113179133.0.001LOCAL(0)LOCAL(0)10l216410.0000.0000.001注意LOCAL的这个就是与自身同步的ntpserver。注意reach这个值,在启动ntpserver服务后,这个值就从0开始不断增加,当增加到17的时候,从0到17是5次的变更,每一次是poll的值的秒数,是64秒*5=320秒的时间。如果之后从ntp客户端同步ntpserver还失败的话,用ntpdate–d来查询详细错误信息,再做判断。错误2.Serverdropped:nodata从客户端执行netdate–d时有错误信息如下:transmit(192.168.30.22)transmit(192.168.30.22)transmit(192.168.30.22)transmit(192.168.30.22)transmit(192.168.30.22)192.168.30.22:Serverdropped:nodataserver192.168.30.22,port123.....28Jul17:42:24ntpdate[14148]:noserversuitableforsynchronizationfound出现这个问题的原因可能有2:1。检查ntp的版本,如果你使用的是ntp4.2(包括4.2)之后的版本,在restrict的定义中使用了notrust的话,会导致以上错误。使用以下命令检查ntp的版本:#ntpq-cversion下面是来自ntp官方网站的说明:Thebehaviorofnotrustchangedbetweenversions4.1and4.2.In4.1(andearlier)notrustmeant"Don'ttrustthishost/subnetfortime".In4.2(andlater)notrustmeans"IgnoreallNTPpacketsthatarenotcryptographicallyauthenticated."Thisforcesremotetimeserverstoauthenticatethemselvestoyour(client)ntpd解决:把notrust去掉。2。检查ntpserver的防火墙。可能是server的防火墙屏蔽了upd123端口。可以用命令#serviceiptablesstop来关掉iptables服务后再尝试从ntp客户端的同步,如果成功,证明是防火墙的问题,需要更改iptables的设置。///////////////////////////////////////////////////////////////////////#Permittimesynchronizationwithourtimesource,butdonot#permitthesourcetoqueryormodifytheserviceonthissystem.#restrictdefaultkodnomodifynotrapnopeernoquery#restrict-6defaultkodnomodifynotrapnopeernoquery#Permitallaccessovertheloopbackinterface.Thiscould#betightenedaswell,buttodosowouldeffectsomeof#theadministrativefunctions.#restrict127.0.0.1#restrict-6::1restrictdefaultnomodifynotrap#Hostsonlocalnetworkarelessrestricted.restrict172.16.65.0mask255.255.255.0nomodifynotrap#Usepublicserversfromthepool.ntp.orgproject.#Pleaseconsiderjoiningthepool(http://www.pool.ntp.org/join.html).#server0.rhel.pool.ntp.org#server1.rhel.pool.ntp.org#server2.rhel.pool.ntp.orgserver172.16.65.144#broadcast192.168.1.255key42#broadcastserver#broadcastclient#broadcastclient#broadcast224.0.1.1key42#multicastserver#multicastclient224.0.1.1#multicastclient#manycastserver239.255.254.254#manycastserver#manycastclient239.255.254.254key42#manycastclient#UndisciplinedLocalClock.Thisisafakedriverintendedforbackup#andwhennooutsidesourceofsynchronizedtimeisavailable.server127.127.1.0#localclockfudge127.127.1.0stratum10#Driftfile.Putthisinadirectorywhichthedaemoncanwriteto.#Nosymboliclinksallowed,either,sincethedaemonupdatesthefile#bycreatingatemporaryinthesamedirectoryandthenrename()'ing#ittothefile.driftfile/var/lib/ntp/drift#Keyfilecontainingthekeysandkeyidentifiersusedwhenoperating#withsymmetrickeycryptography.keys/etc/ntp/keys#Specifythekeyidentifierswhicharetrusted.#trustedkey4842#Specifythekeyidentifiertousewiththentpdcutility.#requestkey8#Specifythekeyidentifiertousewiththentpqutility.#controlkey8