zoukankan      html  css  js  c++  java
  • 编写脚本实现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 "****************************
    1.部署DHCP服务器
    2.部署网关
    3.部署DHCP中继
    ****************************"
    read -p "请输入部署选项:" Num
    case $Num in
    1)
      #DHCP服务器配置
      #关闭防火墙避免影响实验
      service iptables stop &>/dev/null
      setenforce 0
      #1.获取用户输入的DHCP服务器的相关网络参数
      read -p "请输入DHCP服务器的IP地址:" IP
      read -p "请输入DHCP服务器的子网掩码:" MASK
      read -p "请输入DHCP服务器的网关地址:" GW
      read -p "请输入DHCP服务器的首选DNS地址:" DNS1
      read -p "请输入DHCP服务器的辅助DNS地址:" DNS2
      #2.设置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
      #3.检测是否安装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.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.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 2 ]
      then
        #调用函数  
        dhpool
      else
        #挂载光盘,开始安装dhcp服务 
        echo "当前电脑没有安装dhcp服务,开始安装....."
        mount /dev/sr0 /mnt &>/dev/null
        rpm -ivh /mnt/Packages/dhcp-4.1.1-38.P1.el6.x86_64.rpm &>/dev/null
        echo "dhcp服务安装完成!" 
        #调用函数
        dhpool
      fi  
    ;;
    2)
      #网关服务器配置
      service iptables stop &>/dev/null
      setenforce 0 
      #1.获取用户输入的网关服务器的相关网络参数
      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
    ;;
    3)
      #DHCP中继服务器配置
      service iptables stop >/dev/null
      setenforce 0
      #1.获取用户输入的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 2 ]
      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.1-38.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

  • 相关阅读:
    从零开始学架构(三)UML建模
    【网址收藏】博客园主题美化
    完美解决国内访问GitHub速度太慢的难题
    SpringBoot+slf4j线程池全链路调用日志跟踪 二
    SpringBoot+slf4j实现全链路调用日志跟踪 一
    2021年java最全面试宝典【核心知识整理】
    [中级]系统集成项目管理工程师历年真题及参考答案
    线程池ThreadPoolExecutor最全实战案例
    大厂git分支管理规范:gitflow规范指南
    IdentityServer4
  • 原文地址:https://www.cnblogs.com/yuzly/p/10547380.html
Copyright © 2011-2022 走看看