题 我可以在一个网络上拥有多个DHCP服务器吗?


这是一个 典型问题 关于冗余DHCP服务器。

是否可以在同一个LAN上安装多个DHCP服务器?这样做有什么意义?

  1. 如果有多个DHCP服务器可用,会发生什么?我的客户如何知道使用哪一个?
  2. 如何让DHCP服务器向多个子网\网段提供地址?
  3. 如何配置多个DHCP服务器以提供地址 相同 子网。

73
2018-03-11 11:01




这个问题背后的想法是为所有“如何拥有多个DHCP服务器”问题提供一个明确的答案,这些问题会让我们更多的普通用户发疯。这有望成为我们的规范答案之一(meta.serverfault.com/questions/1986/...) - Rob Moir
RTFM? tools.ietf.org/html/draft-ietf-dhc-failover-12#section-5.3 (和rfc 3074)已经定义了这种行为,linux dhcpd实现了它 manpages.ubuntu.com/manpages/precise/en/man5/... - Dani_l
@Dani_l也许您应该按照问题中的“规范问题”链接进行操作,也可以在告诉我需要RTFM之前查看我的问题答案的作者。 - Rob Moir
我不是在告诉你阅读手册。我只是指出有一本手册。这个问题是规范的,但是,如果适用的话,我认为它应该包括对“官方”程序的引用,如果存在的话。在这种情况下,IETF / RFC存在,并且它是官方的。 - Dani_l


答案:


我在这个答案中假设了解DHCP的作用以及如何配置您选择的DHCP服务器的基本知识,但在我们讨论同一网络上的多个DHCP服务器之前,让我们首先快速重新定义客户端接收IP地址的方式。从最基本的DHCP。

简单网络上的DHCP使用DORA原理工作。

  • 发现 - 客户端在其连接的本地网段上广播消息,以发现可用的DHCP服务器。

  • 优惠 - 适当配置的DHCP服务器接收来自客户端的请求,并从其可用地址池中为其提供地址。

  • 请求 - 客户回复要约,请求要约中收到的地址。

  • 确认 - 服务器确认请求,将地址标记为其地址池中使用的地址,并通知客户端地址租约有效的时间以及所需的任何其他信息。

网段上的任何设备都可以是DHCP服务器;它不必是路由器或域控制器或网络上的任何其他“特殊”设备。

当您网络上的设备首先请求IP地址或达到其租约结束时(或者您强制他们检查其租约是否仍然有效),他们只会广播DHCP服务器请求,并接受来自 第一个要回复的DHCP服务器。当我们查看下面的多个DHCP服务器的选项时,这一点很重要。

多个DHCP服务器PT 1:跨越多个子网。

如果您有多个VLAN或物理网段分为不同的子网,并且您希望为所有这些子网中的设备提供DHCP服务,则有两种方法可以执行此操作。

  1. 如果分离它们的路由器/第3层交换机可以充当BOOTP / DHCP中继代理,那么您可以继续将所有DHCP服务器保留在网络的一个或两个中心部分中,并将DHCP服务器配置为支持多种地址范围。为了支持这一点,您的路由器或第3层交换机必须支持所涵盖的BOOTP中继代理规范 RFC 1542的第4部分

  2. 如果您的路由器不支持RFC 1542 BOOTP中继代理,或者您的某些网段在地理上分散在慢速链路上,则需要在每个子网中放置一个或多个DHCP服务器。这个“本地”DHCP服务器只服务于自己本地网段的要求,并且它与其他DHCP服务器之间没有交互。如果这是您想要的,那么您可以简单地将每个DHCP服务器配置为独立服务器,其中包含其自己子网的地址池的详细信息,而不必担心网络其他部分上的任何其他DHCP服务器。 这是在同一网络上拥有多个DHCP服务器的最基本示例。

多个DHCP服务器PT 2:服务于同一网段的DHCP服务器。

当大多数人询问“同一网络上的多个DHCP服务器”时,他们通常要求的是这个;他们希望多个DHCP服务器向客户端发出相同范围的网络地址,以便在多个服务器之间分配负载,或者在一个服务器脱机时提供冗余。

这是完全可能的,虽然它需要一些思考和计划。

从“网络流量”的角度来看,本答案开头概述的DORA流程解释了如何在网段上存在多个DHCP服务器;客户端只是广播发现请求,第一个响应优惠的DHCP服务器就是“赢家”。

从服务器的角度来看,每个服务器都有一个可以向客户端发出的地址池,已知其地址范围。服务于同一子网的DHCP服务器不应具有单个“共享”范围,而应具有“拆分”范围。

换句话说,如果要从192.168.1.100到192.168.1.200向客户端发出一系列DHCP地址,则应将两个服务器配置为服务该范围的不同部分,因此第一个服务器可能使用该范围的部分192.168.1.100到192.168.1.150,然后第二个服务器将192.168.1.151发布到192.168.1.200。

Split DHCP scope, showing exclusions

微软最新的DHCP实现有一个向导,可以很容易地分割你的范围,如下所述 Technet文章 即使您没有使用Microsoft DHCP实现,也可能值得一看,因为它很好地说明了这里所讨论的原则,这个答案已经足够长了。

拆分范围 - 最佳实践

你会听到最好的做法之一就是分割DHCP作用域的80/20规则,这意味着一个服务器将服务于该作用域中80%的地址,而另一个服务器将有效地“保留”将提供20%的地址。

分割地址80/20背后的想法是因为80%的可用地址应该足以满足子网上所需的所有地址,并且DHCP租约通常会发布几天;因此,如果您的主DHCP服务器停机几个小时,那么该子网中超过20%的机器不太可能需要在停机期间更新其地址,从而使20%的地址池足够。

这仍然是合理的建议,但它假设有两件事:

  1. 您可以足够快地解决“主”DHCP服务器的任何问题,以避免耗尽备用DHCP服务器上的小地址池。
  2. 你对负载平衡不感兴趣。

这些天(从我的例子中可以看出)我倾向于更喜欢50/50分裂,我认为这是对上述观点更为现实的答案。

在DHCP服务器上创建作用域时要考虑的另一件事是将整个作用域配置到每个服务器中,并排除其他DHCP服务器给出的作用域。这样做的好处是可以“自我记录”每个DHCP服务器上完整子网的DHCP信息,这将提高其他任何试图了解正在发生的事情的清晰度,并且如果您的某个DHCP服务器处于脱机状态,有一段时间,您可以暂时重新配置另一台服务器上的排除范围,以便让它获得松弛。

结合这些想法

最后,值得记住的是,您可以结合上面讨论的原则 - 您可以将所有DHCP服务器放入一个或多个“中央服务器”VLAN,并在所有路由器上使用BOOTP中继代理从非常大的分段发送所有DHCP请求网络到集中式DHCP服务(这就是我所做的,见下文)。或者您可以在整个网络中分布DHCP服务器,在其本地子网中使用“主”DHCP服务器,在“附近”网段上使用“保留”DHCP服务器,提供少量地址作为备份 - 您甚至可以拥有两个DHCP服务器在其自己的网段中配置为彼此提供80/20的地址范围。最明智的选择取决于您的物理和逻辑网络如何相互映射。

DHCP servers serving split scopes to multiple subnets


88
2018-03-11 11:15



在分割范围的情况下:请记住,应在两半上设置DHCP保留。如果您需要经常更新,保持同步可能会非常麻烦。 - Tonny
您是否可以详细说明只要主DHCP服务器正在运行就确保备用DHCP服务器不被命中的技术?从我可以阅读的内容来看,如果从任一服务器获得响应的概率相等,则只要租约总数超过保留池大小的两倍,保留服务器就会在统计上耗尽地址。当主DHCP服务器关闭时,这可能会使备用服务器对新客户端毫无价值......对吗? - Niels B.
@NielsB。如果您正在执行类似80/20拆分的操作,那么您可以设置备用服务器响应的延迟( blogs.technet.com/b/teamdhcp/archive/2009/01/22/... )。我不打扰这个,因为我自己使用50/50分割,但它会起作用。 - Rob Moir


几年前我采用这种方法用于中小型(500用户)网络,具有相当大的优势。 DHCP不再是单点故障。通过永久关联MAC和IP地址,我们确保两个DHCP服务器对每个DHCP请求给出相同的响应。了解每个网络资产的IP地址也简化了网络管理,DNS可以运行在同一个数据库中。该系统使用Internet Software Corporation BIND和DNS,并且可以从中下载相关的脚本 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


12
2018-06-05 09:50



OP特别要求对这个问题给出解释性答案。您可能想修改您的答案以扩展它。 - Brent Pabst
fwiw,虽然这个答案很短,但我永远不会在规范的问答集中详细说明,我认为它非常好,因为它提到了一种稍微不同的DHCP冗余方法。 - Rob Moir
@DJ Pon3我同意:我运行类似你的大型多站点DHCP设置(尽管VLAN较少),我使用与Peter Talbot相同的方法来处理3/4的VLAN。 - Tonny
现在链接坏了:( - Sergey Vlasov