配置时间同步
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 在顶部导航栏中点 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 chrony 套件介绍 复制链接链接已复制到粘贴板!
网络时间协议(NTP)
的实现是 chrony。您可以使用 chrony:
-
将系统时钟与
NTP
服务器同步 - 将系统时钟与参考时钟同步,如 GPS 接收器
- 将系统时钟与手动时间输入同步
-
作为
NTPv4(RFC 5905)
服务器或对等服务器,为网络中的其他计算机提供时间服务
chrony 在各种条件下表现良好:
- 包括网络连接
- 严重拥堵的网络
- 更改温度(普通计算机时钟对温度敏感)
- 不持续运行或在虚拟机上运行的系统。
chrony 包括 chronyd
(一个在用户空间运行的守护进程)和 chronyc(可用来监控 chronyd
性能并在运行时更改各种操作参数的命令行程序)。
chronyd 守护进程可以通过命令行工具 chronyc 监控和控制。这个工具提供了一个命令提示,允许输入大量命令来查询 chronyd
的当前状态并修改其配置。在默认情况下,chronyd
只接受来自本地 chronyc 实例的命令,但它也可以被配置为接受来自远程主机的监控命令。应该限制远程访问。
第 2 章 使用 chrony 复制链接链接已复制到粘贴板!
了解如何启动和停止 chronyd
,检查它是否已同步,并手动调整系统时钟。
2.1. 管理 chrony 复制链接链接已复制到粘贴板!
您可以启动、停止并检查 chronyd
的状态。
chrony 在 Red Hat Enterprise Linux 被默认安装。以
root
用户运行以下命令进行验证:dnf install chrony
# dnf install chrony
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chrony 守护进程的默认位置为
/usr/sbin/chronyd
。命令行工具将安装到/usr/bin/chronyc
。运行以下命令检查
chronyd
的状态:systemctl status chronyd
$ systemctl status chronyd chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: active (running) since Wed 2013-06-12 22:23:16 CEST; 11h ago
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要启动
chronyd
,使用root
用户身份运行以下命令:systemctl start chronyd
# systemctl start chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确保
chronyd
在系统启动时自动启动,以root
身份运行以下命令:systemctl enable chronyd
# systemctl enable chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要停止
chronyd
,以root
身份运行以下命令:systemctl stop chronyd
# systemctl stop chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要防止
chronyd
在系统启动时自动启动,以root
身份运行以下命令:systemctl disable chronyd
# systemctl disable chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 手动调整系统时钟 复制链接链接已复制到粘贴板!
您可以手动调整系统时钟。
流程
要通过旋转传递任何正在进行的调整来立即步进系统时钟,请输入:
chronyc makestep
# chronyc makestep
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果使用了 rtcfile
指令,则不应该手动调整实时时钟。随机调整会影响 chrony 测量实时时钟漂移速率的需要。
2.3. 禁用 NetworkManager 分配程序脚本 复制链接链接已复制到粘贴板!
chrony
分配程序脚本管理 NTP 服务器的在线和离线状态。作为系统管理员,您可以禁用分配程序脚本,以使 chronyd
持续轮询服务器。
NetworkManager 在接口重新配置、停止或启动操作过程中执行 chrony
分配程序脚本。但是,如果您在 NetworkManager 之外配置某些接口或路由,您可能会遇到以下情况:
- 当没有到 NTP 服务器的路由存在时,分配程序脚本可能会运行,从而导致 NTP 服务器切换到离线状态。
- 如果您稍后建立路由,脚本默认不会再次运行,NTP 服务器保持在离线状态。
要确保 chronyd
可以与您的 NTP 服务器同步(后者有单独的受管接口),请禁用分配程序脚本。
流程
要禁用
chrony
分配程序脚本,请创建一个到/dev/null
的符号链接:ln -f -s /dev/null /etc/NetworkManager/dispatcher.d/20-chrony-onoffline
# ln -f -s /dev/null /etc/NetworkManager/dispatcher.d/20-chrony-onoffline
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意更改后,NTP 服务器一直保持在线状态。
2.4. 在隔离的网络中设置 chrony 复制链接链接已复制到粘贴板!
对于从未连接到互联网的网络,选择一台计算机为主时间服务器。其他计算机要么是服务器的直接客户端,要么是客户端的客户端。在服务器上,必须使用系统时钟的平均偏移率手动设置 drift 文件。如果服务器重启了,它将从周围的系统获取时间,并计算一个平均值来设置系统时钟。之后它会恢复基于 drift 文件的调整。当使用 settime 命令时会自动更新 drift
文件。
要在隔离的网络中为系统设置 chrony,请按照以下步骤操作:
流程
在要选择为服务器的系统上,编辑
/etc/chrony.conf
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<subnet>
是允许客户端连接的网络。使用无类别域间路由(CIDR)表示法指定子网。在选择为服务器的直接客户端的系统上,编辑
/etc/chrony.conf
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<server_fqdn>
是服务器的主机名,<server_ip_address>
是服务器的地址。具有此配置的客户端重启后,其将与服务器重新同步。
在不是服务器直接客户端的客户端系统上,/etc/chrony.conf
文件应该是一样的,除了应该省略 local
和 allow
指令外。
在隔离的网络中,您还可以使用 local
指令来启用本地参考模式。该模式可允许 chronyd
作为 NTP
服务器实时显示同步,即使它从未同步或者最后一次更新时钟早前发生。
要允许网络中的多个服务器使用相同的本地配置并相互同步,而不会混淆轮询多个服务器的客户端,请使用 local
指令的 orphan
选项,其启用孤儿模式。每一服务器需要配置为轮询使用本地
的所有其他服务器。这样可确保只有具有最小参考 ID 的服务器具有本地参考活跃状态,并同步其他服务器。当服务器出现故障时,另一个服务器会接管。
2.5. 配置远程监控访问 复制链接链接已复制到粘贴板!
chronyc 工具可以使用以下方法访问 chronyd
:
- IPv4 或 IPv6。
-
域套接字,可由
root
和chrony
用户本地访问。
默认情况下,chronyc 连接到 Unix 域套接字。默认路径为 /var/run/chrony/chronyd.sock
。如果这个连接失败,chronyc 会尝试连接到 127.0.0.1,然后是 ::1。
网络中只允许以下监控命令,它们不会影响 chronyd
的行为:
- activity
- manual list
- rtcdata
- smoothing
- sources
- sourcestats
- tracking
- waitsync
默认情况下,仅接受来自 localhost(127.0.0.1 或 ::1)的命令。
所有其他命令只能通过 Unix 域套接字进行。当通过网络发送时,chronyd
会返回 Notauthorized
错误,即使它来自 localhost。
以下流程描述了如何使用 chronyc 远程访问 chronyd。
流程
通过在
/etc/chrony.conf
文件中添加以下内容,将chrony
配置为侦听本地接口:bindcmdaddress 0.0.0.0
bindcmdaddress 0.0.0.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow and
bindcmdaddress ::
bindcmdaddress ::
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许来自远程 IP 地址、网络和子网的命令:
在
/etc/chrony.conf
文件中添加以下内容:cmdallow 192.168.1.0/24
cmdallow 192.168.1.0/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cmdallow 2001:db8::/64
cmdallow 2001:db8::/64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在防火墙中打开端口 323 ,以允许来自远程系统的连接:
firewall-cmd --permanent --add-port=323/udp
# firewall-cmd --permanent --add-port=323/udp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入防火墙配置:
firewall-cmd --reload
# firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. 检查是否同步 chrony 复制链接链接已复制到粘贴板!
您可以检查 chrony 是否已与 tracking
、sources
和 sourcestats
命令的使用同步。
流程
要检查 chrony 跟踪,请输入:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow chronyc
sources 命令显示chronyd
正在访问的当前时间源的信息。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以指定可选的
-v
参数来打印更详细的信息。在这种情况下,会输出额外的标头行显示字段含义的信息。sourcestats
命令显示目前被chronyd
检查的每个源的偏移率和误差估算过程的信息。要检查 chrony 源的统计信息,请运行以下命令:chronyc sourcestats
$ chronyc sourcestats 210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev =============================================================================== abc.def.ghi 11 5 46m -0.001 0.045 1us 25us
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可以使用可选参数
-v
来包括详细信息。在这种情况下,会输出额外的标头行显示字段含义的信息。
第 3 章 带有硬件时间戳的 chrony 复制链接链接已复制到粘贴板!
某些网络接口控制器(NIC)中的硬件(HW)时间戳提供传入和传出数据包的准确的时间戳。NTP
时间戳通常由内核及使用系统时钟的 chronyd 创建。但是,当启用了 HW 时间戳时,NIC 使用自己的时钟在数据包进入或离开链路层或物理层时生成时间戳。与 NTP
一起使用时,硬件时间戳可以显著提高同步的准确性。为了获得最佳准确性,NTP
服务器和 NTP
客户端都需要使用硬件时间戳。在理想的条件下,可能会达到微秒级的准确度。
另一个用于使用硬件时间戳进行时间同步的协议是 PTP
与 NTP
不同,PTP
依赖于网络交换机和路由器。如果要实现同步的最佳准确度,请对具有 PTP
支持的交换机和路由器的网络使用 PTP
,对没有这样的交换机和路由器的网络首选 NTP
。
3.1. 验证硬件时间戳支持 复制链接链接已复制到粘贴板!
要验证接口是否支持使用 NTP
的硬件时间戳,请使用 ethtool -T
命令。如果 ethtool
列出了 SOF_TIMESTAMPING_TX_HARDWARE
和 SOF_TIMESTAMPING_TX_SOFTWARE
模式,以及 HWTSTAMP_FILTER_ ALL
过滤器模式,则可以使用硬件时间戳的 NTP
。
流程
- 显示设备的时间戳功能和关联的 PTP 硬件时钟:
ethtool -T enp1s0
# ethtool -T enp1s0
3.2. 启用硬件时间戳 复制链接链接已复制到粘贴板!
您可以在 /etc/chrony.conf
文件中使用 hwtimestamp
指令,对一个或多个接口启用硬件时间戳。该指令可指定单一接口,也可以指定通配符字符来启用所有支持接口的硬件时间戳。
流程
编辑
/etc/chrony.conf
文件,并进行以下更改:为支持硬件时间戳的接口添加
hwtimestamp
设置。例如:hwtimestamp enp1s0 hwtimestamp eno*
hwtimestamp enp1s0 hwtimestamp eno*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有其他应用程(如
ptp4l
)使用硬件时间戳,您可以使用 * 通配符。通过在服务器设置中附加
minpoll
和maxpoll
选项来配置简短的客户端轮询间隔,例如:server ntp.example.comlocal minpoll 0 maxpoll 0
server ntp.example.comlocal minpoll 0 maxpoll 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于硬件时间戳,您必须配置一个比默认范围(641024 秒)短的轮询间隔,以尽量减少系统时钟的偏移。
通过在服务器设置中附加
xleave
选项来启用 NTP 交错模式:server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个设置,chrony 仅在发送数据包后得到硬件传输时间戳。此行为防止服务器将时间戳保存它响应的数据包中。使用
xleave
选项,chrony 可以接收传输后生成的传输时间戳。可选:为服务器上客户端访问的日志增加分配的最大内存大小,例如:
clientloglimit 100000000
clientloglimit 100000000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认服务器配置允许数以千计的客户端同时使用交错模式。通过增加
clientloglimit
设置的值,您可以为大量客户端配置服务器。
重启 chronyd 服务:
systemctl restart chronyd
# systemctl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
可选:在
/var/log/messages
日志文件中验证是否启用了硬件时间戳:chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 chronyd 被配置为 NTP 客户端或 peer,显示传输和接收时间戳模式和交集模式:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 报告 NTP 测量的稳定性:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Std Dev
列中报告了这个稳定性。启用硬件时间戳后,在正常负载下,NTP 测量的稳定性应该为十或几百纳秒。
3.3. 配置 PTP-NTP 桥接 复制链接链接已复制到粘贴板!
如果网络中有一个高度准确的精确时间协议(PTP
)主时间服务器,但没有 PTP
支持的交换机或路由器,则计算机可能被专用于 PTP
客户端和 stratum-1 NTP
服务器。此类计算机需要有两个或多个网络接口,并且接近主时间服务器或与它直接连接。这样可保证高度准确的网络同步。
流程
-
配置
linuxptp
软件包中的 ptp4l 和 phc2sys 程序,以使用一个接口,使用PTP
来同步系统时钟。 配置
chronyd
,以使用其他接口来提供系统时间:bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 chronyd 服务:
systemctl restart chronyd
# systemctl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 chrony 中的网络时间安全概述(NTS) 复制链接链接已复制到粘贴板!
Network Time Security(NTS)是用于网络时间协议(NTP)的身份验证机制,旨在扩展大量客户端。它将验证从服务器计算机接收的数据包在移到客户端机器时是否被取消处理。Network Time Security(NTS)包含 Key Establishment(NTS-KE)协议,该协议会自动创建在服务器及其客户端中使用的加密密钥。
NTS 与 FIPS 和 OSPP 配置文件不兼容。当您启用 FIPS 和 OSPP 配置文件时,使用 NTS 配置的 chronyd
可能中止,并显示一条致命消息。您可以通过在 /etc/sysconfig/chronyd
文件中添加 GNUTLS_FORCE_FIPS_MODE=0
设置添来对 chronyd
服务禁用 OSPP 配置文件和 FIPS 模式。
4.1. 在客户端上启用网络时间安全(NTS) 复制链接链接已复制到粘贴板!
默认情况下不启用 Network Time Security(NTS)。您可以在 /etc/chrony.conf
文件中启用 NTS。
先决条件
- 时间服务器支持 NTS。
流程
编辑 /etc/crony.conf
文件并进行以下更改:
除了
iburst
选项外,使用nts
选项指定服务器。For example: server time.example.com iburst nts server nts.netnod.se iburst nts server ptbtime1.ptb.de iburst nts
For example: server time.example.com iburst nts server nts.netnod.se iburst nts server ptbtime1.ptb.de iburst nts
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加以下设置以避免在系统引导过程中重复 Network Time Security-Key Establishment (NTS-KE)会话:
ntsdumpdir /var/lib/chrony
ntsdumpdir /var/lib/chrony
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果存在,注释掉或删除以下设置,以禁用与
DHCP
提供的网络时间协议(NTP)服务器的同步:sourcedir /run/chrony-dhcp
sourcedir /run/chrony-dhcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
chronyd
服务:systemctl restart chronyd
systemctl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证
NTS
密钥是否已成功建立:Copy to Clipboard Copied! Toggle word wrap Toggle overflow KeyID
、Type
和KLen
应带有非零值。如果该值为零,请检查系统日志中来自chronyd
的错误消息。验证客户端是否正在进行 NTP 测量:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reach
列中应具有非零值;理想情况是 377。如果值很少为 377 或永远不是 377,这表示 NTP 请求或响应在网络中丢失。
4.2. 在时间服务器上启用网络时间安全(NTS) 复制链接链接已复制到粘贴板!
如果您运行自己的网络时间协议(NTP)服务器,您可以启用服务器网络时间协议(NTS)支持来促进其客户端安全地同步。
如果 NTP 服务器是其它服务器的客户端,即它不是 Stratum 1 服务器,它应使用 NTS 或对称密钥进行同步。
先决条件
-
以
PEM
格式的服务器私钥 -
带有
PEM
格式的所需中间证书的服务器证书
流程
编辑
/etc/chrony.conf
文件并进行以下更改:ntsserverkey /etc/pki/tls/private/<ntp-server.example.net>.key ntsservercert /etc/pki/tls/certs/<ntp-server.example.net>.crt
ntsserverkey /etc/pki/tls/private/<ntp-server.example.net>.key ntsservercert /etc/pki/tls/certs/<ntp-server.example.net>.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对允许 chrony 用户读取文件的私钥和证书文件设置权限,例如
chown root:chrony /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt chmod 644 /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt
# chown root:chrony /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt # chmod 644 /etc/pki/tls/private/<ntp-server.example.net>.key /etc/pki/tls/certs/<ntp-server.example.net>.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
确保
ntsdumpdir /var/lib/chrony
设置存在。 在 firewalld 中开放所需的端口:
firewall-cmd --permanent --add-port={323/udp,4460/tcp} firewall-cmd --reload
# firewall-cmd --permanent --add-port={323/udp,4460/tcp} # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
chronyd
服务:systemctl restart chronyd
# systemctl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
从客户端机器执行测试:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow System clock wrong
消息指示 NTP 服务器接受 NTS-KE 连接并使用 NTS 保护的 NTP 消息进行响应。验证 NTS-KE 连接并验证服务器中观察的 NTP 数据包:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果
NTS-KE connections accepted
和Authenticated NTP packets
项带有一个非零值,这意味着至少有一个客户端能够连接到 NTS-KE 端口并发送经过身份验证的 NTP 请求。