我的路由器运行 dd-wrt,它为 DHCP 客户端分配静态租约。所有客户端都使用 DHCP。
我最近更改了要分配给客户端的 IP 地址。但客户端不会自动更新。所有客户端都是 Linux。使用“dhclient -r”似乎没有任何区别——客户端会保留老的地址(除非我重新启动它和路由器)。
我以前使用其他路由器(例如 Netgear)时也遇到过同样的问题。我以前以为这纯粹是 Netgear 固件的问题,但现在我相信我只是不知道路由器中静态租约更改时更新 IP 地址的正确程序或规则。我正在寻找一些解释。
我发现,如果我关闭所有设备(包括路由器和所有客户端),然后启动路由器,然后启动客户端,那么所有设备都会获得正确的 IP 地址。所以我知道如何解决这个问题。但除此之外,即使我等待租约到期足够长的时间,地址似乎也不会改变。似乎只要设备保持与路由器的连接,其 IP 地址一旦分配就不会改变。
我在不同情况下都见过这种行为(主要是 Netgear 路由器)。IP 最初是动态分配还是静态分配(DHCP 静态租约)似乎并不重要。当一切仍在运行时,它不会更新。
基本上,我发现必须关闭网络上的每个客户端才能将 IP 地址更新到新方案真的很麻烦。任何人都对此有见解。我希望如果我更好地理解它,我会找到一种更方便的方法来处理它。
(这个问题很小,但却困扰了我好几年。这次,我不想再用老办法来处理它,而是想学点新东西。)
答案1
听起来您的 DHCP 服务器不认为自己对所在网段具有权威性,因此不会发送 DHCPNAK,这将指示客户端放弃其旧租约并进入 init 状态。假设您在同一网段上没有两个 DHCP 服务器,请将 dd-wrt 配置为具有权威性,租约应该会开始被放弃。
答案2
我在网上找到了一些答案,它们指出如果 DHCP 客户端已经连接,则必须手动删除它们。http://www.dslreports.com/forum/r19261599-DD-WRT-Unable-to-set-static-ip-address-wotj-DD-WRT-firmware
虽然这不起作用,但它让我尝试拔下并重新连接路由器,以使所有租约消失并迫使客户端请求新的租约。这对我来说很有效。