ubuntuusers.de

Netzwerkkarten bündeln

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Manchmal ist es notwendig, zwei Netzwerkkarten zu bündeln, z.B. für eine höhere Ausfallsicherheit oder um einfach den Durchsatz zu erhöhen. Man spricht auch vom NIC-Teaming oder Bonding, wenn man zwei Netzwerkschnittstellen zu einer virtuellen Einheit zusammenfasst. So wird erreicht, dass das System beide Karten als ein Gerät anspricht. Das bedeutet, dass beide Karten dieselbe Hardware-(MAC-)Adresse haben.

Die Bündelung der Netzwerkkarten wird durch das Dienstprogramm ifenslave bewerkstelligt, das dem Kernel ermöglicht, nur ein Gerät zu sehen und zu verwenden, während es die Datenpakete tatsächlich über die zwei Karten sendet. Hiermit kann sowohl Ausfallsicherheit als auch die Nutzung einer größeren Bandbreite erreicht werden.

./dia.png

Installation

Folgende Pakete müssen installiert [1] werden:

  • ifenslave-2.6 (universe)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install ifenslave-2.6 

sudo aptitude install ifenslave-2.6 

Gegebenenfalls werden noch die folgenden Programme benötigt:

  • net-tools (universe, beinhaltet das Programm mii-tool, das unabhängig vom Medium den Status der Schnittstelle sowie die Geschwindigkeits- und Duplex-Einstellungen abfragen bzw. einstellen kann. Mii-Tool wird für den Modus 4 (802.3ad) und das Abfragen der verfügbaren Schnittstellen benötigt.)

  • ethtool (universe, Ein Programm zum Setzen der Geschwindigkeits- und Duplex-Einstellungen bei Ethernet-Schnittstellen. Ethtool wird für die Modi 4 (802.3ad), 5 (balance-tlb) und 6 (balance-alb) benötigt. Siehe auch ethtool.)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install net-tools ethtool 

sudo aptitude install net-tools ethtool 

  • bmon (Bandwith Monitor, ein Programm, das die Datenübertragungsraten pro Gerät in Echtzeit anzeigen kann.)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install bmon 

sudo aptitude install bmon 

Vor dem Versuch, zwei Netzwerkkarten zu bündeln, sollte die Integrität und Funktionalität jeder Karte geprüft werden. Das Verwenden des Mii-Tools sollte etwa Folgendes zeigen:

sudo mii-tool 

Ausgabe:

eth0: negotiated 100baseTx-FD flow-control, link ok
eth1: negotiated 100baseTx-FD flow-control, link ok

Damit die Bündelung der Netzwerkkarten funktioniert, muss der Kernel dies unterstützen. Dies lässt sich wie folgt überprüfen [2]:

modprobe --list | grep -i bonding 

Ausgabe:

/lib/modules/2.6.20-16-server/kernel/drivers/net/bonding/bonding.ko
find /lib/modules/`uname -r` -iname bonding* 

Ausgabe:

/lib/modules/2.6.20-16-server/kernel/drivers/net/bonding/bonding.ko

Benutzung/Konfiguration

1. Alle Netzwerkkarten im zukünftigen Verbund werden deaktiviert:

sudo ifdown eth0
sudo ifdown eth1
sudo ifdown eth... 

2. Erstellen der Konfiguration: Die /etc/network/interfaces kann wie oben beschrieben konfiguriert werden. Jedoch müssen einige Einträge enthalten sein und geändert werden. Dies wurde ab Ubuntu 8.04 deutlich vereinfacht, da ab nun die gesamte bonding-Konfiguration in dieser Datei abgelegt wird (aber nicht muss).

Einfach und schnell (Ubuntu-Versionen von 8.04 bis 11.10)

Da in den Ubuntu-Versionen neuer als 8.04 alle Bonding-Optionen in /etc/network/interfaces gemacht werden kann, genügt es, lediglich ifenslave-2.6 zu installieren. Das betrifft zumindest die Konfiguration auf Linux-Seite. Manche bonding-Modi benötigen zusätzlich noch eine Konfiguration des Switches.

auto bond0
iface bond0 inet static
    address 10.0.0.10
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
    gateway 10.0.0.1
    dns-nameservers 10.0.0.1
    slaves eth0 eth1
    bond_mode 0
    bond_miimon 100
    bond_updelay 200
    bond_downdelay 200

Einfach und schnell (Ubuntu-Versionen ab 12.04)

In den Ubuntu-Versionen neuer als 12.04 gab es eine Änderung in der Notation. Man beachte: "slaves" wird durch bond-slaves ersetzt, sowie die Unterstriche "_" durch Bindestriche "-". Das oben genannte Beispiel muss ab Version 12.04 folgendermaßen aussehen:

auto bond0
iface bond0 inet static
    address 10.0.0.10
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
    gateway 10.0.0.1
    dns-nameservers 10.0.0.1
    bond-slaves eth0 eth1
    bond-mode 0
    bond-miimon 100
    bond-updelay 200
    bond-downdelay 200

Erklärungen

  • bond-slaves: Welche Schnittstellen diesem Bond zugehörig sind, "all", falls alle.

  • bond-mode: 0 bis 6 oder Names des Modus, in dem der bonding-Treiber arbeiten soll.

  • bond-miimon: Das bonding-Modul überprüft alle 100ms den Link-Status aller gebündelten Schnittstellen.

  • bond-updelay: Wenn eine Schnittstelle als (wieder) aktiv erkannt wird, werden 200ms abgewartet, ehe der bonding-Treiber das interface wieder in den Verbund integriert, ansonsten sofort.

  • bond-downdelay: Gibt es einen Übertragungsfehler oder Aussetzer, so betrachtet das bonding-Modul die Schnittstelle erst nach 200ms als verloren und entfernt diese aus dem bond, ansonsten sofort.

Die Konfiguration für alle anderen Interfaces bis auf das loopback-Interface können entfernt bzw. deaktiviert werden. Wer ungeduldig ist, kann nun mit folgenden Befehlen den Treiber laden und die Netzwerke neu starten:

modprobe bonding
/etc/init.d/networking stop
/etc/init.d/networking start 

Sicherer ist es, das System neu zu starten. Es sind keine weiteren Einträge in /etc/modules oder anderswo nötig, der bonding-Treiber wird automatisch nach einem Neustart geladen.

Ausführlicher, teilweise für ältere Versionen

Folgender Eintrag muss hinzugefügt werden:

auto bond0
iface bond0 inet static
	address 10.0.0.10
	netmask 255.255.255.0
	network 10.0.0.0
	broadcast 10.0.0.255
	gateway 10.0.0.1
	dns-nameservers 10.0.0.2
	dns-search example.com
slaves eth0 eth1

Anmerkungen:

  • Hier wird eine statische Konfiguration verwendet, soll die Maschine ihre IP-Adresse mittels DHCP beziehen, wird iface bond0 inet static durch iface bond0 inet dhcp ersetzt, die eingerückten Zeilen entfallen dann. Die IP-Adress-Einstellungen müssen an das eigene Netzwerk angepasst werden.

  • Hier werden die Schnittstellen eth0 und eth1 für den Verbund verwendet. Sollen weitere Schnittstellen eingebunden werden, so werden diese hinten angefügt. Alternativ kann auch slaves all geschrieben werden, wenn alle aktiven Schnittstellen in den Verbund aufgenommen werden sollen.

Des Weiteren sollten für die darin enthaltenen einzelnen Schnittstellen die Funktion "auto" durch "allow" ersetzt werden, damit diese nicht zusätzlich bei dem Systemstart mitgestartet werden. Im Skript für den Systemstart ist die Funktion "ifup -a" enthalten und die startet alle Netzwerkschnittstellen, die in der Konfiguration mit "auto" vermerkt sind. Ansonsten startet Linux jede einzelne Schnittstelle und zusätzlich den Verbund. Das ist falsch, denn die einzelnen Schnittstellen sollen durch den Verbund aktiviert werden. Deshalb sollte man für die im Verbund enthaltenen Schnittstellen den Eintrag wie folgt ändern:

allow eth1
iface eth1 inet dhcp

Dabei ist es egal, ob man "dhcp" setzt oder was anderes, da diesen Schnittstellen keine eigene IP-Adresse mehr zugeteilt wird. Das ist richtig, da die Schnittstellen nur noch durch EINE IP-Adresse angesprochen werden sollen. Dies muss und sollte die IP-Adresse des Verbundes sein.

Danach sollte nach JEDEM Systemstart der Befehl "ifconfig" für bond0 folgenden Hinweis enthalten:

[...]
UP BROADCAST RUNNING MASTER MULTICAST
[...]

und für die darin enthaltenen Schnittstellen:

[...]
UP BROADCAST RUNNING SLAVE MULTICAST
[...]

Die Konfiguration des Bonding-Treibers muss angegeben werden, hierfür wird in /etc/modprobe.d mit Superuser-Rechten eine neue Datei bonding.conf erstellt und folgendes eingetragen:

alias bond0 bonding
options bonding mode=1 miimon=100

Anmerkung: Hier wird Bonding-Mode 1 (active-backup) verwendet, das Mii-Tool soll alle 100 Millisekunden den Link-Status überprüfen.

3. Laden des Moduls

sudo modprobe bonding 

Damit das auch beim nächsten Neustart noch der Fall ist, sollte das bonding-Modul noch in die /etc/modules eingetragen werden [3]:

bonding

Nun wird das Modul automatisch beim Systemstart geladen.

4. Verbund starten

sudo ifup bond0 

Bonding Modi

Bei der Konfiguration muss ein Bonding-Modus (bond-mode) angegeben werden, der den Zweck und die Art der Bündelung der Netzwerkschnittstellen angibt. Die zur Verfügung stehenden Modi sind im Folgenden aufgelistet.

Bonding Modi
ModusBezeichnungZweckBeschreibung
0balance-rrLastverteilung & AusfallsicherheitDie genutzte Netzwerkschnittstelle wird im Round-Robin-Verfahren festgelegt, das heißt die verfügbaren Schnittstellen werden in Senderichtung wechselweise genutzt. In Empfangsrichtung kann max. die Geschwindigkeit einer einzelnen Schnittstelle erreicht werden - je mehr Teilnehmer, umso mehr Upload-Gesamtbandbreite, denn diese werden auf die übrigen freien Schnittstellen aufgeteilt.
1active-backupAusfallsicherheitNur eine Schnittstelle ist aktiv, im Fehlerfalle wird eine der anderen im Verbund genutzt. die Netzwerkkarten können über verschiedene Switches angebunden werden.
2balance-xorLastverteilung & AusfallsicherheitEs wird für jede Gegenstelle im Netzwerk eine zu nutzende Netzwerkschnittstelle zugewiesen, die Zuordnung geschieht über den Modulo der Division zwischen der Formel (Quell-MAC-Adresse XOR Ziel-MAC-Adresse) und der Anzahl der Slave-Schnittstellen.
3broadcastAusfallsicherheitDaten werden auf allen Netzwerkschnittstellen gesendet. Die Nutzung mehrerer Switches ist möglich.
4802.3adLastverteilung & Ausfallsicherheit802.3ad ist ein Standard der IEEE, der die Bündelung mehrerer Schnittstellen mit gleichen Übertragungseinstellungen (Geschwindigkeit und Duplex-Einstellungen) erlaubt, um eine höhere Bandbreite zu erhalten. Es kann nur ein Switch verwendet werden, dieser muss 802.3ad unterstützen. ethtool oder mii-tool wird benötigt.
5balance-tlbLastverteilungEs wird für jede Gegenstelle im Netzwerk eine zu nutzende Netzwerkschnittstelle zugewiesen. Das Verfahren hierzu ist jedoch komplexer und effizienter als bei balance-xor. Das Programm ethtool wird benötigt.
6balance-albLastverteilungErweitertes balance-tlb, zusätzlich zur MAC-basierten Zuordnung der Schnittstellen für ausgehende Verbindungen werden eingehende Verbindungen auf die Schnittstellen verteilt. Das Programm ethtool wird benötigt.

Fehlerbehebung

Problembeschreibung

Wenn man mehrere Netzwerkkarten des gleichen Typs einsetzt, kann es passieren, dass die Netzwerkkarten neu benannt werden. Ein

sudo ifconfig -a 

liefert dann z.B. einen Eintrag wie:

[...]
eth?_rename
[...]

Um dies zu vermeiden muss die Datei /etc/network/interfaces editiert werden. Im Abschnitt bonding muss die Angabe für eine MAC eingefügt werden:

auto bond0
iface bond0 inet static
	...
        hwadress ether {MAC-ADRESSE}
        ...

Bitte keine MAC von einer vorhandenen Karte benutzen, sondern selber eine setzen.

Diese Revision wurde am 28. August 2013 16:41 von TheUndataker erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Server