我的网络中有两台服务器,它们偶尔会启动。我希望即使在其中一台服务器启动期间也能维持 DHCP 服务。
其中一台服务器目前有一个 DHCP 服务器,可提供静态 IP 地址。它只向具有允许的 MAC 地址的用户提供地址,并且每个用户都有一个固定 IP。没有动态 IP。
在此设置中,是否可以在同一网络中的不同服务器中运行两个 DHCP 服务器以实现冗余?我不是在寻找两台服务器的 IP 地址集不相交的解决方案;我正在寻找两台服务器提供的 IP 地址都是静态且相同的解决方案。
我最感兴趣的是一般概念:DHCP 作为一种协议能否支持两个 DHCP 服务器提供相同的静态 IP 地址?如果客户端收到两个具有相同租约 IP 地址的服务器的响应,他们会感到困惑吗?这就是为什么我没有指定我正在使用的 DHCP 服务器。我特别不要求提供主机/服务器配置说明。
我最初是在网络工程中提出这个问题的,但他们似乎习惯于使用一些未知的随机算法来关闭完全有效的与主机/服务器配置无关的网络工程相关问题,并说问题是关于主机/服务器配置的(但事实并非如此,而是与协议有关),问题是关于 OSI 第 4 层以上的协议(事实确实如此,但话又说回来,他们在那里有很多 DHCP 问题,并不是所有的问题都被关闭了)。
答案1
有几件事:
说这些保留的 IP 地址不是动态分配的,这是不准确的。它们是动态分配的。关键是它们是保留的 IP 地址,因此 DHCP 客户端始终动态分配相同的 IP 地址。这些不是静态分配的 IP 地址。它们是动态分配的保留 IP 地址。
没有什么可以阻止您在两个 DHCP 服务器上创建相同的预留。这不需要任何特殊的 DHCP 配置(至少在 Windows DHCP 服务器中不需要)。具有预留的 DHCP 客户端将从两个 DHCP 服务器之一获取其 IP 地址。哪个服务器都可以。在客户端续订阶段 (T1),客户端将尝试从将 IP 地址分配给客户端的 DHCP 服务器续订 IP 地址。如果客户端无法从将 IP 地址分配给客户端的 DHCP 服务器续订 IP 地址(因为 DHCP 服务器已关闭),则客户端将释放 IP 地址并尝试从任何 DHCP 服务器获取 IP 地址。然后,第二个 DHCP 服务器将为客户端提供服务,并且由于它对客户端有相同的预留,因此将为客户端分配与第一个 DHCP 服务器分配的相同的 IP 地址。此过程在重新绑定阶段 (T2) 期间将以相同的方式运行。
答案2
我自己做这个。我使用两个运行 FreeBSD 的虚拟机。每个虚拟机都运行 ISC 的 DHCP 服务器的 FreeBSD 端口(https://www.isc.org/downloads/dhcp/)。该软件可以拥有两台(不能更多)高可用性服务器。每台服务器都相互通信。如果两台服务器都在运行,它们将提供负载平衡。如果只有一台在运行,它会意识到这一点并立即接管所有服务。
我必须亲自在服务器之间保持某些配置同步。为此,我使用 rsync 命令,并小心地将一些配置(例如静态 IP 映射、DHCP 动态池等)放在一组文件中,同时将每个主机特定的任何内容放在我不进行 rsync 的不同文件中。
每当我需要进行更改时,我只需编辑一台服务器上的文件,重新启动 DHCP 服务器进程,观察日志,直到我确定它正常运行(5 - 120 秒),然后 rsync 文件。我在另一台服务器上的 root 上使用 SSH 密钥,以使 rsync 稍微容易一些,但这不是必需的。然后我通过 SSH 连接到另一台主机并重新启动其 DHCP 服务器进程,观察日志,等等。
由于使用清单编写文档,整个过程只需 3 到 5 分钟。
最后,也许最容易被忽视的是,我的网络核心交换机中有一个额外的 ip helper-address 命令。第一个命令指向第一个 DHCP 服务器的 IP 地址,第二个命令指向第二个 DHCP 服务器的 IP 地址。各个网络客户端将从一个 DHCP 服务器或另一个 DHCP 服务器获得答案,因为两个服务器相互联系并相互协调。
如果您有兴趣,我可以发布更多详细信息和示例。ISC 本身也有一些不错的文档。实际上,最大的“技巧”是在两个 ISC-DHCP 实例之间同步配置,并在拓扑中使用两个 DHCP 转发命令,例如 Cisco 的 iOS 产品中的“ip helper-address”。