欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

DHCP服务器中自动绑定主机IP、MAC地址 有大用

在Linux下,要实现dhcp的MAC与IP绑定,就需要在/etc/dhcpd.conf 文件中为每一个MAC指定一个IP地址。

dhcp的配置文件是/etc/dhcpd.conf,不过默认的情况下这个文件不存在,你需要使用它的模板建一个配置文件。模板的位置在/usr/share/doc/dhcp-3.0p11/dhcpd.conf.sample,内容如下:

ddns-update-style interim;
#配置使用过渡性 DHCP-DNS互动更新模式。
ignore client-updates;
#忽略客户端更新
subnet 192.168.0.0 netmask 255.255.255.0 {
#设置子网声明
# --- default gateway
option routers 192.168.0.1;
#设置缺省网关为192.168.0.1

option subnet-mask 255.255.255.0;
#设置客户端的子网掩码
option nis-domain "domain.org";
#为客户设置NIS域
option domain-name "domain.org";
#为客户设置域名
option domain-name-servers 192.168.1.1;
#为客户设置域名服务器
option time-offset -18000; # Eastern Standard Time
#设置偏移时间。
# option ntp-servers 192.168.1.1;
设置NTP服务器。
# option netbios-name-servers 192.168.1.1;
设置wins服务器
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
#设置netbios节点类型 我不清楚这个netbios节点是什么东西。*_*!,不懂最好不设。嘿嘿。

range dynamic-bootp 192.168.0.128 192.168.0.255;
#设置动态的地址池。
default-lease-time 21600;
#设置缺省的地址租期。

max-lease-time 43200;
#设置客户端最长的地址租期

# we want the nameserver to appear at a fixed address
//设置主机声明
host ns {
next-server marvin.redhat.com;
//设置由于定义服务器从引导文件中装入的主机名,用于无盘站。
hardware ethernet 12:34:56:78:AB:CD;
指定dhcp客户的mac地址
fixed-address 207.175.42.254;
给指定的mac地址分配ip
}
}

我的DHCP服务器的IP地址是192.168.88.230,分配的是88段的地址,/etc/dhcpd.conf配置如下:

dhcpd.conf配置如下:
default-lease-time 2880;
max-lease-time 43200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.88.255;
option routers 192.168.88.230;
option domain-name-servers 202.96.134.133,219.133.31.62;
ddns-update-style interim;
#####################OK###################
subnet 192.168.88.0 netmask 255.255.255.0 {

   range 192.168.88.1 192.168.88.254

}
#We want the nameserver to appear at a fixed address

 

       由于每次在/etc/dhcpd.conf文件中手工写入

host hostname {

       hardware ethernet xx:xx:xx:xx:xx:xx;

       fixed-address xxx.xx.xx.xx;

}

这些内容相当麻烦,于是便动手编写了个根据网关路由表上的内容自动添加IP、MAC地址到/etc/dhcpd.conf文件中的shell程序。

Shell程序原理如下:

1.       创建文件/tmp/factory;

2.       把路由表中所有的IP、MAC地址写入/tmp/factory中;

3.       逐个判断/tm/factory中的MAC地址在/etc/dhcpd.conf中是否已经存在,如果尚未存在则添加进去,如果存在了则无须添加;

 

Shell源码程序如下(autobind.bash):

#!/bin/bash
touch /tmp/factory
FILE=/tmp/factory
CONFILE=/etc/dhcpd.conf
#awk 'BEGIN {print "   IP \t\t MAC \n----------------------------------" }' > $FILE
/sbin/ip n l | awk '{print $1,$5}' > $FILE   ##把路由表中所有的IP、MAC地址写入/tmp/factory中
COUNT=1
STR=`sed -n -e $COUNT,1p $FILE`
while [ -n "$STR" ]
do
grep -q `awk '{print $2}' $FILE|sed -n -e $COUNT,1p` $CONFILE >/dev/null 2>&1

#判断/tm/factory中的MAC地址在/etc/dhcpd.conf中是否已经存在

if [ $? -ne 0 ]
then ##以下是要写到/etc/dhcpd.conf里的内容
      echo "      host   " `awk '{print $1}' $FILE|sed -n -e $COUNT,1p` " {" >> $CONFILE
      echo "                hardware ethernet" `awk '{print $2}' $FILE|sed -n -e $COUNT,1p`";" >>$CONFILE
      echo "                fixed-address" `awk '{print $1}' $FILE|sed -n -e $COUNT,1p`";" >>$CONFILE
      echo "      }" >>$CONFILE
      echo " ">>$CONFILE
fi   
COUNT=`expr $COUNT + 1`
STR=`sed -n -e $COUNT,1p $FILE`
done
把该程序放到/etc/crontab里,让它定时执行:

*/2 * * * * root locatedir/autobind.bash

以上都是在DHCP服务器上所做的工作;

在DHCP客户机上设置成自动获取IP地址就可以了。


来自   https://blog.csdn.net/fuchen91/article/details/104630446


普通分类: