如何防止在关机期间释放 DHCP?

如何防止在关机期间释放 DHCP?

我目前使用的是 Ubuntu 14.04,但希望它适用于不同的发行版。

我想防止在关机期间释放 DHCP,并选择租约到期或在启动时更新 DHCP(如果需要)。

这可能吗?

编辑:我(曾经)有一个分布式应用程序,它根据域名解析的不同做出不同的响应。如果机器在线但应用程序不可用,则其他机器上的应用程序将其理解为不可用。但是,如果 IP 已被释放(通过关闭),应用程序将无法理解它不可用,而是挂起或抛出错误。

不幸的是,我不再有重现错误的设置,并且不记得它是否挂起或引发错误,以及错误是什么。

答案1

大多数 unix dhcp 客户端都是有礼貌的,因为它们总是自行清理并在退出时释放租约。在大多数情况下,这使得事情进展得更好,因为服务器可以轻松判断租约是否正在被积极使用,但这并不是协议正常运行所必需的。有三种方法可以干净地做你想做的事情(一种丑陋的方法却有效)。

  1. 写一个dhcp客户端
  2. 使用命令行选项修改 dhcp 客户端以更改行为。
  3. 修改 dhcp 客户端以获得新行为
  4. 杀-9

Kill -9 方法引入了两个竞争条件

  1. 如果租约在您杀死 dhcp 客户端后但在关闭完成之前到期,您将使用过期的租约
  2. 如果您在续订期间碰巧终止了 dhcp 客户端,则行为是未定义的。

为什么这样工作:具有有效租约的 dhcp 客户端的正常行为是大部分时间都处于休眠状态,只有在更新租约或释放其关闭时才会醒来。当它收到关闭信号时,它会释放租约并退出。信号 -9 不可捕获,会导致立即终止而不进行任何清理,从而绕过租约释放。大多数(尽管不是全部)dhcp 客户端如果在其缓存中使用有效租约启动,则只会续订租约。

答案2

当您获得 DHCP 租约时,该租约会绑定到特定的 MAC-ID,直到到期。是否关闭机器并不重要;重要的是它是否在租约到期之前重新请求 IP 地址。

此外,最多DHCP 服务器使用“软”租约到期,这意味着当租约正式到期时,它们会将其保留在缓存中,直到并且除非它们主动需要在其他地方分发该特定地址,或者它们收到清除缓存的指令。

(注意:一些 ISP 主动关闭此功能作为安全措施——尽管它在这方面的有效性往往是有争议的——或者防止客户在不应该的情况下以低廉的价格运行自己的服务器。如果您正在尝试实现后者,您可能需要研究 dyndns。)

如果您每次启动时都会获得新的 IP 地址,您可能需要查看 DHCP 服务器的设置(如果您有管理员访问权限)或至少询问一下它们(如果您没有)。

答案3

ifconfig eth0 down您可能希望在系统关闭之前关闭网络接口(即或类似操作),而不是终止 DHCP 客户端以阻止其释放租约。

相关内容