Просмотр Исходного

RouterOS позволяет устанавливать настройки шейпера и адрес-листров на целые подсети. Это может пригодиться в случае если Вы отдали подсеть абоненту, например юридическому лицу, и условия тарификации должны распространяться сразу на всю сеть.
Для реализации Вам потребуется модифицировать стандартную схему:
# По статье [Тюнинг стандартной схемы|CarbonBilling:Этап 4, 5. Тюнинг Стандартной схемы под требования провайдера или разработка custom схемы] создайте файл *session* в папке *ubin* OSS директории Вашего NAS и запишите в него листинг скрипта приведённый ниже.
# Добавьте абоненту [учетную запись|CarbonBilling:Учетная запись. Создание и изменение.], указав в поле "*IPv4*" [адрес сети|https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9_%D0%B0%D0%B4%D1%80%D0%B5%D1%81], а в поле "*Маска*" её префикс. На вкладке "*Дополнительно*" в поле "*Строка дополнительных параметров активации скрипта управления*" сохраните значение "*issubnet*".

h1. ubin/session
{code}#!/bin/bash
. $(dirname $BASH_SOURCE)/../bin/session

user_add(){
if [ "$auth_type" == "1" ]; then
while send_mikrotik_cmd -s "$nas_ip" "$telnet_login" "$telnet_password" /ip firewall address-list remove numbers=${ip}_crb_auth; do :; done
if [ ${user_activate_string} == "issubnet" ]; then
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_auth_list address=$ip/${mask} comment=${ip}_crb_auth
else
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_auth_list address=$ip comment=${ip}_crb_auth
fi
fi
}

user_drop(){
if [ ${user_activate_string} == "issubnet" ]; then
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_blocked_list address=$ip/${mask} comment=${ip}_crb_blocked
else
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_blocked_list address=$ip comment=${ip}_crb_blocked
fi
}

user_redirect(){
if [ ${user_activate_string} == "issubnet" ]; then
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_negbal_list address=$ip/${mask} comment=${ip}_crb_negbal
else
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /ip firewall address-list add list=crb_negbal_list address=$ip comment=${ip}_crb_negbal
fi
}
user_rate_set(){
# Сначала удалим из старого сервиса, потом добавим в новый
while send_mikrotik_cmd -s "$nas_ip" "${telnet_login}" "${telnet_password}" /queue simple remove numbers=crb_${ip}; do :; done
if [ ${user_activate_string} != "issubnet" ]; then
mask=32
fi
if [[ -z ${burst_in} || -z ${burst_out} || -z ${burst_threshold} || -z ${burst_time} ]]; then
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /queue simple add name=crb_${ip} target=${ip}/${mask} parent=none priority=8/8 queue=default-small/default-small limit-at=0/0 max-limit=${ceil_out}K/${ceil_in}K burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s
else
send_mikrotik_cmd "$nas_ip" "${telnet_login}" "${telnet_password}" /queue simple add name=crb_${ip} target=${ip}/${mask} parent=none priority=8/8 queue=default-small/default-small limit-at=0/0 max-limit=${ceil_out}K/${ceil_in}K burst-limit=${burst_in}K/${burst_out}K burst-threshold=${burst_threshold}K/${burst_threshold}K burst-time=${burst_time}s/${burst_time}s
fi
}{code}