chrony NTP配置

chrony NTP配置

How to configure chrony as an NTP client or server in Linux

精确计时确保可靠的网络通信,同时也保证系统组件的正常运行,例如systemd timer和cronjobs。计算机可以使用网络时间协议NTP来同步时间,精确的时间源可以是上游的时间服务器或者服务器池。
RHEL中,chronyd守护进程是默认的NTP客户端。同样,chronyd也可以配置为服务端用来作为时间源。
下面我们来介绍如何进行客户端和服务端的配置。

默认配置使用NTP.org作为时间源。对于大多数家庭用户来说,这是可靠的时间源。但是在一些企业环境中,内部网络不允许NTP出站,所以这时候需要配置一个内部的时间源。
我们可以修改文件/etc/chrony.conf。我们有三种方式配置时间源,但通常我们使用server或者pool配置项。pool可以指向多个NTP服务器。
下面是一个例子,其中NTP服务器地址后面使用了iburst选项,可以使得前四次请求间隔缩短。具体用法可以参考chrony – chrony.conf(5)

1
2
3
4
5
6
7
server ntp.lab.int iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony

配置更新后,需要重启chronyd服务。最后检查时间源和系统时钟是否同步成功。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
systemctl restart chronyd.service
systemctl is-active chronyd.service
chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 3dhomejoe.org                 2   6    17     8    -65us[  +80us] +/-   27ms
^+ li1210-167.members.linod>     2   6    17     9    +11us[ +156us] +/-   48ms
^- 155.248.196.28                2   6    17     8   -384us[ -384us] +/-   19ms
^- static.36.62.78.5.client>     4   6    17     8    +51us[  +51us] +/-   31ms
timedatectl
               Local time: Sun 2023-08-20 12:00:17 CST
           Universal time: Sun 2023-08-20 04:00:17 UTC
                 RTC time: Sun 2023-08-20 04:00:18
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

我们使用allow指令指定一个子网,使得NTP客户端能通过子网访问NTP服务器。默认没有配置allow,说明客户端不能通过子网访问服务器,chronyd是单纯的客户端。
下面是一个例子,允许连接子网。

1
2
3
4
5
6
7
8
server ntp.lab.int iburst
allow 192.168.0.0/24
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony

更新配置后,重启chronyd服务,然后配置防火墙。

1
2
3
systemctl restart chronyd.service
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload