web-dev-qa-db-fra.com

Comment supprimer toutes les passerelles par défaut

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, je dois donc définir une passerelle par défaut juste avant d'exécuter ma commande, puis 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é une fois 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 donc 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 comme simple comme suit:

/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 a la passerelle par défaut mais pas toutes /sbin/route del default qui ne fonctionnera pas pour moi.

/sbin/route l'aide affiche les éléments suivants

/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
13
Muhammad Gelbana

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-gatewayip route del default

3
Muhammad Gelbana

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

ip route del 0/0

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

17
jsbillings

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

ip route flush 0/0
4
Esben Haabendal

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 que vous devriez [~ # ~] ne jamais [~ # ~] changer la configuration de votre système simplement parce que vous souhaitez 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 appareils virtuels à votre NS (espace de noms) jetez un œil à 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.

2
Ulrich Dangel