Jak usunąć wszystkie domyślne bramy

13

Używam niestandardowego komputera z systemem Linux, więc nie wszystkie polecenia systemu Linux są dostępne .
Wykonuję polecenia związane z siecią, więc muszę ustawić domyślną bramę tuż przed uruchomieniem polecenia, a następnie natychmiast ją usunąć.

Aby to zrobić, uruchamiam wszystkie moje polecenia w jednym wierszu:

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

Problem polega na tym, że z jakiegoś powodu znalazłem 2 domyślne bramy na tym samym komputerze, co spowodowało awarię wszystkich moich poleceń, ponieważ nawet jeśli ustawię moją domyślną bramę przed uruchomieniem testu, nadal jest pomieszana i nie mogę uruchomić testu.

Czy istnieje sposób na usunięcie WSZYSTKICH bram domyślnych za pomocą jednego polecenia ? Mam dużą liczbę maszyn, które rosną i nie będzie praktyczne umieszczanie skryptu na każdej maszynie. Potrzebuję polecenia tak prostego, jak:

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

Wszystko znalazłem tak daleko jest polecenie, aby usunąć z domyślną bramę, ale nie wszystkie z nich /sbin/route del default, które nie będą działać dla mnie.

/sbin/route Pomoc wyświetla następujące

/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
źródło

Odpowiedzi:

17

Jeśli użyjesz ipzamiast route, możesz po prostu uruchomić:

ip route del 0/0

Uważam, że łapie wszystkie domyślne trasy.

jsbillings
źródło
Dziękuję, ale nadal usuwa tylko jedną bramę domyślną, nie wszystkie.
Muhammad Gelbana,
4
Być może powinieneś powtórzyć wszystkie domyślne trasy i usunąć je, zamiast zakładać, że pierwsze usunięcie usuwa wszystkie. Wygląda na to, że Twój kod w jakiś sposób się psuje i dodaje więcej niż jedną domyślną trasę. To nie jest normalna okoliczność.
jsbillings,
Zgadzam się, że mój kod w pewnym momencie się psuje, ale być może mogę to szybko rozwiązać, naprawiając GW, zamiast marnować dużo czasu, którego nie mam. Bardzo dziękuję za Twoją pomoc.
Muhammad Gelbana,
To tylko nowoczesny Linux.
Jordan
4

Aby usunąć wszystkie domyślne bramy za pomocą ip

ip route flush 0/0
Esben Haabendal
źródło
3

Wszystkie odpowiedzi są świetne, ale rozwiązałem ten problem, stosując inne podejście, użyłem polecenia, aby dodać tylko jedną bramę domyślną, ale zawiodłem, jeśli już istnieje. I w ten sposób ostatecznie usuń niewłaściwą bramę na końcu polecenia. Powinno to działać po raz drugi isa.

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

Muhammad Gelbana
źródło
2

Jeśli Twój kod łamie się z wieloma bramami domyślnymi, prawdopodobnie powinieneś również szukać wielu adresów IP na urządzenie.

Jak już otrzymałeś odpowiedź, oto inne podejście, ponieważ NIGDY nie powinieneś zmieniać konfiguracji systemu tylko dlatego, że chcesz uruchomić / przetestować skrypt. Może zamiast tego użyjesz sieciowych nazw. Krótkie wprowadzenie na temat dodawania urządzeń wirtualnych do NS (przestrzeni nazw) znajduje się na stronie http://code.google.com/p/coreemu/wiki/Namespaces .

Aby utworzyć przestrzeń nazwaną test i uruchomić polecenie w tym obszarze, po prostu uruchom

ip netns add test
ip netns exec test COMMAND

gdzie COMMAND może być na przykład twoją powłoką lub tylko skryptem serwera.

Ulrich Dangel
źródło