编写脚本实现DHCP服务与DHCP中继自动化执行

本脚本是在liunx搭建DHCP服务器以及DHCP中继服务器实验环境下实现的https://www.cnblogs.com/yuzly/p/10539317.html

源码如下:

#!/bin/bash
#该脚本用于自动化配置DHCP服务器以及DHCP中继
#作者:雨中落叶
#博客:https://www.cnblogs.com/yuzly/
echo "****************************
.部署DHCP服务器
.部署网关
.部署DHCP中继
****************************"
read -p "请输入部署选项:" Num
case $Num in
)
#DHCP服务器配置
#关闭防火墙避免影响实验
service iptables stop &>/dev/null
setenforce
#.获取用户输入的DHCP服务器的相关网络参数
read -p "请输入DHCP服务器的IP地址:" IP
read -p "请输入DHCP服务器的子网掩码:" MASK
read -p "请输入DHCP服务器的网关地址:" GW
read -p "请输入DHCP服务器的首选DNS地址:" DNS1
read -p "请输入DHCP服务器的辅助DNS地址:" DNS2
#.设置DHCP服务器的网卡IP地址
ETH=$(ifconfig | grep "^eth" | awk '{print $1}')
MAC=$(ifconfig | grep "^eth" | awk '{print $5}')
echo "DEVICE=$ETH
HWADDR=$MAC
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=$IP
NETMASK=$MASK
GATEWAY=$GW
DNS1=$DNS1
DNS2=$DNS2" >/etc/sysconfig/network-scripts/ifcfg-$ETH
#重启网络服务
#service NetworkManager stop
#为了防止下次启动时,该服务重新启动,解决方法: chkconfig NetworkManager off再重启网卡,就可以了,启动网络服务报错然后用ifdown eth1 ifdown eth1报错,只能关闭NetworkManager服务来解决
service NetworkManager stop
service network restart
#.检测是否安装DHCP服务,配置DHCP服务
#定义函数
dhpool(){
#配置dhcp地址池1
echo "******配置DHCP地址池1**********"
read -p "请输入DHCP作用域网段:" DHNET
read -p "请输入DHCP作用域网段的子网掩码:" DHMASK
read -p "请输入地址池开始IP地址:" DHIP1
read -p "请输入地址池结束IP地址:" DHIP2
read -p "请输入DNS:" DHDNS
read -p "请输入网关地址:" DHGW
read -p "请输入广播地址:" DHB
#把dhcp配置模板中部分需要的内容复制到dhcp的配置文件中
conf=/etc/dhcp/dhcpd.conf
grep -v "#" /usr/share/doc/dhcp-4.1./dhcpd.conf.sample | grep -v "^$" | sed -n '17,25p' >$conf
#修改dhcp配置文件
sub=$(grep subnet $conf |awk '{print $2}')
submask=$(grep subnet $conf |awk '{print $4}')
range1=$(grep range $conf | awk '{print $2}')
range2=$(grep range $conf | awk '{print $3}' | awk -F";" '{print $1}')
dns=$(grep domain-name-servers $conf |awk '{print $3}'|awk -F";" '{print $1}')
gw=$(grep routers $conf | awk '{print $3}' | awk -F";" '{print $1}')
broadcast=$(grep broadcast-address $conf | awk '{print $3}'|awk -F";" '{print $1}')
#sed -i 是替换字符串
sed -i "s/$sub/$DHNET/g" $conf
sed -i "s/$submask/$DHMASK/g" $conf
sed -i "s/$range1/$DHIP1/g" $conf
sed -i "s/$range2/$DHIP2/g" $conf
sed -i "s/$dns/$DHDNS/g" $conf
sed -i "s/$gw/$DHGW/g" $conf
sed -i "s/$broadcast/$DHB/g" $conf
#配置dncp地址池2
echo "******配置DHCP地址池2*********"
read -p "请输入DHCP作用域网段:" dhNET
read -p "请输入DHCP作用域网段的子网掩码:" dhMASK
read -p "请输入地址池开始IP地址:" dhIP1
read -p "请输入地址池结束IP地址:" dhIP2
read -p "请输入DNS:" dhDNS
read -p "请输入网关地址:" dhGW
read -p "请输入广播地址:" dhB
#把dhcp配置模板中部分需要的内容复制到dhcp的配置文件中
conf=/etc/dhcp/dhcpd.conf
grep -v "#" /usr/share/doc/dhcp-4.1./dhcpd.conf.sample | grep -v "^$" | sed -n '17,25p' >>$conf
#修改dhcp配置文件
sub1=$(grep subnet $conf |awk '{print $2}' | sed -n 2p)
submask1=$(grep subnet $conf |awk '{print $4}'| sed -n 2p)
range11=$(grep range $conf | awk '{print $2}'| sed -n 2p)
range22=$(grep range $conf | awk '{print $3}'| sed -n 2p | awk -F";" '{print $1}')
dns1=$(grep domain-name-servers $conf |awk '{print $3}'|awk -F";" '{print $1}'|sed -n 2p)
gw1=$(grep routers $conf | awk '{print $3}' | awk -F";" '{print $1}'| sed -n 2p)
broadcast1=$(grep broadcast-address $conf | awk '{print $3}'|awk -F";" '{print $1}'|sed -n 2p)
#sed -i 是替换字符串
sed -i "10,18s/$sub1/$dhNET/g" $conf
sed -i "10,18s/$submask1/$dhMASK/g" $conf
sed -i "10,18s/$range11/$dhIP1/g" $conf
sed -i "10,18s/$range22/$dhIP2/g" $conf
sed -i "10,18s/$dns1/$dhDNS/g" $conf
sed -i "10,18s/$gw1/$dhGW/g" $conf
sed -i "10,18s/$broadcast1/$dhB/g" $conf
echo "********************************************"
read -p "是否给指定主机分配指定IP(y/n):" zhiding
#注意=两边各有一个空格,这是unix shell的要求
if [ $zhiding = "y" ]
then
read -p "请输入要指定的主机的MAC地址:" zMAC
read -p "请输入要给主机指定分配的IP(IP必须在地址池内):" zIP
echo "host joe {
hardware ethernet $zMAC;
fixed-address $zIP;
}" >>$conf
fi
#启动dhcp服务
service dhcpd start
}
n=$(rpm -qa | grep dhcp |wc -l)
if [ $n -eq ]
then
#调用函数
dhpool
else
#挂载光盘,开始安装dhcp服务
echo "当前电脑没有安装dhcp服务,开始安装....."
mount /dev/sr0 /mnt &>/dev/null
rpm -ivh /mnt/Packages/dhcp-4.1.-.P1.el6.x86_64.rpm &>/dev/null
echo "dhcp服务安装完成!"
#调用函数
dhpool
fi
;;
)
#网关服务器配置
service iptables stop &>/dev/null
setenforce
#.获取用户输入的网关服务器的相关网络参数
ETH1=$(ifconfig | grep "^eth" |awk '{print $1}'|sed -n 1p)
ETH2=$(ifconfig | grep "^eth" |awk '{print $1}'|sed -n 2p)
GWMAC1=$(ifconfig |grep "^eth" |sed -n 1p |awk '{print $5}')
GWMAC2=$(ifconfig |grep "^eth" |sed -n 2p |awk '{print $5}') read -p "请输入网关服务器的$ETH1接口IP地址:" GWIP1
read -p "请输入网关服务器的$ETH1接口IP地址的子网掩码:" GWMASK1
read -p "请输入网关服务器的$ETH1接口首选DNS地址:" GWDNS1
read -p "请输入网关服务器的$ETH1接口辅助DNS地址:" GWDNS2 read -p "请输入网关服务器的$ETH2接口IP地址:" GWIP2
read -p "请输入网关服务器的$ETH2接口IP地址的子网掩码:" GWMASK2
read -p "请输入网关服务器的$ETH2接口首选DNS地址:" GWDNS11
read -p "请输入网关服务器的$ETH2接口辅助DNS地址:" GWDNS22
#设置网关服务器的IP地址
echo "DEVICE=$ETH1
HWADDR=$GWMAC1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=$GWIP1
NETMASK=$GWMASK1
DNS1=$GWDNS1
DNS2=$GWDNS2" >/etc/sysconfig/network-scripts/ifcfg-$ETH1 echo "DEVICE=$ETH2
HWADDR=$GWMAC2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=$GWIP2
NETMASK=$GWMASK2
DNS1=$GWDNS11
DNS2=$GWDNS22" >/etc/sysconfig/network-scripts/ifcfg-$ETH2
#重启网络服务
service NetworkManager stop
service network restart
#开启路由转发功能,在内核中配置,然后sysctl -p使内核配置生效
sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" /etc/sysctl.conf
sysctl -p &>/dev/null
;;
)
#DHCP中继服务器配置
service iptables stop >/dev/null
setenforce
#.获取用户输入的DHCP中继服务器的相关网络参数
DHRETH=$(ifconfig | grep "^eth" | awk '{print $1}')
DHRMAC=$(ifconfig | grep "^eth" | awk '{print $5}')
read -p "请输入DHCP中继服务器的IP地址:" DHRIP
read -p "请输入DHCP中继服务器的子网掩码:" DHRMASK
read -p "请输入DHCP中继服务器的网关地址:" DHRGW
read -p "请输入DHCP中继服务器的首选DNS地址:" DHRDNS1
read -p "请输入DHCP中继服务器的辅助DNS地址:" DHRDNS2
#设置DHCP中继服务器的IP地址
echo "DEVICE=$DHRETH
HWADDR=$DHRMAC
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=$DHRIP
NETMASK=$DHRMASK
GATEWAY=$DHRGW
DNS1=$DHRDNS1
DNS2=$DHRDNS2" >/etc/sysconfig/network-scripts/ifcfg-$DHRETH
#重启网络服务
service NetworkManager stop
service network restart
#DHCP中继配置
n1=$(rpm -qa | grep dhcp |wc -l)
if [ $n1 -eq ]
then
read -p "请输入要中继的dhcp服务器的IP地址:" dhcrelayip
sed -i "s/INTERFACES=\"\"/INTERFACES=\"$DHRETH\"/g" /etc/sysconfig/dhcrelay
sed -i "s/DHCPSERVERS=\"\"/DHCPSERVERS=\"$dhcrelayip\"/g" /etc/sysconfig/dhcrelay
else
echo "当前电脑没有安装dhcp服务,安装中......"
mount /dev/sr0 /mnt &>/dev/null
rpm -ivh /mnt/Packages/dhcp-4.1.-.P1.el6.x86_64.rpm &>/dev/null
echo "dhcp服务安装完成!"
read -p "请输入要中继的dhcp服务器的IP地址:" dhcrelayip
sed -i "s/INTERFACES=\"\"/INTERFACES=\"$DHRETH\"/g" /etc/sysconfig/dhcrelay
sed -i "s/DHCPSERVERS=\"\"/DHCPSERVERS=\"$dhcrelayip\"/g" /etc/sysconfig/dhcrelay
fi
#启动dhcp中继服务
service dhcrelay start
;;
*)
echo "输入错误,请输入相应的数字!"
;;
esac

1.在dhcp server端执行脚本

 

2.测试dhcp server是否搭建成功,当然也可以看dhcp配置文件看看脚本有没有写进去,注意这里设置了指定分配IP给特定主机,下图可以看到没有从起始IP开始分配,而是分配到了特定的IP

3. 在网关服务器上布置网关配置   #记得开启路由转发功能

4.查看是否配置成功 

5. 在DHCP中继服务器上配置 

6.测试DHCP中继是否配置成功

注意:

本次实验为例避免不必要的因素干扰实验,需要关闭防火墙,service iptables stop    关闭linux系统安全措施 setenforce 0

本次实验可能会出现的问题,redhat系统可能会出现重启网络服务(service network start),重启失败,提示“激活连接失败”,通过ifdown、ifup或者ifconfig ethx down ifconfig ethx up 还是报错,提示激活连接失败,这时可能是因为network服务与NetworkManager服务可能存在冲突,关闭NetworkManager服务即可(service NetworkManager stop)

------------------------------------------------------------------------------------------------------------------

liunx搭建DHCP服务器以及DHCP中继服务器:https://www.cnblogs.com/yuzly/p/10539317.html

编写脚本实现DHCP服务与DHCP中继自动化执行的更多相关文章

  1. (四)跟我一起玩Linux网络服务:DHCP服务配置之中继代理

    继第三部分的DHCP服务器的设置成功,我们来做一个中继代理服务器的配置吧. 我们的虚拟机结构如图: 具体参考: (一)跟我一起玩Linux网络服务:DNS服务——BIND(/etc/named.con ...

  2. 路由器DHCP服务及DHCP中继

    实验要求:掌握路由配置DHCP服务配置 拓扑如下: R1enable 进入特权模式config terminal   进入全局模式interface s0/0/0 进入端口ip address 192 ...

  3. DHCP服务

    DHCP服务 DHCP服务(需要dhcp命令):负责ip,掩码,网关地址,DNS地址等自动分发的软件服务 /usr/sbin/dhcpd或/usr/sbin/dhcrelay(中继命令):执行程序 / ...

  4. liunx搭建DHCP服务器以及DHCP中继服务器

    liunx搭建DHCP服务器以及DHCP中继服务器 一.实验拓扑 二.实验条件 虚拟机取消VMnet1和VMnet8的dhcp动态获取ip地址,以免影响实验 DHCPserver 网关以及DHCP中继 ...

  5. 配置DHCP服务

    配置DHCP服务 一.DHCP的简介 1.DHCP是Dynamic Host Configuration Protocol(动态主机配置协议)的缩写: 2.DHCP是从BOOTP(Bootstrap ...

  6. 2-4-搭建DHCP服务实现动态分配IP地址-NTP网络时间同步

    本节所讲内容: •DHCP服务器工作原理 •使用DHCP为局域网中的机器分配IP地址 •使用DHCP为服务器分配固定IP地址 •ntpdate加计划任务同步服务器时间 ---------------- ...

  7. CentOS6下DHCP服务(一)工作原理及安装配置说明

    1.DHCP服务用途 DHCP是Dynamic Host Configuration Protocol的简写,DHCP服务器最主要的工作就是自动地将网络参数分配给网络中的每台计算机,让客户端的计算机在 ...

  8. NFS服务和DHCP服务讲解(week3_day2)--技术流ken

    NFS服务端概述 NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享目录 ...

  9. Kali Linux常用服务配置教程DHCP服务原理

    Kali Linux常用服务配置教程DHCP服务原理 动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)是一个局域网的网络协议,基于UDP协议工作 ...

随机推荐

  1. eclipse team 没有svn

    从资源库把项目导出来之后 右键点击项目  选择第二个 出现 选择SVN  出现你资源库的地址  finish 完成. 这时项目就会出现地址了 就有提交了

  2. easyui combobox 设置滚动条

    设置滚动条: 1 panelHeight:200  :设置固定的高度. 2 panelHeight:'auto', panelMaxHeight:200. <input class=" ...

  3. vue+vue-router+vuex实战

    shopping vue + vue-router + vuex实现电商网站 效果展示 install 下载代码: git clone https://github.com/chenchangyuan ...

  4. 详细分析MySQL事务日志(redo log和undo log)

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...

  5. MySQL集群结构说明

    在以前,数据库的集群配置一直很难,难点在于MySQL主从结构的高可用和读写分离.万幸的是,Galera/GR的出现,让整个集群的配置都极大程度地简化了. 以下是一个简单的MySQL集群拓扑图: 1.M ...

  6. redis的Pub/Sub

    redis的Pub/Sub机制类似于广播架构,Subscriber相当于收音机,可以收听多个channel(频道),Publisher(电台)可以在channel中发布信息. 命令介绍 PUBLISH ...

  7. JAVA实现ATM源代码及感想

    源代码 //20173626 信1705-2 郑锦package ATM;import java.io.IOException;import java.io.File;import java.io.F ...

  8. ife 零基础学院 day 2

    第二天:给自己做一个在线简历吧 最后的验证,提出了几个问题,尝试解答一下 HTML是什么,HTML5是什么 HTML的定义摘抄自w3school的HTML 简介 HTML 是用来描述网页的一种语言. ...

  9. mybatis_07动态SQL_foreach循环

    废话不多说,直接上代码! <select id="findUserByforeach" parameterType="userQueryVO" resul ...

  10. 前端数据可视化echarts.js

    一.echarts.js的优势与总体情况 echarts.js作为国内的IT三巨头之一的百度的推出一款相对较为成功的开源项目,总体上来说有这样的一些优点 1.容易使用 echarts.js的官方文档比 ...