Ubuntu搭建ntp服务器

前言

自己管理的一台服务器出现了时间错误,导致邮件发送显示的时间很有问题,因此痛定思痛,在这里花时间记录一下搭建ntp服务器的过程


简介

NTP协议全称网络时间协议(Network Time Procotol),它的目的是在国际互联网上传递统一、标准的时间。具体的实现方案是在网络上指定若干时钟源网站,为用户提供授时服务,并且这些网站间应该能够相互比对,提高准确度。

NTP是一个跨越广域网或局域网的复杂的同步时间协议,它通常可获得毫秒级的精度。RFC2030描述了SNTP(Simple Network Time Protocol),目的是为了那些不需要完整NTP实现复杂性的主机,它是NTP的一个子集。通常让局域网上的若干台主机通过因特网与其它的NTP主机同步时钟,接着再向局域网内其他客户端提供时间同步服务。

NTP协议是OSI参考模型的高层协议,符合UDP传输协议格式,拥有专用端口123.

随着时间的推移,计算机的时钟会倾向于漂移。网络时间协议(NTP)是一种确保您的时钟保持准确的方法。它为路由器、交换机、工作站和服务器之间提供了一种时间同步的机制。所以NTP Server经常应用于一些有时间同步要求的IT系统环境中。


服务器配置


安装

sudo apt-get install ntp

配置

配置文件位置

sudo  /etc/ntp.conf

配置方法

利用server设定上层NTP服务器,上层NTP服务器的设定方式为:
server    [IP OR HOSTNAME]    [PREFER]

参数说明:
ip or hostname :上层ntp服务器的ip地址或者域名
prefer         : 表示优先使用的主机
driftfile      :记录时间差异。因为预设的NTP Server本身的时间计算是依据BIOS的晶片震荡周期频率来计算的,但是这个数值与上层Time Server有误差。所以NTP这个daemon会自动的去计算我们自己主机的频率与上层TimeServer的频率,并且将两个频率的误差记录下来,记录下来的档案就是在driftfile后面接的完整文件名中了



注意:
  • 建议server使用hostname,因为可能存在局域网内机房迁移导致ip地址变化的情况


常见的时间服务器



配置文件示例




重启ntp服务器

sudo /etc/init.d/ntp restart

查看ntp运行状态


命令

ntpq -p

示例




参数解释

ntp参数含义

remote	:	本地机器所连接的远程NTP服务器
refid	:	指的是参考的上一层NTP主机的地址
st		:	远程服务器的级别。由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端.所以服务器从高到低级别可以设定为1-16.为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的
when	:	用做计时,用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步
poll	:	本地主机和远程服务器多少时间进行一次同步(单位为秒)
reach	:	这是一个八进制值,表示已经向上层NTP服务器要求更新的次数。每成功连接一次,它的值就加1
delay	:	网络传输过程中延迟的时间,单位为微秒
offset	:	我们本地机和服务器之间的时间差别。单位为毫秒
jitter	:	Linux系统时间与BIOS硬件时间的差异时间,单位为微秒



服务器状态参数

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

NTP安全设置


安全需求

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

安全设置

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

[restrict]参数设定方式:
restrict [your ip] mask [netmask_ip] [parameter]

其中parameter的参数主要有:
ignore		:	拒绝所有类型的ntp连接
nomodify	:	客户端不能使用ntpc与ntpq两支程式来修改服务器的时间参数
noquery		:	客户端不能使用ntpq、ntpc等指令来查询服务器时间,等于不提供ntp的网络校时
notrap		:	不提供trap这个远程时间登录的功能
notrust		:	拒绝没有认证的客户端
nopeer		:	不与其他同一层的ntp服务器进行时间同步	

参考配置

  1. 对于默认的client拒绝所有的操作  
    restrict default kod nomodify notrap nopeer noquery

  2. 然后允许本机地址一切的操作  
    restrict 127.0.0.1

  3. 最后允许局域网内指定的client连接到这台服务器同步时间,但是拒绝他们修改服务器时间  
    restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

默认配置



注意:
默认的配置就是禁止所有client修改server的时间,因此我认为默认的配置足够了


NTP的client配置


同步方法

做到这里我们已经有一台自己的relay ntp server。如果我们想让局域网内的所有client都进行时间同步的话,我们就都应该按照上述方式再搭建relay server,然后所有的client都指向那一台server服务器。

注意:
  • 由于ntpd的server/client之间的时间误差不允许超过1000秒,因此需要先手动进行时间同步,然后再设定ntp.conf

ntpdate

ntpdate [-dv] [NTP IP/HOSTNAME]

参数含义:
-d	:	进入除错模式(debug),可以显示出更多的有效资讯
-v	:	有较多讯息的显示


ntpdate和ntpd的区别

ntpd不仅仅是时间同步服务器,他还可以做客户端与标准服务器进行同步时间,而且是平滑同步,并非ntpdate立即同步,在生产环境中应慎用ntpdate。
由于ntpdate是立即同步,在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,就会产生时钟的跃变。
用ntpdate调整时间的方式,会有几个非常明显的问题:
  • 这样做不安全。
  • 这样做不够精确
  • 这样做不够优雅

参考链接




posted @ 2013-03-02 10:24  java程序员填空  阅读(603)  评论(0编辑  收藏  举报