Напоминаем клиентам об оплате. Учёт денежных средств и отключение за долг

Рейтинг
Оценка: 5Голосов: 2Комментарии: 5

Для простого пользователя слово «биллинг» — понятие сложное, а ещё, если его устанавливать и настраивать, так это вообще тёмный лес. Поэтому мы не будем лезть в дебри, а ограничимся небольшим простеньким скриптом, облегчающим нашу участь в начинающем провайдинге.

В моём примере настройки таковы:
- интернет подключен на первый порт Mikrotik по pppoe;
- раздается  со второго порта 192.168.3.1/24;
- (ну и, конечно же) своя тарифная политика.

Соответственно все правила и интерфейсы настроены на работу в данной конфигурации. Так что будьте внимательны при настройке правил firewall и таблицы NAT. Что касается заданий планировщика,  то там необходимо подправить порог отключения под себя (по дефолту  -200).

Сам скрипт в определенное время вносит изменения в адрес-лист, тем самым изменяя реакцию фильтров и таблицы NAT на проходящие пакеты. И тогда абонент который не находится в адрес-листе или имеет состояние Disable ограничивается в доступе к Интернету и все его запросы на 80-ый порт перенаправляются  на страничку с сопутствующей информацией.  То есть, если запись есть в адрес-листе и она активна, то всё работает, иначе Интернет off. Вот собственно так всё и работает.

 /ip firewall filter

add action=accept chain=forward comment=0 disabled=no in-interface=eth2 src-address-list=0

add action=accept chain=forward comment=25 disabled=no in-interface=eth2 src-address-list=25

add action=accept chain=forward comment=50 disabled=no in-interface=eth2 src-address-list=50

add action=accept chain=forward disabled=no dst-port=80 in-interface=eth2 protocol=tcp

add action=accept chain=forward disabled=no dst-port=53 in-interface=eth2 protocol=udp

add action=accept chain=forward disabled=no dst-port=53 in-interface=eth2 protocol=tcp

add action=drop chain=forward comment=Other disabled=no in-interface=eth2

Здесь мы ацептим 3 разновидности тарифов (0 грн, 25 грн и 50 грн в мес.), также попадают 80-порт и 53. Ну а всё,  что не проходит соответственно отсеивается в дроп.

 /ip firewall nat

add action=accept chain=dstnat comment=”Unlim 0″ disabled=no src-address=192.168.3.0/24 src-address-list=0

add action=accept chain=dstnat comment=”Unlim 25″ disabled=no src-address=192.168.3.0/24 src-address-list=25 to-addresses=192.168.3.200

add action=accept chain=dstnat comment=”Unlim 50″ disabled=no src-address=192.168.3.0/24 src-address-list=50 to-addresses=192.168.3.200

add action=dst-nat chain=dstnat comment=”Other ” disabled=no dst-port=80 protocol=tcp src-address=192.168.3.0/24 to-addresses= 192.168.3.200 to-ports=80

Фактически тоже, что и выше, только здесь редиректится 80-ый порт на ваш веб сервер с напоминанием об оплате.

/ip firewall address-list

В поле Name указывается тариф (сколько платит абонент в месяц).

В поле Address указываем IP адрес абонента.

В поле Comment текущее состояние баланса абонента.

Рис.1 Текущее состояние баланса абонента.

Рис.1 Текущее состояние баланса абонента.

Снятие абонплаты

Для работы данного скрипта необходимо точно указывать дату.

/system ntp client

set enabled=yes mode=unicast primary-ntp=79.142.192.4 secondary-ntp=78.152.160.1.

При добавлении его в планировщик, нужно  указать Start Date с которого времени он начнёт снимать абонплату. В Start Time пишем 00:00:00 (никак не Startup). В общем, необходимо сделать все так, как на скрине, даже имя задания в планировщике оставить такое же.

Рис.2 Start Time

Рис.2 Start Time

 

Описание работы скрипта

Планировщик запускает задание 1-го числа в 00:00, тот в свою очередь пробегается по всем АКТИВНЫМ записям в адрес-листе firewall и снимает абонплату (неактивные записи это те, кто уже отключён за долг, он их пропускает). После выполнения снятия, скрипт переписывает свой запуск на следующий месяц, когда идёт переход с декабря на январь переписывается и на следующий год.

/ip fi a;print;:for u from=0 to=([print count-only]-1) do={:if [get $u disabled] do={:put off} else={comment [:toarray {$u}] ([get $u comment]-[get $u list])}};/sy sch;:local y [:pick [get abon start-date] 7 11];:local m [:pick [get abon start-date] 0 3];:local mn none;:if ($m = “dec”) do={:set mn jan;:set y (y+1)};:if ($m = “nov”) do={:set mn dec;};:if ($m = “oct”) do={:set mn nov;};:if ($m = “sep”) do={:set mn oct;};:if ($m = “aug”) do={:set mn sep;};:if ($m = “jul”) do={:set mn aug;};:if ($m = “jun”) do={:set mn jul;};:if ($m = “may”) do={:set mn jun;};:if ($m = “apr”) do={:set mn may;};:if ($m = “mar”) do={:set mn apr;};:if ($m = “feb”) do={:set mn mar;};:if ($m = “jan”) do={:set mn feb;};set abon start-date=”$mn/01/$y”;

 

Проверка баланса

Тут тоже делаем всё по скрину, интервал запуска выставляется на свое усмотрение, ну и порог срабатывания тоже (здесь стоит – 200). Скрипт пробегается по всем записям адрес-листа firewall и если баланс меньше или равен -200 запись в адрес-листе становится неактивной (disable=yes).

Рис.3 Проверка баланса

Рис.3 Проверка баланса

/ip fi a;print;:for u from=0 to=([print count-only]-1) do={:if ([get $u comment]<=-200) do={disable [:toarray {$u}]}};

Добавление денежных средств производится вручную в соответствующий комментарий ІР  абонента в адрес листе firewall.

Всё работает на RB750 v5.23.

Вас может заинтересовать

 

(Снят с производства)

Если Вы нашли ошибку в тексте, то выделите ее мышкой и нажмите Ctrl + Enter или нажмите здесь.

Сообщение об ошибке

Ошибка:

Ваш комментарий (не обязательно):

Да Отмена

Об авторе Roman_Bardachev