Comment supprimer toutes les passerelles par défaut

13

J'utilise une machine Linux construite sur mesure, donc toutes les commandes Linux ne sont pas disponibles .
J'exécute des commandes liées au réseau, j'ai donc besoin de définir une passerelle par défaut juste avant d'exécuter ma commande, puis de supprimer cette passerelle immédiatement après.

Pour ce faire, j'exécute toutes mes commandes sur une seule ligne:

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

Le problème est que, pour une raison quelconque, j'ai trouvé 2 passerelles par défaut sur la même machine, ce qui a provoqué l'échec de toutes mes commandes, car même si je configure ma passerelle par défaut avant d'exécuter mon test, elle est toujours foirée et ne peut pas exécuter mon test.

Existe-t-il un moyen de supprimer TOUTES les passerelles par défaut dans une seule commande ? J'ai une grande quantité de machines qui augmentent et il ne sera pas pratique de planter un script sur chaque machine. J'ai besoin d'une commande aussi simple que celle-ci:

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

Tout ce que j'ai trouvé jusqu'à présent est une commande pour supprimer une passerelle par défaut, mais pas toutes /sbin/route del defaultqui ne fonctionneront pas pour moi.

/sbin/route l'aide affiche ce qui suit

/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
la source

Réponses:

17

Si vous utilisez ipau lieu de route, vous pouvez simplement exécuter:

ip route del 0/0

Je crois que cela capture toutes les routes par défaut.

jsbillings
la source
Merci, mais il n'enlève toujours qu'une seule passerelle par défaut, pas toutes.
Muhammad Gelbana
4
Ensuite, vous devriez peut-être parcourir toutes les routes par défaut et les supprimer, au lieu de supposer que votre première suppression les supprime toutes. Il semble que votre code se brise d'une manière ou d'une autre et ajoute plus d'un itinéraire par défaut. Ce n'est pas une circonstance normale.
jsbillings
Je suis d'accord que mon code casse à un moment donné mais peut-être que je peux résoudre ce problème rapidement en corrigeant la chose GW au lieu de perdre beaucoup de temps que je n'ai pas. Merci beaucoup pour votre aide.
Muhammad Gelbana
Il s'agit uniquement de Linux moderne.
jordanm
4

Pour supprimer toutes les passerelles par défaut à l'aide de ip

ip route flush 0/0
Esben Haabendal
la source
2

Si votre code rompt avec plusieurs passerelles par défaut, vous devriez probablement également rechercher plusieurs adresses IP par appareil.

Comme vous avez déjà reçu une réponse, voici une autre approche car vous ne devez JAMAIS modifier la configuration de votre système simplement parce que vous voulez exécuter / tester un script. Que diriez-vous d'utiliser des espaces de noms réseau à la place. Pour une brève introduction sur la façon d'ajouter des périphériques virtuels à votre NS (espace de noms), consultez http://code.google.com/p/coreemu/wiki/Namespaces .

Pour créer un espace de noms nommé test et exécuter une commande sous cet espace de noms, exécutez simplement

ip netns add test
ip netns exec test COMMAND

où COMMAND peut être par exemple votre shell ou simplement le script serveur.

Ulrich Dangel
la source
2

Toutes les réponses sont excellentes mais j'ai résolu ce problème en utilisant une approche différente, j'ai utilisé la commande pour ajouter une seule passerelle par défaut, mais échoue s'il y en a déjà une. Et donc éventuellement supprimer la mauvaise passerelle à la fin de la commande. Cela devrait fonctionner sur la deuxième fois isa.

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

Muhammad Gelbana
la source