我们正在将 DHCP 和 DNS 服务从基于 Debian 的服务器迁移到 Windows Server 2008 R2 实现。Debian 服务器正在运行 isc-dhcpd-V3.1.1。所有工作站都配置为具有 .3 和 .40 之间的固定地址(这种选择的动机主要是管理/政治,就像这里)。DHCP 租约在 .100 到 .175 范围内发放。静态配置的服务器位于 .200 块及以上(大部分为空)。
当我们迁移到 Windows 平台时,出于管理/政策方面的考虑,我需要再次移动 IP 范围。我们希望保留 .1 - .10 供网络设备、交换机和其他基础设施使用。.200 仍将指定用于服务器。中间的寻址空间应该可供客户端使用,并且 IP 应该动态地已分配(编辑:而不是像最初提到的那样自动执行)由服务器执行。
我的 Windows Server 上的地址池如下所示:
192.168.0.1 192.168.0.254 (Address range for distribution)
192.168.0.1 192.168.0.10 (IP addresses excluded from distribution)
192.168.0.200 192.168.0.254 (IP addresses excluded from distribution)
目前,我们所有的客户端仍然在 .3 - .40 范围内,少数机器仍在 .100 - .175 范围内活动(尽管有很多已关闭的设备仍具有该范围内的 IP 的已过期租约)。由于租约“数据库”不在旧 DHCP 服务器和新 DHCP 服务器之间共享,我如何才能阻止客户端接收当前由旧 DHCP 服务器上租约未过期的客户端持有的 IP 地址的租约?如果我将 Debian DHCP 服务器上的范围扩展为 192.168.0.10 - 192.168.0.199,是否有办法强制客户端在发送 DHCPDISCOVER 时不重复使用其旧 IP 地址?我可以让 Windows DHCP 服务器像 ISC 实现一样具有权威性吗?
Debian 服务器的 dhcpd.conf:
ddns-update-style none;
authoritative;
default-lease-time 43200; #12 hours
max-lease-time 86400; #24 hours
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
range 192.168.0.100 192.168.0.175;
}
host workstation-1 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.0.3;
} ... and so on until 192.168.0.40
答案1
这可能不是解决这个问题的最佳方法,但它确实有效。以下是我所做的。
1)我在基于 Debian 的 DHCP 服务器中添加了以下限制,并删除了所有固定地址条目。这会强制这些 IP 范围内的所有客户端移动到 .41 - .199 范围内的某个位置,否则当我打开 Windows Server 时,客户端将收到网络上已存在的 .11 - .40 范围内的 IP 租约。然后,我让事情持续足够长的时间,直到该 IP 范围内的所有租约都到期并发出新的租约。
subnet 192.168.61.0 netmask 255.255.255.0 {
option routers 192.168.61.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.61.255;
pool {
range 192.168.61.0 192.168.61.40;
deny all clients;
}
pool {
range 192.168.61.41 192.168.61.199;
}
}
我无法找到一种方法使 Windows Server DHCP 实现充当“权威”;我想要的行为是,当拥有来自旧的基于 Debian 的 DHCP 服务器的租约的客户端将其 DHCPINFORM 数据包发送到新的 Windows Server 时,我希望这些客户端收到 DHCPNAK,然后再次经历整个过程来获得租约,从而从 .11 及更高版本“重新填充”寻址空间......无论如何,继续。
2)我通过扩大新 Windows DHCP 服务器上的排除范围来包含 192.168.61.100 - 192.168.61.199,从而达到作弊的目的。这将迫使所有被基于 Debian 的 DHCP 服务器分配该范围内 IP 的客户端的 DHCPINFORM 被拒绝,然后在寻址空间的“底部”(.11 及更高版本)发出新的租约。
3)此时,我只需关闭 Debian DHCP 服务器,打开 Windows Server,让到期时间解决问题。由于我的dhcpd配置文件,在 .11 - .40 地址空间中没有具有“旧租约”的客户端,这可能会导致 IP 冲突,并且由于排除了 .100 - .199 范围,所有 DHCPINFORM 请求都被拒绝(至少我想象这是发生的事情...我没有费心使用数据包嗅探器查看事务...我可能应该这样做)并且地址空间从 .11 的下限开始重新填充。
答案2
停止 DHCP 服务器并删除租约文件。它应该位于 /var/lib/dhcpd/dhcpd.leases 中。重新启动 DHCP 服务器,客户端将开始使用不同的地址。
我不知道如何强制 Windows DHCP 服务器成为权威服务器(按照 Windows 的传统,它可能只是是虽然您可能希望尝试一些更简单的方法(例如,您可能希望尝试更简单的方法),但从 dhcpd 配置中删除该指令将是朝这个方向迈出的一步。