清理dhcpd.conf文件
闲下来又开始折腾dhcp服务器了,话说公司内网用户要上网需要将机器mac地址登记到dhcp服务器的/etc/dhcpd.conf文件中,才能获得dhcp服务器分配的ip地址。长久以来,管理员都是手动添加mac地址,当该机器用户走人或者更换机器之后,这个mac地址就停用了,但是依旧存在在dhcpd.conf文件中,管理起来比较麻烦。整理出下面几个问题。
1) 大部分mac地址已经很久没有登陆。可以删掉。
2) 部分mac地址重复,虽然重载服务的时候会检查配置文件,但是如果同一个mac地址的大小写是查不出来的,依然可以重启服务。
3) dhcpd.conf文件排版十分混乱。
为了解决上面的三个问题,也是为了管理方便,于是研究怎么将太久没用的mac地址从dhcpd.conf配置文件中删除。下面是大致的步骤。
1) 首先通过cron定时任务,将/var/lib/dhcpd/dhcpd.leases到家目录下。
30 12 * 6 * cp /var/lib/dhcpd/dhcpd.leases /root/dhcpleaseback/dhcpd.leases_$(date +\%Y\%m\%d\%H\%M)
备份一个月的dhcpd.leases文件,从中可以获取到这一个月内所有连上内网的机器的mac地址。
2) 从dhcpd.lease*文件中取得所有的mac地址,排序,去重。
# grep "hardware ethernet" dhcpd.leases* | awk '{print $4}' | tr -d "[;]" | sort | uniq > mac.list
熟悉dhcpd.leases文件的人都知道这是在干嘛,取出mac地址列表,重定向到mac.list文件中,下面会用到。
3) 将dhcpd.conf配置文件重新排版,变得整齐,并且进行把大写mac地址全转成小写,方便后面对照使用。
awk '{if(NF >= 7){$6=tolower($6);printf("%-6s%-28.35s%-3s%-10s%-10s%-20s%-3s%-15s%-16s%-3s%-3s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11)}else{print $0}}' dhcpd.conf > dhcpd.conf.new
grep "hardware ethernet" dhcpd.conf.new | awk '{print $6}' | sort | uniq > mac.list1
以前都是手工添加数据,配置文件写的很乱,但是还好,mac地址都是每一行的第六个字段,取出来很方便。
第二行命令是把配置文件中的mac地址取出来作为另一个列表。
4) 谨慎起见,还是做一些检查会比较好。
# awk 'NR==FNR{a[$1]=1}NR!=FNR&&a[$1]{print $1}' mac.list mac.list1 | wc -l
wc -l mac.list
如果上面两行命令的结果一样,那么可以肯定dhcpd.leases文件中出现的mac地址都存在于dhcpd.conf文件中,一般都是这样才正常。
5) 上面说了dhcpd.leases文件中的mac地址在dhcpd.conf文件中一定存在,但反之就不一定了,这些存在于dhcpd.conf文件却不在dhcpd.leases文件的mac地址就是我们要处理掉的mac地址。
diff -c mac.list1 mac.list | grep ^'- ' | awk '{print $2}' > del.list
将很久没有在dhcp服务器上验证过的mac地址取出来,作为要删除的对象。
6) 使用循环删掉。
for i in `cat del.list`;
do
sed -i "/$i/d" dhcpd.conf.new
done
总觉得这一步处理不是很简洁,而且比较慢,求万能的网络给我一个更好的办法吧。
7) 清理之后的mac地址在dhcpd.conf中还是有重复的,下面进行去重操作。
awk '{if(NF>7){a[$6]++ ;if(a[$6]==1) print $0 } else{ print $0 }}' dhcpd.conf.new > dhcpd.conf
最后生成的这个dhcpd.conf就是我们所需要的精简后的配置文件。
8) 重复进行第4步操作,做一个验证检查。
9) 检查配置文件并重载配置文件。
#service dhcpd configtest && service dhcpd reload
当前暂无评论 »