Шейпер работает по следующему принципу предварительно создаются правила на Mikrotik командой billd, а при авторизации абоненты просто вносятся в нужные таблицы с название CLIENTS_123 где 123 это идентификатор тарифного плана (TP_ID).
При использовании разных скоростей в разные промежутки времени нужно через крон вызывать данную команду на границе интервалов для синхронизации скоростей.
Данную команду нужно выполнять для любого типа подключения PPPoE, PPTP или IPoE.
Пример команд синхронизации для тарифа «День/Ночь» со сменой скоростей в 22:01 и 06:01
1 22 * * * root /usr/abills/libexec/billd checkspeed mikrotik NAS_IDS=1,2,3 NAT=1 RECONFIGURE=1 1 6 * * * root /usr/abills/libexec/billd checkspeed mikrotik NAS_IDS=1,2,3 NAT=1 RECONFIGURE=1
Инициализация правил шейпера и загрузки их на mikrotik сервера
/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1 [NAS_IDS=2] [NAT=1]
Параметры:
NAS_IDS='1,2' | Список серверов доступа. По умолчанию скорость просматривается на всех |
RECONFIGURE=1 | Переинициализировать правила шейпера |
NAT=1 | Включение ната |
SHOW_SPEED=1 | Показать абонентов для которых применён шейпер id, address_list, ip |
TP_ID="1,2,3" | Заливать только определенные тарифные планны |
DEBUG=1..7 | Режимы отладки. 1 - Отображать базовые сообщения программы и писать лог команд для Mikrotik. Лог записывается в файл /usr/abills/var/log/mikrotik_cmd.log 2 - Отображать команды для Mikrotik на экран. 5 - Отображать но не выполнять команды 7 - Отображать SQL запросы к базе во время выполнения программы |
SINGLE_THREAD=1 | Заливка всех правил на mikrotik через одно соединение |
После каждого изменения скорости или же добавления нового тарифного плана нужно прописовать
/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1
или можно включить внешний обработчик в файле /usr/abills/libexec/config.pl (не рекомендуеться при большом количестве тарифов)
$conf{SHAPER_RESTART_CMD}='/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1';
После инициализации правил шейпера при подключении абонента на Mikrotik передаётся только IP адрес абонента с указанием в какой список его внести.
Переинициализацию правил шейпера нужно проводить после каждого изменения скорости в тарифных планах или включить внешний обработчик $conf{SHAPER_RESTART_CMD}='/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1';
При использовании PPPoE, PPTP адрес передаётся системой через RADIUS пары
Mikrotik-Address-List=CLIENTS_[TP_ID]
При использовании IPN используется стандарnный IPN механизм $conf{IPN_START_RULES} $conf{IPN_STOP_RULES}
Проверка правил шейпера:
Если всё настроено правильно, после выполнения команды «billd RECONFIGURE=1», Вы должны получить приблизительно такие ответы по соответствующих запросах в консоли MikroTik:
/ip firewall mangle print 0 chain=forward action=mark-packet new-packet-mark=ALLOW_TRAFFIC_CLASS_2_out passthrough=yes dst-address=0.0.0.0/0 src-address-list=CLIENTS_2 1 chain=forward action=mark-packet new-packet-mark=ALLOW_TRAFFIC_CLASS_2_in passthrough=yes src-address=0.0.0.0/0 dst-address-list=CLIENTS_2 /queue tree print 0 name="TP_2_in_global" parent=global-out packet-mark=ALLOW_TRAFFIC_CLASS_2_in limit-at=0 queue=TP_2_in_global_speed priority=5 max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s 1 name="TP_2_out_global" parent=global-out packet-mark=ALLOW_TRAFFIC_CLASS_2_out limit-at=0 queue=TP_2_out_global_speed priority=5 max-limit=0 burst-limit=0 burst-threshold=0 burst-time=0s
Если у вас больше тарифов соответственно результатов будет больше.
При использовании выражений или турбо режимов, абонентам создаются simple Queues при подключении
QUEUES модель шейпера для PPPoE
$conf{MIKROTIK_QUEUES}=1;
При этом параметре правила шейпера передаются через параметр Mikrotik-Rate-Limit
и создается simple queue для каждого абонента.
В новой модели, создаются queue tree для тарифных планов и передается параметр Mikrotik-Address-List
Также эта схема используется в Mac_auth2 при отсутствии параметра
$conf{INTERNET_EXTERNAL_SHAPPER};
Маскарад
Для включения маскарада нужно добавить в программу инициализации опцию NAT=1
/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1 NAT=1
система создаст правила маскарадинга для каждого тарифного плана
При включении опции SKIP_NAT_IPS=[список адресов через запятую] система исключает данные адреса из списка маскарадинга
Использование нескольких внешних IP
Система разрешает использовать несколько внешних IP для построения правил маскарадинга для этого нужно создать файл правил/usr/abills/libexec/mikrotik.nat
[номер сервера доступа] [внешний IP] [ внутренняя сетка или адрес лист в формате CLIENTS_XX ]\\
разделитель колонок : пробел.
5 33.33.33.33 10.10.1.0/24 5 33.33.32.0/24 CLIENTS_2
1. 5 сервер доступа, внешний IP 33.33.33.33 внутренняя сеть 10.10.1.0/24
2. 5 сервер доступа, диапазон внешних адресов 33.33.32.0/24, для всех клиентов тарифного плана с ID 2
Настройка через скрипт
Иногда случается так что билинг не имеет непосредственного доступа к Mikrotik, а нужно на микротик записать правила шейпера и ната. На помощь приходит опция EXPORT_FILE
/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1 NAT=1 EXPORT_FILE=shaper.rsc
Создает список команд в файле shaper.rsc
Потом их просто загружаете в winbox
Вкладка FIle -> Upload
Добавление в скрипт кастомных правил
Для добавления кастомных правил нужно создать файл правил /usr/abills/libexec/mikrotik.fw.
В файл правил прописываем нужные команды. После запуска скрипта команды с файла запишутся на микротик.
ip firewall mangle add chain=forward src-address=0.0.0.0/0 comment="Abills example" ip firewall mangle add chain=forward dst-address=0.0.0.0/0 comment="Abills example"