有很多教程解释如何设置dhcpd
服务器,以及向 dhcp 客户端提供 ntp 建议,我一直认为ntp
配置是自动执行的。最近我开始看到本地网络中的时钟漂移,所以我认为这是一个错误的假设。因此,我开始研究如何最大限度地减少 ntp 客户端配置,前提是已ntp-server
通过 .net 进行了设置建议dhcpd
。
除了这个 Ubuntu 特定帮助教程之外,我找不到太多东西https://help.ubuntu.com/community/UbuntuTime。即使在这里(请参阅“故障排除 -> 使用哪个配置文件?”下的段落),信息也很少,但它表示如果/etc/ntp.conf.dhcp
找到文件,则会使用该文件。首先,作者在这里指的实际位置是/var/lib/ntp/ntp.conf.dhcp
在 中观察到的/etc/init.d/ntp
,但无论如何,该文件的存在并不能保证 ntp 会向 请求服务器dhclient
。因此,我必须为本地 ntp 服务器显式添加该server
子句。ntp.conf.dhcp
但既然如此,为什么我还要在dhcpd
服务器上设置 ntp 设置呢?
这似乎违背直觉,即设置一次 ntp 设置(即在服务器上)并让dhcpd
服务器将信息委托给客户端。我怎样才能最小化(如果不是完全避免的话)ntp.conf 的客户端配置?或者,我如何ntp
通过dhclient
.
是否有适合所有 Linux 发行版的 cli 解决方案?
我假设每个客户端都应该有 的可执行文件ntpd
,但我不知道如何从那里继续。
谢谢
编辑:手动运行时ubuntu客户端详细输出dhclient
:
sudo dhclient -1 -d -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/20:cf:30:0e:6c:12
Sending on LPF/eth0/20:cf:30:0e:6c:12
Sending on Socket/fallback
DHCPREQUEST of 192.168.112.150 on eth0 to 255.255.255.255 port 67 (xid=0x2e844b8f)
DHCPACK of 192.168.112.150 from 192.168.112.112
reload: Unknown instance:
invoke-rc.d: initscript smbd, action "reload" failed.
RTNETLINK answers: File exists
* Stopping NTP server ntpd
...done.
* Starting NTP server ntpd
...done.
bound to 192.168.112.150 -- renewal in 41963 seconds.
ntpd 服务已重新启动,但运行ntpq -cpe -cas
后我仍然在 ntp 服务器列表中看不到我的本地 ntp 服务器。
当然我的dhcpd
服务器有option ntp-servers
subnet 192.168.112.0 netmask 255.255.255.0 {
max-lease-time 604800;
default-lease-time 86400;
authoritative;
ignore client-updates;
option ntp-servers 192.168.112.112; #self
... (many other options)
}
答案1
如果您使用的 dhcp 服务器配置为提供该ntp-servers
选项,则可以通过添加ntp-servers
到 中的默认请求行来配置 dhclient 来请求 ntp-servers dhclient.conf
,如 Ubuntu Linux 中的本示例末尾所示(从 19.04 开始,但至少自 12.04 起存在):
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
netbios-name-servers, netbios-scope, interface-mtu,
rfc3442-classless-static-routes, ntp-servers;
/etc/ntp.conf
来自 DHCP 的信息将用于创建/etc/ntp.conf.dhcp
.
必须告诉您的 ntpd 使用 /etc/ntp.conf.dhcp(如果存在)。在我使用的 Ubuntu 版本上,这是通过/etc/dhcp/dhclient-exit-hooks.d/ntp
. <-- 该文件告诉 NTPd 如果存在则使用它,如果不存在则/etc/ntp.conf.dhcp
仅使用。/etc/ntp.conf
答案2
这实际上取决于您正在使用的网络设置/dhcp/NTP 组件以及您的发行版集成工作的组合。
截至 2020 年,至少一些发行版考虑了克罗尼作为 NTPD 的更好的1替代方案,因此默认情况下安装 Chrony,然后仅为 Chrony 维护 DHCP 客户端与 DHCP 客户端的集成。
对于网络设置,发行版中流行的默认设置是网络管理器(而 NetworkManager 使用发行版默认配置自动调用 DHCP 客户端)。因此,如果您使用发行版默认值(即 NetworkManager 和 Chrony),则期望选择 DHCP 提供的(本地)NTP 服务器。
NetworkManager 和 Chrony
使用时克罗尼您可以验证您的 DHCP 公布的 NTP 服务器是否已与 Chrony 通信,如下所示:
# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- fritz.box 3 6 0 1015 +627us[ -23us] +/- 47ms
^* ntp3.rrze.ipv6.uni-erlan> 1 7 377 47 +997us[+1007us] +/- 26ms
^+ tethys.hot-chilli.net 2 7 377 47 +522us[ +533us] +/- 51ms
^+ mail.jabber-germany.de 3 7 377 46 +352us[ +352us] +/- 61ms
^+ 2a.ncomputers.org 2 7 377 44 -2900us[-2900us] +/- 73ms
(这是来自使用默认配置的带有 NetworkManager 和 Chrony 的 Fedora 31 系统。)
该示例显示,我的家庭路由器 ( fritz.box
) 中包含的本地 NTP 服务器(通过 DHCP 宣布)实际上已为 Chrony 所知(通过某些 NetworkManager 粘合配置/代码),但目前 Chrony 并未使用它(参见M -> -
-ie第二列)因为最后 8 个回复无效(参见Reach -> 0
)。
S This column indicates the state of the source. · * indicates the source to which chronyd is currently synchronised. · + indicates acceptable sources which are combined with the selected source. · - indicates acceptable sources which are excluded by the combining algorithm.
[..] Reach 这显示了以八进制数打印的源的可达性寄存器。该寄存器有 8 位,并根据来自源的每个收到或丢失的数据包进行更新。值 377 表示从最近八次传输中收到了所有有效答复。
正如您所看到的,对于这样的发行版,一切都应该开箱即用。2您只需确保安装了 Chrony 和 NetworkManager(并且您的本地 NTP 服务器发送了有效的回复)。
网络和时间同步
网络化和时间同步是 systemd 的端口,启用后(而不是 NetworkdManager 和 Chrony),它们处理网络设置并作为 NTP 客户端。
如果 systemd 已经在使用(很可能是),那么它可以被视为服务器和小型嵌入式设备的 NetworkManager 和 Chrony 的更轻量级替代品。但是,某些发行版(例如 RHEL/CentOS 8)不打包这些组件。
当 Networkd 和 Timesyncd 都启用时,Networkd 默认使用 DHCP 提供的 NTP可供 Timesyncd 使用的服务器,它比其他服务器更喜欢它。
1另请参阅:
Chrony 应优先用于所有系统,除了由不支持 chrony 的工具管理或监视的系统,或具有无法与 chrony 一起使用的硬件参考时钟的系统。
(RedHat 在其RHEL 7 管理指南)
从安全角度来看(在 CII,我们是安全人员),Chrony 是这三个 NTP 实现之间明显的赢家。
(来自核心基础设施倡议委托的 2017 年安全审计,来自低水温网络)
当然,2模错误。例如 Fedora 中过去的错误:
- DHCP 提供的 NTP 服务器未使用或几乎不使用(不是错误,但包含一些故障排除提示)
- chrony 未获取 DHCP NTP 服务器地址(固定的)
答案3
chronyd
现在正在使用,是的,它仍然使用 NTP 协议。您可能会去检查几个来源:
https://docs.oracle.com/cd/E52668_01/E54669/html/section_zy2_rrf_pp.html
https://wiki.archlinux.org/index.php/Chrony
我推荐最后2个。