Chrony
Chrony是一个开源的自由软件,如果在chrony配置文件中指定了ntp服务器的地址,那么chrony就是一台客户端,会去同步ntp服务器的时间,如果在chrony配置了允许某些客户端来向自己同步时间,则chrony也充当了一台服务器,所以,安装了chrony即可充当客户端也可以充当服务端。

Chrony有两个核心组件,分别是:chronyd:是守护进程,主要用于调整内核中运行的系统时间和时间服务器同步。它确定计算机增减时间的比率,并对此进行调整补偿。chronyc:提供一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

安装配置
环境
OS: CentOS7.4_x64

主机名 角色 配置目录 端口
centos-test1 Chrony Server /etc/chrony.conf udp/123,udp/323
centos-test2 Chrony Client /etc/chrony.conf udp/123,udp/323
安装
1
yum install -y chrony
配置详解
配置文件:/etc/chrony.conf

# 使用pool.ntp.org项目中的公共服务器。以server开,理论上你想添加多少时间服务器都可以。
# 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

# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
driftfile /var/lib/chrony/drift

# chronyd根据需求减慢或加速时间调整,
# 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。
# 该指令强制chronyd调整时期,大于某个阀值时步进调整系统时钟。
# 只有在因chronyd启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。
makestep 1.0 3

# 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
rtcsync

# Enable hardware timestamping on all interfaces that support it.
# 通过使用hwtimestamp指令启用硬件时间戳
#hwtimestamp eth0
#hwtimestamp eth1
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器
#allow 192.168.0.0/16
#deny 192.168/16

# Serve time even if not synchronized to a time source.
local stratum 10

# 指定包含NTP验证密钥的文件。
#keyfile /etc/chrony.keys

# 指定日志文件的目录。
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

一般主要配置以下参数:

server:指明时间服务器地址;
allow NETADD/NETMASK
allow all:允许所有客户端主机;
deny NETADDR/NETMASK
deny all:拒绝所有客户端;
bindcmdaddress:命令管理接口监听的地址;
local stratum 10:即使自己未能通过网络时间服务器同步到时间,也允许将本地时间作为标准时间授时给其它客户端;

客户端与服务端的区别就在于把自己的server指定为服务主机,而服务端的server就指向上游(外网)NTP服务器。

Chrony默认listen端口是323, 如果有其他client想要通过123端口访问,需要将server配置为NTP的server(listen 123),这里只需要allow 子网即可

NTP server
allow [all] [subnet]

allow 指令用于指定允许 NTP 客户端作为 NTP 服务器访问计算机的特定子网。 当在服务器上启用 NTS 时,它还控制 NTS-KE 客户端的访问。

默认情况下不允许任何客户端访问,即 chronyd 纯粹作为 NTP 客户端运行。 如果使用了 allow 指令,chronyd 将既是其服务器的客户端,又是其他客户端的服务器。

该指令可以多次使用。
该指令的使用示例如下:

allow 1.2.3.4
allow 3.4.5.0/24
allow 3.4.5
allow 2001:db8::/32
allow 0/0
allow ::/0
allow

第一个指令允许从 IPv4 地址访问。 第二个指令允许从以 CIDR 表示法指定的 IPv4 子网中的所有计算机进行访问。 第三个指令使用更简单的符号指定相同的子网,其中前缀长度由点数确定。 第四个指令指定 IPv6 子网。 第五个和第六个指令分别允许从所有 IPv4 和 IPv6 地址访问。 第七个指令允许从所有地址(IPv4 或 IPv6)进行访问。
指令的第二种形式 allow all 具有更大的效果,具体取决于配置文件中指令的顺序。 为了说明效果,请考虑以下两个示例:

allow 1.2.3.4
deny 1.2.3.0/24
allow 1.2.0.0/16

and


allow 1.2.3.4
deny 1.2.3.0/24
allow all 1.2.0.0/16

在第一个示例中,无论三个指令以什么顺序给出,效果都是相同的。因此,1.2.0.0/16 子网被允许访问,但 1.2.3.0/24 子网被拒绝访问,但是允许主机 1.2.3.4 访问。

在第二个示例中,allow all 1.2.0.0/16 指令覆盖与指定子网中的子网相关的任何先前指令的效果。在配置文件中,此功能可能没有实际意义。但是,它更适用于在运行时通过 chronyc 使用 allow all 命令进行重新配置。

这些规则在内部表示为一棵表树,每四位 IPv4 或 IPv6 地址有一层。如果允许和拒绝指令修改一个表的相同记录,即如果一个子网包含在另一个子网中并且它们的前缀长度处于同一级别,则它们的顺序很重要。例如,1.2.3.0/28 和 1.2.3.0/29 在不同的表中,但 1.2.3.0/25 和 1.2.3.0/28 在同一个表中。可以使用 chronyc 中的 accheck 命令验证单个地址的配置。

可以在指令中指定主机名而不是 IP 地址,但是当 chronyd 启动时,该名称必须是可解析的,即网络已经启动并且 DNS 正在工作。如果主机名解析为多个地址,则仅允许或拒绝第一个地址(按照系统解析器返回的顺序)。

请注意,如果在配置文件中使用了 initstepslew 指令,则该指令中列出的每台计算机都必须允许该计算机的客户端访问才能工作。

deny [all] [subnet]
这类似于 allow 指令,除了它拒绝 NTP 和 NTS-KE 客户端访问特定子网或主机,而不是允许它。

语法相同,指令也可以多次使用。

还有一个deny all 指令,其行为与allow all 指令相似。

防火墙规则

firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload

设置时区

timedatectl set-timezone Asia/Shanghai

强制同步系统时钟

chronyc -a makestep

启动

systemctl enable chronyd
systemctl restart chronyd

常用命令
查看时间同步源:

chronyc sources -v

查看时间同步源状态:

chronyc sourcestats -v

设置硬件时间
硬件时间默认为UTC:

timedatectl set-local-rtc 1

启用NTP时间同步:

timedatectl set-ntp yes

校准时间服务器:

chronyc tracking

官方配置参考文档:
https://chrony.tuxfamily.org/doc/devel/chrony.conf.html

good practice:
https://liumiaocn.blog.csdn.net/article/details/88421217?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=1

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐