Ändern des vorhandenen Routeneintrags unter Linux

10

Was ist der Befehl zum Ändern der Metrik eines vorhandenen Routeneintrags unter Linux? Ich kann das Gateway eines vorhandenen Eintrags mit dem folgenden Befehl "ip route change" ändern, aber keine Metriken ändern. Gibt es dafür einen anderen Befehl?

route –n
40.2.2.0        30.1.3.2        255.255.255.0   eth2

ip route change 40.2.2.0/24 via 30.1.2.2

route -n
40.2.2.0        30.1.2.2        255.255.255.0   eth1
user1762571
quelle
Hier ist eine Website-Seite mit den Befehlen zum Bearbeiten von IP-Adressen mit dem Befehl ifconfig. Ich kenne nicht alle Befehle auf Anhieb, aber hoffentlich hilft Ihnen diese Seite. tecmint.com/ifconfig-command-examples
Nicholas Awesomepants
1
Löschen Sie die Route und fügen Sie sie erneut hinzu, es sei denn, sie haben seitdem lkml.iu.edu/hypermail/linux/net/0504.3/0017.html behoben
Thrig

Antworten:

6

Wie in einem Kommentar zu der Frage erwähnt, zitiert eine Nachricht in der Linux-Net-Mailingliste: "Die Metrik / Priorität kann nicht geändert werden [...] Dies ist eine Einschränkung des aktuellen Protokolls [...]."
Die einzige Möglichkeit besteht darin, die Route zu löschen und eine neue hinzuzufügen.

Dies geschieht mit dem folgenden routeBefehl:

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1

Debian-Manpage für den Routenbefehl

Jan.
quelle
4
Die Frage war nicht, wie man eine Route mit einer bestimmten Metrik hinzufügt. OP wollte die Metrik auf einer vorhandenen Route ändern (ohne die Route zu löschen und erneut hinzuzufügen).
András Korn
4
Offensichtlich haben Sie den Kommentar in der Frage nicht gelesen, der auf die E-Mail verweist, aus der hervorgeht, dass die Metrik nicht geändert werden kann : The metric/priority cannot be changed [...] This is a limitation of the current protocol[...]. Die einzige Möglichkeit besteht darin, die Route zu löschen und eine neue hinzuzufügen.
Januar
7
Ich weiß, dass die Metrik nicht geändert werden kann. Ihre Antwort beantwortet die Frage immer noch nicht - weisen Sie in der Antwort möglicherweise darauf hin, dass die Metrik nur durch Löschen und erneutes Hinzufügen der Route geändert werden kann?
András Korn
15

(Kombinieren verschiedener Kommentare zu einer Antwort)

Derzeit ist es nicht möglich, die Metrik einer Route zu ändern. In einer Nachricht von 2005 zu LKML heißt es :

[...] Die Metrik / Priorität kann nicht geändert werden, da wir keine separaten Felder für die übereinstimmenden Felder und die neuen Werte haben. Wenn Sie also eine Metrik angeben, wird der Eintrag einfach nicht gefunden und die Anforderung schlägt mit ENOENT fehl, da NLM_F_CREATE ist nicht angegeben. Dies ist eine Einschränkung des aktuellen Protokolls und es könnte eine gute Idee sein, dies zu ändern, es ist jedoch nicht trivial [...]

Dies scheint sowohl für ip route changeals auch für ip route replace- das erstere führt zu einem Fehler für mich, während das letztere eine zusätzliche Route wie angekündigt erstellt (auf der Manpage replacewird angegeben, dass eine Route ersetzt oder erstellt wird). Dies steht im Einklang mit der Antwort des Kernels auf ENOENT und der ip route replaceanschließenden Anforderung einer Routenerstellung .


Die Lösung besteht also darin, die vorhandene Route zu löschen und eine neue hinzuzufügen. z.B

ip route del 40.2.2.0/24 via 30.1.2.2
ip route add 40.2.2.0/24 via 30.1.2.2 metric 1234
Kennzeichen
quelle
Ja, wurde in den letzten Monaten von diesem Problem gebissen ... wie Brian Cantrill immer wieder über Linux sagt: Es ist eine sich entwickelnde Sache mit dem NIH-Syndrom (hier nicht erfunden) ...
Hvisage
@Hvisage kannst du das näher erläutern? Gibt es ein Tool, mit dem Sie die Metrik ändern können, ohne sie entfernen zu müssen?
Braiam
@Braiam Das ist negativ, wie in: KEIN solches Tool existiert. gemäß der Antwort. Wenn Sie sich auf meine Zitate von Bryan Cantrill beziehen, war es irgendwo, wo ich an youtube.com/watch?v=wTVfAMRj-7E
Hvisage
2

ifmetric Mit dieser Option können Sie Ihre Routenmetrik im laufenden Betrieb ändern, da die Routen, die Sie ändern möchten, die Schnittstelle durchlaufen.

Verwendung

ifmetric <iface> [<metric>]

Verwenden Sie ifmetric tun0 12diese Option beispielsweise, um die Metrik für alle durchlaufenden Routen auf 12 zu ändern tun0.

AeroClassics
quelle
4
Hallo! Es ist am besten, ein funktionierendes Beispiel zu geben, wie der Befehl verwendet wird, um die Ergebnisse zu erhalten, nach denen die Frage fragt.
Dhag
Ja, das würde es wirklich. Vielen Dank.
AeroClassics