Come rimuovere tutti i gateway predefiniti


13

Sto eseguendo una macchina Linux personalizzata, quindi non tutti i comandi Linux sono disponibili .
Eseguo i comandi relativi alla rete, quindi devo impostare un gateway predefinito prima di eseguire il comando, quindi rimuovere quel gateway immediatamente dopo.

Per fare ciò eseguo tutti i miei comandi in una riga:

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

Il problema è che, per qualche motivo, una volta ho trovato 2 gateway predefiniti sulla stessa macchina che hanno causato il fallimento di tutti i miei comandi perché anche se ho impostato il gateway predefinito prima di eseguire il test, è ancora incasinato e non è possibile eseguire il test.

Quindi c'è un modo per rimuovere TUTTI i gateway predefiniti in un comando ? Ho un gran numero di macchine che stanno aumentando e non sarà pratico piantare una sceneggiatura su ogni macchina. Ho bisogno di un comando semplice come il seguente:

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

Tutto quello che ho trovato finora è un comando per rimuovere un gateway predefinito, ma non tutti quelli /sbin/route del defaultche non funzioneranno per me.

/sbin/route aiuto mostra quanto segue

/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

Risposte:


17

Se usi ipinvece di route, puoi semplicemente eseguire:

ip route del 0/0

Credo che catturi tutti i percorsi predefiniti.


Grazie, ma rimuove ancora solo un gateway predefinito, non tutti.
Muhammad Gelbana,

4
Quindi forse dovresti scorrere tutte le route predefinite e rimuoverle, invece di supporre che la tua prima rimozione rimuova tutte. Sembra che il tuo codice si stia rompendo in qualche modo e aggiungendo più di una route predefinita. Questa non è una circostanza normale.
jsbillings,

Sono d'accordo che il mio codice si rompe a un certo punto, ma potrei essere in grado di risolverlo rapidamente risolvendo la cosa GW invece di perdere molto tempo che non ho. Grazie mille per il vostro aiuto.
Muhammad Gelbana,

Questo è solo Linux moderno.
Giordania,


2

Se il tuo codice si rompe con più gateway predefiniti, dovresti probabilmente cercare anche più indirizzi IP per dispositivo.

Poiché hai già ricevuto una risposta, ecco un altro approccio in quanto non dovresti MAI cambiare la configurazione del tuo sistema solo perché vuoi eseguire / testare uno script. Che ne dici di usare invece gli spazi dei nomi di rete. Per una breve introduzione su come aggiungere dispositivi virtuali al tuo NS (spazio dei nomi) dai un'occhiata a http://code.google.com/p/coreemu/wiki/Namespaces .

Per creare uno spazio dei nomi denominato test ed eseguire un comando in questo spazio dei nomi, è sufficiente eseguire

ip netns add test
ip netns exec test COMMAND

dove COMMAND può essere ad esempio la shell o solo lo script del server.


2

Tutte le risposte sono ottime ma ho risolto questo problema usando un approccio diverso, ho usato il comando per aggiungere solo un gateway predefinito, ma fallisco se ce n'è già uno. E quindi alla fine rimuovere il gateway errato alla fine del comando. Questo dovrebbe funzionare sulla seconda volta isa.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.