Cómo eliminar todas las puertas de enlace predeterminadas

13

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 defaultlo 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
Muhammad Gelbana
fuente

Respuestas:

17

Si usa en iplugar de route, simplemente puede ejecutar:

ip route del 0/0

Creo que atrapa todas las rutas predeterminadas.

jsbillings
fuente
Gracias, pero todavía elimina solo una puerta de enlace predeterminada, no todas.
Muhammad Gelbana
44
Entonces, tal vez debería iterar por todas las rutas predeterminadas y eliminarlas, en lugar de suponer que su primera eliminación elimina todas. Parece que su código se está rompiendo de alguna manera y agrega más de una ruta predeterminada. Esta no es una circunstancia normal.
jsbillings
Estoy de acuerdo en que mi código se rompe en algún momento, pero es posible que pueda resolver esto rápidamente solucionando el problema de GW en lugar de perder mucho tiempo que no tengo. Muchas gracias por tu ayuda.
Muhammad Gelbana
Esto es solo para Linux moderno.
jordanm
4

Para eliminar todas las puertas de enlace predeterminadas usando ip

ip route flush 0/0
Esben Haabendal
fuente
2

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

ip netns add test
ip netns exec test COMMAND

donde COMMAND puede ser, por ejemplo, su shell o simplemente el script del servidor.

Ulrich Dangel
fuente
2

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

Muhammad Gelbana
fuente