BGP Peer

Автоматизация при помощи встроенного скриптового языка и RouterOS API
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

BGP Peer

Сообщение Sir_Prikol »

Доброго времени суток. Задача (не совсем тривиальная) иногда, при поднятии bgp пира не приходят префиксы. Причину не установил, но это мелочи, решил написать скрипт, который будет смотреть на состояние пира, количество префиксов (<0) и на основе этого disable/enable данного пира (после этого префиксы приходят)

Комменты у пиров не используются

Что я умудрился сделать (пока)

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

:global cnt [/routing bgp peer get [find where prefix-count=2] name] 
routing bgp peer set disabled=yes $cnt
Это работает при указании конкретного количества префиксов, получить в таком виде имя пира, где количество префиксов меньше 1 не получилось

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

:global z
:set z [routing bgp peer print count-only]
Получил общее количество пиров для цикла, чтоб найти именно тех, у которых префикс меньше единицы

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

:local cntpir [[/routing bgp peer get [find where state="established"] name]]
Получил общее количество пиров с состоянием established, чтоб понапрасну не дёргать задизейбленных

Но вот сложить в кучу не получилось.

Пытаюсь сделать цикл, который просмотрит всех пиров с префиксами <1 и состоянием established, сделает этому пиру "disable" и через секунду "enable"

Сам скрипт, естественно, раз в 5 минут (чтоб успели подняться те, которые я дёрнул)
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4089
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: BGP Peer

Сообщение Chupaka »

Бодрого дня.
Sir_Prikol писал(а): 19 окт 2020, 10:58 получить в таком виде имя пира, где количество префиксов меньше 1 не получилось
Вроде нормально отрабатывает... Навскидку предлагаю что-то такое:

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

:foreach p in=[/routing bgp peer find where prefix-count<1 and state="established"] do={
	/routing bgp peer disable $p;
	/routing bgp peer enable $p;
}
Кстати, обязательно ли выключать-включать? Какой-нибудь /routing bgp peer refresh не помогает?
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP Peer

Сообщение Sir_Prikol »

В том-то и дело, ни refresh ни resend не спасает, я так и не понял, в какой момент префиксы не прилетают, то ли попадает в секунду окончания keep alive, то ли в момент окончания hold time. Но достаёт отднозначно. Client to client reflection почти поправил ситуацию (после того как я его в enable выставил, но всё равно проскакиевает эта трабла.

P.S. Цикл работает. Спасибо
Дома: CCR2004 (7-ISP(GPON)белый IP)
ns88ns
Сообщения: 54
Зарегистрирован: 16 дек 2019, 13:40

Re: BGP Peer

Сообщение ns88ns »

Да, есть такое. Был разбор полетов и постановили - что таки баг. И решение именно такое: peer disable/enable.
https://forum.mikrotik.com/viewtopic.php?t=119719

Пиры завтревают в состояниях opensent. Но, я ловил проблему и в idle. Ну и вроде бы, как будто бы, возможно, наверно, может быть, в ROS7 этого дефекта не будет. Но это не точно.

Себе фиксил так:

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

/routing bgp peer {
  :foreach peer in [find (state="opensent" or state="idle") and disabled=no] do={
    :if ( \
      ([get $peer update-source]=none) or \
      ( \
        ([get $peer update-source]!=none) and \
        [/interface get [/interface find name=[/routing bgp peer get $peer update-source]] running ]=yes \
      ) \
    ) do={
      :log warning ("Restart stuck or idled BGP Peer: $([get $peer name])")
      disable $peer
      :delay 400ms
      enable $peer
    }
  }
}
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP Peer

Сообщение Sir_Prikol »

Это более универсальное решение, оно смотрит на состояние, но так как у меня у пиров есть префиксы, я не рассматривал такой вариант

Моя проблема именно что состояние established, но префиксов нет, вот это бесило
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: BGP Peer

Сообщение Sir_Prikol »

Тут у меня другая проблема, 2 6to4 туннеля и в один момент один из них, сука такая, не хочет подниматься, могу часами его грохать (вместе с пирами), Туннель в стадии running, а пиры лежат и пинги в туннеле не бегают

Что я только не делал, последнее что начало помогать - тушу весь фаер, тушу пира, тушу туннель, поднимаю туннель, поднимаю пира, поднимаю фаер - вуаля, моментальное соединене

Грешу на защиту от syn flood, но пока точно не понял что за правило глушит туннель, при этом второй работает.
Тушил правила по одиночке - хрен там, подъёма нет, только когда скопом укладываю
Дома: CCR2004 (7-ISP(GPON)белый IP)