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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章