isc-dhcp-server使用API来控制静态地址绑定,内附Python实例。
近期有个特殊的需求,要求给大量的客户端分配固定的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 程序函数部例子分如下:
这个函数传入参数是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的租约,再添加对应关系。