The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Поменять метрики нескольких default-маршрутов"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Поменять метрики нескольких default-маршрутов"  +/
Сообщение от jremail (ok), 26-Фев-19, 13:59 
Нужно при помощи shell (sh, не bash!) поменять метрики default-маршрутов системы. Количество default-маршрутов может быть произвольным (от нуля до N). В sh, насколько я знаю, нет массивов и я не пойму как без них решить эту задачу...

Пример с четыремя default-маршрутами.

До изменения:

$ ip -4 route | grep default
default via 10.1.1.1 dev eth1 proto static metric 10
default via 10.2.2.2 dev eth2 proto static metric 20
default via 10.3.3.3 dev eth3 proto static metric 30
default via 10.4.4.4 dev eth4 proto static metric 40

Что должно быть после изменения:

$ ip -4 route | grep default
default via 10.1.1.1 dev eth1 proto static metric 40
default via 10.2.2.2 dev eth2 proto static metric 10
default via 10.3.3.3 dev eth3 proto static metric 20
default via 10.4.4.4 dev eth4 proto static metric 30

Иными словами должно произойти изменение метрик путем смещения:

10 -> 40
20 -> 10
30 -> 20
40 -> 30

Команда на изменение маршрута -- это его удаление и установка нового:

ip route delete default via 10.1.1.1 dev eth1 metric 10
ip route add default via 10.1.1.1 dev eth1 metric 40

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Поменять метрики нескольких default-маршрутов"  +/
Сообщение от Аноним (1), 26-Фев-19, 15:51 
>[оверквотинг удален]
> default via 10.3.3.3 dev eth3 proto static metric 20
> default via 10.4.4.4 dev eth4 proto static metric 30
> Иными словами должно произойти изменение метрик путем смещения:
>
10 -> 40 
> 20 -> 10
> 30 -> 20
> 40 -> 30

> Команда на изменение маршрута -- это его удаление и установка нового:
>
ip route delete default via 10.1.1.1 dev eth1 metric 10 
> ip route add default via 10.1.1.1 dev eth1 metric 40

Очевидно, что нет смысла менять метрику всем. Достаточно удалить маршрут с меньшей метрикой и создать его заново с метрикой большей, чем у самого последнего. Метрика - это 32 битное целое. Хватит надолго.

ROUTE=$(ip -4 route | grep default | head -n1)
MAX_METRIC=$(ip -4 route | grep default | tail -n1| sed -e's/.*metric\s*//')

ip r del "$ROUTE"
ip r add $(echo "$ROUTE" | sed -e 's/\d+\s*$//') $(expr $MAX_METRIC + 10)


Код не проверял, идея думаю ясна.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Поменять метрики нескольких default-маршрутов"  +/
Сообщение от jremail (??), 27-Фев-19, 11:18 
> Очевидно, что нет смысла менять метрику всем. Достаточно удалить маршрут с меньшей
> метрикой и создать его заново с метрикой большей, чем у самого
> последнего. Метрика - это 32 битное целое. Хватит надолго.

Да, хорошая идея! Как-то не подумал посмотреть на задачу с такой стороны :)
Думаю, что такое решение мне подойдет. Спасибо!

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Поменять метрики нескольких default-маршрутов"  +/
Сообщение от pavel_simple (ok), 26-Фев-19, 15:56 
>[оверквотинг удален]
> default via 10.3.3.3 dev eth3 proto static metric 20
> default via 10.4.4.4 dev eth4 proto static metric 30
> Иными словами должно произойти изменение метрик путем смещения:
>
10 -> 40 
> 20 -> 10
> 30 -> 20
> 40 -> 30

> Команда на изменение маршрута -- это его удаление и установка нового:
>
ip route delete default via 10.1.1.1 dev eth1 metric 10 
> ip route add default via 10.1.1.1 dev eth1 metric 40

сделать 2 новые таблицы с нужным приоритетом маршрутов
переключаться одной командой через ip rule

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


  Закладки на сайте
  Проследить за страницей
Created 1996-2019 by Maxim Chirkov  
ДобавитьПоддержатьВебмастеруГИД  
Hosting by Ihor