Обнаружена блокировка рекламы: Наш сайт существует благодаря показу онлайн-рекламы нашим посетителям. Пожалуйста, подумайте о поддержке нас, отключив блокировщик рекламы на нашем веб-сайте.
Здравствуйте.
Ситуация стандартная, есть два провайдера так же висят 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 писал(а): ↑19 мар 2021, 18:06
Вы задачу поподробнее объясните.
Как проверяется факт падения провайдера?
Почему маршруты через упавшего провайдера не отваливаются (так чтобы маршруты через резервного становились активными)?
Это делается другим скриптом, там маршруты упавшего провайдера так же через distance подменяются.
Идет проверка через Ping + интерфейс по двум разным конечным точкам в интернете (на случай если мы одной из них не доверяем).
После падения провайдера основной, меняется distance в таблице маршрутизации и записывается глобальная переменная текущего интерфейса на котором рабочий провайдер.
Я до этого не сталкивался плотно со скриптами и прошу логическое ревью (как на самом деле делают большие дяди, если нужно например не искать чисто по комменту в таблице а пробежаться по всей таблице и выискивать нужные атрибуты).
xvo писал(а): ↑19 мар 2021, 18:28
Большие дяди не перестраивают туннели, а держат их поднятыми через двух провайдеров одновременно, а переключение между туннелями делается OSPF.
Почему нельзя держать поднятые оба туннеля?
И если не держать тогда как? Один disable другой поднят?
У меня так и есть подняты два gre+ipsec туннеля от каждой внешней точки на каждого из провайдеров. А переключение в маршрутизации происходит через изменение distance во всей таблице маршрутизации только тех записей где шлюзами являются gre туннели
freeddos писал(а): ↑19 мар 2021, 23:42
А переключение в маршрутизации происходит через изменение distance во всей таблице маршрутизации только тех записей где шлюзами являются gre туннели
Ну вот это и следует заменить на OSPF (с включенным BFD), который и будет заниматься переключением.
Получается, что скриптом нужно только провайдеров переключать с отвалившегося на здорового.
А ospf вешать на интерфейсы gre и там уже когда реально переключиться скриптом провайдер то сам ospf переключит distance на маршрутах висящих на gre?
freeddos писал(а): ↑20 мар 2021, 10:36
сам ospf переключит distance на маршрутах висящих на gre?
Почти так, только OSPF в принципе не устанавливает в таблицу неактивные маршруты.
То есть он поменяет сам маршрут.
Ну и собственно это все произойдет ещё до того, как отработает ваш первый скрипт.
Он для работоспособности именно OSPF на туннелях вообще не нужен, только для вашего обычно трафика "в интернет", который по дефолтному маршруту ходит.