我们有一个路由器,它还充当 DHCP 服务器。但是,它不提供太多配置,因此它始终提供 IPv6 和 IPv4 DNS 服务器,这导致一些设备无法看到 LAN 上的一些服务器,这些服务器需要 DNS 覆盖才能返回本地地址,而不是全球可见的地址。
我们正在考虑的一个可能的解决方法是在这些服务器上设置一个 DHCP 服务器。如果服务器已启动,那么它将发送正确设置了要使用的 DNS 服务器的 DHCP 回复。我们只能运行这台 DHCP 服务器,但是如果这台机器因某种原因停机,那么似乎一切都会停机,因为没有其他 DHCP 服务器可以弥补不足。但如果我们将 DHCP 服务器作为备份运行(因为它很少甚至从未停机),那么我们需要以某种方式降低它的优先级,以便它不会分发地址,除非其他服务器没有回复或停机。
我们应该怎么做?
答案1
不幸的是,DHCP 协议没有提供这样做的方法。
DHCP RFC 规定,如果客户端收到多个 DHCP OFFER(例如来自多个服务器),则客户端可以决定接受哪个 OFFER。但它将该选择算法作为 DHCP 客户端实施者的实施细节。
我知道 Apple 的 DHCP 客户端(在 macOS、iOS、watchOS、tvOS、HomePod 等中)具有启发式方法来选择包含更多 DHCP 选项的 OFFER,但有一个令人惊讶的可靠假设,即“真正的”企业 DHCP 服务器更有可能被配置为提供大量额外的 DHCP 选项(比如要使用的 LDAP 和 WINS 服务器列表),而某些消费者家庭网络设备中随机嵌入的 DHCP 服务器的 DHCP 选项列表要短得多(比如意外插入企业 LAN 的 Wi-Fi 家庭网关路由器)。
我无法代表其他 DHCP 客户端实现(例如 Windows、Android 或其他 Linux 等)中的 DHCP OFFER 选择算法。您的网络上的许多 DHCP 客户端实现可能只会选择它们看到的第一个 OFFER,或者在监听 X 毫秒后看到的最后一个 OFFER。真的没有办法知道。您可以仔细阅读流行的开源 DHCP 客户端实现的源代码,但我怀疑是否有办法找出 Windows DHCP 客户端的各个版本的作用,除非 Microsoft 恰好在某处公开记录了它。