Настройка ограничения объема трафика на Mikrotik RBSXTR R11e-LTE

В моих скрижалях есть нашел я нашел одну заметку, о которой стоит написать еще одну краткую опорную статью – настройка ограничения объема трафика на Mikrotik RBSXTR R11e-LTE. Хотя, устройство Mikrotik может быть и другое. И даже не обязательно выполнять настройку ограничения именно для LTE интерфейса. Скрипт, про который я расскажу ниже, можно адаптировать и для Ethernet интерфейса.

Этот скрипт написал не я. Я взял за основу вот это решение и немного его скорректировал.

Описание решения

Есть резернвый канал связи, который использует LTE на устройстве Mikrotik RBSXTR R11e-LTE. Тариф предусматривает определенный объем ежемесячного трафика. Необходимо настроить скрипт, который будет отключать LTE интерфейс по достижении указанного порогового значения.

Звучит достаточно понятно. Приступим к реализации.

Реализация

Как я уже сказал ранее, я взял за основу уже готовое решение и скорректировал его для работы с LTE интерфейсом:

:global persistVar do={
	:local varName $1;
	:local varValue $2;
	:local varID [/ip firewall layer7-protocol find name="$varName"];

	:if ([:typeof $varValue] = "nothing") do={
		:if ($varID != "") do={
			:set $varValue [/ip firewall layer7-protocol get $varID value-name=regexp];
		}
	} else={
		:if ($varID = "") do={
			/ip firewall layer7-protocol add name="$varName" regexp="$varValue"
		} else={
			/ip firewall layer7-protocol set $varID regexp="$varValue"
		}
	}

return $varValue
}

:do {              
####################################################################################################
# User config
#Set limit in MB                                                                                                                                                     
:local limit 92160;
#Set day to reset limit
:local dayresetlimit "22";
#Set interface
:local interf "lte1";
#Set auto bring up interface 
:local autointon true;
####################################################################################################
:local day ([:pick [/system clock get date] 4 6]);
:local newdata;
:local result;
:local ref;
:local status;
:local tx [/interface get $interf tx-byte];
:local rx [/interface get $interf rx-byte];

:set $newdata (($rx + $tx) / 1024 / 1024);

:if ([:len [$persistVar wan_counter]] < 1 ) do={
	$persistVar wan_counter 0;
}

:if ([:len [$persistVar wan_rebootblock]] < 1 ) do={
	$persistVar wan_rebootblock 1;
}

:if ([:len [$persistVar wan_offset]] < 1 ) do={
	$persistVar wan_offset 0;
}

:if ([:len [$persistVar wan_refdata]] < 1 ) do={
	$persistVar wan_refdata 0;
}

:local rebootblocker ([$persistVar wan_rebootblock]);

:if ( $day = $dayresetlimit and $rebootblocker = 0) do={
	$persistVar wan_counter 0;
	$persistVar wan_offset $newdata;
	$persistVar wan_refdata 0;
	/interface lte set $interf disabled=no
	$persistVar wan_rebootblock 1;
	:log info "Limit reset, int $interf bring up";
}

:if ( $day != $dayresetlimit ) do={
	$persistVar wan_rebootblock 0;
}

:local before [$persistVar wan_counter];
:local offset [$persistVar wan_offset];

:if ( $newdata < $before ) do={
	$persistVar wan_offset 0;
	:set $ref [$persistVar wan_refdata];
	:if ( $newdata < $ref ) do={
		set $ref (0)
	}
	:set $result ($before + $newdata - $ref); 
	$persistVar wan_refdata $newdata;
	$persistVar wan_counter $result;
} else={
	:set $result ($newdata - $offset);
	$persistVar wan_counter $result;
}

:local traffic ([$persistVar wan_counter]);
:local percent ($traffic*100 / $limit);
:log warning "Limit: $limit MB Traffic: $traffic MB Used: $percent%";

:if ($percent >= 100) do={
	/interface lte set $interf disabled=yes
 }

:if ($percent < 100 and $autointon = true) do={
	:set $status [/interface get $interf value-name=disabled];
	:if ($status = true) do={
		/interface lte set $interf disabled=no
	}
}
} on-error={ :log error "Error LTE Limiter "};

Жирным шрифтом я отметил ключевые моменты в скрипте.

Далее необходимо добавить скрипт в конфигурацию Mikrotik:

А также настроить его запуск в планировщике. Например, запускать его раз в час.

После этого скрипт будет рапортовать в журнал текущий объем израсходованного за месяц трафика и отключать LTE интерфейс при превышении его объема.

Настройка ограничения объема трафика на Mikrotik RBSXTR R11e-LTE завершена.

Настройка ограничения объема трафика на Mikrotik RBSXTR R11e-LTE: 7 комментариев

  1. Спасибо за статью! В скриптах совсем не очень я =)
    А как в скрипте указать чтобы считал трафик с 1 по 30 числи вместо 20 дней? Или он автоматически с 1-го чиста считает 20 ней?

    1. Добрый день! Считаются все дни месяца. В строке ниже вы указываете в какой день месяца обнулять счетчик траффика:
      :local dayresetlimit “22”

      1. Спасибо! А что если микроник перезагрузился и счетчик обнулился.. То как быть тогда?

  2. Возникла идея: а если смотреть лимит траффика по USSD-запросу, благо микротик это умеет? Может, это будет проще и не будет зависеть от выключений/перезагрузок девайса и сброса счетчиков? Ну и корректнее – а то счетчики траффика это одно, а биллинг оператора – совсем другое..
    вот это: /tool sms send type=ussd lte1 phone-number=”*121#” работает, ответ пишет в лог gsm.info
    осталось разобрать ответ.

    1. Добрый день! Идея в целом здравая, даже тоже думал в этом направлении, но у меня пока особо нет времени погружаться в эту разработку. Плюс наше GMS шлю испольузется редко и только в качестве резервного канала. Перезагрузки оборудования крайне редкие. Поэтому конкретно в моем случае цель не оправдывает средства.
      Если вы доработаете это решение, то при желании, можете дополнить комментарий и я включу это дополнение в публикацию с указанием того, что вы являетесь автором дополнения (или на GitHub можете выложить). Думаю, что нашим с вами коллегам, кто столкнулся с такой же потребностью, этот материал будет очень полезен.

      1. Да в том-то и беда, что я со скриптами микротика дела не имел до сих пор.. то есть в общих чертах, глядя на скрипт, я понимаю, что к чему, но сам такое не напишу. Поэтому “дорабатывать” я его буду.. долго.. 🙂 , пока разберусь, что к чему.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *