linux5、6、7双网卡主备模式绑定脚本(生产环境中使用)

linux7-net-bond.sh   (linux7系统双网卡主备,可以本机或远程执行)

#!/bin/bash
#
########################################################
# SCRIPT NAME: linux7-net-bond.sh
#      AUTHOR: LCF
# CREATE DATE: 2019.12.13.05-00
#    PLATFORM: Linux7
#     VERSION: 1.1
########################################################

# 一、常量配置、显示当前相关信息
TEAMNAME=team100
IPADDR=$1
NETMASK=$2
GATEWAY=$3
DNS1=$4
DNS2=$5

# -查看当前系统版本
echo -e "\033[36m------------------Linux7 网卡绑定脚本-------------------\033[0m\n"
redhat_release=`cat /etc/redhat-release`
echo -e ">>\033[35m当前系统是:\033[0m\033[36m$redhat_release\033[0m"
echo -e ">>\033[35m当前系统使用的IP:\033[0m"
ip a | grep -E "inet .*" | awk '{print $2 " -- " $NF}' | column -t
echo -e ">>\033[35m当前系统使用的网关:\033[0m"
ip route show | grep default | awk '{print "IP:"$3" dev:"$5}' | column -t
echo -e ">>\033[35m当前系统使用的DNS:\033[0m"
cat /etc/resolv.conf | grep -E "^(DNS|name).*" 

# -版本检测、显示可用网卡Device
echo "$redhat_release" | grep "release 5" &> /dev/null && release=5
echo "$redhat_release" | grep "release 6" &> /dev/null && release=6
echo "$redhat_release" | grep "release 7" &> /dev/null && release=7
if [ "$release" == "5" -o "$release" == "6" ];then
#	a=`ifconfig -a | grep -E "^[a-z].*" | awk '{print $1}'`
        echo -e "\033[31m警告:当前脚本只适用于Linux7系列系统,不能在当前$redhat_release系统上运行。\033[0m"
        exit
else
#	a=`ip a | grep -E "^[1-9].*" | awk '{print $2}' | awk -F ":" '{print $1}'`
	a=`nmcli device`
fi
echo -e ">>\033[35m当前可用DEVICE:\033[0m\n\033[36m$a\033[0m"

# -判断输入参数不小于3个,提示帮助。
if [ $# -lt 3 ];then
	echo -e ">>\033[35m请在脚本后面输入参数,指定ifcfg-$TEAMNAME文件的IP、字网掩码、网关、DNS1、DNS2(空格做间隔),示例如下:\033[0m" 
	echo -e "\033[32m[root@Test-130 ~]# /root/linux-net-bond.sh 192.168.10.50 255.255.255.0 192.168.10.2 192.168.10.2 8.8.8.8\033[0m"
	exit
fi 
read -p ">>请正确输入要绑定的第一个网卡DEVICE:" DEVICE1
read -p ">>请正确输入要绑定的第一个网卡DEVICE:" DEVICE2

# 二、备份(提前备份/etc/sysconfig/network-scripts文件夹、备份/etc/modprobe.d/dist.conf文件)
echo -e ">>\033[35m正在检测备份文件..\033[0m"
[ -d "/etc/sysconfig/.network-scripts.bak" ] || cp -rp /etc/sysconfig/network-scripts /etc/sysconfig/.network-scripts.bak
echo -e ">>\033[35m已备份(/etc/sysconfig/network-scripts备份目录位置:/etc/sysconfig/.network-scripts.bak)\033[0m"

# 三、创建配置文件
read -p "当前系统:$redhat_release 指定IP=$IPADDR 掩码=$NETMASK 网关=$GATEWAY DNS1=$DNS1 DNS2=$DNS2 信息确认(Y/N):" p
[ "$p" != "Y" ] && exit 
echo -e ">>\033[35m开始创建配置文件..\033[0m"
rm /etc/sysconfig/network-scripts/ifcfg-$TEAMNAME* -rf
nmcli con add type team con-name $TEAMNAME ifname $TEAMNAME config '{"runner":{"name":"activebackup"}}'
nmcli connection modify $TEAMNAME ipv4.method static ipv4.addresses $IPADDR/24 ipv4.gateway $GATEWAY ipv4.dns $DNS1,$DNS2
nmcli con add type team-slave con-name $TEAMNAME-$DEVICE1 ifname $DEVICE1 master $TEAMNAME 
# //测试时是ifup $TEAMNAME-ens40 或 ifdown $TEAMNAME-ens40
nmcli con add type team-slave con-name $TEAMNAME-$DEVICE2 ifname $DEVICE2 master $TEAMNAME 
# //查看$TEAMNAME状态:teamdctl $TEAMNAME st

# 四、重启网络服务
read -p "配置文件创建完毕,是否现在重启网络(Y/N):" p
[ "$p" != "Y" ] && exit 
/etc/init.d/network restart

echo "------All done-------"


linux5_6-net-bond.sh  (linux5、6系统双网卡主备,需本机上运行)

#!/bin/bash
#
########################################################
# SCRIPT NAME: linux5_6-net-bond.sh
#      AUTHOR: LCF
# CREATE DATE: 2019.12.13.05-00
#    PLATFORM: Linux5,Linux6
#     VERSION: 1.1
########################################################

# bond文件名
BondName=bond100
IPADDR=$1
NETMASK=$2
GATEWAY=$3
DNS1=$4
DNS2=$5

# -查找列出可用的DEVICE
echo "------------------linux5、linux6网卡绑定脚本------------------"
redhat_release=`cat /etc/redhat-release`
echo -e ">>当前系统是:\033[32m$redhat_release\033[0m"
# -版本检测
echo "$redhat_release" | grep "release 5" &> /dev/null && temp=5
echo "$redhat_release" | grep "release 6" &> /dev/null && temp=6
echo "$redhat_release" | grep "release 7" &> /dev/null && temp=7
if [ "$temp" == "5" -o "$temp" == "6" ];then
	a=`ifconfig -a | grep -E "^[a-z].*" | awk '{print $1}'`
else
#	a=`ip a | grep -E "^[1-9].*" | awk '{print $2}' | awk -F ":" '{print $1}'`
	echo -e "\033[31m警告:当前脚本只适用于Linux5或linux6系统,不能在$redhat_release系统上运行。\033[0m"
	exit
fi
echo -e ">>当前可用DEVICE:\n\033[32m$a\033[0m"

# 判断输入参数不小于3个
if [ $# -lt 3 ];then

	echo "请在脚本后面输入参数,ifcfg-$BondName文件的IP、字网掩码、网关、DNS1、DNS2(空格做间隔)" 
	echo -e "示例:\n\033[32m[root@Test-130 ~]# /root/linux-net-bond.sh 192.168.10.50 255.255.255.0 192.168.10.2 192.168.10.2 8.8.8.8\033[0m"
	exit
fi 

read -p ">请正确输入要绑定的第一个网卡DEVICE:" device1
read -p ">请正确输入要绑定的第一个网卡DEVICE:" device2
read -p "当前系统:$redhat_release 指定绑定网卡:$device1和$device2 指定IP=$IPADDR 掩码=$NETMASK 网关=$GATEWAY DNS1=$DNS1 DNS2=$DNS2 信息确认(Y/N):" p
[ "$p" != "Y" ] && exit 

# 提前备份/etc/sysconfig/network-scripts文件夹、备份/etc/modprobe.d/dist.conf文件
echo ">>正在检测备份文件.."
[ -d "/etc/sysconfig/.network-scripts.bak" ] || cp -rp /etc/sysconfig/network-scripts /etc/sysconfig/.network-scripts.bak
[ -f "/etc/modprobe.d/.dist.conf.bak" ] || cp -rp /etc/modprobe.d/dist.conf /etc/modprobe.d/.dist.conf.bak
echo ">>已备份(/etc/sysconfig/network-scripts备份目录位置:/etc/sysconfig/.network-scripts.bak)"

# 开始创建三个配置文件
cd /etc/sysconfig/network-scripts
echo "开始创建ifcfg-$BondName文件..."

echo "DEVICE=$BondName
BONDING_OPTS="miimon=100 mode=1"
IPADDR=$IPADDR
NETMASK=$NETMASK
GATEWAY=$GATEWAY
DNS1=$DNS1
DNS2=$DNS2
ONBOOT=yes
BOOTPROTO=static
USERCTL=no" > ifcfg-bond100


echo "开始创建ifcfg-$device1文件..."
echo "DEVICE=$device1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=$BondName 
SLAVE=yes
USERCTL=no" > ifcfg-$device1

echo "开始创建ifcfg-$device2文件..."
echo "DEVICE=$device2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=$BondName 
SLAVE=yes
USERCTL=no" > ifcfg-$device2

# 添加配置到/etc/modprobe.d/dist.conf文件
grep "alias $BondName bonding" /etc/modprobe.d/dist.conf > /dev/null
if [ $? -gt 0 ];then
	echo "alias $BondName bonding" >> /etc/modprobe.d/dist.conf
fi
grep "options bond100 miimon=100 mode=1" /etc/modprobe.d/dist.conf > /dev/null
if [ $? -gt 0 ];then
	echo "options $BondName miimon=100 mode=1" >> /etc/modprobe.d/dist.conf
fi
modprobe bonding

# 重启网络服务
read -p "配置文件创建完毕,是否现在重启网络(Y/N):" p
[ "$p" != "Y" ] && exit
echo "关闭NetworkManager、重启network服务..."
/etc/init.d/NetworkManager stop
chkconfig --del NetworkManager
/etc/init.d/NetworkManager status
/etc/init.d/network restart
echo "启动网卡$BondName、$device1、$device2..."
ifconfig $BondName up
ifconfig $device1 up
ifconfig $device2 up
echo -E "All Done"


linux-5_6_mode4.sh    (linux5、6系统双网卡聚合加大带宽,需本机上运行和交换机上做相关配置)

#!/bin/bash
#
########################################################
# SCRIPT NAME: linux-5_6_mode4.sh
#      AUTHOR: LCF
# CREATE DATE: 2019.12.13.05-00
#    PLATFORM: Linux5,Linux6,Linux7
#     VERSION: 1.1
########################################################

# bond文件名
BondName=bond100
IPADDR=$1
NETMASK=$2
GATEWAY=$3
DNS1=$4
DNS2=$5

# -查找列出可用的DEVICE
echo "------------------linux5、linux6网卡绑定脚本------------------"
redhat_release=`cat /etc/redhat-release`
echo -e ">>当前系统是:\033[32m$redhat_release\033[0m"
# -版本检测
echo "$redhat_release" | grep "release 5" &> /dev/null && temp=5
echo "$redhat_release" | grep "release 6" &> /dev/null && temp=6
echo "$redhat_release" | grep "release 7" &> /dev/null && temp=7
if [ "$temp" == "5" -o "$temp" == "6" ];then
	a=`ifconfig -a | grep -E "^[a-z].*" | awk '{print $1}'`
else
#	a=`ip a | grep -E "^[1-9].*" | awk '{print $2}' | awk -F ":" '{print $1}'`
	echo -e "\033[31m警告:当前脚本只适用于Linux5或linux6系统,不能在$redhat_release系统上运行。\033[0m"
	exit
fi
echo -e ">>当前可用DEVICE:\n\033[32m$a\033[0m"

# 判断输入参数不小于3个
if [ $# -lt 3 ];then

	echo "请在脚本后面输入参数,ifcfg-$BondName文件的IP、字网掩码、网关、DNS1、DNS2(空格做间隔)" 
	echo -e "示例:\n\033[32m[root@Test-130 ~]# /root/linux-net-bond.sh 192.168.10.50 255.255.255.0 192.168.10.2 192.168.10.2 8.8.8.8\033[0m"
	exit
fi 

read -p ">请正确输入要绑定的第一个网卡DEVICE:" device1
read -p ">请正确输入要绑定的第一个网卡DEVICE:" device2
read -p "当前系统:$redhat_release 指定绑定网卡:$device1和$device2 指定IP=$IPADDR 掩码=$NETMASK 网关=$GATEWAY DNS1=$DNS1 DNS2=$DNS2 信息确认(Y/N):" p
[ "$p" != "Y" ] && exit 

# 提前备份/etc/sysconfig/network-scripts文件夹、备份/etc/modprobe.d/dist.conf文件
echo ">>正在检测备份文件.."
[ -d "/etc/sysconfig/.network-scripts.bak" ] || cp -rp /etc/sysconfig/network-scripts /etc/sysconfig/.network-scripts.bak
[ -f "/etc/modprobe.d/.dist.conf.bak" ] || cp -rp /etc/modprobe.d/dist.conf /etc/modprobe.d/.dist.conf.bak
echo ">>已备份(/etc/sysconfig/network-scripts备份目录位置:/etc/sysconfig/.network-scripts.bak)"

# 开始创建三个配置文件
cd /etc/sysconfig/network-scripts
echo "开始创建ifcfg-$BondName文件..."

echo "DEVICE=$BondName
BONDING_OPTS="miimon=100 mode=4 lacp_rate=fast xmit_hash_policy=layer2+3"
IPADDR=$IPADDR
NETMASK=$NETMASK
GATEWAY=$GATEWAY
DNS1=$DNS1
DNS2=$DNS2
ONBOOT=yes
BOOTPROTO=static
USERCTL=no" > ifcfg-bond100


echo "开始创建ifcfg-$device1文件..."
echo "DEVICE=$device1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=$BondName 
SLAVE=yes
USERCTL=no" > ifcfg-$device1

echo "开始创建ifcfg-$device2文件..."
echo "DEVICE=$device2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=$BondName 
SLAVE=yes
USERCTL=no" > ifcfg-$device2

# 添加配置到/etc/modprobe.d/dist.conf文件
grep "alias $BondName bonding" /etc/modprobe.d/dist.conf > /dev/null
if [ $? -gt 0 ];then
	echo "alias $BondName bonding" >> /etc/modprobe.d/dist.conf
fi
grep "options bond100 miimon=100 mode=4" /etc/modprobe.d/dist.conf > /dev/null
if [ $? -gt 0 ];then
	echo "options $BondName miimon=100 mode=4" >> /etc/modprobe.d/dist.conf
fi
modprobe bonding

# 重启网络服务
read -p "配置文件创建完毕,是否现在重启网络(Y/N):" p
[ "$p" != "Y" ] && exit
echo "关闭NetworkManager、重启network服务..."
/etc/init.d/NetworkManager stop
chkconfig --del NetworkManager
/etc/init.d/NetworkManager status
/etc/init.d/network restart
echo "启动网卡$BondName、$device1、$device2..."
ifconfig $BondName up
ifconfig $device1 up
ifconfig $device2 up
echo -E "All Done"

 

发布了161 篇原创文章 · 获赞 35 · 访问量 15万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章