Brückenbau

Was sind Bridges und wozu sind sie da

Bridges übertragen den Verkehr zwischen multiplen Netzwerkschnittstellen. Beim Bridgen wird der Traffic nur bis zu Netzwerk-Schicht verarbeitet und von da ab weitergeleitet. Damit schafft man eine einfache und sichere (bei Integration von Filtermechanismen etc.) Verbindung für homogene Netzwerke, wozu lediglich ein PC mit 2 Netzwerkkarten, ein Linux OS mit Kernel 2.2 oder höher und das Tool brctl erforderlich sind.

Arbeitsweise

Jede Bridge arbeitet nur über bestimmten Ports, sodass das Ansprechen von einem Port, ein transparentes Forwarding zu dem bzw. den anderen zur Folge hat. Daraus ergibt sich, dass eine solche Bridge für das Netzwerk unsichtbar ist, so z. B. von traceroute nicht erfasst. So bleiben auch die ARP-Pakete unberührt, mittels welchen zu IP gehörende MAC-Adressen übermittelt werden (was also keinen Schutz vor ARP-Poisoning bietet). Durch das cachen von Adressen, welche in den Frames stehen, kann die Bridge aber auch den Switch immitieren.

Spanning Tree Protocol

Ein weitere wichtiger Teil dieses HOWTOs ist das Multiple STP-Protokoll. Ethernet Bridges können so zusammen arbeiten um mittels des IEEE 802.1d SPT noch größere und leistungsstärkere Netze zu schaffen. Das Protokoll ist z.B. zuständig für das Wählen der kürzesten Verbindung und das Ausschalten der Loops. Bridges kommunizieren über BPDUs (Bridge Protocol Data Units), welche durch die Ethernet Zieladresse 01:80:c2:00:00:00 erkannt werden können. Da dieses Protokoll einen Standard darstellt, interagiert er problemlos mit anderen Linux-Bridges und Bridges von Drittanbietern.

Vorbereitungen

Zunächst installiert man ein OS wie z.B. GNU/Linux Debian mit Kernel 2.6.6-1-386 und richtet in diese Umgebung 2 Netzwerkkarten ein. Nun muss man beide Netzwerkadressen welche möglicherweise durch die Einrichtung gesetzt wurden entfernen und die Konfiguration der Bridge beginnen.

Einrichten der Bridge

Mittels

 brctl addbr <bridgename> 

muss man nun min. eine logische Bridginginstanz erstellen, welche die eingebauten Netzwerkkarten virtuell verbindet. Da nun eine Verbindung für die Netzwerkkarten, aber noch keine Netzwerkkarten definiert worden sind, geschieht das nun mit dem Befehl

 brctl addif <bridgename> <device> 

Wenn nun beide Netzwerkkarten auf diese Weise der Bridginginstanz zugewiesen wurden, sollte die Bridge fertig sein.

Starten der Bridge

Bevor man nun die Bridge in Betrieb nimmt, muss man klären welchen genauen Zweck sie erfüllen so:

  • einfaches Verbindenungsglied von Netzwerken, sodass keine IP für den Host vergeben wird (wodurch er vor diversen Angriffen, allerdings nicht vor physikalischen Angriffen geschützt ist)
    • ifconfig <bridgename> up
  • oder als Teil des entstehenden Netzes, sodass die Bridge (also bei Netzwerkkarten) nach außen als ein virtuelles Interface agiert und somit eine IP zugeteilt bekommt
    • ifconfig <bridgename> <ip-number> netmask <netmask-number> up

Nun sollte die Bridge soweit sein betrieben zu werden.

Testen der Bridge

Um die Funktionalität der Bridge zu kontrollieren und noch expliziter zu konfigurieren sind verschiedene Optionen im brctl-Tool implementiert:

  • brctl show <bridgename>: zeigt diverse Informationen zu der eingerichteten Bridgeinstanz
  • brctl showmacs <bridgename>: listet alle bisher gecacheten MAC Adressen auf
  • brctl setageingtime <bridgename> <time>: nachdem diese Zeit verstrichen ist und kein Frame von einer bestimmten Adressen empfangen wurde, löscht die Bridge den entsprechenden Eintrag aus der „Forwarding DataBase“ (fdb)
  • brctl setgcint <bridgename> <time>: legt den Intervall fest, mit welchem nach timed-out Einträgen in der fdb gesucht wird.
  • brctl stp <bridgename> <state>: kontrolliert das STP der Bridge
  • brctl setbridgeprio <bridgename> <priority>: setzt die Priorität der Bridge auf
  • brctl setfd <bridgename> <time>: setzt die Verzögerungszeit für das Forwarding in Sekunden
  • brctl sethello <bridgename> <time>: setzt die „bridge hello time“
  • brctl setmaxage <bridgename> <time>: setzt TTL der Bridge
  • brctl setpathcost <bridgename> <port> <cost>: setzt die Port-Cost
  • brctl setportprio <bridgename> <port> <priority>: setzt die Port-Priorität