Переключение IPSEC маршрутов (поругайте скрипт)

Обсуждение ПО и его настройки
freeddos
Сообщения: 56
Зарегистрирован: 15 окт 2017, 10:54

Здравствуйте.
Ситуация стандартная, есть два провайдера так же висят IPSEC туннели. задача была простая переключить с одного маршрута туннели на другой (при отключении провайдера).

На сколько сильно вытекают глаза у адекватного человека глядя на этот скрипт.
И как делать лучше?

Код: Выделить всё


:global intISPnow  # Сюда другой скрипт помещает интерфейс на котором текущий рабочий провайдер

:local findISP [/ip address get [find interface=$intISPnow] comment] #Тут запоминаем условное обозначение из коммента (ip адрес подписан типо ISP1 или ISP2).

# Прогоняем по найденным интерфейсам GRE (которые имеют название под каждого провайдера)
:foreach list in= [/ip address find interface~"ISP"] do= {

# Тут прогоняем по всем, маршрутам которые статические и в шлюзе есть упоменание "ISP" 
:foreach listRule in= [/ip route find static=yes gateway-status~"ISP"] do= {

:local gwstate [/ip route get $listRule gateway-status]

#Проверяем если шлюз, соответствует текущему провайдеру, на который уже переключились, поэтому меняем distance
if (($gwstate~$findISP)) do= {
/ip route set distance=1 $listRule
} else= { 
/ip route set distance=2 $listRule 
}
}
}
Не хочется руками создавать комментарии для каждого маршрута, поэтому пытаюсь искать через другие признаки.


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Вы задачу поподробнее объясните.
Как проверяется факт падения провайдера?
Почему маршруты через упавшего провайдера не отваливаются (так чтобы маршруты через резервного становились активными)?


Telegram: @thexvo
freeddos
Сообщения: 56
Зарегистрирован: 15 окт 2017, 10:54

xvo писал(а): 19 мар 2021, 18:06 Вы задачу поподробнее объясните.
Как проверяется факт падения провайдера?
Почему маршруты через упавшего провайдера не отваливаются (так чтобы маршруты через резервного становились активными)?
Это делается другим скриптом, там маршруты упавшего провайдера так же через distance подменяются.
Идет проверка через Ping + интерфейс по двум разным конечным точкам в интернете (на случай если мы одной из них не доверяем).
После падения провайдера основной, меняется distance в таблице маршрутизации и записывается глобальная переменная текущего интерфейса на котором рабочий провайдер.

Я до этого не сталкивался плотно со скриптами и прошу логическое ревью (как на самом деле делают большие дяди, если нужно например не искать чисто по комменту в таблице а пробежаться по всей таблице и выискивать нужные атрибуты).


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

Большие дяди не перестраивают туннели, а держат их поднятыми через двух провайдеров одновременно, а переключение между туннелями делается OSPF.


Telegram: @thexvo
freeddos
Сообщения: 56
Зарегистрирован: 15 окт 2017, 10:54

xvo писал(а): 19 мар 2021, 18:28 Большие дяди не перестраивают туннели, а держат их поднятыми через двух провайдеров одновременно, а переключение между туннелями делается OSPF.
Почему нельзя держать поднятые оба туннеля?
И если не держать тогда как? Один disable другой поднят?


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

freeddos писал(а): 19 мар 2021, 18:56 Почему нельзя держать поднятые оба туннеля?
Я наоборот говорю, что так и надо делать - держать оба поднятыми.


Telegram: @thexvo
freeddos
Сообщения: 56
Зарегистрирован: 15 окт 2017, 10:54

У меня так и есть подняты два gre+ipsec туннеля от каждой внешней точки на каждого из провайдеров. А переключение в маршрутизации происходит через изменение distance во всей таблице маршрутизации только тех записей где шлюзами являются gre туннели


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

freeddos писал(а): 19 мар 2021, 23:42 А переключение в маршрутизации происходит через изменение distance во всей таблице маршрутизации только тех записей где шлюзами являются gre туннели
Ну вот это и следует заменить на OSPF (с включенным BFD), который и будет заниматься переключением.


Telegram: @thexvo
freeddos
Сообщения: 56
Зарегистрирован: 15 окт 2017, 10:54

Получается, что скриптом нужно только провайдеров переключать с отвалившегося на здорового.
А ospf вешать на интерфейсы gre и там уже когда реально переключиться скриптом провайдер то сам ospf переключит distance на маршрутах висящих на gre?


xvo
Сообщения: 4204
Зарегистрирован: 25 фев 2018, 22:41
Откуда: Москва

freeddos писал(а): 20 мар 2021, 10:36 сам ospf переключит distance на маршрутах висящих на gre?
Почти так, только OSPF в принципе не устанавливает в таблицу неактивные маршруты.
То есть он поменяет сам маршрут.

Ну и собственно это все произойдет ещё до того, как отработает ваш первый скрипт.
Он для работоспособности именно OSPF на туннелях вообще не нужен, только для вашего обычно трафика "в интернет", который по дефолтному маршруту ходит.


Telegram: @thexvo
Ответить