Samstag, 13. November 2010

"metric"-Attribut bei Multipath-Routing mit Linux

Trotz hartnäckigen Googelns hatte ich bislang noch keine Antwort auf die Frage gefunden, was Linux tut, wenn es zwei Routen mit exakt demselben Zielpräfix hat, die sich jedoch im Wert metric unterscheiden (z. B. so: route add -net 169.254.169.0/24 gw 169.254.169.1 metric 4711 dev eth0 und route add -net 169.254.169.0/24 gw 169.254.169.1 metric 4712 dev eth1)

Also habe ich es selbst ausprobiert und bestätigt bekommen, was ich schon die ganze Zeit vermutete: Linux nimmt anscheinend immer nur die Route mit dem kleineren Wert bei metric.

Wenn zwei gleichwertige Routen denselben Wert für metric haben, dann ist mir allerdings nicht 100%ig klar, was passiert. In meinen Experimenten wurde dann immer dasjenige Interface genommen, was in der Liste von ifconfig weiter oben auftaucht; im konkreten Fall wurde also immer eth0 gegenüber eth1 bevorzugt. (Aber vielleicht macht Linux auch Load-Balancing und durch einen sehr unglücklichen Zufall wurde der Flow immer aufs gleiche Interface gehasht – was aber unter der Annahme, dass der Hashwert fürs Loadbalancing aus Source- und Destination-IP-Adresse gebildet wird, in meinem Fall eine Wahrscheinlichkeit von weniger als 0,5% aufweist.)

Wer's genauer wissen will, dem wünsche ich viel Spaß beim Lesen des Linux-Kernelsourcecodes...

Keine Kommentare: