快捷搜索:   nginx

Linux架设ntp时间服务器

首先,你从这里下载一个的tar.gz包:

support.ntp.org/bin/view/Main/WebHome

参考:

大部分都参考了这里:鳥哥的 Linux 私房菜 -- NTP 時間伺服器

客户端和服务端安装一样,解开tar包,

#./configure --prefix=/usr/local/ntp && make && make install && make clean

好了,进入你的/usr/local/ntp/bin目录下,你会发现如下几个文件:

ntpd ntpdate ntpdc ntp-keygen ntpq ntptime ntptrace ntp-wait sntp tickadj

其中有几个是待会儿需要用到的。。。

好了,接下来进行第一步:

设定ntp服务端的配置文件: /etc/ntp.conf

ntp.conf里主要可以使用如下几个命令:restrict,server,driftfile,keys

其中server是设定上级时间服务器用的,而restrict是设定哪台服务器可以和ntp server进行时间同步,具有什么样的权限。driftfile是用来指定记录时间差异的文件,keys是用来指定认证key文件的(这里不用)。

先来看restrict的格式为:

restrict [客户端IP] mask [netmask_IP] [parameter]

客户端IP,就是都是哪几台服务器要和这台ntp server进行同步的ip地址

最后的parameter可以有如下几个参数:

ignore:拒绝连接到ntp server

nomodiy:可以连接到ntp server,但是不能对ntp server进行时间上的修改

noquery:不提供对ntp server查询时间,也就是拒绝和ntp server进行时间同步

notrap:不提供 trap 远程登录功能(这个我不是很明白)

notrust:对没有认证的客户端不提供服务

如果在配置的时候parameter没有填写,则默认表示允许进行同步。

现在比如想让自己网内的服务器同步,拒绝网外的,那么ntp.conf这部分可以写成:

#权限设置 restrict default nomodify notrap noquery #默认拒绝所有来源的任何访问 restrict 127.0.0.1 mask 255.0.0.0 #开放本机的任何访问 restrict 192.168.0.0 mask 255.255.255.0 nomodify #开放本网段的可查询访问 restrict 192.168.0.11 mask 255.255.255.0 nomodify #限制单个IP,限制了局域网内192.168.0.11这台服务器可以执行除修改外的访问

好了,restrict就算完成了,接下来看server命令部分。

server命令的格式是:

server [IP or hostname] [prefer]

其中[IP or hostname]为上级时间服务器的IP或者域名,主机名:

可以是192.43.244.18形式,或者time.nist.gov再或者ntpserver这样的形式。

后面的[prefer]参数是可选的,加上prefer后,ntp server和上级时间服务器同步时会优先先访问加了prefer这行的进行同步。

ok,现在设置上级时间服务器在ntp.conf这部分可以写成:

#上级时间服务器设置 server prefer #优先使用time.nist.gov和上级时间服务器同步   #原本内定的一个内部时间数据,不需要更动他 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10

ok,接下来,来看driftfile命令,driftfile格式为:

driftfile [ntpd driftfile]

其中[ntpd driftfile]参数为记录日志文件的位置,关于这个文件,有以下几点需要注意:

a.driftfile要使用完整路径,即从/根目录开始的路径

b.给出的必须是一个实体文件,不能是软链接,硬链接等这样的文件

c.ntpd要对其有可读可写的权限

d.该档案所记录的数值单位为:百万分之一秒 (ppm)

关于这个命令的作用,有如下解释:

因为预设的 NTP Server 本身的时间计算是依据 BIOS 的芯片震荡周期频率来计算的,但是这个数值与上层 Time Server 不见得会一致啊!所以 NTP 这个 daemon (ntpd) 会自动的去计算我们自己主机的频率与上层 Time server 的频率,并且将两个频率的误差记录下来,记录下来的档案就是在 driftfile 后面接的完整档名当中了!

driftfile 后面接的档案会被 ntpd 自动更新,所以他的权限一定要能够让 ntpd 写入才行。在 CentOS 4.x 预设的 NTP 服务器中,使用的 ntpd 的 owner 是 ntp ,这部份可以查阅 /etc/sysconfig/ntpd 就可以知道啦!

PS,解释这段完全照抄的。。。

那么在ntp.conf中,driftfile这部分写成:

driftfile /var/lib/ntp/drift broadcastdelay 0.008

最后,关于keys,先来解释下:

除了以 restrict 来限制客户端的联机之外,我们也可以透过金钥系统来给客户端认证, 如此一来可以让主机端更放心了。不过在这个章节里面我们暂不讨论这个部分, 有兴趣的朋友可以参考 ntp-keygen 这个指令的相关说明喔!

PS,解释这段完全照抄的。。。

keys这段在ntp.confi中设定格式为:

keys [key_file]

后面的key_file就是key文件的位置了。。。这里咱们不用。。。

默认的写成:

keys /etc/ntp/keys

执行:

#mkdir /etc/ntp

#touch /etc/ntp/keys

综合以上4块儿,最后的ntp.conf文件就是这样子的。。。

restrict default nomodify notrap noquery restrict 127.0.0.1 mask 255.0.0.0 restrict 192.168.0.0 mask 255.255.255.0 nomodify   server prefer server 127.127.1.0 fudge 127.127.1.0 stratum 10   driftfile /var/lib/ntp/drift broadcastdelay 0.008   keys /etc/ntp/keys

ok,保存吧。。。

ntp用的是udp的123端口,接下来,开启防火墙规则允许ntp对外服务器。

接下来,来开启ntp服务运行试试看。。。执行:

#/usr/local/ntp/bin/ntpd

来看看服务了没?执行:

#netstat -tlunp

如果显示出类似于下面的dd,说明成功了哈。

Proto Recv-Q Send-Q Local Address Foreign Address PID/Program name

udp 0 0 192.168.0.254:123 0.0.0.0:* 15118/ntpd

udp 0 0 127.0.0.0:123 0.0.0.0:* 15118/ntpd

udp 0 0 0.0.0.0:123 0.0.0.0:* 15118/ntpd

udp 0 0 :::123 :::* 15118/ntpd

参考文档说可以用ntpstat查看ntp当前运行的状态。

但是我在/usr/local/ntp/bin 目录下并没有发现有这个文件。。。

执行后效果是这样的。。。

#ntpstat

synchronised to NTP server (220.130.158.71) at stratum 3

time correct to within 495 ms

polling server every 64 s

# 这个指令可以列出我们的 NTP 服务器有跟上层联机否。由上述的输出结果可以知道,

# 时间有校正约 495 * 10^(-6) 秒,且每格 64 秒会主动去更新时间喔!

也罢,先跳过这个。。。接着下面。。。

ntptrace,这个命令则可以列出目前我们的NTP服务器与上层NTP服务器彼此之间的关系。

#/usr/local/ntp/bin/ntptrace -n 127.0.0.1

我晕,报出了下面的错误。。。

Can't exec "ntpq": No such file or directory at /usr/local/ntp/bin/ntptrace line 29.

failed to start command ntpq -n -c rv 127.0.0.1: No such file or directory at /usr/local/ntp/bin/ntptrace line 29.

#whereis ntpq

ntpq:

汗,找不到。。。再:

#ls /usr/local/ntp/bin/

确实有ntpq这个文件。。。

感觉应该是找不到ntpq这个dd,看来要给ntpq指定目录,或者在/usr/local/bin 目录下建立ntp的软链接。。。

#ln -s /usr/local/ntp/bin/ntpq /usr/local/bin/ntpq

然后再执行:

#/usr/local/ntp/bin/ntptrace -n 127.0.0.1

127.0.0.1: stratum 11, offset 0.000000, synch distance 0.010981

这下正常显示了。。。呵呵。。。

接下来。。。使用ntpq命令:

#/usr/local/ntp/bin/ntpq -p

显示如下:

remote refid st t when poll reach delay offset jitter

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

.ACTS. 1 u 1606 1024 22 357.845 334.375 71.122

*LOCAL(0) .LOCL. 10 l 11 64 377 0.000 0.000 0.001

这个 ntpq -p 可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:

remote:亦即是 NTP 主机的 IP 或主机名称啰~注意最左边的符号, 如果有『+』代表目前正在作用当中的上层 NTP ,如果是『*』代表也有连上线,不过是作为次要联机的 NTP 主机。

refid:参考的上一层 NTP 主机的地址

st:就是 stratum 阶层啰!

when:几秒钟前曾经做过时间同步化更新的动作;

poll:下一次更新在几秒钟之后;

reach:已经向上层 NTP 服务器要求更新的次数

delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒

offset:时间补偿的结果,单位与 10^(-6) 秒

jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。

事实上这个输出的结果告诉我们,时间真的很准了啦!因为差异都在 0.0001 秒以内, 可以符合我们的一般使用了。另外,你也可以检查一下你的 BIOS 时间与 Linux 系统时间的差异, 就是 /var/lib/ntp/drift 这个档案的内容,就能了解到咱们的 Linux 系统时间与 BIOS 硬件时钟到底差多久?单位为 10^(-6) 秒啦!

PS:上面这段也是纯抄的~~~

好了,再来执行:

#cat /var/lib/ntp/drift

0.000

这么说这个文件也能被写入。。。没啥问题。。。

接下来,就是客户端和服务器端进行同步了哈。。。

同样的,客户端也需要编译安装ntp,这个和开始一样。。。

安装后,如下执行:

#/usr/local/ntp/bin/ntpdate 192.168.0.133

其中的192.168.0.133就是你ntp server的ip哈。。。

我倒~~~

又报错儿了~~~

30 Jul 16:43:07 ntpdate[31077]: no server suitable for synchronization found

把错误放在网上查,一般的都是说ntp server在启动后的5-15分钟内不提供服务,所以才会给出这样的提示。。。

可是我这么一边配置一边写。。。也过了15分钟了啊。。。既然是不提供服务,那么有没有可能是防火墙呢?

上了服务端一看防火墙配置。。。我汗。。。应该是123:udp我写成udp:123了。。。修改,重启防火墙和服务。。。

再次进行测试。。。

#/usr/local/ntp/bin/ntpdate 192.168.0.133

显示:

30 Jul 16:56:38 ntpdate[32752]: adjust time server 192.168.0.198 offset 0.000332 sec

哈哈。。。成功了。。。

设定为自动调整,你还可以把上面的命令加入到crontab中。。。

比如:/usr/local/ntp/bin/ntpdate 192.168.0.198 ; /sbin/hwclock -w

ntpdate和hwclock配合使用。。。

先进行同步,然后在把时间写入BIOS,这样即使重启服务器也不会时间失效。。。

在服务端再把

/usr/local/ntp/bin/ntpd &

加入到/etc/rc.local中。。。呵呵。。。

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论