编写脚本实现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协议工作 ...
随机推荐
- 在go modules中使用replace替换无法直接获取的package(golang.org/x/...)
上一篇里我们介绍了使用go get进行包管理. 不过因为某些未知原因,并不是所有的包都能直接用go get获取到,这时我们就需要使用go modules的replace功能了.(当然大部分问题挂个梯子 ...
- [转]windows BLE编程 net winform 连接蓝牙4.0
本文转自:https://www.cnblogs.com/webtojs/p/9675956.html winform 程序调用Windows.Devices.Bluetoot API 实现windo ...
- Linux CentOS 虚拟机下联网
这里用VM 提供虚拟环境 虚拟机网络连接模式用的NAT 在编辑处 打开 查看你的子网ip 类型是NAT 的 我们这是是18 192.168.18.~ 去看dhcp 设置看自动分配的地址范围 也可 ...
- c# 判断3个数是否连续最优式子
Math.Abs((own - two) * (two - there) * + ) ==
- [PHP] 算法-字符串的左循环的PHP实现
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZde ...
- sourcetree Authentication failed
sourcetree 的 git 密码存在 mac 的 钥匙串里面, 需要在钥匙串里删除掉对应信息,再次打开就会让你重新输入密码, 问题就解决了。 参看: https://stackoverflow. ...
- js操作css样式,null和undefined的区别?
1.js操作css的样式 div.style.width="100px"在div标签内我们添加了一个style属性,并设定了width值.这种写法会给标签带来大量的style属性, ...
- ApplicationListener详解
ApplicationListener详解 ApplicationListener可以监听某个事件event 通过实现这个接口,传入一个泛型事件,在run方法中就可以监听这个事件,从而做出一定的逻辑 ...
- Fetch使用
Fetch API 提供了一个获取资源的接口(包括跨域请求).任何使用 过 XMLHttpRequest 的人都能轻松上手,但新的API提供了更强大和 灵活的功能集. 概念和用法 Fetch 提供了对 ...
- Python-Django Win7上使用Apache24和mod_wsgi部署Django1.11应用程序
Win7上使用Apache24和mod_wsgi部署Django1.11应用程序 by:授客 QQ:1033553122 测试环境 win7 64 Django-1.11.4.tar.gz 下载地址: ...