Netzwerkkarten bündeln (NIC Bonding, NIC Teaming, Link Bundling, EtherChannel Bonding …) mit Linux

14 Kommentare Autor: Jürgen (jdo)

Netzwerk Bonding Teaser 150x150Vorhin ist mir beim Kruschen in einer Kiste eine PCI-Netzwerkkarte in die Finger gefallen – kurz getestet – funktioniert noch. Aber was machen damit? Ich hab da so einen Server rumstehen … 🙂

Der Server macht in der Zwischenzeit alles: DHCP, Squid (Proxy), Backup, Samba und nun auch ownCloud. Da sich die Synchronisation bei letzterem wesentlich verbessert hat, will ich auch meine Freundin mit dem Sync-Client ausstatten. Dann muss sich sich bei ihren aktiven Arbeiten nicht mehr selbst um die Backups auf externe USB-Platten kümmern. Es wäre also eine zusätzliche Absicherung. Das bedeutet aber auch, dass der Server mit wesentlich mehr Datenverkehr beschossen wird, weil Grafiken nun mal sehr große werden können.

Nun habe ich mir gedacht, dass man die Netzwerkkarte ja zusätzlich in den Server stecken könnte und mit der anderen bündeln. Zu Zweit schafft es sich leichter. Das Beste daran ist, dass es mittlerweile recht einfach ist, ein Netzwerk Bonding zu realisieren. Unter Ubuntu 12.04 geht das so:

sudo apt-get install ifenslave-2.6 installiert das Paket ifenslave-2.6. Mit dem Dateimanager Deiner Wahl die Datei /etc/network/interfaces öffnen. Gesetzt dem Fall, dass die beiden Netzwerkkarten eth0 und eth1 sind, sieht meine Datei interfaces nun so aus:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual
bond-master bond0

auto eth1
iface eth1 inet manual
bond-master bond0

auto bond0
iface bond0 inet static
address 192.168.100.138
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.1
bond-mode balance-rr
bond-miimon 100
bond-lacp-rate 1
bond-slaves none

Kurz zusammengefasst bewirkt das: Die beiden Netzwerkkarten werden dem Bündel-Master bond0 zugewiesen und bond0 wird wie eine Netzwerkkarte behandelt. Bekommt also eine IP-Adresse, ein Gateway und so weiter. Weiterhin wissenswert sind die verschiedenen Modi, die man der Netzwerk-Bündel zuweisen kann.

Stolperfallen

Die Sache hat einen Haken, der eigentlich offensichtlich ist, aber ma leicht übersehen kann. Alles, was vorher auf eine spezifische Netzwerkkarte gemünzt war, musst Du nun auf bond0 umstellen. Mein DHCP-Server war zum Beispiel angewiesen, eth0 zu benutzen. Dies muss ich nun auf bond0 umstellen. Das Gleiche kann auch mit Firewall, Samba und so weiter passieren. Wenn also nach der Umstellung etwas nicht mehr funktioniert, einfach mal nachsehen, ob der name der Netzwerkkarte etwas damit zu tun hat.

Was man im nachfolgenden Screenshot sehr schön sieht: Die Netzwerkkarten teilen sich die Arbeit wirklich sauber auf. Happy Bonding – Netzwerk-Bonding!!! 😉

Netzwerk-Bonding

Netzwerk-Bonding




 Alle Kommentare als Feed abonnieren

14 Kommentare zu “Netzwerkkarten bündeln (NIC Bonding, NIC Teaming, Link Bundling, EtherChannel Bonding …) mit Linux”

  1. süppchen says:

    Interessant waere ein Messung des Netzwerkdurchsatzes mit den einzelnen Karten und dann im Buendel. Wie sieht deine Netzwerk-Infrastruktur aus? Steckst du beide Karten in den gleichen Switch? Muss der Switch dafuer eine besondere Intelligenz besitzen oder wie kommt er damit klar, dass zwei Netzwerkkarten die gleiche MAC-Adresse besitzen?

    • jdo says:

      Die Netzwerkkarten stecken im selben Switch, ja. Bei dem von mir gewählten Modus - Round Robin - muss der Switch dafür keine spezielle Intelligenz besitzen.

      Beim Modus 802.3ad müssten der Switch zum Beispiel IEEE 802.3ad unterstützen.

      Den Durchsatztest mach ich jetzt nicht, wäre aber interessant. Dann müsste ich wieder zurückkonfigurieren 🙂

      • süppchen says:

        Du kannst weiterhin den Netzwerkkarten Aliase geben (ifconfig eth0:0, ifconfig eth1:0). Damit muesstest du die einzelnen Szenarien durchspielen koennen ohne viel zu veraendern.

        • jdo says:

          stimmt, aber das zweite Problem: Ich müsste von 2 Rechnern Dateien kopieren - der Flaschenhals wird der ausgehende Rechner sein, der nur mit 100 MBit schicken kann. Das konnte die alleinige Netzwerkkarte vorher auch schon. Ich müsste also von 2 Rechnern Dateien schicken und sehen, ob beide volle Pulle senden können - oder?

          • süppchen says:

            Korrekt. Lesen/Schreiben sollte aus dem Arbeitsspeicher passieren, da sonst die Festplatte schnell der limitierende Faktor ist.

          • jdo says:

            Dann müsste ich meinem armen alten Server mit nur 1GByte RAM nun eine RAM Disk verpassen ... ich muss das mal machen, wenn ich Zeit habe. Ich glaube ich schieb lieber Dateien von zwei Rechnern auf zwei unterschiedliche Festplatten in dem Server. Sollten beide Rechner mit ungefähr 10 MByte / Sekunde senden können, wäre das Beweis für mich genug.

  2. süppchen says:

    Dann les einfach aus /dev/null und schreib nach /dev/null. vgl. http://linuxwiki.de/NetzwerkDurchsatz

    • jdo says:

      Das bringt mir doch trotzdem nichts - ich weiß, dass der sendende Rechner nur 100 MBit kann - somit weiß ich immer noch nicht, ob der Server nun 200 MBit aufnehmen kann ... damit beweise ich doch lediglich, dass ich ich ein Netzwerk mit 100 MBit habe ...

      • süppchen says:

        Ich war davon ausgegangen, dass du zwei weitere Linux-Systeme im Netz hast, welche per netcat Daten schicken koennen. Lediglich Datenmenge und die Startzeit der Uebertragung sollte gleich sein, dann werden die Messergebnisse halt addiert. 😉

        • jdo says:

          Hab ich eigentlich auch ... aber auf dem einen Schau ich Red Bull Stratos Gehüpfe live an und der andere Rechner rechnet was 🙂 ...

  3. dakira says:

    Bessere switches machen sowas übrigens automatisch. Und sind auch stromsparender 😉

  4. dion says:

    vielen dank für diesen artikel!

  5. Ikem says:

    > Die Sache hat einen Haken, der eigentlich offensichtlich ist, aber _man_ leicht übersehen kann.

    Typo.