Как это работает
При положительном депозите поднимается Online сессия у абонента, открываются доступы на Mikrotik (адрес попадает в Address-List CLIENTS_[Номер тарифного плана]), также может подниматься правило шейпера Simple Queue (Если включена опция $conf{MIKROTIK_QUEUES}=1;). Для включения и выключения сессий используются правила $conf{INTERNET_IPOE_START} и $conf{INTERNET_IPOE_STOP}.
Для массового включения абонентов используется команда
/usr/abills/libexec/periodic monthly MODULES=Internet LOGON_ACTIVE_USERS=1
При отрицательном депозите или отключении клиента адрес удаляется с Address-List. Проверкой сессий и отключением должников занимается программа billd.
Примечание: сеть, которая должна будет выдаваться абоненту - должна быть предварительно записана на BRAS'e.
Авторизация по SSH ключу
Для выполнения команд нужно создать SSH сертификат с пустым паролем и залить его на Mikrotik по ftp.
Перед созданием сертификата убедитесь что на Mikrotik'е включён сервис ftp, ssh.
Загружаем ключи и сертификаты :
# shell
MIKROTIK_USERNAME='логин_для_микротика'
MIKROTIK_IP='айпи_адрес_микротика'
/usr/abills/misc/certs_create.sh ssh abills_admin -UPLOAD_FTP ${MIKROTIK_USERNAME}@${MIKROTIK_IP}
# спросит пароль, загрузит ключи
На Микротике создаем пользователя и подключаем ему наш сгенерированный ключ :
[admin@mikrotik]> user add name=abills_admin group=write [admin@mikrotik]> user ssh-keys import public-key-file=id_rsa.abills_admin.pub user=abills_admin
Проверяем с биллинг сервера правильно ли мы все сделали (в консоль должно вывести name: MikroTik) :
ssh -l abills_admin -i /usr/abills/Certs/id_rsa.abills_admin ${MIKROTIK_IP} "/system identity print"
Самостоятельная активация сессии IPN абонентом
Добавить правила для перенаправления на клиентский кабинет для подключения к IPN :
/ip firewall nat add chain=dstnat action=dst-nat to-addresses=10.0.0.10 to-ports=80 protocol=tcp src-address=192.168.6.0/24 dst-address=0.0.0.0/0 dst-port=80
to-addresses=10.0.0.10 - адрес биллинг сервера
Инициализация и контроль правил шейпера
/usr/abills/libexec/billd checkspeed mikrotik RECONFIGURE=1 NAS_IDS=1
Параметры для скрипта :
| Ключ | Значение |
|---|---|
| NAT=1 | Поднять маскарадинг для всех адрес листов |
| SKIP_NAT_IPS=xxx.xxx.xxx.xxx | Не маскарадить обращения к адресу |
| NAS_IDS=1 | Номер сервера доступа |
Пример правила открытия доступа (тип сервера - mikrotik_dhcp)
При помощи этих правил система открывает или закрывает (в зависимости от ситуации) доступ в интернет абонентам.
Данные коменды ($conf{INTERNET_IPOE_START}, $conf{INTERNET_IPOE_STOP}) логинятся на mikrotik и включают разрешающие или запрещающие правила шейпера
Сертификат SSH (/usr/abills/Certs/id_rsa.abills_admin) должен быть доступен пользователю под которым работает веб сервер
в сервисе абонета должна быть включена опция IPoE / DHCP Option 82 → Активация IPoE
abills/libexec/config.pl
$conf{MIKROTIK_API}=1; #Работа через API
$conf{INTERNET_IPOE_NAS_TYPES}='mikrotik_dhcp'; # Включение mikrotik DHCP в присок IPOE серверов
$conf{INTERNET_IPOE_START}='SUDO=/usr/local/bin/sudo;
CMD="${SUDO} /usr/abills/libexec/linkupdown ipn up getif %LOGIN %IP %DEBUG > /dev/null 2>&1";
if [ "${NAS_TYPE}" = "mikrotik_dhcp" ]; then CMD="/usr/abills/libexec/linkupdown mikrotik up - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} NAS_MNG_USER=${NAS_MNG_USER} NAS_MNG_PASSWORD=${NAS_MNG_PASSWORD}";
elif [ "${NAS_MNG_IP_PORT}" != "" ]; then CMD="/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"${CMD}\""; fi;
eval "${CMD}"';
$conf{INTERNET_IPOE_STOP}='SUDO=/usr/local/bin/sudo;
CMD="${SUDO} /usr/abills/libexec/linkupdown ipn down getif %LOGIN %IP %DEBUG > /dev/null 2>&1";
if [ "${NAS_TYPE}" = "mikrotik_dhcp" ]; then CMD="/usr/abills/libexec/linkupdown mikrotik down - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} NAS_MNG_USER=${NAS_MNG_USER} NAS_MNG_PASSWORD=${NAS_MNG_PASSWORD}";
elif [ "${NAS_MNG_IP_PORT}" != "" ]; then CMD="/usr/bin/ssh -o StrictHostKeyChecking=no -i /usr/abills/Certs/id_rsa.${NAS_MNG_USER} ${NAS_MNG_USER}@${NAS_MNG_IP_PORT} \"${CMD}\""; fi;
eval "${CMD}"';
Подсчет трафика
Сервис mikrotik_ipoe
Подсчет трафика осуществляется системным процессом mikrotik_ipoe
Установка сервиса
Копируем системный юнит
cp /usr/abills/misc/collector/mikrotik_ipoe.service /etc/systemd/system/
Проверяем что путь до сервиса правильный
[Unit] Description="АСР Казна-39" NetFlow Collector for Mikrotik ROS After=network.target [Service] User=root WorkingDirectory=/usr/abills/libexec # Путь до биллинга ExecStart=perl /usr/abills/libexec/nf52sql.pm # Путь до сервиса Restart=always TimeoutSec=200 [Install] WantedBy=multi-user.target
Сохраняем и активируем
systemctl daemon-reload systemctl enable mikrotik_ipoe systemctl start mikrotik_ipoe
Удаление системного юнита
systemctl stop mikrotik_ipoe systemctl disable mikrotik_ipoe rm nano /etc/systemd/system/mikrotik_ipoe.service systemctl daemon-reload
Параметры в файле config.pl
| Параметр | Значение |
|---|---|
$conf{NETFLOW}=1; | Включение сервиса/выключения сервиса без перезапуска процесса |
| $conf{NETFLOW_PORT}=9995; | Порт, на котором слушать flow от микротика |
| $conf{NETFLOW_INTERVAL}=15; | Если прошло указанное количество секунд, , независимо от количества накопленных потоков, скрипт выполняет обработку данныхю По умолчанию 15 |
| $conf{NETFLOW_FLOW_LIMIT}=100; | Если количество накопленных потоков достигает лимита, скрипт немедленно выполняет обработку данных, даже если интервал времени ещё не истёк. По умолчанию 1000 |
| $conf{NETFLOW_USER_REFRESH_INTERVAL}=60; | Время, в секундах, обновления выполнения скрипта, необходима для "подхватывания" новых абонентов из таблицы internet_online. По умолчанию 300 (5 минут) |
| $conf{NETFLOW_NAS_IDS}='59'; | Номера серверов доступа, через запятую |
| $conf{FLOW_DIR} = '/usr/abills/var/log/ipn/'; | Папка для хранения логов |
| $conf{FLOWTOOLS_IP_AGGREGATION}=0; | Ускорение работы скрипта |
$conf{IPN_LOG_DEBUG} = 0; | Уровень логгирования |
systemctl restart mikrotik_ipoe
Настройка Mikrotik для подсчета трафика
Нам нужно настроить Микротик чтоб он слушал и отправлял flow пакеты на биллинг сервер для их последующей обработки с помощью колектора (flow-tools).
В консоли Микротика :
/ip traffic-flow set enabled=yes /ip traffic-flow target add dst-address=10.0.0.10 port=9996 version=5 /ip traffic-flow set interfaces=ether3 active-flow-timeout=30m inactive-flow-timeout=15s cache-entries=4k enabled=yes ;
в данном случае нам интересны 2 параметра :
| ether3 | интерфейс на котором слушать |
| 10.0.0.10 | адрес сервера обработки flow пакетов (Сервер биллинга) |
Шейпер
Включение активных пользователей
Данная команда автоматически включает всех пользователей с положительным депозитом или правами получать сервис.
Активируются только те пользователи у которых прописан IP адрес сервиса Internet. Также обязательно на IPN серверах доступа
прописать пулы адресов для таких пользователей чтобы система знала на каких серверах доступа активировать абонентов.
/usr/abills/libexec/periodic monthly MODULES=Internet LOGON_ACTIVE_USERS=1
Параметры скрипта :
| Параметр | Значение |
|---|---|
| NAS_IDS=1,2 | Идентификаторы серверов доступа. По умолчанию система переинициализирует пользователей на всех серверах доступа с типом 'ipcad, ipn, mikrotik_dhcp, dhcp' |
| TP_ID=3,6 | Номера тарифных планов для активации. По умолчанию все |
| LOGIN=test,test3 | Логины пользователей. По умолчанию все |
| GID=1 | Группы пользователей |
| DEBUG=… | Дебаг режимы 1-4 Детализация процесса 5 - Отображать команды на выполнение 6 - Отображать команды но не выполнять |
Контроль активных соединений
Контролем активных соединений и отключением абонентов с негативным депозитом занимается программа billd
Также для контроля и сверки доступности интернета для абонентов существует плагин mikrotik_check_clients.pm
Активация гостевых сессий
Иногда бывают ситуации когда нужно контролировать и видеть гостевые сессии для этого нужно в параметр фильтр добавить включение гостевых сессий
Фильтр включается только если система передает параметры фильтра и активирует сессию в гостевом режиме
$conf{INTERNET_IPOE_FILTER}='if [ "%FILTER_ID" != "" ] ; then CMD="/usr/abills/libexec/linkupdown mikrotik guest - %LOGIN %IP NAS_HOST=${NAS_MNG_IP_PORT} NAS_MNG_USER=${NAS_MNG_USER}"; eval "${CMD}" >> /tmp/ipoe; fi;';



