编写脚本实现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协议工作 ...
随机推荐
- MySQL:测试题
一,表关系的练习测试 请创建如下表关系,并建立相关约束 一,创建表结构数据: 创建的话肯定先创建没有关联的表,老师,课程(关联老师),年级,班级(关联年级),学生(关联班级), 班级任职表 (关联老师 ...
- 【详解JavaScript系列】JavaScript之流程语句
一 开篇概述 本讲主要讲解JavaScript流程语句,其大致内容包括如下: 其中,常用的if,while,do..while,for在本片文章就不论述,重点论述for..in..,label,bre ...
- 【Go】优雅的读取http请求或响应的数据-续
原文链接:https://blog.thinkeridea.com/201902/go/you_ya_de_du_qu_http_qing_qiu_huo_xiang_ying_de_shu_ju_2 ...
- [PKUWC2018] 随机游走
Description 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次询问给定一个集合 \(S\),求如果从 ...
- python安装第三方库的最简单方式
一.准备工作 (只做一次准备工作,以后都会很方便) 1. 安装pip (1)下载pip到D:\download pip下载地址:https://pypi.python.org/pypi/pip#dow ...
- YTKNetwork源码详解
本篇是第三篇关于网络请求的,将讲述YTKNetwork源码,上述两篇分别讲述AFNetworking源码解析以及结合自己项目封装AFNetworking. AFNetworking源码解析:https ...
- C#之WebApi权限认证_学习笔记1
自己并不懂,在此先记录下来,留待以后学习... 正文 前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请 ...
- spring boot 使用第三方jar的方法
2018/02/02 更新 mvnrepository.com已经提供了ms jdbc 的jar URL: http://mvnrepository.com/artifact/com.microsof ...
- C#常量和字段以及各种方法的语法总结
目录 一. 常量和字段.... 1 1. 常量.... 1 2.字段.... 1 二.方法.... 2 1.实例构造器和类(引用类型).... 2 2.实例构造器和结构(值类型).... 2 3.类型 ...
- SSM+Netty项目结合思路
最近正忙于搬家,面试,整理团队开发计划等工作,所以没有什么时间登陆个人公众号,今天上线看到有粉丝想了解下Netty结合通用SSM框架的案例,由于公众号时间限制,我不能和此粉丝单独沟通,再此写一篇手记分 ...