Unter Linux ist es ohne Probleme möglich Netzwerkbrücken(Bridges) anzulegen. Jedoch verhalten diese sich wie Switches, was im Betrieb von großem Vorteil ist, die Fehlersuche jedoch eventuell erschwert. Es gibt einen einfachen Trick wie sich der gesamte Traffic doch mitlesen lässt.
In der Welt der IT versteht man unter einem Hub ein Gerät mit Netzwerkanschlüssen, welches eingehende Pakete an alle Ports weiterleitet. Da dies jedoch in vielen Situationen zu Ressourcen- und Performanceproblemen führen kann, wurden sie zu Switches weiterentwickelt. Ein Switch besitzt auch mehrere Netzwerkanschlüsse, jedoch merkt er sich, an welchem Port er welche MAC-Adresse gesehen hat. So wird es vermieden alle Pakete an alle Teilnehmer zu schicken. Für Entwickler oder Administratoren ist dieses Verhalten bei der Fehlersuche jedoch eher negativ, da sie den Verkehr nicht mehr genau analysieren könne. Dafür bieten viele managebaren Switches die Möglichkeit einen sogenannten Monitoring Port einzurichten, an dem der gesamte Datenverkehr ausgegeben wird.
Unter Linux kommen Bridges zum Beispiel im Umfeld von virtuellen Maschinen zum Einsatz. Diese Bridges verhalten sich wie Switches, sie merken sich auf welchem virtuellen Interface sie welche MAC-Adresse schon einmal gesehen haben und schicken die entsprechenden Pakete nur dort hin. Diese Eigenschaft ist im "normalen" Betrieb auch sehr wünschenswert. Jedoch kann dies die Fehlersuche oder die Wartung stark behindern. Da es leider keine mir bekannte Möglichkeit für einen Monitoring Port gibt, muss sich an dieser Stelle anders geholfen werden.
Der einfachste Weg den gesamten Datenverkehr an einem virtuellen Interface mitzulesen ist die Bridge wieder in einer Art Hub-Modus zu betrieben, bei dem alle Pakete an alle Interfaces geschickt werden. Dies wird dadurch erreicht, dass die Zeit für die Speicherung der Zuordnung von MAC-Adresse zu Interface auf 0 gesetzt wird. Kommt jetzt ein Paket an, kennt die Bridge die MAC-Adresse nicht und muss es notgedrungen an alle Interfaces verschicken um die Funktion nicht zu beeinträchtigen. Theoretisch kennt sie die Zuordnung der MAC-Adresse jetzt, vergisst diese jedoch sofort wieder.
Standardmäßig merkt sich die Bridge 300 Sekunden die Zuordnung von MAC-Adresse zu Interface nach dem eintreffen des letzten Paketes mit der entsprechenden Adresse. Mit dem folgenden Befehl wird diese Zeit für die Bridge br0 auf 0 gesetzt.
$ sudo brctl setageing br0 0
Achtung: Zur Verwendung von Bridges muss unter Ubuntu das Paket bridge-utils installiert sein.
Nach einem Neustart des Computers oder der Bridge wird dieser Wert jedoch wieder vergessen. Soll er permanent verwendet werden, kann er in die Datei /etc/network/interfaces eingetragen werden. Dazu muss die entsprechende Interfacekonfiguration wie folgt ergänzt werden.
iface br0 inet static
[...]
bridge_ageing 0
Achtung: Die Zeit sollte im produktiven Umfeld niemals auf 0 gesetzt werden.
Links
- Manpage: bridge-utils-interfaces auf ubuntu.com (englisch)
- Manpage: brctl auf ubuntu.com (englisch)