计算机的系统时间是由计算机内的石英晶体振荡电路以固定的振荡频率产生的,由于晶振在制作过程中会有少许误差,导致所产生的系统时间与全球时间(UTC)存在偏差,时间一长,偏差就会越来越大,严重时会给网络应用带来灾难性的后果,因此就需要对网络中的计算机的系统时间进行校正(也称时间同步)。
Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机系统与NTP服务器或时钟源(如石英钟,GPS等等)进行同步化的一种协议,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒)
通常情况下,时间同步是按以下步骤进行的:
(1):NTP客户端向NTP服务器发出一个时间请求包(UDP包),其中包含了该包离开客户端时的时间戳。
(2):当服务器接收到该包时。填入包到达时的时间戳、包离开时的时间戳等信息,然后立即把包返回给客户端
(3):客户端在接收到响应包时再填入包返回时的时间戳,然后利用这些时间参数计算出两个关参数,即包往返的延迟、客户端与服务器之间的时钟偏移
(4):客户端使用时钟偏移来调整本地时钟,以使其时间与服务器时间一致
1、网络时间服务器的安装与配置
(1)检查是否安装NTP服务器软件包:#rpm -q ntp 默认是安装的,若未安装则通过RPM命令或YUM进行安装
(2)编辑配置文件/etc/ntp.conf
NTP服务的主要配置文件是/etc/ntp.conf。其中已经有了一些默认设置。如下图所示:
restrict default kodnomodify notrap nopeer noquery 限制其他计算机查询、修改本机上的NTP服务,其中default表示所有IP
restrict -6default kod nomodify notrap nopeer noquery 应用于IPV6地址的主机
restrict 127.0.0.1 开放本机内部接口,用于反馈;以便于在本地对NTP服务进行监控及配置
restrict 192.168.1.0mask 255.255.255.0 nomodify notrap 开放这个网段,不能修改;即允许192.168.1.0/24网段的NTP客户端都可以用本机的NTP服务器进行网络校时,但不允许它们修改本机的NTP服务配置
server 0.rhel.pool.ntp.org
server 1.rhel.pool.ntp.org
server 2.rhel.pool.ntp.org
这些是网络中真正服务器,这里的server参数用来指定上层的NTP服务器,默认指定internet上的时间服务器池中的时间服务器作为上层NTP服务器
配置使用网络时间,主要是通过修改配置文件/etc/ntp.conf来实现的
ntp服务器默认监听UTP 123端口
开放防火墙123端口 # iptables -I INPUT -p udp --dport 123 -jACCEPT
例如:在某个局域网中,架设一台本地的NTP服务器(IP:192.168.0.1),并让它与外部时间服务器同步,那么它的时间就成为了整个内部网络的标准时间。本地的NTP服务器不对internet提供公开的NTP服务,仅对内部子网192.168.0.0/24提供NTP服务,并且内部网络的网络校时不需要认证机制。要实现上述功能,需要对/etc/ntp.conf文件做下面的修改。
首先确定自己的时区:
date命令可以查看当前系统时间,中国的时区为CST。使用tzselect命令进行配置(时区选择,交换式配置方式
或者选择Shanghai然后建立一个软连接,如下所示:
ln -sf/usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime #localtime为系统时区
修改权限设置的语句格式为:
1、restrict IP地址或域名 [mask子网掩码][选项]
该语名用来设置其他计算机对本机NTP服务的访问权限,其中,IP地址或域名参数可以是default,表示所有计算机
常用选项:
ignore:表示禁止所有的NTP请求包进入
nomodify:表示禁止其他计算机更改本机NTP服务的设置,但可以通过本NTP服务器进行网络校时
notrust:表示禁止所有未通过认证的NTP包进入
noquery:表示禁止其他计算机查询本机NTP服务的状态
notrap: 不提供trap远程登录
nopeer: 提供时间服务,但不做为对等体
kod: 向不安全的访问者发送Kiss-Of-Death报文
如果没有设置任何选项,就表示该计算机(或网段)没有任何限制。
若想对内部子网192.168.0.0/24提供NTP服务,则可以在ntp.conf文件中添加如下配置:
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
2、配置选项 server
作用:指定上层NTP服务器,以及一些连接选项
server[host] [key n] [version n] [prefex] [mode n] [minpoll n] [maxpoll n] [iburst]
如:
server0.rhel.poll.ntp.org
server1.rhel.poll.ntp.org
启动ntp服务:servicentpd start
开机启动服务:chkconfig ntpd on
3、配置时间同步客户机:
方法1:从“系统”à“管理”à菜单中,启动“日期和时间”管理工具
方法2:手工执行 ntpdate <ntp server> 来同步或者利用crontab来执行
crontab -e
0 21 * * * /usr/sbin/ntpdate 192.168.0.1 ;/sbin/hwclock -w
每天晚上9点进行同步
其中hwclock �Cw或hwclocksystohc命令修正系统硬件时间,这样系统重启后,才能显示出正确的时间
附:
在ntp客户端运行ntpdate serverIP,出现no serversuitable for synchronization found的错误。
在ntp客户端用ntpdate -d serverIP查看,发现有“Serverdropped: strata too high”的错误,并且显示“stratum16”。而正常情况下stratum这个值得范围是“0~15”。
这是因为NTP server还没有和其自身或者它的server同步上。
以下的定义是让NTP Server和其自身保持同步,如果在/ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。
server 127.127.1.0
fudge 127.127.1.0 stratum 10
在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no serversuitable for synchronization found的错误。
那么如何知道何时ntp server完成了和自身同步的过程呢?
在ntp server上使用命令:
# watch ntpq -p
出现画面:
注意LOCAL的这个就是与自身同步的ntp server。
注意reach这个值,在启动ntp server服务后,这个值就从0开始不断增加,当增加到17的时候,从0到17是5次的变更,每一次是poll的值的秒数,是64秒*5=320秒的时间。
在ntp client上使用命令:查看时间同步状态
个ntp命令:
#/usr/sbin/ntpdate -u 192.168.0.1校对时间
#/usr/sbin/ntpdate -q 192.168.0.1查询不更新
#hwclock --systohc 将机器硬件时钟同步为系统时钟