我有一个主网络,其中有三台主服务器(分别称为 A、B 和 C)。它们都是路由器、我的 4 台(服务)NTP 服务器中的 3 台以及我的 5 台 DNS 服务器中的 2 台。DNS 服务器(bind9)都配置为sortlist在每个子网上首先返回子网上的地址,然后返回主网络上的地址,然后返回其他地址;这样就可以正常工作了。

问题出现在外围网络主机上的 NTP 服务器中。出于某种原因,连接到 B 网络的服务器将尝试在其路由网络地址上与 C 通信,而不是在其主网络地址上(反之亦然)。更奇怪的是,它们不会对 A 执行相同的操作。它仅在 IPv6 上执行此操作,如果我添加-4server行中,它会按预期工作。(它似乎更喜欢 IPv6 而不是 IPv4,我认为这是合理的。)

所以问题是,是否有一些魔法可以让 ntpd 遵守 IPv6 上的 DNS 服务器的顺序?

# ntpd -version
ntpd 4.2.8p15@1.3728-o Wed Sep 23 11:46:38 UTC 2020 (1)

2

  • 1
    您能否澄清一下“在其路由网络地址上”是指源地址选择还是目标地址?如果是前者,则可能存在一些 IPv6 源选择问题,可能需要将 ntpd 绑定到特定接口(尽管仅对源地址执行此操作并不是很好)。


    – 

  • @PaulGear A、B 和 C 是路由器。每个路由器在主网络和其他网络上都有一个地址。我所说的“路由网络地址”是指不在主网络上的地址。在我发现的第一个案例中,xxxx:xxxx:xxxx:3:yyyy:yyyy:yyyy:yyyy,而不是与主网络上的 xxxx:xxxx:xxxx:1::1 通信,而是使用 xxxx:xxxx:xxxx:2::1,尽管前者在 DNS 排序顺序中排在第一位。


    – 


最佳答案
1

这不是 NTP 的设计工作方式。如果您给它一个包含四个 NTP 服务器的列表,它就可以并且应该联系所有服务器,这实际上是它获得完全准确时间的唯一方法。(否则它只能获得一个对等方的时间视图,而这绝不是完整的画面。)

在 NTP 最佳实践 RFC 中了解有关此内容的更多信息:

您应该向您的 NTP 服务器提供一份完全可联系的对等服务器列表。

11

  • 我给它 4server行。每个名称有该主机的 4 或 6 个 IP 地址。列表是有序的。我如何让它转到更近的地址?它不应该多次联系任何给定的主机。


    – 

  • 嗨@DavidG。,使用您的实际配置和 DNS 条目会容易得多,但本质上如果您希望它仅联系您首选地址上的主机,您应该给它仅包含这些地址的 DNS 名称。


    – 


  • 例如,如果您给 ntpd 一行类似这样的内容server pool.my.domain.name,并且 DNS 查找pool.my.domain.name包含地址192.168.0.1192.168.1.1192.168.2.1192.168.3.1,它无法知道它们都是同一台主机,并且会联系每个地址。​​这就是它设计的工作方式,如果它们是路由器,那么它联系哪个实际上应该没有任何区别。


    – 

  • 我考虑过这两种方法。我不想在公共论坛上提供我的具体地址。我考虑过在 DNS 或 NTP 配置中仅列出首选地址,但我还想在所有主机上使用统一的配置。


    – 


  • 如果您有 4 个 NTP 主机,每个主机都有 4 个地址,那么最好为每个主机创建一个 DNS 条目,其中包含该主机的所有地址,然后让 ntpd 使用指令确定哪个地址提供最佳响应pool。它将从联系所有地址开始,但最终将修剪多余的主机,直到达到最佳配置。


    –