配置NTP服务器
NTP(Network Time Protocol,网络时间协议)是一个用于同步计算机时钟的网络协议,它可使计算机与
其他服务器或时钟源(如石英钟、GPS等)进行时间同步,进行高精度的时间校正(理论上局域网内与标
准时间差小于1ms,广域网上与标准时间差小于几十毫秒),而且NTP支持使用加密确认的方式防止恶意的
协议攻击。
NTP提供准确时间,首先需要一个准确的UTC时间来源。NTP获得UTC的时间来源可以从原子钟、天文台、卫
星,也可从Internet上获取。时间按NTP服务器的等级传播,根据离外部UTC源的远近将所有服务器归入不
同的层(Stratum)中。Stratum-1在顶层由外部UTC接入,而Stratum-2则从Stratum-1获取时间,
Stratum-3从Stratum-2获取时间,依次类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑
上形成层次架构相互连接(如图), 而Stratum-1的时间服务器是整个系统的基础。
服务器可以同时与多个时间服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选中最佳的路
径和来源来校正主机时间。即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效
运转。
时间服务器可以利用以下3种方式与其他服务器进行时间校对。
(1)broadcast/multicast:该方式主要适用于局域网的环境,时间服务器周期性地以广播的方式将时间
信息传送给其他网络中的时间服务器,其时间仅会有少许的延迟,而且配置非常的简单,但是该方式的精
确度并不高,对时间精确度要求不是很高的情况下可以采用。
(2)symmetric:该方式一台服务器可以从远端时间服务器获取时钟,如果需要也可提供时间信息给远端
的时间服务器。此方式适用于平配置冗余的时间服务器,可以提供更高的精确度给主机。
(3)client/server:该方式与symmetric方式比较相似,只是不提供给其他时间服务器时间信息,此方式
适用于一台时间服务器接收上层时间服务器的时间信息,并提供时间信息给下层的用户。
上述3种方式,时间信息的传输都使用UDP协议123端口。
NTP服务安装
NTP服务默认是安装的软件包,rpm -qa | grep ntp检查是否安装
未安装可使用如下命令安装与删除NTP服务器软件包:
rpm -ivh ntp-4.2.2* 使用rpm方式安装
yum -y install ntp.i* 使用yum方式安装
rpm -e ntp-4.2.2* 使用rpm方式删除
yum -y remove ntp.i* 使用yum方式删除
NTP服务配置
在NTP服务安装完成后,需要修改NTP服务配置文件以满足使用需求。NTP服务主配置文件是/etc/ntp.conf
。
NTP服务启动、暂停
NTP属于System V服务,其启动、暂停相关命令如下:
service ntpd start #启动
service ntpd stop #停止
service ntpd restart #重新启动
service ntpd reload #重新加载
service ntpd status #查看当前启动状态
NTP服务自动加载
设置NTP服务下一次开机运行状态可通过以下命令或使用ntsysv命令在服务设置界面中配置:
chkconfig ntpd on #在运行级别2、3、4、5上设置为自动运行
chkconfig ntpd off #在运行级别2、3、4、5上设置为不自动运行
chkconfig ntpd --level 35 on #在运行级别3、5上设置为自动运行
chkconfig ntpd --level 35 off #在运行级别3、5上设置为不自动运行
相关配置文件详解
NTP服务配置文件与linux大多数配置文件一样“#”开始的是注释行(在执行时将被忽略)。在配置文件
中主要包括以下几个参数。
(1)restrict <IP 地址> <子网掩码>|<网段> <子网掩码>
[ignore|nomodiy|noquery|notrap|notrust|nokod]:指定可以进行NTP通信的IP地址或网段。
ignore:关闭所有的NTP服务。
nomodiy:表示客户端不能更改NTP服务器的时间参数,但可以通过NTP服务器进行时间校对。
noquery:不提供NTP服务。
notrap:不提供trap远程事件登录(Remote Event Logging)的功能。
notrust:拒绝没有通过认证的客户端。
kod:kod技术可以阻止“Kiss of Death”包(一种DOS攻击)对服务器的破坏。使用此参数将开启该功能
。
nopeer:不与其他同一层的NTP服务器进行时间同步。
如果没有指定选项,那就表示指定的客户端在访问NTP服务器时没有任何限制。
(2)server [IP|FQDN][prefer]:指定该NTP服务器上层NTP服务器,也就是为该服务器对自身进行时间校
对的NTP服务器。如果指定多个上层NTP服务器时,使用prefer参数的服务器优先级最高。在没有prefer参
数时,上层NTP服务器的优先级根据在配置文件的顺序从上到下,依次由高到低。在指定上层NTP服务器后
,默认情况下至少15min后才会与上层NTP服务器进行时间校对。
(3)fudge:修改NTP服务器相关参数。
(4)driftfile文件名:默认情况下NTP服务器的时间计算式依据BIOS的芯片震动周期频率来计算的,但
是这个数值与上层NTP服务器可能不一致,所以NTP服务器会自动去计算NTP服务器的频率与上层NTP服务器
的频率,并且将两个频率的误差记录在driftfile参数指定的文件中。该参数一般不需要修改,使用配置
文件中默认配置即可。
(5)broadcast网段 子网掩码:指定进行NTP时间广播的网段,在不指定此参数时NTP服务器会对所有能
访问的网段广播。
(6)logfile 文件名:指定NTP服务日志文件。
在/etc/ntp.conf文件中默认有如下几行配置:
#默认拒绝所有NTP客户端所有的操作,并打开kod功能。
restrict default kod nomodify notrap nopeer noquery
#允许本地所有操作
restrict 127.0.0.1
#如无法与大这行之前定义的上层NTP服务器通信时,以本地时间为准确时间
server 127.127.1.0
#指定本地NTP服务器的层
fudge 127.127.1.1 stratum 10
以下几个目录和配置文件虽然不是NTP服务自身配置文件,但都与NTP服务有关。
/usr/share/zoneinfo/:在该目录中的文件是规定了各主要时区的时间配置文件(比如中国上海时间配置
文件就是/usr/share/zoneinfo/Asia/Shanghai).
/etc/sysconfig/clock:该文件是指定系统中当前时区的信息,该文件就是让系统知道应该使
用/usr/share/zoneinfo/下的哪个时间配置文件。
/etc/localtime:该文件是系统通过/etc/sysconfig/clock将/usr/share/zoneinfo/下指定的时间配置文
件复制为/etc/localtime。
如需希望每个用户有单独的时区设置,可以在用户目录下的.bashrc 文件中加入“export TZ=
“/usr/share/zoneinfo/<timezone_directory>/<timezone_file>””,比如当前主机的时间是US,但希望
用户tonyzhang的时间为上海,则可以在tonyzhang用户目录的.bashrc文件中加入“export
TZ="/usr/share/zoneinfo/Asia/Shanghai"”,在RHEL里可不需手动配置这些文件,如果需要修改时区,
可通过system-config-date完成。
配置实例
目前Internet上的时间服务器比较多,很容易找到一台时间服务器作为企业内部标准时间来源。
将RHEL配置为企业内容NTP服务器的过程如下。
(1)修改/etc/ntp.conf文件,内容如下:
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
#指定Internet 上的时间服务器。
restrict 207.46.232.182 mask 255.255.255.255 nomodify notrap noquery
server 207.46.232.182
server 127.127.1.0
fudge 127.127.1.0 stratum 10
keys /etc/ntp/keys
#指定NTP服务器日志文件。
logfile /var/log/ntp
(2)修改/etc/ntp/step-tickers 文件,内容如下(当ntpd服务启动时,会自动与该文件中的记录的上层
NTP服务进行时间校对):
207.46.232.182
127.127.1.0
(3) 修改/etc/sysconfig/ntpd文件,内容如下:
#运行BIOS与系统时间同步,也可以通过hwclock -w命令。
SYNC_HWCLOCK=yes
(4)在配置完成并重新启动服务后,可通过ntpstat命令显示本机上一次与上层NTP服务器同步时间的情况
。也可以使用ntpq -p查看本机与上层NTP服务器通信情况。
(1)进行实践校对的NTP服务器
(2)本地主机与上层NTP服务器的时间差
(3)下次同步时间
remote:本地主机所连接的上层NTP服务器。
refid: 指的是给上层NTP服务器(207.46.232.182)提供时间校对的服务器。
st:上层NTP服务器的级别
when:上一次与上层NTP服务器进行时间校对的时间(单位:s)
poll:下一次本地主机与上层NTP服务器进行时间校对的时间(单位:s)。在NTP服务运行之初poll值会比较小(可以让本地主机尽快调整到正确的时间范围),之后poll值会逐渐增大。
reach:一个八进制值记录已成功与上层NTP服务器进行时间校对的时间。
delay:从本地主机发送同步要求到上层NTP服务器的循环时间差(单位:10-6s)。
offset:时间补偿的结果(单位:10-6s),这个值非常关键,它是本地主机与上层NTP服务器的时间差,offset越接近于0,与上层NTP服务器的时间就越接近。
jitter:一个做统计的值,该值统计在特定个连续的连接数里offset的分布情况(这个值的绝对值越小本地主机的时间就越精确)
图形界面配置NTP
system-config-date ——Network Time Protocol ——Synchronize system clock before starting service