So entfernen Sie alle Standardgateways

13

Ich verwende einen benutzerdefinierten Linux-Computer, daher sind nicht alle Linux-Befehle verfügbar .
Ich führe netzwerkbezogene Befehle aus, daher muss ich unmittelbar vor dem Ausführen meines Befehls ein Standard-Gateway festlegen und dieses Gateway anschließend sofort entfernen.

Dazu führe ich alle meine Befehle in einer Zeile aus:

/sbin/route add default gw 10.10.10.10;my command;/sbin/route del default gw 10.10.10.10;

Das Problem ist, dass ich aus irgendeinem Grund einmal zwei Standard-Gateways auf demselben Computer gefunden habe, bei denen alle meine Befehle fehlgeschlagen sind. Selbst wenn ich mein Standard-Gateway vor dem Ausführen meines Tests festgelegt habe, ist es immer noch durcheinander und kann meinen Test nicht ausführen.

Gibt es eine Möglichkeit , ALLE Standardgateways mit einem Befehl zu entfernen ? Ich habe eine große Anzahl von Maschinen, die zunehmen, und es ist nicht praktisch, auf jeder Maschine ein Skript zu platzieren. Ich brauche einen einfachen Befehl wie den folgenden:

/sbin/route del all default;set my default gw;mycommand;/sbin/route del all default;

Alles, was ich bisher gefunden habe, ist ein Befehl zum Entfernen eines Standard-Gateways, aber nicht alle, /sbin/route del defaultdie für mich nicht funktionieren.

/sbin/route Die Hilfe zeigt Folgendes an

/sbin/route --help

Usage: route [{add|del|delete}]

Edit the kernel's routing tables

Options:
        -n      Don't resolve names
        -e      Display other/more information
        -A inet Select address family
Muhammad Gelbana
quelle

Antworten:

17

Wenn Sie ipanstelle von verwenden route, können Sie einfach ausführen:

ip route del 0/0

Ich glaube das fängt alle Standardrouten ab.

jsbillings
quelle
Vielen Dank, aber es wird immer noch nur ein Standard-Gateway entfernt, nicht alle.
Muhammad Gelbana
4
Dann sollten Sie vielleicht alle Standardrouten durchlaufen und entfernen, anstatt davon auszugehen, dass beim ersten Entfernen alle Routen entfernt werden. Es hört sich so an, als würde Ihr Code irgendwie kaputt gehen und mehr als eine Standardroute hinzufügen. Dies ist kein normaler Umstand.
Jsbillings
Ich bin damit einverstanden, dass mein Code irgendwann kaputt geht, aber möglicherweise kann ich das schnell beheben, indem ich das GW-Problem behebe, anstatt viel Zeit zu verschwenden, die ich nicht habe. Vielen dank für Deine Hilfe.
Muhammad Gelbana
Dies ist nur modernes Linux.
Jordanien
4

Zum Entfernen aller Standardgateways verwenden Sie ip

ip route flush 0/0
Esben Haabendal
quelle
2

Wenn Ihr Code mit mehreren Standardgateways nicht funktioniert, sollten Sie wahrscheinlich auch mehrere IP-Adressen pro Gerät angeben.

Da Sie bereits eine Antwort erhalten haben, ist dies ein anderer Ansatz, da Sie die Konfiguration Ihres Systems NIEMALS ändern sollten , nur weil Sie ein Skript ausführen / testen möchten. Wie wäre es stattdessen mit Netzwerk-Namespaces. Eine kurze Einführung zum Hinzufügen virtueller Geräte zu Ihrem NS (Namespace) finden Sie unter http://code.google.com/p/coreemu/wiki/Namespaces .

Führen Sie einfach den folgenden Befehl aus, um einen Namespace namens test zu erstellen und einen Befehl unter diesem Namespace auszuführen

ip netns add test
ip netns exec test COMMAND

Dabei kann BEFEHL beispielsweise Ihre Shell oder nur das Serverskript sein.

Ulrich Dangel
quelle
2

Alle Antworten sind großartig, aber ich habe dieses Problem mit einem anderen Ansatz gelöst. Ich habe den Befehl verwendet, um nur ein Standard-Gateway hinzuzufügen, aber es schlägt fehl, wenn es bereits eines gibt. Und damit eventuell das falsche Gateway am Ende des Befehls entfernen. Dies sollte beim zweiten Mal funktionieren.

ip route add default via my-gateway ip route del default

Muhammad Gelbana
quelle