强制 Linux 服务器在丢失 IP 地址时自动尝试获取 IP 地址

强制 Linux 服务器在丢失 IP 地址时自动尝试获取 IP 地址

我们在小型企业网络上为 Linux 服务器使用静态 DHCP 租约。最近 DHCP 服务器出了点问题,所有 Linux 服务器都丢失了 IP 地址,因为它们在网络上找不到 DHCP 服务器。

一天后,DHCP 服务器恢复运行,但服务器似乎不再寻找 DHCP 服务器,因此它们没有 IP 地址,也没有尝试获取 IP 地址。我最终不得不手动并亲自前往每台服务器并重新启动网络,此时它们会立即恢复其 IP 地址。

我可以在服务器上做些什么来防止将来再次出现此问题?我确信在 DHCP 服务器关闭后,服务器可能会尝试更新 IP 地址一段时间,但最终它们显然停止了尝试。

显然,解决方案是使用备用 DHCP 服务器,但我们先假设这不是一个选项。有没有办法强制服务器无限期地尝试更新其 IP?

服务器是 CentOS 和 Fedora 的混合。

答案1

他们是否恢复了 APIPA 寻址?169.254.0.0/16?您可以使用NOZEROCONF=是/etc/sysconfig/network 中的指令。

您还应该将 DHCP 租约延长至 DHCP 服务器最长合理中断间隔的两倍。客户端通常会等待租约期限的一半才会尝试续订;如果他们每隔几天才登录一次,您就有相当大的余地来修复服务器或建立新的服务器。

我们在生产中运行完全保留的 DHCP;它没有出现可靠性问题。事实上,我认为静态 IP 寻址是人们坚持的最后一项手动操作,而且它在很大程度上是一种时代错误。我没有做过正式的分析,但三年来我们遇到过一个与 DHCP 相关的问题,那是一个管理员的失误,导致“立即发布”脚本失效。在“糟糕”原因的直方图上,DHCP 远远排在长尾之外。

我知道每个人都喜欢批评 Windows,但 IME 在禁用 APIPA 并启用 DHCP 时,Windows 机器会顽固地保留其上次的 DHCP 分配。我启动了几个月后停用的机器,wireshark 显示它们正在请求上次 DHCP 分配的地址。

答案2

我对服务器使用静态 IP 地址,对个人计算机仅使用 DHCP。

虽然我相信 DHCP 会尽力避免更改设备的 IP 地址,但这并不能保证——在租约到期时,DHCP 可能会为计算机分配不同的 IP 地址。我一直认为,在工作日中让服务器发生这种情况是一件坏事。

答案3

您可以在 /etc/sysconfig/network-scripts/ifcfg-ethX 中设置PERSISTENT_DHCLIENT=yes。这有效地删除了-1RedHat 风格系统上默认发送给 dhclient 的标志。来自man dhclient

-1 标志使 dhclient 尝试一次获取租约。如果失败,dhclient 将退出,退出代码为 2。

然而,如果你遇到断电,并且你的服务器在交换机之前恢复在线,那么这种方法就行不通了,因为https://bugzilla.redhat.com/show_bug.cgi?id=234075。基本上,这个错误表明 ifup 在尝试运行 dhclient 之前首先检查接口上是否存在链接。没有链接 -> 没有 dhclient。

我的解决方案是将其添加到 root 的 crontab 中:

*/5 * * * * ifconfig eth0 | grep -q "inet addr:" || ifup eth0 2>&1 >/dev/null

还要将其添加到 /etc/dhcp/dhclient.conf 以便快速恢复:

retry 10
timeout 10

答案4

租约时间由服务器设置,而不是由客户端设置。您可以尝试增加服务器分配范围的租约长度,但这实际上只是权宜之计。您确实需要设置冗余 DHCP 服务器,或者最好将您的服务器移至静态分配的地址。

相关内容