runsisi's

technical notes

内网测试环境NTP服务器搭建

2018-12-23 runsisi#ntp

NTP 系统简介

如图 1,整个 NTP 系统以一种分层结构的形式存在, 其中最顶层为原子钟等精确时钟设备,称作参考时钟( reference clock), NTP 服务器按照距离参考时钟的远近被归入不同的层( stratum), 处于顶层( stratum 1)的 NTP 服务器与参考时钟直连(黄色箭头所示),被称作主时间服务器( primary time server), 处于其它层的 NTP 服务器通过网络从同层或上层 NTP 服务器处获取时间进行同步(红色箭头所示)。 从图中可以看到 NTP 服务器既可以作为服务端向其它机器提供时间服务,也可以作为客户端从其他 NTP 服务器获取时间进行同步。

ntp
图 1. NTP 系统分层结构

关于 NTP 更多更详细的信息请参考维基百科相关介绍。

内网测试环境 NTP 服务器搭建

内网环境特别是测试环境中的机器大多是不能够访问外部 NTP 服务器的,如图 2 所示,为了保持网络中所有机器的时间同步,最简单的方式就是选取一台机器作为内网 NTP 服务器,然后其它机器作为 NTP 客户端从该机器获取时间进行同步,注意由于该内网的 NTP 服务器无法连接外部的 NTP 服务器, 这种方式只能保证网络内各机器的时间保持同步但不能保证该时间的准确性。

internal ntp
图 2. 内网 NTP 环境

下面以 Centos 系统为例, 简单说明如何配置不联网的本地 NTP 服务器,系统安装好之后默认应该是已经安装了 NTP 软件的, 但不同的系统发行版本默认安装的 NTP 软件可能有不同。 其中对配置文件的修改都不需要修改配置文件中默认配置的外部服务器, NTP 服务端会尝试去连接外部服务器,如果连接不上也不会有任何影响,最终会使用本地系统时钟作为时钟源提供服务。

至于 NTP 客户端的配置,只需要在配置文件中加上一条本地 NTP 服务端的地址,并启用 NTP 服务进程即可(如第一节所述, NTP 服务端同时也是客户端),如图 3。

server addr
图 3. NTP 客户端配置服务器地址

  1. Centos 6.0

默认已安装 ntpd NTP 软件, 修改配置文件/etc/ntp.conf

c6 0
图 4. ntpd 允许使用系统时钟作为时钟源

将图 4 所示的 server 和 fudge 两行前面的注释去掉,以允许使用系统时钟作为时钟源同步给其他 NTP 客户端,然后重启服务: service ntpd restart

  1. Centos 6.5

与 Centos 6.0 类似, 但 6.5 默认配置文件不再有图 4 所示的两行默认配置,手工加上即可,然后重启服务: service ntpd restart

  1. Centos 7.0

默认已安装 chronyd NTP 软件,修改配置文件 /etc/chrony.conf

c7 0
图 5. chronyd 允许特定网段客户端访问

如图 5,允许的客户端需要根据自己的实际情况进行修改。

local
图 6. chronyd 允许使用系统时钟作为时钟源

如图 6,去掉 local stratum 前面的注释,以允许使用系统时钟作为时钟源同步给其他 NTP 客户端,然后重启服务:systemctl restart chronyd

当然 Centos 7.0 也可以使用 ntpd NTP 软件, 两者可以共存,但不可以同时启用。

参考资料

Network Time Protocol

https://en.wikipedia.org/wiki/Network_Time_Protocol

The School for Sysadmins Who Can’t Timesync Good and Wanna Learn to Do Other Stuff Good Too

https://sysadmin.miniconf.org/2017/lca2017-paul_gear-the_school_for_sysadmins_who_cant_timesync_good.pdf

ntp.conf: Is it reasonable to rely on default server list, exposed in CentOS?

https://serverfault.com/questions/850030/ntp-conf-is-it-reasonable-to-rely-on-default-server-list-exposed-in-centos

NTP POOL PROJECT

https://www.ntppool.org/en/