Привет, как известно в RouterOS, по крайней мере в 6ой версии, существует 🐛 с середины 2017 года, который, заключается в том, что время от времени рабочие BGP сессии переходят в состояние OpenSent
или Idle
без какой либо причины. Этот факт очень сильно портит жизнь адимнам. Так как у разработчкиов RoS по всей видимости нет времени, чтобы исправить этот баг, предлагаю воспользоватся данным скриптом, который позволяет автоматически "передергивать" bgp сессии.
Планировщик shceduler
запускает скрипт с определенной переодичностью (5м по умолчанию), скрипт проверяет состояние BGP сесиий, и если сессии находятся в одном из состояний OpenSent
или Idle
, и при этом сессии являются активными (enable=yes
), то скрипт опускат, сессию на время (1с по умолчанию), и затем ее поднимает обратно. C записью в лог файл.
Все довольно просто. Если Вас устраивают параметры, которые заданы по умолчанию, то Вы можете установить скрипт на свой роутер прямо с github. Если же Вы желаете изменить какие либо параметры скрипта, то можете разместить сервер в локальной сети, склонировать туда файл скрипта, внести в него изменения, и загружать его на роутер непосредственно из внутренней сети. Ну или просто загрузить скрипт на роутер, используя обычный буфер обмена.
- Установить из репозитория github прямо на роутер и импортировать его для этого выполните последовательно две команды:
/tool fetch url=https://raw.githubusercontent.com/IgorAlov/rb-rstbgp.rsc/main/rb-rstbgp.rsc mode=https ascii=yes keep-result=yes
/import rb-rstbgp.rsc
- Устновка на локальный сревер:
- Загрузить скрипт к себе на локальный сервер можно комнадой
git clone https://github.com/IgorAlov/rb-rstbgp.rsc
в директорию вашегоwww
сервера; - Выполняете команду на руотере для загрузки скрипта:
- пример, если Вы используете на вашем сервере https + basic auth:
/tool fetch url=https://ваш-www-сервер/rb-setfw.rsc mode=https ascii=yes keep-result=yes user="user" password="password"
- пример, для простого http:
/tool fetch url=https://ваш-www-сервер/rb-setfw.rsc mode=http ascii=yes keep-result=yes
- пример, если Вы используете на вашем сервере https + basic auth:
- Импортируем загруженный скрипт
/import rb-setfw.rsc
- Загрузить скрипт к себе на локальный сервер можно комнадой
- Загруженный файл скрипта, после его импортирования, должен сам удалится с устройства (он там больше не нужен), однако если Вы хотите его отсавить, то можно закомментировать последню строчку в скрипте
/file remove
Если Вы хотите удалить скрипт с роутреа, то просто выполените три комманды:
/file remove [/file find name=rb-rstbgp.rsc]
/system script remove [find name=rb-rstbgp.rsc]
/system scheduler remove [find name=rb-rstbgp.rsc]
Скрипт, при использовании API, можно загрузить на роутер, и запустить примерно такой конструкцией на PHP:
...
microtik_import_apiscript($API,"rb-rstbgp.rsc");
...
function microtik_import_apiscript($API,$script_name)
{
if(!isset($API)||$script_name=="") return false;
$script_id="";
$arrID=$API->comm("/tool/fetch",
array(
"mode" => "https",
"check-certificate" => "no",
"url" => "https://ваш-www-сервер/".$script_name,
"dst-path" => $script_name,
"keep-result" => "yes",
"ascii" => "yes",
"user" => "username",
"password" => "password"
));
sleep(2);
$arrID=$API->comm("/file/getall",
array(
".proplist"=> ".id",
"?name" => $script_name
));
$script_id=(isset($arrID["0"][".id"]))?$arrID["0"][".id"]:"";
if($script_id!="")
{
$arrID=$API->comm("/import",
array(
"file-name" => $script_name
));
$arrID=$API->comm("/file/remove",
array(
".id" => $script_id
));
}
return true;
}
timecheck "5m"
-> время через которое будет вызван скрипт проверки состяния сессий (по умолчанию 5m - минут).timerst "1s"
-> время на которое опускается BGP сессия (по умолчанию 1s - 1 секунда).
Если Вы нашли баг, или что то хотие добавить - создате issue
я постарюсь решить его. Так же если Вы хотите стать частью проекта, то wellcome).