Як видалити всі шлюзи за замовчуванням


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

Я вважаю, що ловить усі маршрути за замовчуванням.


Дякую, але він як і раніше видаляє лише один шлюз за замовчуванням, не весь.
Мухаммед Гельбана

4
Тоді, можливо, вам слід повторити всі маршрути за замовчуванням і видалити їх, а не припускати, що перше видалення видаляє їх усі. Здається, ваш код якось порушується і додає більше одного маршруту за замовчуванням. Це не нормальна обставина.
jsbillings

Я погоджуюся, що мій код порушується в якийсь момент, але, можливо, я можу це швидко вирішити, виправивши GW річ, а не витрачаючи багато часу, якого у мене немає. Велике спасибі за вашу допомогу.
Мухаммед Гелбана

Це лише сучасний Linux.
Йорданм


3

Усі відповіді чудові, але я вирішив цю проблему, використовуючи інший підхід, я використав команду, щоб додати лише один шлюз за замовчуванням, але не вдасться, якщо він вже є. І таким чином в кінці команди видаліть неправильний шлюз. Це повинно працювати вдруге ISA.

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


2

Якщо ваш код порушений з кількома шлюзами за замовчуванням, ви, ймовірно, також повинні шукати кілька ip-адрес на пристрої.

Оскільки ви вже отримали відповідь, тут є інший підхід, оскільки ви НІКОЛИ не повинні змінювати конфігурацію вашої системи лише тому, що ви хочете запустити / протестувати сценарій. Як щодо використання мережевих просторів імен. Короткий вступ про те, як додати віртуальні пристрої до вашої NS (простір імен), ознайомтеся з http://code.google.com/p/coreemu/wiki/Namespaces .

Для створення простору імен з ім'ям тесту та запустіть команду під цим простором імен просто запустіть

ip netns add test
ip netns exec test COMMAND

де COMMAND може бути, наприклад, вашою оболонкою або просто сценарієм сервера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.