编写脚本实现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协议工作 ...
随机推荐
- man rpcbind(rpcbind中文手册)
本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html RPCBIND() BSD System Manager's Manual RPCBI ...
- μC/OS-II 要点分析 ------ PendSV_Handler
首先贴出今天要与大家分享的内容源码(位于内核源码的 os_cpu_a.asm 中): PendSV_Handler CPSID I MRS R0, PSP CBZ R0, PendSV_Handler ...
- ElasticSearch集群环境搭建
一 .单机部署 1.下载安装包.解压 2.在window下运行bin/elasticsearch.bat 3.访问localhost:9200 页面显示结果 { "name" : ...
- Spring Boot入门(1)Hello World
Spring Boot介绍 对于熟悉Spring的读者读者来说,想必也听说过Spring Boot的大名,Spring Boot旨在简化Spring的开发,它涉及了Spring的方方面面,是一个令 ...
- C# Redis安装 使用教程
前言:lz自打工作以来第一次遇到电脑问题需要重装系统,全盘格式化.打击是沉痛的.特别伤. 然后需要重新在本地部署 redis.这是写这篇博客的原因.希望对大家有所帮助,安装资源和引用DLL可以引用 ...
- T-SQL:qualify和window 使用(十七)
1.qualify 是一个潜在的额外筛选器 主要用于对开窗函数的数据筛选 SELECT orderid, orderdate, val, RANK() OVER(ORDER BY val DESC) ...
- 线程 线程池 Task
首先声明 这是读了 愉悦的绅士 文章 <菜鸟之旅——学习线程(线程和线程池)> <Task与线程> 的一些个人总结,还是那句话,如有不对,欢迎指正 文章以代码加注释的方法展示. ...
- 44.Linux君正X1000-添加st7789v显示
由于板子LCD旧屏是ili9335型号的,旧屏有时候会断货,如果断货则使用一个st7789v型号的LCD 它们两个屏的区别在于初始化屏的参数不同,引脚都一样,也就是说需要使板子同时支持ili9335型 ...
- mybatis_05动态SQL_if和where
If标签:作为判断入参来使用的,如果符合条件,则把if标签体内的SQL拼接上. 注意:用if进行判断是否为空时,不仅要判断null,也要判断空字符串‘’: Where标签:会去掉条件中的第一个and符 ...
- Android开发过程中的坑及解决方法收录(一)
之前使用了Android Studio的插件直接为button绑定了监听器,并实现onClick方法(我的onClick方法无论点击哪一个都是要实现setcontentview这个方法设置layout ...