Asymmetrisches Routing bei unterschiedlichen Netzwerkkarten

Ja ich weiß dieser Titel ist etwas nichtssagend aber mir ist einfach kein besserer eingefallen.

Worum geht es? Hat ein Rechner unter Linux zwei verschiedene Netzwerkkarten so werden standardmäßig diese Karten nicht “gleichmäßig” verwendet sondern der gesamte ausgehende Verkehr geht nur über eine.

Warum hat mich das überhaupt interessiert? Mein Server hat eine gebrauchte Gigabit Netzwerkkarte bekommen. Er hat dann also eine 100MBit Karte onboard und die neue GBit Karte. Diese Karte hat von mir eine eigene IP Adresse bekommen und ich war der naiven Annahme das nun der gesamte Verkehr der über diese zweite IP Adresse angesprochen wird auch über diese Karte läuft

Denkste, ätschibätz, man war ich naiv.

So sieht das nämlich wenn man das mit iperf überprüft:

Gigabit Karte

iperf -c 192.168.1.70
------------------------------------------------------------
Client connecting to 192.168.1.70, TCP port 5001
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.40 port 38116 connected with 192.168.1.70 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  94.6 Mbits/sec

100MBit Karte

iperf -c 192.168.1.6
------------------------------------------------------------
Client connecting to 192.168.1.6, TCP port 5001
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.40 port 50324 connected with 192.168.1.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   113 MBytes  94.6 Mbits/sec

Da ist kein Unterschied :-(

Zuerst nimmt man natürlich an es liegt an Treibern aber das brachte keine Besserung. Dieser schon recht alte Artikel zeigte mir den Grund.

Aufgrund des “Destination-based routing” wird alles was von außen angefragt wird über die erste Netzwerkkarte wieder rausgeschickt. Und das ist halt die langsame.

In meinem Fall bedeutet das das zwar die Anfragen mit der schnellen Karte “angenommen” werden, aber leider über die “langsame” Karte beantwortet werden.

Lösen kann man dieses Problem mit einem “source-based routing”. Dort entscheidet dann nicht die Zieladresse über die Routingtabelle sondern Quelle der Anfrage.

Der genannte Artikel beschreibt zwar die genaue Vorgehensweise aber in meinem Fall war es dann doch einfache die schnelle Karte als “primäre” Karte einzurichten. Dann ist das Ergebnis auch “etwas schneller”

Gigabit Karte

iperf -c 192.168.1.6
------------------------------------------------------------
Client connecting to 192.168.1.6, TCP port 5001
TCP window size: 21.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.40 port 51575 connected with 192.168.1.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   715 MBytes   599 Mbits/sec

Das ist natürlich noch nicht “GB” aber die Karte steckt in einem Pentium 3 Rechner.