Wenn Sie (unter Linux) diese beiden Routen haben:
default via 192.168.1.1 dev enp58s0f1
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Ich würde erwarten, dass der erste verwendet wird, aber das ist nicht der Fall: Der zweite wird stattdessen verwendet.
Wenn ich das dazu ändere:
default via 192.168.1.1 dev enp58s0f1 proto static metric 100
default via 192.168.16.1 dev wlp59s0 proto static metric 600
Dann funktioniert es wie erwartet. Es scheint, dass "keine Metrik" eine schlechtere (höhere) Metrik als eine beliebige Zahl anstelle der Metrik 0 ist.
Was passiert das? Ist es spezifisch für Linux oder ein Netzwerkstandard?
Danke im Voraus.
quelle
Da sich diese Routen in verschiedenen Subnetzen befinden, geht es hier um mehr als nur um die Metrik. Wenn sich der Ursprungsverkehr beispielsweise im Subnetz 192.168.1.1 befindet und Ihre Routing-Tabelle eine übereinstimmende, nicht standardmäßige Route enthält, stimmt diese Route über die längste Präfixübereinstimmung überein, bevor die Metrik jemals berücksichtigt wird.
Angenommen, eine nicht standardmäßige Route stimmt nicht überein, sollte der Kernel keine Metrik als Metrik mit 0 und daher als Route mit der höchsten Priorität interpretieren. Obwohl dies eine vereinfachte Ansicht ist, da einige Routing-Daemons diese Standardmetrik später in einen anderen Wert wie 1024 übersetzen. Ich gehe davon aus, dass dies mit Ihnen und Ihrer unbenannten Distribution geschieht.
Wenn überhaupt
ip route
keine Metrik angezeigt wird, können Sie mit dem älterenroute -n
Befehl aus dem net-tools-Paket oder bestätigen, dass es tatsächlich 0 istcat /proc/net/route
. Diese Ausgabe stimmt jedoch nicht unbedingt mit dem überein, was der Routing-Daemon intern verwendet, wenn er auf einen 0-Metrikwert stößt.Darüber hinaus ist es auch wichtig, wie Sie die Route erstellen.
ip route
verwendet die Netlink-API, währendroute
ioctl verwendet wird. Der Code für die Erstellung von Standardmetriken zwischen den beiden Ansätzen führt zu unterschiedlichen Metrikwerten. Beispiel: Das Erstellen einer IPv6-Standardroute überip route
führt zu einem Metrikwert von 1024 in RHEL 7, während das Erstellen derselben Route überroute
eine Metrik von 1 ergibt.Von RedHat :
quelle