这是一个典型问题关于冗余 DHCP 服务器。
同一 LAN 上可以有多个 DHCP 服务器吗?这样做有什么后果?
- 如果有多个 DHCP 服务器可用,会发生什么情况?我的客户端如何知道要使用哪一个?
- 如何让 DHCP 服务器为多个子网\网段提供地址?
- 如何配置多个 DHCP 服务器来为相同子网。
答案1
在此答案中,我假设您对 DHCP 的功能以及如何配置您选择的 DHCP 服务器有基本的了解,但在我们讨论同一网络上的多个 DHCP 服务器之前,让我们首先快速重新认识一下客户端如何在最基本的层面上从 DHCP 接收 IP 地址。
简单网络上的 DHCP 采用 DORA 原理工作。
发现 - 客户端在其连接到的本地网络段上广播消息,以发现可用的 DHCP 服务器。
提供 - 适当配置的 DHCP 服务器接收来自客户端的请求,并从可用地址池中为其提供一个地址。
请求 - 客户端回复要约,请求要约中收到的地址。
确认 - 服务器确认请求,将该地址标记为在其地址池中使用,并通知客户端地址租约的有效期以及任何其他所需的信息。
网络段上的任何设备都可以作为 DHCP 服务器;它不必是路由器、域控制器或网络上的任何其他“特殊”设备。
当网络上的设备首次请求 IP 地址或租约到期时(或者您强迫它们检查租约是否仍然有效),它们将简单地广播 DHCP 服务器请求,并接受来自第一个回复的 DHCP 服务器。当我们查看下面多个 DHCP 服务器的选项时,记住这一点很重要。
多个 DHCP 服务器 PT 1:跨越多个子网。
如果您有多个 VLAN 或物理网段被分成不同的子网,并且您想要为所有子网中的设备提供 DHCP 服务,那么有两种方法可以实现。
如果将它们分开的路由器/第 3 层交换机可以充当 BOOTP/DHCP 中继代理,那么您可以继续将所有 DHCP 服务器保留在网络的一个或两个中心部分,并将 DHCP 服务器配置为支持多个地址范围。为了支持这一点,您的路由器或第 3 层交换机必须支持 BOOTP 中继代理规范,该规范涵盖在RFC 1542 第 4 节。
如果您的路由器不支持 RFC 1542 BOOTP 中继代理,或者您的某些网络段在地理上分散在慢速链路上,那么您将需要在每个子网中放置一个或多个 DHCP 服务器。此“本地”DHCP 服务器将仅满足其本地段的要求,并且它与其他 DHCP 服务器之间没有交互。如果这是您想要的,那么您可以简单地将每个 DHCP 服务器配置为独立服务器,并为其自己的子网配置地址池的详细信息,而不必担心网络其他部分的任何其他 DHCP 服务器。这是同一网络上拥有多个 DHCP 服务器的最基本示例。
多个 DHCP 服务器 PT 2:为同一网段提供服务的 DHCP 服务器。
当大多数人询问“同一网络上的多个 DHCP 服务器”时,他们通常要求的是:他们希望多个 DHCP 服务器向客户端发出相同范围的网络地址,以便在多个服务器之间分担负载或在某个服务器离线时提供冗余。
这是完全可能的,尽管它需要一些思考和计划。
从“网络流量”的角度来看,本答案开头概述的 DORA 过程解释了如何在一个网络段上存在多个 DHCP 服务器;客户端只需广播一个发现请求,第一个以 Offer 做出响应的 DHCP 服务器就是“赢家”。
从服务器的角度来看,每台服务器都有一个可以分发给客户端的地址池,称为其地址范围。为同一子网提供服务的 DHCP 服务器不应具有单个“共享”范围,而应具有“拆分”范围。
换句话说,如果您要向客户端发布 DHCP 地址范围为 192.168.1.100 至 192.168.1.200,则应将两台服务器配置为提供该范围的不同部分,因此第一台服务器可能使用该范围的部分,即从 192.168.1.100 到 192.168.1.150,而第二台服务器将发布 192.168.1.151 到 192.168.1.200。
微软最近实施的 DHCP 有一个向导,可让您轻松完成此类范围划分,详情请见Technet 文章即使您不使用 Microsoft DHCP 实现,也可能值得一看,因为它很好地说明了这里讨论的原则,并且这个答案已经足够长了。
拆分范围——最佳实践
您可能听到过的最佳实践是分割 DHCP 范围的 80/20 规则,这意味着一台服务器将提供该范围内 80% 的地址,而另一台 DHCP 服务器(实际上处于“备用”状态)将提供 20% 的地址。
将地址按照 80/20 进行划分的想法是因为 80% 的可用地址应该足以满足子网上所需的所有地址,并且 DHCP 租约通常会持续几天;因此,如果您的主 DHCP 服务器停机几个小时,那么在停机期间,该子网上不太可能有超过 20% 的机器需要更新其地址,从而使 20% 的地址池足够了。
这仍然是合理的建议,但它假设了两件事:
- 您可以足够快地解决“主” DHCP 服务器的任何问题,以避免耗尽备用 DHCP 服务器上的少量地址池。
- 您对负载平衡不感兴趣。
现在(正如你从我的例子中看到的)我倾向于 50/50 分割,我认为这是对上述观点更现实的回答。
在 DHCP 服务器上创建范围时要考虑的另一件事是将完整范围配置到每台服务器中,并排除其他 DHCP 服务器给出的范围。这样做的好处是“自行记录”每台 DHCP 服务器上完整子网的 DHCP 信息,这将使其他试图了解正在发生的事情的人更加清楚,而且如果您的一台 DHCP 服务器离线一段时间,您可以暂时重新配置另一台服务器上的排除范围,以允许它弥补不足。
结合这些想法
最后,值得记住的是,您可以结合上面讨论的原则 - 您可以将所有的 DHCP 服务器放入一个或多个“中央服务器”VLAN 中,并在所有路由器上使用 BOOTP 中继代理将所有 DHCP 请求从一个非常大的分段网络发送到集中式 DHCP 服务(这就是我所做的,见下文)。或者,您可以将 DHCP 服务器分布在整个网络中,在本地子网中设置一个“主”DHCP 服务器,在“附近”网络段上设置一个“备用”DHCP 服务器,提供少量地址作为备份 - 您甚至可以在自己的网络段中配置两个 DHCP 服务器,以相互提供 80/20 范围的地址。最明智的选择将取决于您的物理和逻辑网络如何相互映射。
答案2
几年前,我在一个中小型(500 个用户)网络中采用了这种方法,效果显著。DHCP 不再是单点故障。通过永久关联 MAC 地址和 IP 地址,我们确保两个 DHCP 服务器对每个 DHCP 请求做出相同的响应。了解每个网络资产的 IP 地址也简化了网络管理,DNS 可以使用同一个数据库运行。该系统使用 Internet Software Corporation 的 BIND 和 DNS,相关脚本可在以下网址下载:https://web.archive.org/web/20121031051901/http://www.pearbright.com/index.php/download/25-dns-dhcp-download。
另一种方法是使用真正的 ISC DHCPD 故障转移:https://kb.isc.org/article/AA-00502/0/A-Basic-Guide-to-Configuring-DHCP-Failover.html