■ 山东 刘继超 崔冬梅 刘伟
编者按:本文结合实际配置时的经验,总结出局域网中NTP服务器的搭建方法。
全网(局域网)时间同步是进行网络管理的基础,要实现网络同步就需要在网络中搭建一台NTP服务器,这台服务器对上跟互联网上时钟服务器进行同步,对下对局域网中网络设备(服务器、交换机等)提供时钟服务。在局域网中搭建NTP服务器,除了可以实现时间同步外,也可以解决一个问题,那就是局域网中有一些网络设备是不允许访问互联网的,这样的话,只要这台设备能够跟局域网中的NTP服务器进行通讯,也可以实施时间同步。
1.服务器操作系统信息
#cat/etc/redhatrelease(查看版本号)
[root@localhost etc]#cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
#uname -r(显示系统信息)
3.10.0-693.el7.x86_64
#hostname -I(查看本机的IP地址)
10.66.66.67
2.确认服务器的时区正确
(1)t i m e d a t e c t l查看具体时间时区
[root@localhost~]#timedatectl
Local time: Wed 2018-12-26 11:14:25 CST
Universal time: Wed 2 0 1 8-1 2-26 03:14:25 UTC
RTC time: Wed 2018-12-26 03:14:25
Time zone: America/New_York (CST, +0800)
NTP enabled: yes
NTP synchronized:yes
RTC in local TZ: no
DST active: n/a
(2)查看具体所有时区,如图1所示。
(3)timedatectl set-timezone Asia/Shanghai设置时区
NTP的安装非常简单,执行yum -y intall ntpd即可。
NTP配置的核心是配置/etc目录下的ntp.conf文件,其中有三处关键的配置,分别是设置允许连接NTP服务器的NTP客户端的地址段;设置本台NTP服务器向上跟踪的时钟源以及对内进行时钟发布的地址;设置日志文件放置的地址,分别说明如下:
restrict 127.0.0.1
restrict ::1
配置文件中有如上所示的两行,我们只需要根据实际的网络情况,再添加上本地局域网中允许跟这台NTP服务器进行时间同步的客户机地址即可,比如我们允许所有10网段的客户机访问,只需增加如下一行:
restrict 10.0.0.0 mask 255.0.0.0 nomodify notrap
需要说明的是,后面跟的nomodify和notrap分别代表禁止远程主机修改本地服务器配置和拒绝特殊的ntpdq捕获消息。
配置文件中有如下六行:
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
是定义这台NTP服务器向上跟踪的时钟源,也就是互联网上的NTP服务器,我们把这些行全部注释掉,改成国内的NTP服务器,具体如下:
server 2.cn.pool.ntp.org
server 1.asia.pool.ntp.org
这样就定义好了向上的NTP服务器。除此之外,还有非常重要的一点,那就是将这台服务器定义为对本局域网提供NTP服务,需要通过添加如下两行进行定义:
server 127.127.1.0
fudge 127.127.1.0 stratum 6
这两行非常关键,如果不写的话,即使启动了NTP服务,客户机也是无法跟随这台服务器进行同步的。
通过在配置的文件添加以下命令来实现:
logfile /var/log/ntpd.log
然后在/var/log目录下创建这个文件,并定义相应的文件
[root@localhost etc]#cd /var/log
[root@localhost log]#touch ntpd.conf
chown ntp:ntp /var/log/ntpd.log
这一步也是非常关键的,因为NTP服务器在配置和启动甚至运行的过程中可能会遇到这样那样的问题。但是通过查看产生的日志文件,我们就可以更加详细的了解故障产生的原因,从而找到解决问题的办法,下面就介绍一下NTP服务器常用的排错方法。
用如下两条命令:
systemctl enable ntpd
systemctl start ntpd
第一条命令是将NTP服务作为系统服务,第二条命令是启动NTP服务,如果没出现什么告警信息的话,就说明NTP服务启动起来了,我们可以看一下NTP服务的状态,如图2所示。
出现以上提示,就表示这台NTP服务器既完成了在向上游时钟源的同步(它自身的时钟是准确有的),自身又可以作为时钟源向局域网内的其它客户机提供时钟源服务(即它自身可以作为一台NTP服务器了)。
通过查看NTP服务自身产生的日志信息,可以解决大部分的NTP故障问题,比如有一台服务器,开启了NTP服务,但是局域网中的客户机跟随它进行时间同步提示错误,经查看日志信息后,发现有如下的提示:
2 6 D e c 1 1:2 7:4 4 ntpd[25624]: getaddrinfo:"127.127.1.1.0" invalid host address,
ignored
2 6 D e c 1 1:2 7:4 4 n t p d[2 5 6 2 4]:inappropriate address 0.0.0.0 for the fudge command, line ignored
仔细分析一下,原来是在/etc/ntp.conf这个配置文件中,将时钟服务器的IP地址写错了,多写了一个“1.”,修改掉这个错误,重新启动NTP服务后,客户端就可以跟随这台NTP服务器进行时间同步了。
图2 具体内容
有时候通过在客户端进行抓包分析,也可以分析判断出NTP服务器无法提供服务的原因。比如有一台NTP服务器配置完毕以后,客户机一直无法跟随这台服务器进行时间同步,上网搜索可能的原因,其中有一条是有可能服务器或客户端开启了防火墙,不允许NTP协议通过,为了判断是否是由于这个原因造成的,就可以在客户端运行WIRESHARK抓包软件,定义IP地址等于NTP服务器的IP地址,就会发现客户机和NTP服务器之间其实是有通讯的,说明防火墙并没有屏蔽相应的端口,排除这个原因,再查找其它方面的问题,最终发现这台服务器的配置文件ntp.conf中没有配置本机NTP服务器的地址所致,即缺少这两行:
server 127.127.1.0
fudge 127.127.1.0 stratum 6
图3 具体内容
这是一个比较极端的故障,即有一台路由器,虽然可以跟随局域网中的NTP服务器进行时间同步,但同步完以后,时间始终差几十秒,后来经过咨询厂家工程师,发现需要在同步时间时将stratum值改大一些,当时是调到了11,就好在。经过与服务器上的ntp.conf文件中的stratum值进行对比,发现必须大于NTP服务器上的值才可以正常的同步上。
一台无法连接互联网的服务器如何配置为一台时钟服务器?这是一个什么情况呢?即有一台服务器,由于特定的要求,它是不能连上互联网的,但是又需要被配置成一台NTP服务器(简称A),为局域网中的某几个网络设备提供NTP服务,这时就可以让它成局域网中一个NTP服务器进行同步,但是又出现一个问题,即在ntp.conf文件中要定义上级NTP服务器(简称B)的地址,这个地址是以域名形式存在的,如何将一个设定的域名与局域网中的B的IP地址对应起来呢?其实只要修改一下/etc/hosts文件,在最后添加一行,将域名与IP地址对应起来即可,如下所示:
[root@localhost etc]#more hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.66.66.67 nw.sz.com
这样操作后,在ntp.conf文件中就可以以域名的形式写一个内网的NTP服务器的地址了,写完以后启动NTP服务,发现是可以正常的与这台内网的B服务器进行时间同步,并且这台A作为NTP服务器工作也正常了,如图3所示。
在网络运维工作中,我们切身的感受到实现全网的时间一致是一件非常必要的工作,只有做到网络设备的系统时间是准确的,是一致的,才有可能保证各类基于精确校时的网络程序的正常运行,才有可能在出现网络故障时进行精准的时间定位。
通过配置一台LINUX的主机作为一台NTP服务器,配置上相对较简单,运行上又是非常可靠的,我们根据工作需要在局域网中配置了多台NTP服务器,这些服务器通过网络连接实现了时间同步,为不同的网络设备提供了NTP服务,在实际工作中发挥了非常好的作用。