Skip to content

Simple script to fix Mikrotik's BGP Bug with stalled BGP Sessions

Notifications You must be signed in to change notification settings

IgorAlov/rb-rstbgp.rsc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 

Repository files navigation

Описание:

Привет, как известно в 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
    • Импортируем загруженный скрипт /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]

Для тех кто использует RouterOS API:

Скрипт, при использовании 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).

About

Simple script to fix Mikrotik's BGP Bug with stalled BGP Sessions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published