Нужно при помощи 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
>[оверквотинг удален]
> 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
ip route delete default via 10.1.1.1 dev eth1 metric 10
Очевидно, что нет смысла менять метрику всем. Достаточно удалить маршрут с меньшей метрикой и создать его заново с метрикой большей, чем у самого последнего. Метрика - это 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)
Код не проверял, идея думаю ясна.
> Очевидно, что нет смысла менять метрику всем. Достаточно удалить маршрут с меньшей
> метрикой и создать его заново с метрикой большей, чем у самого
> последнего. Метрика - это 32 битное целое. Хватит надолго.Да, хорошая идея! Как-то не подумал посмотреть на задачу с такой стороны :)
Думаю, что такое решение мне подойдет. Спасибо!
>[оверквотинг удален]
> 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