OpenNTPD
OpenNTPD (是 OpenBSD 项目的一部分) 是一个守护进程,可用于使用网络时间协议将系统时钟与互联网时间服务器同步,并且如果需要,它也可以充当时间服务器。它实现了简单网络时间协议版本 4,如 RFC:5905 中所述,以及网络时间协议版本 3,如 RFC:1305 中所述。
安装
安装 openntpd 软件包。如果您只想同步本地计算机的时间,则默认配置实际上是可用的。
配置
要配置 OpenNTPD,您需要编辑 /etc/ntpd.conf
。 有关所有可用选项,请参阅 ntpd.conf(5)。
$ ntpd -n
客户端
要同步到单个特定服务器,请编辑 server
指令。
/etc/ntpd.conf
server time.cloudflare.com
servers
指令的工作方式与 server
指令相同。但是,如果 DNS 名称解析为多个 IP 地址,则所有这些地址都将同步到。默认值 2.arch.pool.ntp.org
是可用的,在大多数情况下应该是可以接受的。您可以在 www.pool.ntp.org/zone/@ 找到您所在区域的服务器 URL。
/etc/ntpd.conf
servers 2.arch.pool.ntp.org
可以使用任意数量的 server
或 servers
指令。
服务器
如果您希望运行 OpenNTPD 的计算机也充当时间服务器,只需取消注释并编辑 “listen” 指令。
例如
/etc/ntpd.conf
listen on *
将监听所有接口,而
/etc/ntpd.conf
listen on 127.0.0.1 listen on ::1
将仅监听环回接口。
您的时间服务器只有在将自身同步到高分辨率后才会开始提供时间。这可能需要数小时或数天,具体取决于您系统的准确性。
用法
在启动时启动 OpenNTPD
启用 openntpd.service
。
使 openntpd 依赖于网络访问
如果您有间歇性网络访问(您在笔记本电脑上漫游,您使用拨号上网等),则在启动时将 openntpd
作为系统守护进程运行是没有意义的。以下是一些您可以根据网络连接的存在来控制 openntpd
的方法。
使用 NetworkManager dispatcher
可以通过使用 NetworkManager 的 dispatcher 脚本来启动/停止 OpenNTPD 以及网络连接。
安装 networkmanager-dispatcher-openntpdAUR。
使用 dhclient 钩子
另一种可能性是使用 dhclient 钩子来启动和停止 openntpd。当 dhclient 检测到状态更改时,它将运行以下脚本
/etc/dhclient-enter-hooks
/etc/dhclient-exit-hooks
请参阅 dhclient-script(8)。
使用 dhcpcd 钩子
/etc/dhcpcd.exit-hook
if $if_up; then systemctl start openntpd.service elif $if_down; then systemctl stop openntpd.service fi
请参阅 dhcpcd-run-hooks(8)。
故障排除
调整时间时出错
如果您发现您的时间设置不正确,并且在日志中看到
openntpd adjtime failed: Invalid argument
尝试
# ntpd -d
这也是您手动同步系统的方式。
constraint: failed to load constraint ca
如果在 /etc/ntpd.conf
中配置了 HTTPS 约束,则在具有 AppArmor 的系统上,OpenNTPD 将无法启动。 日志将显示 constraint: failed to load constraint ca
。
这是因为 AppArmor 的 usr.sbin.ntpd
配置文件没有对 LibreSSL 的 CA 证书文件 /etc/libressl/cert.pem
的读取权限。[1]
解决方案是使用本地覆盖授予访问权限
/etc/apparmor.d/local/usr.sbin.ntpd
... /etc/libressl/{,cert.pem} r,
编辑后,重新加载 AppArmor 配置文件
# apparmor_parser -r /etc/apparmor.d/usr.sbin.ntpd