Como remover todos os gateways padrão

13

Estou executando uma máquina Linux personalizada, portanto nem todos os comandos do Linux estão disponíveis .
Como executo comandos relacionados à rede, preciso definir um gateway padrão imediatamente antes de executar meu comando e removê-lo imediatamente em seguida.

Para fazer isso, eu executo todos os meus comandos em uma linha:

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

O problema é que, por alguma razão, encontrei 2 gateways padrão na mesma máquina, o que causou a falha de todos os meus comandos, porque, mesmo que eu defina meu gateway padrão antes de executar o teste, ele ainda estará bagunçado e não poderá executar o teste.

Portanto, existe uma maneira de remover TODOS os gateways padrão em um comando ? Eu tenho uma grande quantidade de máquinas aumentando e não será prático plantar um script em todas as máquinas. Eu preciso de um comando tão simples quanto o seguinte:

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

Tudo o que encontrei até agora é um comando para remover um gateway padrão, mas nem todos /sbin/route del defaultque não funcionem para mim.

/sbin/route ajuda exibe o seguinte

/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
fonte

Respostas:

17

Se você usar em ipvez de route, poderá simplesmente executar:

ip route del 0/0

Eu acredito que pega todas as rotas padrão.

jsbillings
fonte
Obrigado, mas ele ainda remove apenas um gateway padrão, não todos.
Muhammad Gelbana
4
Talvez você deva percorrer todas as rotas padrão e removê-las, em vez de assumir que sua primeira remoção remove todas elas. Parece que seu código está quebrando de alguma forma e adicionando mais de uma rota padrão. Esta não é uma circunstância normal.
Jsbillings
Concordo que meu código quebre em algum momento, mas pode ser que eu possa resolver isso rapidamente, corrigindo a questão GW, em vez de perder muito tempo que não tenho. Muito obrigado por sua ajuda.
Muhammad Gelbana
Este é apenas o linux moderno.
Jordanm
4

Para remover todos os gateways padrão usando ip

ip route flush 0/0
Esben Haabendal
fonte
2

Se o seu código quebrar com vários gateways padrão, você provavelmente também deve procurar em vários endereços IP por dispositivo.

Como você já recebeu uma resposta, aqui está outra abordagem, pois NUNCA altere a configuração do seu sistema apenas porque deseja executar / testar um script. Que tal usar namespaces de rede? Para uma breve introdução sobre como adicionar dispositivos virtuais ao seu NS (namespace), consulte http://code.google.com/p/coreemu/wiki/Namespaces .

Para criar um namespace chamado test e executar um comando nesse namespace, basta executar

ip netns add test
ip netns exec test COMMAND

onde COMMAND pode ser, por exemplo, seu shell ou apenas o script do servidor.

Ulrich Dangel
fonte
2

Todas as respostas são ótimas, mas resolvi esse problema usando uma abordagem diferente. Usei o comando para adicionar apenas um gateway padrão, mas falha se já houver um. E assim, eventualmente, remova o gateway errado no final do comando. Isso deve funcionar na segunda vez, isa.

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

Muhammad Gelbana
fonte