如果超出 DHCP 范围,如何使用 shell 脚本发送警报?

如果超出 DHCP 范围,如何使用 shell 脚本发送警报?

我已经在 CentOS 6.5 上安装并配置了 DHCP 服务器。我还在文件中添加了一个子网,dhcpd.conf如下所示:

subnet 192.168.1.0 netmask 255.255.255.0 {
  option domain-name-servers 192.168.1.2, 8.8.8.8;
  default-lease-time 600;
  max-lease-time 7200;
  range dynamic-bootp 192.168.1.10 192.168.1.30;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  option ip-forwarding off;
}

如您所见,DHCP 服务器只能分配 20 个 IP 地址。是否可以让 DHCP 服务器在使用 shell 脚本分配完所有 20 个地址后向系统管理员发送警报?

答案1

lease您的一个选择是计算申报数量dhcpd.租约:

dhcpd.leases(5) - Linux man page

Name

dhcpd.leases - DHCP client lease database

....

the Lease Declaration

lease ip-address { statements... }

Each lease declaration includes the single IP address that has been leased to the
client. The statements within the braces define the duration of the lease and to
whom it is assigned.

因此,您只需计算以 开头的行数lease即可知道已分配的 IP 地址数量:

COUNT=$(grep -c '^lease' /var/lib/dhcpd/dhcpd.leases)

if [[ $COUNT eq 20 ]]
then
    #do something here
fi

答案2

这不是直接的解决方案,但您似乎可以利用on commitDHCP 配置文件中的功能。这是这篇文章中的一个例子,标题为:当 ISC DHCP 分发新租约时执行脚本

在该dhcpd.conf文件中,您可以针对各种事件创建操作,例如发出租约时。

subnet 192.168.1.0 netmask 255.255.255.0 {
    option routers  192.168.1.2;

    on commit {
        set clip = binary-to-ascii(10, 8, ".", leased-address);
        set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
        execute("/usr/local/sbin/dhcpevent", "commit", clip, clhw, host-decl-name);
    }
    ...

当上面的脚本dhcpevent运行时,它传递了 4 个参数。

execute_statement argv[0] = /usr/local/sbin/dhcpevent
execute_statement argv[1] = commit
execute_statement argv[2] = 192.168.1.40
execute_statement argv[3] = 11:aa:bb:cc:dd:ee
execute_statement argv[4] = d1.jp

clipw&clhw是变量,在此示例中,其他元数据的部分在运行脚本之前已被解析和存储。然后,这些变量与其他项目一起传递到事件脚本。

您可以将此方法应用到一个脚本中,在其中您可以跟踪已租出的 IP 数量,或者您可以询问 DHCP 服务器跟踪此信息的实际租用状态文件 ( /var/lib/dhcpd/dhcpd.leases),然后报告是否文件的租约数量超出了您的配额。

参考

相关内容