ISC DHCP的IP保留自动化脚本
ISC DHCP自动化背景
我们公司使用ISC DHCP搭建了DHCP服务器,但是在使用前期发现有大量的已分配IP被再次分配,只好将IP-MAC进行绑定,将IP保留起来,这个工作量其实很大,所以我写了以下脚本来方便内网的IP管理。入网的权限管理使用入网认证设备。
脚本简介
本脚本使用bash编写,主要是对/etc/dhcp/dhcpd.conf和/var/log/messages的文本编辑,主要使用了awk、grep、sed这几个函数,基本满足了我们目前的ip分配需求。
脚本水平不高,如有高手指点一二,不胜感激。
脚本
#!/bin/bash
#指定使用bash执行此脚本
date
#因为此脚本需要每隔10min执行一次,所以我在crontab中将脚本输出结果重定向到/etc/dhcp/log中,date正好为每次执行记录了时间
FILE1=/var/log/messages
#messages文件是自动生成的文件,记录了DHCP服务器的运行日志,包括DHCP包的问答和IP pool在peers之间的分配。
FILE2=/etc/dhcp/factory
FILE3=/etc/dhcp/fac
#factory和fac是自建文件,用于处理从messages中获取的DHCP问答信息。
CONFILE=/etc/dhcp/dhcpd.conf
#dhcpd.conf为自动生成文件,是dhcp服务器的配置文件。
name=date | awk '{print $2,$3}' | sed 's/ //g'
file="/etc/dhcp/dhcpd."$name".conf"
#编辑备份配置文件文件名,用于每日备份文件的命名。
cp $CONFILE $file
#备份配置文件
oldhost=tail -n 1 $CONFILE | awk '{print $2}'
#oldhost为在执行脚本前配置文件中最后一行命令行中的host,用于在执行完成后返回新增命令行。
grep -i “dhcpack on” $FILE1 | awk ‘{print $8,$10}’ > $FILE2
#将DHCPACK信息中的ip、mac导入factory,主要将“May 4 23:10:15 localhost dhcpd: DHCPACK on xx.xx.1.1 to 11:22:33:44:55:66 via xx.xx.2.1”式语句中的IP和mac提取,用于之后的ip-mac绑定。
a=(a b c d e f g h i j)
#用于之后的同一设备在不通IP段中绑定信息中的host命名。
COUNT=1
STR=sed -n -e $COUNT,1p $FILE3
#从fac文件中逐行读取ip、mac信息,此处COUNT为1,所以为读取第一行,另外还可以使用传递参数的方式:while read ip mac done < F I L E 1 w