LINUX.ORG.RU
ФорумAdmin

Как сохранить/загрузить таблицу маршрутизации?


0

3

Есть ли какая-либо возможность «сохранить» вывод route -n, а потом при старте системы загрузить эту таблицу обратно?
Сейчас, пока у нас всё не устаканилось, я её довольно активно в динамике набиваю руками и таблица маршрутизации живёт себе самостоятельной, практически не привязанной к груде интерфейсов жизнью.
Все стандартные способы установки маршрутов при загрузке опираются на описания сетевых интерфейсов. Тем не менее, очень часто приходится всё равно добавлять команды описания маршрутов в какой-нибудь rc.local (route add smth), поскольку взаимосвязь между интерфейсами и маршрутами конечно существует, но удобнее всё-таки редактировать таблицу в одном месте, а не в каких-то замусоренных файлах описания интерфейсов. К тому же, ну да, бывает, что интерфейсы поднимаются далеко не стандартным для дистрибутива X способом.
А нельзя ли это дело как-то автоматизировать? Я конечно понимаю, что на основе route -n можно написать какой-то BASH или Perl скрипт, который будет парсить всё это и делать соотв. route add'ы. Но меня жаба душит писать то, что небось уже есть...
Но есть ли?

★★★★★

в относительно свежих версиях iproute2 появились ip route save, ip route restore но как оно работает на деле не знаю

zolden ★★★★★
()
Ответ на: комментарий от zolden

Под впечатлением от ужасов quagga написал всё-таки скрипт:

#!/bin/bash        
declare -a tbl     
savedRoutes="$1"   
while read line; do
 [[ ${line:0:1} =~ ^[0-9]$ ]] || continue
 tbl=($line)  
 gw=; netmask=
 if [[ ${tbl[0]} == '0.0.0.0' && ${tbl[2]} == '0.0.0.0' ]]; then
  add_what='default'
 elif [[ ${tbl[2]} == '255.255.255.255' ]]; then
  add_what="-host ${tbl[0]}"
 else
  add_what="-net ${tbl[0]}"  
  netmask="netmask ${tbl[2]}"
 fi
 [[ ${tbl[1]} == '0.0.0.0' ]] || gw="gw ${tbl[1]}"
 echo "route add ${add_what}${gw:+ $gw}${netmask:+ $netmask} dev ${tbl[7]}"
done <${savedRoutes:-<(cat -)}
Пользоваться так:
# route-restore <PATH
# route-restore PATH
# cat PATH | route-restore

DRVTiny ★★★★★
() автор топика

Может просто OSPF поднять в сети?

af5 ★★★★★
()
Ответ на: комментарий от zolden

Ну как говорится, что знаю :)
Я ещё потом добавил в этот скрипт проверку строки на существование в выводе route -n (чтобы не добавлять то, что итак есть). Начал опции командной строки приделывать - и тут ciscovpn-соединение до сервера отвалилось. Хорошо хоть в screen'е было, можно доделать.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

Ну как говорится, что знаю :)

Через iproute твой скрипт сократится до однострочника, и знать особо ничего не надо
Вот стандартный вывод ip r (делаем save куда-нибудь)

default via 192.168.1.1 dev eth1  proto static
169.254.0.0/16 dev eth3  scope link  metric 1000 

Для восстановления просто добавляешь ip r a(сокращённое от ip route add) в начале каждой сохранённой строчки, т.е.

ip r a default via 192.168.1.1 dev eth1  proto static
ip r a 169.254.0.0/16 dev eth3  scope link  metric 1000 
zolden ★★★★★
()

В мандриве есть родные скрипты для сохранения-восстановиления, хранится всё в конфигах текстовых.

Gordon01 ★★
()
Ответ на: комментарий от DRVTiny

впечатлением от ужасов quagga

ничего страшного не увидел. на серверах, где у меня стоит quagga статические маршруты храню именно в ней, дабы не плодить зоопарк. Да и redistribute делать проще...

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.