如何强制所有DHCP客户端进行更新?

46
有没有网络广播呼叫或其他方式可以强制所有连接的DHCP客户端立即更新他们的IP地址?
如果没有,为什么没有?毫无疑问,DHCP管理员从诞生之日起就渴望这种功能。在大型网络上更改路由器地址时,这使得普遍客户端自动化变得非常困难。

2
这并不是重复问题,原因有很多。主要原因是我要求强制更新网络中的所有客户端,而那个问题只涉及一个客户端。而且答案也不同。对于我的问题,答案是一定不能,而另一个问题的答案是“有时候”。 - Mike Wise
决定稍微澄清一下问题。 - Mike Wise
5个回答

39

如果不在客户端网络接口上关闭并重新启动网络,则无法实现。

理论上,DHCP服务器可以向所有连接的客户端发送FORCERENEW消息。 FORCERENEW在RFC3203中有描述。 (另请参见https://serverfault.com/a/569869/107832

不幸的是,著名的ISC DHCP Server不支持它:

RFC 3315第19.4.1节 中提到了重新配置消息。然而,这仅适用于IPv6。一条消息 指出,DOCSIS 3.0“需要符合RFC3315规定的重新配置支持(对于DHCPv6)”


ISC DHCP是否支持DHCPv6重新配置消息? - Todd Freed
3
对 ISC DHCP 4.3.1 中 dhc6.c 的客户端源代码进行检查,答案是合格的 YES,@ToddFreed。在 [https://tools.ietf.org/html/rfc3315] 的第14节中,它实现了一个整数范围为1..40,而不是浮点数范围为-0.1..0.1。但从各种意义上讲,该代码似乎支持重新配置消息。 - John Greene
2
这值得进一步扩展,可以在新的回答中附上一些源代码片段。我会点赞它,而且这个问题仍然有很多浏览量。 - Mike Wise
2
这现在是一个“著名问题”,每天有稳定的新访问者(我认为大约18个)。我认为这一点就证明了“用户没有真正兴趣”的说法是错误的。 - Mike Wise
1
哎呀,你以为有37k的浏览量就可以得到更多的赞了。 - Mike Wise
1
请注意,有RFC6704,它更新了RFC3203,专门解决了RFC3118认证的问题。 - undefined

12

这是不可能直接实现的 - DHCP会分配一个带有租期的IP地址。该租期告诉客户端它的“有效”时间,之后必须进行续约。通常情况下,它将更新相同的IP地址,但这就是DCHP协商发生的时候。

强制所有网络段上的机器都进行更新会成为一种很好的创建拒绝服务攻击的方法。

但是你可以在过渡到新的网络拓扑结构的时候将租约时间缩短到几分钟。从实际角度来看,这将意味着一个小的中断,但随着重新获取多个IP地址,这也是无法避免的。


2
所以你需要提前计划 - 至少在租赁设置的时间范围内。这真是一件麻烦的事情。似乎应该有更好的方法。 - Mike Wise
2
手动在每台机器上运行释放-续订。在小型网络中很容易,而在大型网络中,您应该将其作为计划更改进行,因此无关紧要。 - Sobrique
客户端自动化并不像你想象的那么难 - 在任何规模的网络上,你都应该将它们加入域(如果是Windows),因此可以使用 psexec 或者为Unix配置SSH公私钥对。 - Sobrique

5
请注意:这只是部分回答 OP 的问题。
要强制所有 Wi-Fi DHCP 客户端更新其 DHCP 租约,您可以这样做。假设 Wi-Fi DHCP 客户端连接到您的路由器的 SSID,并且您的路由器管理界面支持这些功能。
- 禁用 DHCP 服务器 - 关闭2.4G和5G Wifi - 重新启用 Wifi 网络 - 重新启用 DHCP 服务器
我使用了通过以太网连接到路由器的客户端的 WebUI。

1
为什么这个答案对我有帮助:一个安卓6.0设备(摩托罗拉)一直坚持使用有缺陷的DHCP租约,而这个租约已经在isc-dhcp-server上被消除了。另一种方法是将移动设备置于飞行模式下;关闭isc-dhcp-server;清除DHCP租约(https://serverfault.com/questions/739022/how-do-i-manually-release-a-dhcp-lease-on-the-dhcp-server-itself#739027);重新启动服务器;关闭飞行模式。 - ivanleoncz
问题:重新启动路由器不是更快/更容易吗? - J. Scott Elblein
4
重启路由器可能无法强制DHCP客户端更新其DHCP租约,因为该客户端可能会一直保持其DHCP分配的IP地址,直到租约到期。 - Tzunghsing David Wong
重启可能值得一试,对我来说在Asus RT-AC86U上起作用了。 - CAD bloke

1
我成功地通过关闭dhcpd服务、删除/var/lib/dhcpd/dhcpd.leases文件并重新启动守护进程来删除所有租约。然后,您需要让每个设备从DHCP服务器获取IP地址。对于某些设备,简单的电源循环即可解决问题。

2
这最终导致我的DHCP服务器崩溃了。不再分配租约了。:( 错误是没有这样的文件或目录,它没有自己重新制作文件。当我重新制作它时,它无法写入,可能是权限问题。CentOS7 - Darius
更安全的方式:systemctl stop dhcpd; cp /var/lib/dhcpd/dhcpd.leases /var/lib/dhcpd/dhcpd.leases.backup; > /var/lib/dhcpd/dhcpd.leases; systemctl start dhcpd - Onnonymous

-1
psexec \\\computername ipconfig /renew

7
你能解释一下为什么以及如何回答这个问题吗? - anothernode
5
仅适用于你能够远程访问的 Windows 机器。 - Rena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接