近期有个特殊的需求,要求给大量的客户端分配固定的IP地址,而且这些地址的映射关系经常会变,IP地址和MAC地址的对应关系是存在一个数据库表里一一对应的。

那么如果用手工绑定的方法太浪费人力,还有可能因为人工绑定的疏忽大意造成IP地址冲突。所以使用DHCP的ip地址预定功能是最合适不过的了。

如果使用DHCP的IP地址预定功能的话也要维护一个DHCP的预定表,也不是一个最好的方法。

于是我就想如果DHCP服务器可以通过API来增加和删除DHCP的预定,那么就可以写一个小脚本从数据库里读取对应关系添加到DHCP服务器里,让这个小脚本的计划任务在DHCP的有效租期内重复运行即可, 这样的话就可以无需人工干预DHCP这部分了,注意力只集中在数据库的DHCP预定映射表即可。

我的DHCP服务器在linux里运行,安装的是isc-dhcp-server来负责分配IP地址,于是我查了一下,这软件还真支持API,下面就给大家介绍一下如何实现api控制DHCP租约。

大致就是2个步骤,第一步开启isc-dhcp-server的api,开放在7911端口,第二步写个小程序删除和增加dhcp预定。

1.使用openssl生成secret备用。
openssl rand -base64 16

修改/etc/dhcp/dhcpd.conf 文件使其支持api访问。

nano /etc/dhcp/dhcpd.conf 

替换你刚生成的secret后,增加下面的内容到dhcpd.conf,然后重启一下isc-dhcp-server.

omapi-port 7911;
omapi-key om-key;

key om-key {
       algorithm hmac-md5;
       secret +XHSqM6IwOsiWFGT9bZA9g==;
};

2. 使用Python写一个小程序,来增加和删除DHCP预定,下面是已经写好的2个函数,按你的业务逻辑调用函数即可。
增加:

omapi.add_host("172.10.1.188","38:80:23:b8:ec:e4")

删除:

omapi.del_host("8c:46:d8:77:6b:49")

Python 程序函数部例子分如下:

此内容查看价格为4.99智能币立即购买
你的支持是我更新原创的动力,如果有疑问详询qq:16900693

这个函数传入参数是3个,第一个是DHCP服务器的IP地址,第二个是要绑定的IP,第三个是绑定IP对应的MAC地址。

update_dhcp_server("192.168.1.1","192.168.2.2","aa:bb:cc:dd:ee:ff") # 无论MAC是否存在预定租约,函数都会先尝试删除这个mac的租约,再添加对应关系。

发表回复