Поскольку MikroTik все еще не реализовал изменение состояния с "Вниз" на "Вверх", я написал скрипт, чтобы симулировать это в промежутке. Он не идеален, но свою задачу выполняет. Скрипт работает как программа, поэтому уведомления не приходят мгновенно, а сообщения отображаются в категории ‘script,info’, а не ‘route,ospf,info’, так что если вы проводите удаленный мониторинг syslog, вам нужно это учесть. Скрипт настроен на просмотр журналов за последнюю минуту и сохраняет любые сообщения с информацией OSPF. Затем он перебирает их и сравнивает активные соседства OSPF: если он видит сообщение "Вниз", но Router-ID в данный момент активен, предполагается, что связь восстановилась, и отправляется сообщение в журнал: “OSPFv2 neighbor [ID]: изменение состояния с Вниз на Вверх на [интерфейсе]”. Я предлагаю запланировать его выполнение раз в минуту. Если хотите запускать реже, то измените время в строке 3 скрипта, чтобы просматривать сообщения журнала с большим интервалом:
/global OSPFNeighborList
:if ($OSPFNeighborList != [/routing ospf neighbor find]) do={
:local OSPFDownMessages [/log find where topics=route,ospf,info time>=([/system clock get time]-00:01:00)]
:foreach i in=[$OSPFDownMessages] do={
:local m [/log get $i message]
:local t [:pick $m ([find $m "r"]+2) [find $m ":"]]
:local r [/routing ospf neighbor find where router-id=$t]
:local r [:pick $r 0]
:local ri [/routing ospf neighbor get $r interface]
:if ($r != "") do={:log info "OSPFv2 neighbor $t: state change from Down to Up on $ri"};
};
};
:global OSPFNeighborList [/routing ospf neighbor find];
Мне пришлось добавить несколько дополнительных проверок на дублирующиеся Router ID (т.е. резервные пути), так как это создавало проблемы. Скрипт будет отправлять сообщение "Вниз на Вверх", если хотя бы один путь к маршрутизатору все еще активен. Это не совсем корректно, потому что активная связь не переходит из состояния "Вниз" в "Вверх", т.е. у вас есть ether1 ↔ ether1 и ether2 ↔ ether2 на RouterA и RouterB соответственно. Если связь на ether2 была потеряна, технически должно быть только одно сообщение "Вверх на Вниз". Однако этот скрипт сравнивает Router-ID и видит, что на самом деле есть путь к RouterB, так что он отправляет "Вниз на Вверх". "Вниз на Вверх" также не является фактическим состоянием, это просто предположение. Технически маршрутизатор может остаться в состоянии init/exstart/2way, и он будет показывать "Вверх", это не смотрит на фактическое состояние. Это можно было бы реализовать в скрипте, но я не хочу усложнять его слишком сильно. Я бы предпочел, чтобы MikroTik просто реализовал это корректно с самого начала... Кроме того, в скрипте упоминается интерфейс. Мне бы хотелось, чтобы эта информация включалась по умолчанию в сообщение журнала. Потому что при наличии нескольких/резервных путей между маршрутизаторами мне важно знать, какой интерфейс вышел из строя, а не только о соседстве. Хотелось бы знать, если низкоскоростная резервная ссылка упала и это никого не затронет, или если вышла из строя основная высокоскоростная, что может вызвать задержки и заторы.