Beispiel einer Skriptmethode für die Bindung von Linux-Dualnetzwerkkarten

Beispiel einer Skriptmethode für die Bindung von Linux-Dualnetzwerkkarten

Bei der Bedienung und Konfiguration von Linux wird häufig die Bindung von zwei Netzwerkkarten verwendet. Die Konfiguration einiger Server ist in Ordnung, aber wenn Sie Dutzende oder sogar Hunderte von Servern konfigurieren müssen, wird es zwangsläufig langweilig und fehleranfällig. Ich habe dieses Hilfsskript für die Bindung von zwei Netzwerkkarten geschrieben, mit dem die Arbeit der Bindung von zwei Netzwerkkarten unter Linux kinderleicht erledigt werden kann. Natürlich wird dieses Skript hauptsächlich für die Konfiguration kleinerer Systeme verwendet. Wenn Sie eine große Anzahl von Servern konfigurieren müssen, können Sie die Bindungsfunktion im Skript extrahieren und geringfügige Änderungen vornehmen. Es ist einen Versuch wert!

1. Geltungsbereich

Dieses Shell-Skript kann in den folgenden Linux-Systemen mehrere verbundene Netzwerkkarten erstellen, was für Produktionsumgebungen problemlos möglich ist:

  • Redhat 5.x
  • CentOS 5.x
  • Kylin 3.x
  • KUX 2.x

2. Skriptfunktionen

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Die von Ihnen eingegebenen Informationen:

Erste Netzwerkkarte: eth0
Zweite Netzwerkkarte: eth1
Anleihename: bond1
IP-Adresse: 192.168.56.11
Netzmaske: 255.255.255.0
Bindungsmodus: Modus = 1
primäre Netzwerkkarte: keine
----------------------------------------------

Bitte stellen Sie sicher, dass es in Ordnung ist[y/n]:y

Wie oben erwähnt, werden Sie während der Verwendung des Skripts aufgefordert, den Namen der zu bindenden Subnetzkarte, den Namen der gebundenen Netzwerkkarte, die IP-Adresse und Subnetzmaske sowie den Bindungsmodus einzugeben und anzugeben, ob die primäre Netzwerkkarte angegeben werden soll. Außerdem werden die verfügbaren Netzwerkkarten im System aktiv identifiziert und aufgelistet, damit der Benutzer sie auswählen kann. Gleichzeitig wird die Richtigkeit der eingegebenen Informationen beurteilt, um eine reibungslose Bindung der dualen Netzwerkkarten sicherzustellen.

3. Gebrauchsanweisung

Laden Sie zunächst das Skript in ein beliebiges Verzeichnis auf dem Linux-System hoch und führen Sie es als Root-Benutzer aus:

[root@node1 tmp]# sh bonding_v2.0.sh 

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

 
4 Netzwerkkarten verfügbar:
eth0 eth1 eth2 eth3
----------------------------------------------

Bitte geben Sie die erste Netzwerkkarte ein:_

Zunächst listet das Skript die Anzahl der im System verfügbaren Netzwerkkarten auf und fordert Sie auf, den Namen der ersten anzubindenden Subnetzkarte einzugeben. Geben Sie hier eth2 ein.

Sie müssen sich keine Sorgen über Eingabefehler, doppelte Eingaben usw. machen. Das Skript prüft automatisch, ob Ihre Eingabeinformationen korrekt sind.

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

4 Netzwerkkarten verfügbar:
eth0 eth1 eth2 eth3

Die von Ihnen eingegebenen Informationen:
Erste Netzwerkkarte: eth2
----------------------------------------------

Bitte wählen Sie die zweite Netzwerkkarte:_

Anschließend gibst du den Namen der zweiten anzubindenden Netzwerkkarte ein, eth3. Bei einer falschen Eingabe erscheint eine entsprechende Eingabeaufforderung. Bei einer falschen Eingabe von eth8 wirst du beispielsweise zu einer erneuten Eingabe aufgefordert:

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

4 Netzwerkkarten verfügbar:
eth0 eth1 eth2 eth3

Die von Ihnen eingegebenen Informationen:
Erste Netzwerkkarte: eth2
----------------------------------------------

eth8 ist nicht verfügbar, bitte geben Sie ein anderes ein.

Bitte wählen Sie die zweite Netzwerkkarte:_

Nachdem Sie die zweite Netzwerkkarte eth3, die gebunden werden muss, korrekt eingegeben haben, lautet der Standardname der ersten gebundenen Netzwerkkarte bond0, wenn zuvor keine gebundene Netzwerkkarte im Linux-System vorhanden war. Wenn im System eine gebundene Netzwerkkarte vorhanden ist, werden Sie vom Skript aufgefordert, bondN einzugeben (N ist eine Zahl):

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Die von Ihnen eingegebenen Informationen:
Erste Netzwerkkarte: eth2
Zweite Netzwerkkarte: eth3
Anleihenname: bond0
----------------------------------------------

Der standardmäßige erste Anleihenname ist --bond0.

Bitte geben Sie eine IP-Adresse ein:_

Folgen Sie den Anweisungen, um die IP-Adresse einzugeben, die Sie binden möchten, z. B. 10.1.1.1

Das Skript ermittelt automatisch, ob das eingegebene IP-Adressformat und der Bereich korrekt sind, sodass Sie sich keine Sorgen über Eingabefehler machen müssen.

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Die von Ihnen eingegebenen Informationen:
Erste Netzwerkkarte: eth2
Zweite Netzwerkkarte: eth3
Anleihenname: bond0
IP-Adresse: 10.1.1.1
----------------------------------------------

Bitte geben Sie die NETMASK[255.255.255.0]:_ ein.

Nach der Eingabe der IP-Adresse werden Sie aufgefordert, die Subnetzmaske einzugeben. Der Standardwert ist 255.255.255.0. Drücken Sie einfach die Eingabetaste. Sie können auch eine benutzerdefinierte Subnetzmaske eingeben.

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Die von Ihnen eingegebenen Informationen:
Erste Netzwerkkarte: eth2
Zweite Netzwerkkarte: eth3
Anleihenname: bond0
IP-Adresse: 10.1.1.1
Netzmaske: 255.255.255.0
----------------------------------------------

Bitte geben Sie den Bonding-Modus ein [Standard: Modus = 1, Active-Backup]:_

In diesem Schritt geben Sie die Bindungsebene der Netzwerkkarte ein. Die Standardeinstellung ist der Master-Slave-Modus: mode=1. Drücken Sie einfach die Eingabetaste. Sie können auch eine benutzerdefinierte Bindungsebene eingeben (z. B. mode=6). Das Format ist:

Modus = {0,1,2,3,4,5,6}

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Die von Ihnen eingegebenen Informationen:

Erste Netzwerkkarte: eth2
Zweite Netzwerkkarte: eth3
Anleihename: bond0
IP-Adresse: 10.1.1.1
Netzmaske: 255.255.255.0
Bindungsmodus: Modus = 1
----------------------------------------------

1-eth2
2-eth3
3-keine
Wählen Sie, ob die primäre Netzwerkkarte eingerichtet werden soll oder nicht [Standard: 3-keine]:_

Zu diesem Zeitpunkt fragt das Skript, ob eine primäre Netzwerkkarte eingerichtet werden soll. Die Funktion der primären Netzwerkkarte besteht darin, dass die primäre Netzwerkkarte vorrangig aktiv ist, wenn alle untergeordneten Netzwerkkarten normal sind. Standardmäßig wird hier keine primäre Netzwerkkarte eingerichtet. Sie können auch die Nummer 1 oder 2 eingeben, um eine Netzwerkkarte als primäre Netzwerkkarte auszuwählen.

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Die von Ihnen eingegebenen Informationen:

Erste Netzwerkkarte: eth2
Zweite Netzwerkkarte: eth3
Anleihename: bond0
IP-Adresse: 10.1.1.1
Netzmaske: 255.255.255.0
Bindungsmodus: Modus = 1
primäre Netzwerkkarte: keine
----------------------------------------------

Bitte stellen Sie sicher, dass es in Ordnung ist[j/n]:_

An diesem Punkt wurden alle Informationen eingegeben. Das Skript fragt Sie, ob alle eingegebenen Informationen korrekt sind. Wenn dies der Fall ist, geben Sie „y“ ein und fahren Sie mit dem nächsten Schritt fort. Andernfalls geben Sie „n“ ein und geben Sie die obigen Informationen erneut ein.

----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Vollständig!
Dateisicherungsverzeichnis: /etc/sysconfig/network-scripts/inspur_bak

Sie können die Datei überprüfen und anschließend den Netzwerkdienst neu starten.

1) Neustart des Servicenetzwerks
2) Ausfahrt
----------------------------------------------
Bitte treffen Sie Ihre Wahl:_

Wenn Sie dies sehen, wurden alle an die Netzwerkkarte gebundenen Konfigurationsdateien geändert. Geben Sie 1 ein, um den Netzwerkdienst neu zu starten; geben Sie 2 ein, um das Skript direkt zu beenden.

Es wird empfohlen, den Netzwerkdienst neu zu starten. Wenn Sie das Skript direkt beenden, ohne den Netzwerkdienst neu zu starten, wird die geänderte Konfigurationsdatei nicht wirksam und die angezeigten Informationen sind abnormal, wenn Sie das Skript zum Erstellen der nächsten gebundenen Netzwerkkarte verwenden (da das Skript die aktuellen Netzwerkkarteninformationen über den Befehl ifconfig erhält).

Sie können die Datei überprüfen und anschließend den Netzwerkdienst neu starten.

1) Neustart des Servicenetzwerks
2) Ausfahrt
  ----------------------------------------------
Bitte treffen Sie Ihre Wahl:1
Schnittstelle eth0 wird heruntergefahren: [ OK ]
Schnittstelle eth1 wird heruntergefahren: [ OK ]
Schnittstelle eth2 wird heruntergefahren: [ OK ]
Schnittstelle eth3 wird heruntergefahren: [ OK ]
Loopback-Schnittstelle herunterfahren: [OK]
Loopback-Schnittstelle öffnen: [OK]
Popup-Schnittstelle bond0: RTNETLINK antwortet: Datei existiert
Fehler beim Hinzufügen der Adresse 10.1.1.1 auf Bond0.
                              [Sicher]
Popup-Schnittstelle eth0: [OK]
Popup-Schnittstelle eth1: [OK]

Wenn Sie den Netzwerkdienst zum ersten Mal neu starten, wird möglicherweise eine Fehlermeldung ähnlich der oben angezeigt. Keine Sorge, die Konfiguration ist tatsächlich abgeschlossen. Starten Sie den Netzwerkdienst erneut und er wird wieder normal funktionieren.

Die während des Bindungsprozesses geänderten Konfigurationsdateien sind wie folgt:

[root@node1 tmp]# cd /etc/sysconfig/network-scripts/
[root@node1 Netzwerkskripte]# cat ifcfg-bond0 
GERÄT=Bindung0
BOOTPROTO=keine
ONBOOT=ja
TYP=Ethernet
USERCTL=nein
IPV6INIT=nein
PEERDNS=ja
IPADDR=10.1.1.1
NETMASK=255.255.255.0
BONDING_OPTS="miimon=100 Modus=1"

[root@node1 Netzwerkskripte]# cat ifcfg-eth2 
GERÄT=eth2
BOOTPROTO=keine
#HWADDR=08:00:27:41:b4:16
ONBOOT=ja
TYP=Ethernet
USERCTL=nein
IPV6INIT=nein
PEERDNS=ja
SLAVE=ja
MASTER=Bindung0

[root@node1 Netzwerkskripte]# cat ifcfg-eth3
GERÄT=eth3
BOOTPROTO=keine
#HWADDR=08:00:27:6c:3d:0c
ONBOOT=ja
TYP=Ethernet
USERCTL=nein
IPV6INIT=nein
PEERDNS=ja
SLAVE=ja
MASTER=Bindung0

[root@node1 Netzwerkskripte]# cat /etc/modprobe.conf
Alias ​​SCSI-Hostadapter ATA_PIIX
Alias ​​scsi_hostadapter1 ahci
Alias ​​net-pf-10 aus
Alias ​​IPv6 aus
Optionen IPv6 deaktivieren = 1
Alias ​​SND-Karte-0 SND-Intel8x0
Optionen SND-Karte-0 Index = 0
Optionen snd-intel8x0 Index = 0
snd-intel8x0 entfernen { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0
Alias ​​eth0 e1000
Alias ​​eth1 e1000
Alias ​​eth2 e1000
Alias ​​eth3 e1000
Alias ​​bond0 Bindung

Die Netzwerkkonfigurationsinformationen lauten wie folgt:

[root@node1 tmp]# ifconfig 
bond0 Link encap:Ethernet HWaddr 08:00:27:41:B4:16 
     Inet-Adresse: 10.1.1.1 Bcast: 10.1.1.255 Maske: 255.255.255.0
     UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metrik:1
     RX-Pakete:1197 Fehler:0 verloren:0 Überläufe:0 Frame:0
     TX-Pakete: 125 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0
     Kollisionen:0 txqueuelen:0 
     RX-Bytes: 106338 (103,8 KiB) TX-Bytes: 16662 (16,2 KiB)

eth0 Link encap:Ethernet HWaddr 08:00:27:35:B4:81 
     Inet-Adresse: 192.168.56.11 Bcast: 192.168.56.255 Maske: 255.255.255.0
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
     RX-Pakete:1487 Fehler:0 verloren:0 Überläufe:0 Frame:0
     TX-Pakete: 1190 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0
     Kollisionen:0 txqueuelen:1000 
     RX-Bytes: 146576 (143,1 KiB) TX-Bytes: 151787 (148,2 KiB)

eth1 Link encap:Ethernet HWaddr 08:00:27:72:08:46 
     Inet-Adresse: 10.1.1.11 Bcast: 10.1.1.255 Maske: 255.255.255.0
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
     RX-Pakete: 193 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0
     TX-Pakete: 455 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0
     Kollisionen:0 txqueuelen:1000 
     RX-Bytes: 31434 (30,6 KiB) TX-Bytes: 22657 (22,1 KiB)

eth2 Link encap:Ethernet HWaddr 08:00:27:41:B4:16 
     UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metrik:1
     RX-Pakete: 591 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0
     TX-Pakete:93 Fehler:0 verloren:0 Überläufe:0 Träger:0
     Kollisionen:0 txqueuelen:1000 
     RX-Bytes: 55217 (53,9 KiB) TX-Bytes: 10511 (10,2 KiB)

eth3 Link encap:Ethernet HWaddr 08:00:27:41:B4:16 
     UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metrik:1
     RX-Pakete: 606 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0
     TX-Pakete: 32 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0
     Kollisionen:0 txqueuelen:1000 
     RX-Bytes: 51121 (49,9 KiB) TX-Bytes: 6151 (6,0 KiB)

lo Link encap: Lokaler Loopback 
     inet-Adresse:127.0.0.1 Maske:255.0.0.0
     UP LOOPBACK RUNNING MTU:16436 Metrik:1
     RX-Pakete: 3297 Fehler: 0 verloren: 0 Überläufe: 0 Frame: 0
     TX-Pakete: 3297 Fehler: 0 verloren: 0 Überläufe: 0 Träger: 0
     Kollisionen:0 txqueuelen:0 
     RX-Bytes: 4725726 (4,5 MiB) TX-Bytes: 4725726 (4,5 MiB)

Informationen zur Bindung von Dual-Netzwerkkarten:

[root@node1 tmp]# cat /proc/net/bonding/bonding0 
Ethernet Channel Bonding-Treiber: v3.4.0-2 (7. Oktober 2008)

Bonding-Modus: Fehlertoleranz (aktive Sicherung)
Primärer Slave: Keiner
Derzeit aktiver Slave: eth2
MII-Status: nach oben
MII-Polling-Intervall (ms): 100
Verzögerung beim Hochfahren (ms): 0
Down-Verzögerung (ms): 0

Slave-Schnittstelle: eth2
MII-Status: nach oben
Geschwindigkeit: 1000 Mbit/s
Duplex: voll
Anzahl der Verbindungsfehler: 0
Permanente HW-Adresse: 08:00:27:41:b4:16

Slave-Schnittstelle: eth3
MII-Status: nach oben
Geschwindigkeit: 1000 Mbit/s
Duplex: voll
Anzahl der Verbindungsfehler: 0
Permanente HW-Adresse: 08:00:27:6c:3d:0c

4. Skriptcode

#!/bin/bash
# Datum:26.11.2018 14:28:45
# Autor:ZhangJian
# Mail:[email protected]
# Func:Netzwerkbündelung konfigurieren
# Version:2.0
#Versionsaktualisierung V1.6: Der Bonding-Modus mode=x wird nicht mehr in die Datei modprobe.conf geschrieben, sondern in ifcfg-bond, da bei einer Änderung des Modus in der Datei modprobe.conf ein Neustart des Netzwerkdienstes möglicherweise nicht wirksam ist.
#Versionsupdate V2.0: Legen Sie die primäre Netzwerkkarte als optionales Element fest.

Trap "tput clear;tput cup 3;echo 'Bei Fragen: Senden Sie eine Nachricht an QQ 1037509307.';tput cup 6;exit" 2 3
wenn [[ -n $1 ]]; dann
 Katze <<EOF

Netzwerkkonfigurations-Assistent
          --- Netzwerkbindung konfigurieren v1.5

Verwendung:

    sch $0
    chmod +x $0 && ./$0

Ende der Laufzeit
Ausfahrt 0
fi

wenn [[ $UID -ne 0 ]]; dann
 tput klar
 tput tasse 6 20
 echo -e "Sie müssen den Benutzer verwenden: \033[31mROOT\033[0m"
 tput tasse 10
 Ausfahrt
fi

FEHLER(){
tput Tasse $1 $2;tput ed
echo „Eingabefehler. Bitte versuchen Sie es noch einmal.“
echo -e 'Drücken Sie die Eingabetaste, um fortzufahren..._\b\c'
EingangA lesen
}

Check_BakFile(){
#Dateisicherungsfunktion#Verwendung:
#Check_BakFile Der Name der zu sichernden Datei, das Sicherungsverzeichnis -x (in welchem ​​Zeitformat gesichert werden soll)
Fall ${3} in
  -d ) #Tägliches Backup Bak_Date=`date '+%Y-%m-%d'`
    ;;
  -H ) #Stündliches Backup Bak_Date=`date '+%Y-%m-%d_%H'`
    ;;
  -M) #Sicherung nach Minute Bak_Date=`date '+%Y-%m-%d_%H:%M'`
    ;;
  -m) #Monatliches Backup Bak_Date=`date '+%Y-%m'`
    ;;
  -Y ) #Jährliches Backup Bak_Date=`date '+%Y'`
    ;;
  * ) #Standardmäßige Sicherung nach Minute Bak_Date=`date '+%Y-%m-%d_%H:%M'`
    ;;
esac
#Bak_Date=`Datum '+%Y-%m-%d-%H:%M'`

[[ -d ${2}/${Bak_Date} ]] || mkdir -p ${2}/${Bak_Date}
cp -ra ${1} ${2}/${Bak_Date}
}

Bindung_vor(){
#Führende Funktion zur Bindung zweier Netzwerkkarten, bestimmt die Legitimität der Netzwerkkarte, IP usw. und leitet den Benutzer zur korrekten Eingabe der Parameter an.
#Alle echten Netzwerkkarten NIC_NAME_all=`ifconfig -a | awk '/\<Ethernet\>/ {print $1}' | grep -wEv '^bond[0-9]+'`
#Vorhandene verbundene Netzwerkkarte NIC_NAME_bond=`ifconfig -a | awk '/^\<bond[0-9]+\>/ {print $1}'`

#Drucken Sie die Netzwerkkarte aus, die bereits ein SLAVE ist NIC_NAME_slave=`ifconfig -a | sed -n '/SLAVE/{g;1!p;};h' | awk '{print $1}'`
NIC_NAME_slave=${NIC_NAME_slave:=NULL}
#Drucken Sie die verfügbaren Netzwerkkarten aus NIC_NAME_free=`echo "$NIC_NAME_all" | grep -Fwv "$NIC_NAME_slave"`
#Anzahl verfügbarer Netzwerkkarten NIC_NAME_free_nu=`echo "$NIC_NAME_free" | wc -w`

deklarieren -a NIC_LIST
NIC_LIST=($NIC_NAME_frei)

info_drucken(){
tput klar; tput Tasse 2
Katze <<EOF
----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------
Ende der Laufzeit
tput tasse 7
wenn [[ -n ${1} ]]; dann
 echo -e "Bereits vorhandenes Channel Bonding Interface des Systems:\n\033[31m${1}\033[0m\n"
fi
}

wenn [[ "$NIC_NAME_free_nu" -gt 1 ]]; dann
 info_drucken
 echo -e "\033[031m$NIC_NAME_free_nu\033[0m Netzwerkkarten verfügbar:"
 echo -e "\033[31m${NIC_LIST[@]}\033[0m"
 echo -e "----------------------------------------------\n"
 #Geben Sie den Namen der ersten Netzwerkkarte ein, solange true ist.
  echo -e "\nBitte geben Sie die erste Netzwerkkarte ein:_\b\c"
  NIC1 lesen
  echo ${NIC_LIST[@]} | grep -Fw "$NIC1" &> /dev/null
  wenn [[ $? -eq 0 ]]; dann
   info_drucken
   echo -e "\033[031m$NIC_NAME_free_nu\033[0m Netzwerkkarten verfügbar:\n\033[31m${NIC_LIST[@]}\033[0m"
   echo -e "\nDie von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: $NIC1"
   echo -e "----------------------------------------------\n"
   brechen
  anders
   info_drucken
   echo -e "\033[031m$NIC_NAME_free_nu\033[0m Netzwerkkarten verfügbar:\n\033[31m${NIC_LIST[@]}\033[0m"
   echo -e "----------------------------------------------\n"
   echo -e "\033[31m${NIC1}\033[0m ist nicht verfügbar, bitte geben Sie einen anderen ein."
  fi
 Erledigt
 #Geben Sie den Namen der zweiten Netzwerkkarte ein, während true;
  echo -e "\nBitte wählen Sie die zweite Netzwerkkarte:_\b\c"
  NIC2 lesen
  wenn [[ ${NIC1} != ${NIC2} ]]; dann
   echo ${NIC_LIST[@]} | grep -Fw "${NIC2}" &> /dev/null
   wenn [[ $? -eq 0 ]]; dann
    info_print "${NIC_NAME_bond}"
    echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}"
    echo -e "----------------------------------------------\n"
    brechen
   anders
    info_drucken
    echo -e "\033[031m$NIC_NAME_free_nu\033[0m Netzwerkkarten verfügbar:\n\033[31m${NIC_LIST[@]}\033[0m\n\nDie von Ihnen eingegebenen Informationen:\nErste NIC: ${NIC1}"
    echo -e "----------------------------------------------\n"
    echo -e "\033[31m${NIC2}\033[0m ist nicht verfügbar, bitte geben Sie einen anderen ein."
   fi
  anders
   info_drucken
   echo -e "\033[031m${NIC_NAME_free_nu}\033[0m Netzwerkkarten verfügbar:\n\033[31m${NIC_LIST[@]}\033[0m\n\nDie von Ihnen eingegebenen Informationen:\nErste NIC: ${NIC1}"
   echo -e "----------------------------------------------\n"
   echo -e "\033[31m${NIC2}\033[0m ist die erste Netzwerkkarte. Bitte geben Sie eine andere ein."
  fi
 Erledigt

 #Geben Sie den gebundenen NIC-Namen ein und führen Sie eine Plausibilitätsprüfung durch, wenn [[ -z ${NIC_NAME_bond} ]]; dann
  NAME_Bindung=Bindung0
  info_drucken
  echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}"
  echo -e "----------------------------------------------\n"
  echo "Der standardmäßige erste Anleihename ist -- bond0."
 anders
  während wahr; tun
   echo -e "\nBitte geben Sie einen Anleihenamen ein[bonN]:_\b\c"
   NAME_Bond lesen
   #Überprüfen Sie, ob das Eingabeformat das Anleihen+Zahlen-Format ist.
   echo "${NAME_bond}" | grep -wE '^bond[[:digit:]]+$' &> /dev/null
   wenn [[ $? -eq 0 ]]; dann
    echo "${NIC_NAME_bond}" | grep -Fw "${NAME_bond}" &> /dev/null
    wenn [[ $? -ne 0 ]]; dann
     info_print "${NIC_NAME_bond}"
     echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}"
     echo -e "----------------------------------------------\n"
     brechen
    anders
     info_print "${NIC_NAME_bond}"
     echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}"
     echo -e "----------------------------------------------\n"
     echo "Sie können keinen vorhandenen Namen verwenden: ${NAME_bond}"
     echo -e "\033[31m${NAME_bond}\033[0m ist nicht verfügbar. Bitte geben Sie einen anderen ein, z. B. -- bondN."
    fi
   anders
    info_print "${NIC_NAME_bond}"
    echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}"
    echo -e "----------------------------------------------\n"
    echo -e "\033[31m${NAME_bond}\033[0m ist nicht verfügbar. Bitte geben Sie einen anderen ein, z. B. -- bondN."
   fi
  Erledigt
 fi

 #IP-Adresse festlegen, solange wahr;
  echo -e "\nBitte geben Sie eine IP-Adresse ein:_\b\c"
  IP_Bond lesen
  echo "${IP_bond}" | grep -owE '^(([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\.){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})$' &> /dev/null
  wenn [[ $? -eq 0 ]]; dann
   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}"
   echo -e "----------------------------------------------\n"
   brechen
  anders
   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}"
   echo -e "----------------------------------------------\n"
   echo -e "IP-Adresse: \033[31m${IP_bond}\033[0m Formatfehler, bitte erneut eingeben."
  fi
 Erledigt
 #Netzmaske festlegen
 während wahr; tun
  echo -e "\nBitte geben Sie die NETMASK[255.255.255.0]:_\b\c ein"
  NETMASK_bond lesen
  NETMASK_bond=${NETMASK_bond:="255.255.255.0"} #Wenn die Variable NETMASK_bond leer ist, weisen Sie ihr den Standardwert 255.255.255.0 zu
  echo "$NETMASK_bond" | grep -owE '^(128|192|224|240|248|252|254|255)\.((0|128|192|224|240|248|252|254|255)\.){2}(0|128|192|224|240|248|252|254|255)$' &> /dev/null
  wenn [[ $? -eq 0 ]]; dann
   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}\nNetzmaske: ${NETMASK_bond}"
   echo -e "----------------------------------------------\n"
   brechen
  anders
   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}"
   echo -e "----------------------------------------------\n"
   echo -e "Eingabefehler.\nBitte geben Sie die richtige NETMASK ein oder drücken Sie die Eingabetaste, um 255.255.255.0 zu verwenden.\n"
  fi
 Erledigt
#:<<!zhushi! #Batch-Kommentare, wenn Batch-Kommentare aktiviert sind, ist der Standardmodus = 1
 während wahr; tun
  echo -e "\nBitte geben Sie den Bonding-Modus ein [Standard: Modus = 1, Active-Backup]:_\b\c"
  mode_bond lesen
  mode_bond=${mode_bond:="mode=1"} #Wenn die Variable mode_bond leer ist, weisen Sie ihr den Standardwert 1 zu
  wenn [[ ! ${mode_bond} =~ "mode=[0-6]" ]]; dann
   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}\Netzmaske: ${NETMASK_bond}"
   echo -e "----------------------------------------------\n"
   echo "Ungültige Antwort: ${mode_bond}"
   echo "Beispiel: mode={0,1,2,3,4,5,6}"
  anders
   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\n"
   echo -e "Erste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}\nNetzmaske: ${NETMASK_bond}\nBonding-Modus: ${mode_bond}"
   echo -e "----------------------------------------------\n"
   brechen
  fi
 Erledigt
#!zhushi!

 #Wählen Sie, ob die primäre Netzwerkkarte bei true gesetzt werden soll; tun Sie dies
  echo "1-${NIC1}"
  echo "2-${NIC2}"
  echo "3-keine"
  echo -e "Wählen Sie, ob die primäre Netzwerkkarte eingerichtet werden soll oder nicht [Standard: 3-keine]:_\b\c"
  get_primary_NIC lesen
  get_primary_NIC=${get_primary_NIC:="keine"}
    Fall ${get_primary_NIC} in
    1)
     get_primary_NIC=${NIC1}
     #echo "--$get_primary_NIC"
     brechen
     ;;
    2)
     get_primary_NIC=${NIC2}
      #echo "--$get_primary_NIC"
     brechen
     ;;
    3)
     get_primary_NIC=keine
      #echo "--$get_primary_NIC"
     brechen
     ;;
    keine )
     brechen
     ;;
    * )
      #echo "--$get_primary_NIC"
     info_drucken
     echo -e "Die von Ihnen eingegebenen Informationen:\nErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}\nNetzmaske: ${NETMASK_bond}"
     echo -e "----------------------------------------------\n"
     echo "Ungültige Antwort: ${get_primary_NIC}"
     echo "Bitte geben Sie eine Zahl in {1,2,3} ein oder drücken Sie die EINGABETASTE, um keine primäre Netzwerkkarte einzurichten."
     weitermachen
     ;;
   esac

   info_drucken
   echo -e "Die von Ihnen eingegebenen Informationen:\n"
   echo -e "Erste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}\nNetzmaske: ${NETMASK_bond}\nBonding-Modus: ${mode_bond}\nPrimäre Netzwerkkarte: ${get_primary_NIC}"
   echo -e "----------------------------------------------\n"
   brechen
 Erledigt

 #Zuletzt Informationen zur Bestätigung eingeben, while true; do
  info_drucken
  echo -e "Die von Ihnen eingegebenen Informationen:\n"
  echo -e "\033[31mErste Netzwerkkarte: ${NIC1}\nZweite Netzwerkkarte: ${NIC2}\nBond-Name: ${NAME_bond}\nIP-Adresse: ${IP_bond}\nNetzmaske: ${NETMASK_bond}\nBonding-Modus: ${mode_bond}\nPrimäre Netzwerkkarte: ${get_primary_NIC}\033[0m"
  echo -e "----------------------------------------------\n"
  echo -e "Bitte stellen Sie sicher, dass es in Ordnung ist[j/n]:_\b\c"
  Eingabe lesen
  Fall ${input} in
   [Yy]|[Yy][Ee][Ss] )
    Bindung "$NIC1" "$NIC2" "$NAME_bond" "$IP_bond" "$NETMASK_bond"
    brechen
    ;;
   [Nn]|[Nn][Oo] )
    bindung_vor
   ;;
   * )
    tput Tasse 7;tput ed
    FEHLER 7 10
   ;;
  esac
 Erledigt
anders
  info_drucken
  echo -e "Sie haben \033[031m${NIC_NAME_free_nu}\033[0m Netzwerkkarten verfügbar:\n"
  #Markieren Sie den hervorgehobenen „NIC-Namen“ rot echo -e "\033[31m${NIC_LIST[@]}\033[0m\n"
  echo -e "Es sind \033[31mnicht genug\033[0m Netzwerkkarten vorhanden, um eine Verbindung herzustellen"
  echo -e "Bitte überprüfen Sie es...\n"
  echo -e 'Zum Beenden die Eingabetaste drücken..._\b\c'
  Antwort lesen
  Ausfahrt 1
fi
}

Bindung(){
wenn [[ $# -lt 5 ]]
Dann
 echo 'Bindung fehlgeschlagen! Bitte geben Sie genügend Informationen an!'
 echo -e "\nVerwendung:\n sh bonding.sh <NIC1_name> <NIC2_name> <bond_name> <IP> <NETMASK>\n\n"
 Ausfahrt 1
fi
#Gerätenamen und IP-Informationen abrufen
SLAVE1_DEV="$1" #SLAVE1_DEV=ethx
SLAVE2_DEV="$2" #SLAVE2_DEV=ethx
BOND_DEV="$3" #BOND_DEV=bondx
SLAVE1=ifcfg-"$1"
SLAVE2=ifcfg-"$2"
BOND=ifcfg-"$3"
BOND_IPADDR="$4"
BOND_NETMASK="$5"
BOND_DIR=/etc/sysconfig/Netzwerkskripte
wenn [ -e $BOND_DIR/$BOND ]
Dann
 echo $BOND_DIR/$BOND ist bereits vorhanden
anders
 #Dateisicherung
 Check_BakFile "${BOND_DIR}/ifcfg-*" "${BOND_DIR}/inspur_bak" "-M"

#Mac-Adresse abrufen
 SLAVE1_MAC=`grep 'HWADDR' ${BOND_DIR}/${SLAVE1}`
 SLAVE2_MAC=`grep 'HWADDR' ${BOND_DIR}/${SLAVE2}`

 # $BOND ändern
 berühren Sie $BOND_DIR/$BOND
 echo "GERÄT=${BOND_DEV}" >> $BOND_DIR/$BOND
 echo "BOOTPROTO=keine" >> $BOND_DIR/$BOND
 echo "ONBOOT=yes" >> $BOND_DIR/$BOND
 echo "TYPE=Ethernet" >> $BOND_DIR/$BOND
 echo "USERCTL=nein" >> $BOND_DIR/$BOND
 echo "IPV6INIT=nein" >> $BOND_DIR/$BOND
 echo "PEERDNS=yes" >> $BOND_DIR/$BOND
 echo "IPADDR=${BOND_IPADDR}" >> $BOND_DIR/$BOND
 echo "NETMASK=${BOND_NETMASK}" >> $BOND_DIR/$BOND
 wenn [[ ${get_primary_NIC} == none ]]; dann
   echo "BONDING_OPTS=\"miimon=100 ${mode_bond}\"" >> $BOND_DIR/$BOND
 anders
   echo "BONDING_OPTS=\"miimon=100 ${mode_bond} primär=$(echo ${SLAVE1} | cut -d'-' -f2)\"" >> $BOND_DIR/$BOND
 fi

 # $SLAVE1 ändern
 > $BOND_DIR/$SLAVE1
 echo "GERÄT=${SLAVE1_DEV}" >> $BOND_DIR/$SLAVE1
 echo 'BOOTPROTO=keine' >> $BOND_DIR/$SLAVE1
 #cat $BOND_DIR/../ifcfg-bak/$SLAVE1 |grep HWADDR >> $BOND_DIR/$SLAVE1
 echo "#$SLAVE1_MAC" >> $BOND_DIR/$SLAVE1
 echo ONBOOT=yes >> $BOND_DIR/$SLAVE1
 echo TYPE=Ethernet >> $BOND_DIR/$SLAVE1
 echo USERCTL=nein >> $BOND_DIR/$SLAVE1
 echo IPV6INIT=nein >> $BOND_DIR/$SLAVE1
 echo PEERDNS=yes >> $BOND_DIR/$SLAVE1
 echo SLAVE=ja >> $BOND_DIR/$SLAVE1
 echo MASTER=$BOND_DEV >> $BOND_DIR/$SLAVE1

 # SLAVE2 ändern
 > $BOND_DIR/$SLAVE2
 echo "GERÄT=$SLAVE2_DEV" >> $BOND_DIR/$SLAVE2
 echo BOOTPROTO=keine >> $BOND_DIR/$SLAVE2
 #cat $BOND_DIR/../ifcfg-bak/$SLAVE2 |grep HWADDR >> $BOND_DIR/$SLAVE2
 echo "#$SLAVE2_MAC" >> $BOND_DIR/$SLAVE2
 echo ONBOOT=yes >> $BOND_DIR/$SLAVE2
 echo TYPE=Ethernet >> $BOND_DIR/$SLAVE2
 echo USERCTL=nein >> $BOND_DIR/$SLAVE2
 echo IPV6INIT=nein >> $BOND_DIR/$SLAVE2
 echo PEERDNS=yes >> $BOND_DIR/$SLAVE2
 echo SLAVE=ja >> $BOND_DIR/$SLAVE2
 echo MASTER=$BOND_DEV >> $BOND_DIR/$SLAVE2

 [[ -e /etc/modprobe.conf.bak ]] && cp /etc/modprobe.conf /etc/modprobe.conf.bak.new || cp /etc/modprobe.conf /etc/modprobe.conf.bak
 echo "alias $BOND_DEV bonding" >> /etc/modprobe.conf

während wahr; tun
 tput klar; tput Tasse 2
Katze <<EOF
----------------------------------------------
------ Netzwerkkonfigurationsassistent ------
----------------------------------------------

Vollständig!
Dateisicherungsverzeichnis: ${BOND_DIR}/inspur_bak

Sie können die Datei überprüfen und anschließend den Netzwerkdienst neu starten.

1) Neustart des Servicenetzwerks
2) Ausfahrt
----------------------------------------------
Ende der Laufzeit
  echo -e "Bitte treffen Sie Ihre Wahl:_\b\c"
  Antwort lesen
   Fall ${answer} in
    1)
     Neustart des Dienstnetzwerks
     Ausfahrt 0
     ;;
    2)
     Ausfahrt 0
     ;;
   esac

 Erledigt
fi
}

hauptsächlich(){
 während wahr; tun
  bindung_vor
 Erledigt
}

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Implementierung der Bindungskonfiguration für duale Netzwerkkarten im Linux-System
  • Linux nutzt duale Netzwerkkartenbindung und Schraubendreherschnittstelle
  • Konfigurationsprozess der Dual-Netzwerkkarte Firewalld unter Linux (empfohlen)
  • Detaillierte Erläuterung der Linux-Dual-Netzwerkkartenbindung zur Erzielung eines Lastenausgleichs
  • So richten Sie duale Netzwerkkarten in Linux ein
  • Zusammenfassung der Praxis der Konfiguration mit zwei Netzwerkkarten unter Linux
  • Linux verwendet Bond, um zwei Netzwerkkarten zu implementieren und einen einzelnen IP-Beispielcode zu binden

<<:  Detaillierte Erläuterung der Vorverarbeitungsmethode für WeChat-Applet-Anforderungen

>>:  Grafisches Tutorial zur Installation der dekomprimierten Version von mysql5.7.14

Artikel empfehlen

Reines CSS zum Ändern der Farbe des Bildes

Die CSS-Technik zum Ändern der Farbe eines Bildes...

SSM VUE Axios Detaillierte Erklärung

Inhaltsverzeichnis Wie wird das SQL-Protokoll ang...

Tutorial zur Installation von MYSQL8.X auf Centos

MySQL-Installation (4, 5, 6 können weggelassen we...

So stellen Sie MySQL 5.7- und 8.0-Master-Slave-Cluster mit Docker bereit

> MySQL 5.7 Cluster Master und Slave bereitste...

mysql5.7-Remotezugriffseinstellungen

Das Einrichten des Fernzugriffs in mysql5.7 funkt...

Detaillierte Erläuterung der drei Möglichkeiten zum Importieren von CSS-Dateien

Es gibt drei Möglichkeiten, CSS einzuführen: Inli...

MySQL-Transaktionskontrollfluss und ACID-Eigenschaften

Inhaltsverzeichnis 1. ACID-Eigenschaften Syntax d...

Konfigurieren Sie die Java-Entwicklungsumgebung in Ubuntu 20.04 LTS

Laden Sie das Java Development Kit jdk herunter D...

Die letzten zwei Jahre mit User Experience

<br />Es ist nicht länger als zwei Jahre her...

Erläuterung der Methode zum Schreiben von SQL-Anweisungen zum Einfügen

Methode 1: INSERT INTO t1(Feld1,Feld2) VALUE(v001...

Implementierung der Vue-Nuxt-Anmeldeauthentifizierung

Inhaltsverzeichnis einführen Link Start Gehen Sie...

Vue3-Zeitstempelkonvertierung (ohne Verwendung von Filtern)

Wenn vue2 Zeitstempel konvertiert, verwendet es i...

Tutorial zur Installation von MYSQL8.0 auf Alibaba Cloud ESC

Öffnen Sie das Verbindungstool. Ich verwende Moba...