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 default
que 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
Para remover todos os gateways padrão usando
ip
fonte
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
onde COMMAND pode ser, por exemplo, seu shell ou apenas o script do servidor.
fonte
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
fonte