我在网络中有一个服务器,它从 接收所有网络信息DHCP
。问题是ntp-server
发送的 未设置为 UTC。我想使用ntp
中找到的配置/etc/ntp.conf
,但DHCP
信息优先。我如何强制ntpd
使用 中的配置/etc/ntp.conf
而不是 发送的配置DHCP
?如何Debian
做到这一点?
答案1
我建议您编辑/创建 /etc/dhclient.conf 并取消注释“request”行,内容如下:
request subnet-mask, broadcast-address, routers, domain-name, domain-name-servers, host-name;
尤其是,如果存在“ntp-servers”,请将其删除。在某些发行版(例如 Fedora)下,默认情况下会发送它,因此您必须明确输入此行,以便覆盖默认值。
检查man dhclient.conf
扩展信息。
答案2
虽然没有直接回答问题,但可能会有用。
DHCP 行为
在 Debian 上(至少),DHCP 客户端会覆盖现有的 ntp 服务配置。
它由脚本控制/etc/dhcp/dhclient-exit-hooks.d/ntp
:
[contents from: /etc/dhcp/dhclient-exit-hooks.d/ntp]
NTP_CONF=/etc/ntp.conf
NTP_DHCP_CONF=/var/lib/ntp/ntp.conf.dhcp
...
[hundreds of lines of scripts]
DHCP 客户端从 DHCP 服务器接收 ntp 服务器,它从 NTP_CONF 路径获取当前 ntp 服务配置并将其更改为包含通过 dhcp 接收的 ntp 服务器,它在 NTP_DHCP_CONF 路径中生成一个新的 ntp 配置文件,最后它强制 ntp 服务使用这个新的配置文件。
这会导致始终使用通过 dhcp 公布的 ntp 服务器。绕过系统配置。
如果不知道的话,很难调试,因为“/etc/ntp.conf”中的服务配置保持不变,并且目测是正确的。然而,它实际上被忽略并被秘密覆盖。
您可以使用“ntpq -pn”来调试守护进程实际正在使用的 ntp 服务器。
混合 DHCP ntp 选项和系统特定配置
如果你的网络中有一个 DHCP 通告的 ntp 服务器,而你想忽略它:
您需要重新配置 dhcp 客户端以/etc/dhclient.conf
跳过ntp-servers
dhcp 选项。请参阅@Oliver 的回答。
然后您可以在/etc/ntp.conf
如果曾经有 DHCP 通告的 ntp 服务器,但现在不再有:
系统 ntp 配置可能仍会被 dhcp 客户端覆盖,从而强制使用很久以前公布的过时 ntp 服务器。这种 dhcp 覆盖可能会持续数天,跨越ntp service restart
和reboot
。
为了结束这种情况,您需要删除/var/lib/ntp/ntp.conf.dhcp
并重新启动所有服务器上的 ntp 服务。
最后的话
这些都是未记录的、意料之外的、难以调试的行为。这让我今天很头疼,所以我在这里记录了这件事。
答案3
您也可以直接删除此文件:/etc/dhcp/dhclient-exit-hooks.d/ntp
,而不必编辑 DHCP 请求。此文件会创建ntp.conf.dhcp
。
如果ntp.conf.dhcp
在上次启动时创建,请务必将其删除。