Как удалить все шлюзы по умолчанию

13

Я использую специально созданную машину Linux, поэтому не все команды Linux доступны .
Я выполняю команды, связанные с сетью, поэтому мне нужно установить шлюз по умолчанию непосредственно перед выполнением команды, а затем сразу же удалить этот шлюз.

Для этого я запускаю все свои команды в одну строку:

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

Проблема в том, что по какой-то причине я однажды обнаружил 2 шлюза по умолчанию на одной машине, что привело к сбою всех моих команд, потому что даже если я установил шлюз по умолчанию перед запуском теста, он все еще не работает и не может запустить мой тест.

Так есть ли способ удалить все шлюзы по умолчанию в одной команде ? У меня есть большое количество машин, которые растут, и не будет практичным устанавливать скрипт на каждой машине. Мне нужна такая простая команда:

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

Все , что я нашел до сих пор является команда для удаления в шлюз по умолчанию , но не все из них , /sbin/route del defaultкоторые не будут работать на меня.

/sbin/route справка отображает следующее

/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
Мухаммед Гелбана
источник

Ответы:

17

Если вы используете ipвместо route, вы можете просто запустить:

ip route del 0/0

Я считаю, что ловит все маршруты по умолчанию.

jsbillings
источник
Спасибо, но он по-прежнему удаляет только один шлюз по умолчанию, а не все.
Мухаммед Гелбана
4
Тогда, возможно, вам следует перебрать все маршруты по умолчанию и удалить их, вместо того, чтобы предполагать, что ваше первое удаление удаляет все из них. Похоже, ваш код каким-то образом ломается и добавляет более одного маршрута по умолчанию. Это не нормальное обстоятельство.
Jsbillings
Я согласен, что мой код в какой-то момент ломается, но, возможно, я смогу быстро решить эту проблему, исправив проблему с GW, вместо того, чтобы тратить много времени, которого у меня нет. Большое спасибо за твою помощь.
Мухаммед Гелбана
Это только современный Linux.
Иордания
4

Чтобы удалить все шлюзы по умолчанию, используя ip

ip route flush 0/0
Эсбен Хаабендал
источник
2

Если ваш код не работает с несколькими шлюзами по умолчанию, вам, вероятно, следует также использовать несколько IP-адресов для каждого устройства.

Поскольку вы уже получили ответ, здесь есть другой подход, так как вы НИКОГДА не должны изменять конфигурацию вашей системы только потому, что вы хотите запустить / протестировать скрипт. Как насчет использования сетевых пространств имен вместо этого. Для краткого введения, как добавить виртуальные устройства в ваше NS (пространство имен), посмотрите http://code.google.com/p/coreemu/wiki/Namespaces .

Чтобы создать пространство имен с именем test и запустить команду в этом пространстве имен, просто запустите

ip netns add test
ip netns exec test COMMAND

где COMMAND может быть, например, вашей оболочкой или просто серверным скриптом.

Ульрих Дангел
источник
2

Все ответы хороши, но я решил эту проблему другим способом, я использовал команду, чтобы добавить только один шлюз по умолчанию, но потерпел неудачу, если он уже есть. И, таким образом, в конце концов удалите неправильный шлюз в конце команды. Это должно работать во второй раз.

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

Мухаммед Гелбана
источник