![是否有脚本从 DHCP 服务器接收 IP?](https://linux22.com/image/718578/%E6%98%AF%E5%90%A6%E6%9C%89%E8%84%9A%E6%9C%AC%E4%BB%8E%20DHCP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8E%A5%E6%94%B6%20IP%EF%BC%9F.png)
没有任何一个Nagios DHCP 检查插件实际上可以从 DHCP 服务器获取 IP 作为真实测试。它们所做的就是询问它会将哪个 IP 分配给某个 mac 地址。
我们的 DHCP 服务器出现故障,但 Nagios 没有发出警报,因为它可以通过 Nagios 测试,但实际上并没有将 IP 提供给客户端。
问题
有没有办法让脚本请求 IP 并让 DHCP 服务器提供该 IP?该脚本每 5 分钟运行一次,因此每次运行时都会丢弃 IP。
更新
理想情况下,脚本应该做的是
# dhclient -r ; dhclient ; ip a|grep valid_lft
Killed old client process
valid_lft forever preferred_lft forever
valid_lft forever preferred_lft forever
valid_lft 86459sec preferred_lft 86459sec
valid_lft forever preferred_lft forever
如果preferred_lft
没有更新,则发出警报。
这种方法的问题是需要专用网卡。所以如果能以某种方式模拟,那真的很棒吗?
答案1
为了测试如果全新设备向 DHCP 服务器请求 IP 地址,Nagios 脚本需要发送带有伪造 MAC 地址的 DHCP Discover 数据包。您需要能够发送原始 DHCP 数据包,但在尝试之前,您应该修改此安排实际上需要的内容。
假设我们的 DHCP 租约时间为 24 小时。如果您每 5 分钟发送一个带有新 MAC 地址的 DHCP Discover 数据包并从池中获取 DHCP 提供,则仅您的 Nagios 测试就会占用池中的 288 个 IP 地址。如果您的租约时间更长,例如一周,您将拥有最多 2016 个虚拟预留 IP 地址。您需要有一个/20
DHCP 池才能拥有这么多的备用地址 + 实际设备的空间。
这就是为什么我建议使用常规测试,并在 99.9% 以上的情况下依靠它。偶尔出现的池耗尽的罕见情况值得手动处理,而不是在测试时实际造成这种情况。
次要方法。不要通过发送额外的 DHCP Discover 数据包进行测试,而是监控实际流量。当您看到以下信息时,请创建警报:
- 没有对应 DHCP Offer 数据包的 DHCP Discovery 数据包。
- 没有相应 DHCP 确认数据包的 DHCP 请求数据包。
您应该能够很快识别任何问题。