Estoy ejecutando una máquina Linux personalizada, por lo que no todos los comandos de Linux están disponibles .
Ejecuto comandos relacionados con la red, por lo que necesito configurar una puerta de enlace predeterminada justo antes de ejecutar mi comando, y luego eliminar esa puerta de enlace inmediatamente después.
Para hacer eso ejecuto todos mis comandos en una línea:
/sbin/route add default gw 10.10.10.10;my command;/sbin/route del default gw 10.10.10.10;
El problema es que, por alguna razón, una vez encontré 2 puertas de enlace predeterminadas en la misma máquina, lo que hizo que todos mis comandos fallaran porque incluso si configuré mi puerta de enlace predeterminada antes de ejecutar mi prueba, todavía está en mal estado y no puedo ejecutar mi prueba.
Entonces, ¿hay alguna manera de eliminar TODAS las puertas de enlace predeterminadas en un comando ? Tengo una gran cantidad de máquinas que están aumentando y no será práctico plantar un script en cada máquina. Necesito un comando tan simple como el siguiente:
/sbin/route del all default;set my default gw;mycommand;/sbin/route del all default;
Todo lo que he encontrado hasta ahora es un comando para eliminar una puerta de enlace predeterminada, pero no todas,
/sbin/route del default
lo que no funcionará para mí.
/sbin/route
ayuda muestra lo siguiente
/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 eliminar todas las puertas de enlace predeterminadas usando
ip
fuente
Si su código se rompe con múltiples puertas de enlace predeterminadas, probablemente también debería buscar en varias direcciones IP por dispositivo.
Como ya recibió una respuesta, aquí hay otro enfoque, ya que NUNCA debe cambiar la configuración de su sistema solo porque desea ejecutar / probar un script. ¿Qué tal usar espacios de nombres de red en su lugar? Para una breve introducción sobre cómo agregar dispositivos virtuales a su NS (espacio de nombres), visite http://code.google.com/p/coreemu/wiki/Namespaces .
Para crear un espacio de nombres llamado prueba y ejecutar un comando debajo de este espacio de nombres simplemente ejecute
donde COMMAND puede ser, por ejemplo, su shell o simplemente el script del servidor.
fuente
Todas las respuestas son geniales, pero resolví este problema con un enfoque diferente, utilicé el comando para agregar solo una puerta de enlace predeterminada, pero fallé si ya hay una. Y así, eventualmente, eliminar la puerta de enlace incorrecta al final del comando. Esto debería funcionar en la segunda vez isa.
ip route add default via my-gateway
ip route del default
fuente