Einführung
In diesem Lab lernen Sie, wie Sie Link Aggregation, auch bekannt als Port Bonding, in einer Linux-Umgebung implementieren. Diese leistungsstarke Technik ermöglicht es Ihnen, mehrere physische Netzwerkschnittstellen zu einer einzigen logischen Schnittstelle zu kombinieren, was den Netzwerkdurchsatz erhöhen und Fehlertoleranz bieten kann. Sie werden praktische Erfahrungen mit wichtigen Linux-Netzwerkbefehlen sammeln, um eine gebundene Verbindung zu konfigurieren und zu verwalten.
In einem schrittweisen Prozess identifizieren Sie zunächst die verfügbaren Netzwerkschnittstellen auf Ihrem System mit dem Befehl ip a. Für eine sichere und praktische Demonstration erstellen wir zwei virtuelle "Dummy"-Schnittstellen, dummy1 und dummy2, um eine Multi-Schnittstellen-Umgebung zu simulieren. Anschließend erstellen Sie eine neue virtuelle Bond-Schnittstelle, bond0, und fügen diese beiden Dummy-Schnittstellen hinzu. Danach weisen Sie der neu erstellten bond0-Schnittstelle eine statische IP-Adresse zu, um die Kommunikation zu ermöglichen. Abschließend überprüfen Sie die gesamte Konfiguration und den Status des aktiven Bonds, um sicherzustellen, dass er korrekt funktioniert.
Verfügbare Netzwerkschnittstellen mit ip a identifizieren
In diesem Schritt identifizieren Sie zunächst die auf Ihrer LabEx VM verfügbaren Netzwerkschnittstellen. Bevor Sie mehrere Netzwerkschnittstellen zu einem einzigen gebundenen Link zusammenfassen können, müssen Sie deren Namen kennen. Der moderne und bevorzugte Befehl für diese Aufgabe unter Linux ist ip a (eine Kurzform für ip addr show).
Dieser Befehl zeigt alle Netzwerkschnittstellen auf dem System an, zusammen mit ihren IP-Adressen, MAC-Adressen und ihrem Betriebszustand.
Öffnen Sie zuerst Ihr Terminal. Es sollte bereits geöffnet und im Verzeichnis ~/project sein. Führen Sie nun den Befehl ip a aus, um alle Netzwerkschnittstellen aufzulisten:
ip a
Sie sehen eine Ausgabe, die mehrere Schnittstellen auflistet. Sie sollten auf einige wichtige Details achten:
lo: Dies ist die Loopback-Schnittstelle, eine virtuelle Schnittstelle, über die das System mit sich selbst kommuniziert. Diese wird für das Bonding ignoriert.eth0: Dies ist die primäre Ethernet-Schnittstelle. Wir werden sie nicht verwenden, um sicherzustellen, dass unsere Verbindung zur Laborumgebung stabil bleibt.docker0: Dies ist eine virtuelle Bridge, die von Docker erstellt wurde. Sie ist derzeitDOWNund für dieses Lab nicht geeignet.dummy1,dummy2: Dies sind zwei Dummy-Virtual-Schnittstellen, die wir hinzugefügt haben, um zwei zusätzliche Netzwerkkarten für dieses Lab zu simulieren. Dies sind die Schnittstellen, die wir zusammenbinden werden.state UP: Dies zeigt an, dass die Schnittstelle aktiv ist.
Ihre Ausgabe wird in etwa wie folgt aussehen. Beachten Sie die Namen Ihrer Dummy-Schnittstellen, dummy1 und dummy2, da Sie diese in den nächsten Schritten benötigen werden.
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:00:20:a3 brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname ens5
inet 172.16.50.188/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
valid_lft 1892159680sec preferred_lft 1892159680sec
inet6 fe80::216:3eff:fe00:20a3/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:2c:eb:c9:91 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
4: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
inet6 fe80::5caf:4ff:fe97:69bd/64 scope link
valid_lft forever preferred_lft forever
5: dummy2: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 2e:5f:12:08:3a:eb brd ff:ff:ff:ff:ff:ff
inet6 fe80::5caf:4ff:fe97:69be/64 scope link
valid_lft forever preferred_lft forever
Aus der obigen Ausgabe haben wir zwei geeignete Schnittstellen für unsere Bonding-Konfiguration identifiziert: dummy1 und dummy2. In den folgenden Schritten werden Sie diese Schnittstellennamen verwenden, um eine neue gebundene Schnittstelle zu erstellen.
Bond-Schnittstelle 'bond0' erstellen und aktivieren
In diesem Schritt erstellen Sie die logische "Bond"-Schnittstelle, die als Master für Ihre Netzwerkkarten dient. Dies erfordert zwei Hauptaktionen: das Laden des notwendigen Linux-Kernel-Moduls für Bonding und anschließend das Erstellen und Aktivieren der Schnittstelle selbst.
Zuerst müssen Sie sicherstellen, dass das bonding-Kernel-Modul geladen ist. Dieses Modul enthält den Code, der es dem Kernel ermöglicht, gebundene Schnittstellen zu verwalten. Sie können es mit dem Befehl modprobe laden.
sudo modprobe bonding
Um zu bestätigen, dass das Modul erfolgreich geladen wurde, können Sie den Befehl lsmod verwenden, der alle geladenen Kernel-Module auflistet, und grep, um nach "bonding" zu filtern.
lsmod | grep bonding
Sie sollten eine Ausgabe sehen, die anzeigt, dass das bonding-Modul nun in Gebrauch ist:
bonding 196608 0
Nachdem der Kernel bereit ist, können Sie die neue logische Schnittstelle erstellen. Wir werden sie bond0 nennen. Verwenden Sie den Befehl ip link, um einen neuen virtuellen Link vom Typ bond hinzuzufügen.
sudo ip link add bond0 type bond
Dieser Befehl erstellt die Schnittstelle, aber sie befindet sich standardmäßig im Zustand "down". Sie müssen sie auf "up" setzen, um sie zu aktivieren, ähnlich wie beim Aktivieren einer physischen Netzwerkkarte.
sudo ip link set dev bond0 up
Sie können nun mit dem Befehl ip a überprüfen, ob Ihre neue bond0-Schnittstelle existiert und aktiv ist, diesmal jedoch mit Angabe des Schnittstellennamens.
ip a show bond0
Die Ausgabe zeigt die bond0-Schnittstelle mit dem Status DOWN und noch ohne IP-Adresse. Diese wird in einem späteren Schritt konfiguriert.
6: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
Sie haben nun erfolgreich die Master-Schnittstelle bond0 erstellt und aktiviert. Der nächste Schritt ist, Ihre Dummy-Schnittstellen als Slaves hinzuzufügen.
Schnittstellen als Slaves zu 'bond0' hinzufügen
In diesem Schritt werden Sie die zuvor identifizierten virtuellen Schnittstellen (dummy1 und dummy2) an die Master-Schnittstelle bond0 anbinden ("enslave"). Das "Anbinden" einer Schnittstelle bedeutet, dass sie unter die Kontrolle der gebundenen Schnittstelle gestellt wird. Sobald eine Schnittstelle angebunden ist, benötigt sie keine eigene IP-Adresse mehr; der gesamte Datenverkehr wird über bond0 verwaltet.
Dieser Ansatz mit Dummy-Schnittstellen ist absolut sicher und ermöglicht es Ihnen, den Bonding-Prozess ohne Risiko eines Verlusts der Netzwerkverbindung zu erlernen.
Fügen Sie zuerst die Schnittstelle dummy1 zum Bond hinzu. Sie müssen sie deaktivieren, bevor Sie sie als Slave hinzufügen.
sudo ip link set dev dummy1 down
sudo ip link set dev dummy1 master bond0
Führen Sie als Nächstes dasselbe für die Schnittstelle dummy2 durch.
sudo ip link set dev dummy2 down
sudo ip link set dev dummy2 master bond0
Nun bringen wir die Bond-Schnittstelle hoch und weisen ihr eine IP-Adresse zu. Wir verwenden ein anderes Subnetz, um Konflikte mit der bestehenden eth0-Konfiguration zu vermeiden:
sudo ip addr add 192.168.100.10/24 dev bond0
sudo ip link set dev bond0 up
Lassen Sie uns überprüfen, ob sowohl dummy1 als auch dummy2 nun an bond0 angebunden sind:
ip a
Betrachten Sie die Einträge für dummy1, dummy2 und bond0 in der Ausgabe. Sie werden sehen, dass sowohl dummy1 als auch dummy2 mit master bond0 in ihren Beschreibungen aufgeführt sind, was bestätigt, dass sie erfolgreich angebunden wurden. Beachten Sie auch, dass die bond0-Schnittstelle nun UP ist und die von uns zugewiesene IP-Adresse besitzt.
4: dummy1: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
5: dummy2: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
link/ether 2e:5f:12:08:3a:eb brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/24 scope global bond0
valid_lft forever preferred_lft forever
inet6 fe80::2847:4ff:fe07:1aea/64 scope link
valid_lft forever preferred_lft forever
Nachdem die Schnittstellen nun als Slaves fungieren, besteht der nächste Schritt darin, die Netzwerkeinstellungen für die bond0-Schnittstelle selbst zu konfigurieren.
Bond-Schnittstellen-Konnektivität testen
In diesem Schritt testen Sie die Bond-Schnittstelle, um sicherzustellen, dass sie korrekt funktioniert. Da wir einen funktionsfähigen Bond mit zwei Dummy-Schnittstellen erstellt und ihm eine IP-Adresse zugewiesen haben, können wir nun seine grundlegende Funktionalität testen.
Überprüfen Sie zunächst, ob die Bond-Schnittstelle aktiv ist und die richtige IP-Adresse hat:
ip a show bond0
Sie sollten die bond0-Schnittstelle mit der von uns zugewiesenen IP-Adresse (192.168.100.10/24) sehen, und der Status der Schnittstelle sollte als UP angezeigt werden:
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 2a:47:04:07:1a:ea brd ff:ff:ff:ff:ff:ff
inet 192.168.100.10/24 scope global bond0
valid_lft forever preferred_lft forever
Testen Sie nun die Bond-Schnittstelle, indem Sie ihre eigene IP-Adresse anpingen, um zu überprüfen, ob die Schnittstelle antwortet:
ping -c 3 192.168.100.10
Sie sollten erfolgreiche Ping-Antworten sehen, die bestätigen, dass die Bond-Schnittstelle funktioniert.
Überprüfen wir auch, ob unsere Slave-Schnittstellen ordnungsgemäß an den Bond angehängt sind:
ip a | grep "master bond0"
Dieser Befehl zeigt Ihnen die Schnittstellen an, die an bond0 angebunden sind. Sie sollten sowohl dummy1 als auch dummy2 aufgelistet sehen:
4: dummy1: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
5: dummy2: <BROADCAST,NOARP,SLAVE,UP,LOWER_UP> mtu 1500 qdisc noqueue master bond0 state UP group default qlen 1000
Zur zusätzlichen Überprüfung prüfen wir, ob die Bond-Schnittstelle in der Routing-Tabelle erscheint:
ip route | grep bond0
Sie sollten Routing-Einträge für das Netzwerk 192.168.100.0/24 über die bond0-Schnittstelle sehen.
Pädagogischer Hinweis: Diese Konfiguration demonstriert perfekt die Kernkonzepte des Bondings. In einer Produktionsumgebung mit mehreren physischen Schnittstellen würden Sie tatsächliche Netzwerkverkehrslastverteilung und Redundanz sehen, basierend auf dem von Ihnen gewählten Bonding-Modus.
Bond-Status mit cat /proc/net/bonding/bond0 überprüfen
In diesem letzten Schritt führen Sie die detaillierteste Überprüfung durch, indem Sie die Statusdatei des Bonds direkt inspizieren. Der Linux-Kernel stellt Echtzeitinformationen über jede gebundene Schnittstelle über eine spezielle Datei im /proc-Dateisystem bereit. Für eine Schnittstelle namens bond0 befindet sich diese Datei unter /proc/net/bonding/bond0.
Durch die Verwendung des cat-Befehls zur Anzeige dieser Datei erhalten Sie einen umfassenden Überblick über die Konfiguration des Bonds, einschließlich seines Modus, des Status seiner Slave-Schnittstellen und der Datenverkehrszähler.
Führen Sie in Ihrem Terminal den folgenden Befehl aus:
cat /proc/net/bonding/bond0
Dies zeigt einen detaillierten Bericht an. Die Ausgabe sieht ähnlich wie die folgende aus und zeigt nun zwei Slave-Schnittstellen:
Ethernet Channel Bonding Driver: vX.X.X (Month Day, Year)
Bonding Mode: load balancing (round-robin)
Primary Slave: None
Currently Active Slave: dummy1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: dummy1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2a:47:04:07:1a:ea
Slave queue ID: 0
Slave Interface: dummy2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 2e:5f:12:08:3a:eb
Slave queue ID: 0
Lassen Sie uns die wichtigsten Informationen in dieser Ausgabe aufschlüsseln:
- Bonding Mode: Zeigt die verwendete Richtlinie zur Verteilung des Datenverkehrs an. Da wir keine angegeben haben, wird standardmäßig
load balancing (round-robin)verwendet, das Pakete nacheinander über die verfügbaren Slaves überträgt. - MII Status: Zeigt den Gesamtstatus der gebundenen Verbindung an.
upbedeutet, dass sie aktiv ist. - Slave Interface: Sie sehen einen Abschnitt für sowohl
dummy1als auchdummy2. Beide zeigen einenMII Statusvonup, was bestätigt, dass sie aktiv sind und Teil des Bonds sind. Beachten Sie, dassSpeedundDuplexfür Dummy-Schnittstellen möglicherweise alsUnknownoder ein Standardwert angezeigt werden.
Herzlichen Glückwunsch! Sie haben erfolgreich eine gebundene Netzwerkschnittstelle unter Linux konfiguriert und zwei Dummy-Schnittstellen zu einer einzigen, logischen zusammengefasst.
Zusammenfassung
In diesem Lab haben Sie die grundlegenden Konzepte der Implementierung von Link-Aggregation (Port-Bonding) in einer Linux-Umgebung kennengelernt. Das Verfahren begann mit der Identifizierung der verfügbaren Netzwerkschnittstellen, einschließlich zweier vorkonfigurierter virtueller Schnittstellen, dummy1 und dummy2, mithilfe des Befehls ip a. Nach der Identifizierung haben Sie eine neue virtuelle Bond-Schnittstelle namens bond0 erstellt, diese aktiviert und dann beide Dummy-Schnittstellen als Slaves hinzugefügt, um den vollständigen Bonding-Prozess zu demonstrieren.
Dieser Ansatz bot eine absolut sichere und effektive Methode, um Bonding-Konzepte in einer Remote-Umgebung zu erlernen, ohne das Risiko eines Konnektivitätsverlusts einzugehen.
Wichtige Lernpunkte waren:
- Erstellung zweier Dummy-Schnittstellen zur Simulation einer Multi-Schnittstellen-Umgebung.
- Laden des
bonding-Kernelmoduls. - Verständnis der Master-Slave-Beziehung beim Netzwerk-Bonding.
- Einbindung mehrerer Schnittstellen in einen einzigen Bond-Master.
- Sichere Zuweisung von IP-Adressen zu Bond-Schnittstellen.
- Überprüfung der endgültigen Bond-Konfiguration und des Status.
Das Lab endete mit der Untersuchung des detaillierten Bond-Status mithilfe von cat /proc/net/bonding/bond0, das umfassende Informationen über die Konfiguration des Bonds, den Modus und den Status aller seiner Slave-Schnittstellen liefert. Dieser Verifizierungsschritt ist in realen Szenarien unerlässlich, um zu bestätigen, dass die Bonding-Einrichtung wie vorgesehen funktioniert.



