编写脚本实现DHCP服务与DHCP中继自动化执行
编写脚本实现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中继自动化执行的更多相关文章
- (四)跟我一起玩Linux网络服务:DHCP服务配置之中继代理
继第三部分的DHCP服务器的设置成功,我们来做一个中继代理服务器的配置吧. 我们的虚拟机结构如图: 具体参考: (一)跟我一起玩Linux网络服务:DNS服务——BIND(/etc/named.con ...
- 路由器DHCP服务及DHCP中继
实验要求:掌握路由配置DHCP服务配置 拓扑如下: R1enable 进入特权模式config terminal 进入全局模式interface s0/0/0 进入端口ip address 192 ...
- DHCP服务
DHCP服务 DHCP服务(需要dhcp命令):负责ip,掩码,网关地址,DNS地址等自动分发的软件服务 /usr/sbin/dhcpd或/usr/sbin/dhcrelay(中继命令):执行程序 / ...
- liunx搭建DHCP服务器以及DHCP中继服务器
liunx搭建DHCP服务器以及DHCP中继服务器 一.实验拓扑 二.实验条件 虚拟机取消VMnet1和VMnet8的dhcp动态获取ip地址,以免影响实验 DHCPserver 网关以及DHCP中继 ...
- 配置DHCP服务
配置DHCP服务 一.DHCP的简介 1.DHCP是Dynamic Host Configuration Protocol(动态主机配置协议)的缩写: 2.DHCP是从BOOTP(Bootstrap ...
- 2-4-搭建DHCP服务实现动态分配IP地址-NTP网络时间同步
本节所讲内容: •DHCP服务器工作原理 •使用DHCP为局域网中的机器分配IP地址 •使用DHCP为服务器分配固定IP地址 •ntpdate加计划任务同步服务器时间 ---------------- ...
- CentOS6下DHCP服务(一)工作原理及安装配置说明
1.DHCP服务用途 DHCP是Dynamic Host Configuration Protocol的简写,DHCP服务器最主要的工作就是自动地将网络参数分配给网络中的每台计算机,让客户端的计算机在 ...
- NFS服务和DHCP服务讲解(week3_day2)--技术流ken
NFS服务端概述 NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享目录 ...
- Kali Linux常用服务配置教程DHCP服务原理
Kali Linux常用服务配置教程DHCP服务原理 动态主机配置协议(Dynamic Host Configuration Protocol,简称DHCP)是一个局域网的网络协议,基于UDP协议工作 ...
随机推荐
- lucene实战--打分算法没有那么难!
作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了L ...
- Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken
前言 前面已经写了两篇关于docker的博文了,在工作中有关docker的基本操作已经基本讲解完了.相信现在大家已经能够熟练配置docker以及使用docker来创建镜像以及容器了.本篇博客将会讲解如 ...
- Spring Cloud Config采用数据库存储配置内容
在之前的<Spring Cloud构建微服务架构:分布式配置中心>一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储.这一设计巧妙的利用Gi ...
- JQuery官方学习资料(译):操作元素
获取和设置元素的信息 有很多种方式可以改变现有的元素,最常见的是改变HTML内容或者元素的属性.JQuery提供了简单的夸浏览器的方法来帮助你实现元素信息的获取和设置. .html():获 ...
- ajax实现跨域访问
ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...
- Netty 系列二(传输).
一.前言 上一篇文章我们提到 Netty 的核心组件是 Channel.回调.Future.ChannelHandler.EventLoop,这篇文章主要是对 Channel (Netty传入和传出数 ...
- spring boot之hello
自己使用springboot也已经写过一段时间的代码,但是对springboot真正运行的流程还是有点模糊,今天写出自己对springboot的认识,如有不对,还请各位大佬不吝赐教,话不多说,直接上代 ...
- 向后台提交数据:通过form表单提交数据需刷新网页 但通过Ajax提交数据不用刷新网页可通过原生态Ajax或jqueryAjax。Ajax代码部分
原生态Ajax提交表单:需要借助XMLHttpRequest对象的open,要收通过post发送请求还要setRequsetHeader,然后把数据发送给后端,代码如下 目录结构 index.py代码 ...
- Vue2+VueRouter2+webpack 构建项目实战(一):准备工作
环境准备 首先,要开始工作之前,还是需要把环境搭建好.需要的环境是nodejs+npm,当然现在安装node都自带了npm. 在终端下面输入命令node -v会有版本号出来.就说明安装成功了.输入np ...
- BZOJ2946 [Poi2000]公共串(后缀自动机)
Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l 读入单词 l 计算最长公共子串的长度 l 输 ...