В данной статье мы захватим следующие аспекты:

  • Описание выгрузки из биллинга.
  • Доступ абонентов во внешний мир по протоколам PPPoE, IP. Остальные протоколы работают с минимальными изменениями в базовой конфигурации.
  • Отключение абонентов за неуплату с выводом WEB страницы, сообщающей об этом.
  • Ограничение скорости (полосы пропускания).
  • Пример использования дополнительного тарифа, например «Цифровое ТВ».


На момент написания статьи использовалась версия RouterOS 6.46.3, использование более старых версий не рекомендуется. Если Вы столкнулись с трудностями обратитесь в службу поддержки LightBilling.

 

Перед началом настройки убедитесь, что на Вашем маршрутизаторе работает Интернет. Для этого откройте терминал и наберите команду ping ya.ru, если успешно, можете идти дальше. В противном случае обратитесь в техническую поддержку для базовой настройки.


Скрипт выгрузки


Для загрузки данных из биллинга нужно создать скрипт. Откройте WinBox, затем в меню выберите System > Scripts. В открывшемся окне, добавьте новый скрипт со следующим содержимым:


# Personal URL
:local url "https://...../mikrotik/a1239bc171/null/?secret_remove=1";

# Get data
:log warning "LightBilling => Ready";
:log warning "LightBilling => Ping";
if ([:ping [:pick $url ([:find $url "//"]+2) [:find $url "/" ([:find $url "//"]+2)]] count=4] = 4) do={
  :log warning "LightBilling => Download data";
  /tool fetch url=$url dst-path="lightbilling.rsc";
  :log warning "LightBilling => Import data";
  /import lightbilling.rsc;
  :log warning "LightBilling => Done";
} else={
  :log error "LightBilling => Lack of bond!";
};


Где https://...../mikrotik/a1239bc171/null/?secret_remove=1 Ваш персональный URL, который находится в панели управления Менеджера в разделе шлюзы.

Рекомендуем назвать скрипт lightbilling, не забудьте добавить права (можно установить все галочки).


Теперь попробуем запустить его. Откройте терминал и введите команду /sys scr run lightbilling В случае если выйдет ошибка обратитесь в службу поддержки. 


Группы


Группы задаются в строке url шлюза, через запятую. Помните, что наименования должны быть закодированы url encode. Если требуются загрузить все группы из биллинга, указывается в строке null.


Опции


Дополнительные опции задаются в конце url строки шлюза. Например /?queues=tree&secret_remove=1

Опция
ЗначенияОписание
queues
tree
Создает дерево (tree) queues, с маркировкой трафика и т.п. При этом в PPP профилях задает default. Не создает PPP profiles.
0
Не создавать Queues
simpleПо умолчанию. Создаются Simple Queues.
secret_remove 
1Перед созданием PPP secret, удаляет все записи, кроме записей с комментарием "!".
В обычном состоянии удаляются только те записи, в которых установлен комментарий "@".
Данный режим был создан ввиду того, что LightBilling не может создать secret с именем если он уже есть, работа скрипта в таком случае останавливается с ошибкой. Логичный вопрос, откуда могут взяться такие учетные записи? Наблюдались ситуации, когда сотрудники нечаянно создавали дубли.
secret_ppp
0Не загружать /ppp secret.
simple_0_ignore1Не создавать Simple ограничение скорости в профиле, для 0/0
list_ignore
Пример:
lightbilling_enabled, lightbilling_tariff_70_disabled,
lightbilling_ip
Не загружать определённые address-list'ы. Значения через запятую.
mac1Добавлять MAC адреса абонентов в /ip dhcp-server lease. Если MAC адрес в профиле не указан, привязка данного абонента не добавляется. При добавлении указывается комментарий @.
list_rate_ignore
1Не выгружать в MikroTik адрес листы вида litebilling_rate_*_*...


Описание выгрузки скрипта


IP > Firewall > Address-List

lightbilling_ip – IP адреса для белого списка. Содержит в себе IP необходимые для работы модулей системы;

lightbilling_enabled – Список IP включенных абонентов;

lightbilling_disabled – IP выключенных абонентов;

lightbilling_rate_500_500_enabled – Цифры (значения как пример) в наименовании соответствуют входящей и исходящей скоростях. IP включенного абонента.

lightbilling_rate_500_500_disabled – Цифры (значения как пример) в наименовании соответствуют входящей и исходящей скоростях. IP выключенного абонента.

lightbilling_tariff_7_enabled – Цифра (значение как пример) в наименовании соответствует ID тарифа. IP включенного абонента.

lightbilling_tariff_7_disabled – Цифра (значение как пример) в наименовании соответствует ID тарифа. IP выключенного абонента.

 

PPP > Profile

lightbilling_rate_500_500 – PPP профиль с установленной скоростью внутри соответствующей значениям (пример) в наименовании.

 

PPP > Secret

Учетные записи с комментарием @. Записи привязаны к своим PPP профилям.


Во время экспорта старые записи удаляются, после добавляются новые. Исключением служит Adress-List с наименованием lightbilling_ip, в этом случае происходит добавление новых записей.


Настройка планировщика


В этом же терминале добавим типовые команды для работы нашего маршрутизатора.

Планировщик скрипта lightbilling:

/system scheduler
add interval=5m name=lightbilling on-event="/system script run lightbilling;" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=jan/01/1970 start-time=00:00:00

Типовые настройки


Синхронизация времени, часовой пояс:

/system ntp client set enabled=yes primary-ntp=128.4.24.98 secondary-ntp=128.4.24.98
/system clock set time-zone-name=Asia/Omsk
/system clock manual set time-zone=+06:00

DNS:

/ip dns set allow-remote-requests=yes servers=8.8.8.8,8.8.4.4

IP адреса на интерфейсах, для раздачи (порт 5):

/ip address add address=10.0.1.1/24 interface=ether5

Настройка PPPoE сервера (порт 6):

/interface pppoe-server server add authentication=pap,chap interface=ether6 one-session-per-host=yes

Тюнинг default PPPoE профиля:

/ppp profile set *0 change-tcp-mss=no dns-server=172.16.0.1 local-address=172.16.0.1 only-one=yes use-compression=no use-encryption=no use-mpls=no

Для вывода страницы об оплате, будем использовать Proxy. В примере перечислены «белые» сайты, на которые разрешен доступ. Далее страница, на которую идет переадресация.

/ip proxy
set enabled=yes max-client-connections=1000 max-server-connections=1000 port=3128 src-address=10.0.0.0
/ip proxy access
add dst-address=0.0.0.0/0 dst-host=www.stranica_s_opovesheniem src-address=10.0.0.0/8
add dst-address=0.0.0.0/0 dst-host=www.site1.ru src-address=10.0.0.0/8
add dst-address=0.0.0.0/0 dst-host=www.site2.ru src-address=10.0.0.0/8
add dst-address=0.0.0.0/0 dst-host=www.site3.ru src-address=10.0.0.0/8
add dst-address=0.0.0.0/0 dst-host=www.site4.ru src-address=10.0.0.0/8
add action=deny comment=\
     "redirect" dst-address=\
    0.0.0.0/0 redirect-to="http://www.stranica_s_opovesheniem" src-address=\
    10.0.0.0/8
add action=deny comment="deny all"

Настройка NAT, переадресация отключенных на proxy:

/ip fire nat
add action=masquerade chain=srcnat dst-address=0.0.0.0/0 src-address=10.0.0.0/8
add action=redirect chain=dstnat comment=proxy dst-address-list=!lightbilling_ip dst-port=80 protocol=tcp src-address-list=lightbilling_disabled to-ports=3128

Настройка FireWall на отключённых абонентов и временной разблокировкой для оплаты:

/ip firewall filter
add action=drop chain=input comment="Drop DNS Attack 1/2" dst-address=0.0.0.0/0 dst-port=53 protocol=udp src-address=!10.0.0.0/8
add action=drop chain=input comment="Drop DNS Attack 2/2" dst-address=0.0.0.0/0 dst-port=53 protocol=tcp src-address=!10.0.0.0/8
add action=drop chain=forward comment="\CE\E3\F0\E0\ED\E8\F7\E8\F2\FC \E2\F1\E5\EC \EE\F2\EF\F0\E0\E2\EA\F3 \EF\EE\F7\F2\FB" dst-port=25 protocol=tcp
add action=add-src-to-address-list address-list=DENY_CLIENTS_PAY address-list-timeout=20m chain=forward comment="\CE\EF\F0\E5\E4\E5\EB\E5\ED\E8\E5 \F1\EF\E8\F1\EA\E0 \EE\F2\EA\EB\FE\F7\E5\ED\ED\FB\F5 \EA\EB\E8\E5\ED\F2\EE\E2 \ED\E0 \EE\EF\EB\E0\F2\F3" connection-state=new dst-address=172.31.172.31 src-address-list=lightbilling_disabled
add action=accept chain=forward comment="\D0\E0\E7\F0\E5\F8\E8\F2\FC \F1\EF\E8\F1\EA\F3 \EF\EB\E0\F2\FF\F9\E8\F5 \EA\EB\E8\E5\ED\F2\EE\E2 \E4\EE\F1\F2\F3\EF \EA \E8\ED\F2\E5\F0\ED\E5\F2\F3" dst-port=!80 protocol=tcp src-address-list=DENY_CLIENTS_PAY
add action=accept chain=forward comment="\D0\E0\E7\F0\E5\F8\E8\F2\FC \EE\F2\EA\EB\FE\F7\E5\ED\ED\FB\EC \EA\EB\E8\E5\ED\F2\E0\EC \E4\EE\F1\F2\F3\EF \EA \E1\E8\EB\EB\E8\ED\E3\F3" dst-address-list=lightbilling_ip src-address-list=lightbilling_disabled
add action=accept chain=forward comment="\D0\E0\E7\F0\E5\F8\E8\F2\FC \EE\F2\EA\EB\FE\F7\E5\ED\ED\FB\EC \EA\EB\E8\E5\ED\F2\E0\EC \E4\EE\F1\F2\F3\EF \EA \F1\F2\EE\F0\EE\ED\ED\E8\EC DNS \F1\E5\F0\E2\E5\F0\E0\EC" dst-address=0.0.0.0/0 dst-port=53 protocol=udp src-address-list=lightbilling_disabled
add action=drop chain=input comment="\CE\E3\F0\E0\ED\E8\F7\E8\F2\FC \E4\EE\F1\F2\F3\EF \EA WEB Proxy \F1 \EB\EE\EA\E0\EB\FC\ED\EE\E9 \F1\E5\F2\E8, \EA\F0\EE\EC\E5 \F1\EF\E8\F1\EA\E0 \EE\F2\EA\EB\FE\F7\E5\ED\ED\FB\F5 IP \E0\E4\F0\E5\F1\EE\E2" dst-address=0.0.0.0/0 dst-port=3128 protocol=tcp src-address-list=!lightbilling_disabled
add action=drop chain=forward comment="\CF\EE\EB\ED\FB\E9 \E7\E0\EF\F0\E5\F2 \F1\EF\E8\F1\EA\F3 IP \E0\E4\F0\E5\F1\EE\E2 (\EE\F2\EA\EB\FE\F7\E5\ED\ED\FB\E5 \E1\E8\EB\EB\E8\ED\E3\EE\EC)" disabled=yes dst-address=0.0.0.0/0 src-address-list=lightbilling_disabled


Это базовая конфигурация, без учета безопасности. Не забывайте защитить ваш маршрутизатор из вне.

Клиенты с авторизацией по IP, должны быть подключены в пятый порт маршрутизатора. Пример такого клиента IP 10.0.1.8 Mask 255.255.255.0 Gateway 10.0.1.1 DNS 10.0.1.1. Для настройки DHCP сервера, запустите мастер в WinBox: IP > DHCP Server > DHCP Setup.

Клиенты с авторизацией по PPPoE, должны быть подключены в шестой порт маршрутизатора. Доступ производиться на основании логин/пароля указанного в биллинге.

 

Пример использования дополнительного тарифа, например «Цифровое ТВ»


После создания нужного Вам тарифа, посмотрите его ID. Раздел `Тарифы` в панели управления Менеджера. Допустим идентификатор 321.

На маршрутизаторе в разделе ip > address-list, появятся IP адреса абонентов, к которым привязан данный тариф.

lightbilling_tariff_321_enabled – IP адреса абонентов, у которых тариф оплачен.

lightbilling_tariff_321_disabled – IP адреса абонентов, у которых тариф НЕ оплачен.

Таким образом, необходимо создать нужное Вам правило на основе address-list, например:

add action=accept chain=forward comment=\
    "drop iptv server" dst-address=172.21.3.1 \
    dst-port=4022 protocol=tcp src-address-list=lightbilling_tariff_321_disabled

 

Пример ограничения скорости, на основе привязанного тарифа


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

Добавим опцию (queues=0), для отключения создания любых Queues (шейперов) автоматически.

В Mikrotik, в конце скрипта LightBilling /system script. Добавим следующее:

:if ([/queue tree print count-only where name="lightbilling_download"] = 0) do={
    /queue tree add name=lightbilling_download parent=global;
  }
:if ([/queue tree print count-only where name="lightbilling_upload"] = 0) do={
    /queue tree add name=lightbilling_upload parent=global;
  }

:local list;
:local id;
:local tariff [:toarray ""];

:foreach i in=[/ip firewall address-list find where list~"^(lightbilling_tariff_(.*)_(.*)d)"] do={
    :set list [ip firewall address-list get $i list];
    :set id [:pick $list [:len "lightbilling_tariff_"] [:len $list]];
    :set id [:pick $id 0 [:find $id "_"]];
    :set ($tariff->"$id") ("$id");
  };


:foreach i in=$tariff do={
  :if ([/ip firewall mangle print count-only where new-packet-mark="lightbilling_tariff_$i_download"] != 1) do={
    /ip firewall mangle remove [/ip firewall mangle find new-packet-mark="lightbilling_tariff_$i_download"]; 
    /ip firewall mangle add action=mark-packet chain=forward disabled=no new-packet-mark="lightbilling_tariff_$i_download" passthrough=yes dst-address-list="lightbilling_tariff_$i_enabled"; 
    /ip firewall mangle print without-paging; 
    /ip firewall mangle move [/ip firewall mangle find new-packet-mark="lightbilling_tariff_$i_download"] 0;
  };
  :if ([/ip firewall mangle print count-only where new-packet-mark="lightbilling_tariff_$i_upload"] != 1) do={
    /ip firewall mangle remove [/ip firewall mangle find new-packet-mark="lightbilling_tariff_$i_upload"]; 
    /ip firewall mangle add action=mark-packet chain=forward disabled=no new-packet-mark="lightbilling_tariff_$i_upload" passthrough=yes src-address-list="lightbilling_tariff_$i_enabled"; 
    /ip firewall mangle print without-paging; /ip firewall mangle move [/ip firewall mangle find new-packet-mark="lightbilling_tariff_$i_upload"] 0;
  };
  :if ([/queue type print count-only where name="lightbilling_tariff_$i_download"] != 1) do={
    /queue type add kind=pcq name="lightbilling_tariff_$i_download" pcq-classifier=dst-address pcq-limit=50 pcq-rate=10000000 pcq-total-limit=64000
  }
  :if ([/queue type print count-only where name="lightbilling_tariff_$i_upload"] != 1) do={
    /queue type add kind=pcq name="lightbilling_tariff_$i_upload" pcq-classifier=src-address pcq-limit=50 pcq-rate=10000000 pcq-total-limit=64000
  }
  :if ([/queue tree print count-only where name="lightbilling_tariff_$i_download"] != 1) do={
    /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name="lightbilling_tariff_$i_download" packet-mark="lightbilling_tariff_$i_download" parent=lightbilling_download priority=1 queue="lightbilling_tariff_$i_download"
  }
  :if ([/queue tree print count-only where name="lightbilling_tariff_$i_upload"] != 1) do={
    /queue tree add burst-limit=0 burst-threshold=0 burst-time=0s disabled=no limit-at=0 max-limit=0 name="lightbilling_tariff_$i_upload" packet-mark="lightbilling_tariff_$i_upload" parent=lightbilling_upload priority=1 queue="lightbilling_tariff_$i_upload"
  }
:
};

Запустите скрипт. После запуска автоматически создастся дерево тарифов (/queue tree). Ненужные (дополнительные услуги), выключите (не удаляйте, т.к. создадутся заново). В Queues Types, установите для каждого тарифа свою скорость (по умолчанию стоит 10М).

 

 

На основе тарифов, скорость задается внутри BRAS, а не в биллинге. Это связано с тем, чтобы BRAS мог регулировать скорость (ночное ускорение, переход на резервный канал и т.п.). Но если важно задавать скорость из биллинга, можно передавать ее в наименовании тарифа.