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

Rob*_*oir 102 dhcp routing

这是一个关于冗余 DHCP 服务器的规范问题

是否可以在同一个 LAN 上拥有多个 DHCP 服务器?这样做有什么影响?

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

Rob*_*oir 113

在这个答案中,我假设您对 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 层交换机必须支持RFC 1542 的第 4 节中涵盖的 BOOTP 中继代理规范。

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

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

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

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

从“网络流量”的角度来看,本回答开头概述的 DORA 流程解释了如何在一个网段上存在多个 DHCP 服务器;客户端简单地广播一个发现请求,第一个响应报价的 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 范围,显示排除项

Microsoft 最近的 DHCP 实现有一个向导,可以像这样轻松地分割您的范围,在Technet 文章中进行了描述,即使您没有使用 Microsoft DHCP 实现,也可能值得一看,因为它说明了所讨论的原则这里很好,这个答案已经足够长了。

拆分范围——最佳实践

您会听到作为最佳实践提到的一件事是拆分 DHCP 范围的 80/20 规则,这意味着一台服务器将服务该范围内 80% 的地址,而另一台 DHCP 服务器则有效地“保留”将服务 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 服务器为多个子网提供拆分作用域

  • 您能否详细说明确保只要主 DHCP 服务器正在运行,备用 DHCP 服务器就不会受到攻击的技术?据我所知,如果从任一服务器获得响应的概率相等,一旦租用总数超过储备池大小的两倍,储备服务器就会在统计上耗尽地址。当主 DHCP 服务器关闭时,这可能会使保留服务器对新客户端毫无价值……对吗? (5认同)
  • @尼尔斯B。如果您正在执行 80/20 拆分之类的操作,那么您可以在保留服务器的响应中设置延迟(http://blogs.technet.com/b/teamdhcp/archive/2009/01/22/how- to-prevent-address-exhaustion-from-secondary-server-in-split-scope-deployment.aspx )。我不介意这个,因为我自己使用 50/50 分割,但它会起作用。 (5认同)
  • 在拆分范围的情况下:请记住,应在两半上设置 DHCP 预留。如果您需要频繁更新,保持它们同步可能会非常麻烦。 (3认同)

小智 14

几年前,我为中小型(500 个用户)网络采用了这种方法,并带来了可观的收益。DHCP 不再是单点故障。通过永久关联 MAC 和 IP 地址,我们确保两个 DHCP 服务器对每个 DHCP 请求都给出相同的响应。知道每个网络资产的 IP 地址也简化了网络管理,而且 DNS 可以运行在同一个数据库上。系统采用互联网软件公司BIND和DNS,相关脚本可在https://web.archive.org/web/20121031051901/http://www.pearbright.com/index.php/download/25-下载dns-dhcp-下载

另一种方法是使用真正的 ISC DHCPD 故障转移:https ://kb.isc.org/article/AA-00502/0/A-Basic-Guide-to-Configuring-DHCP-Failover.html

  • fwiw,虽然这个答案很短,而且我永远不会拒绝规范问答集中的更多细节,但我认为它非常好,因为它提到了一种稍微不同的 DHCP 冗余方法。 (3认同)
  • OP 特别要求对此问题提供解释性答案。您可能需要修改您的答案以对其进行扩展。 (2认同)