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.