Описание
Система синхронизации исправляет сессии абонентов на оборудовании: она сравнивает их состояния на NAS и в биллинге, если обнаружена разница, добавляет нужные команд в стек для отправки.
В биллинге эта система называется sync_nasd. Для того или иного маршрутизатора её запуск и работа зависят от следующих опций:
- Вкладка "Описание"
- "Синхронизировать пользователей на этом NAS": синхронизация выполняется.
- "В эксплуатации": синхронизация выполняется и в случае если она завершена неудачно создаётся автоматическая заявка в портале HelpDesk
![]() | Во всех стандартных схемах опция "Синхронизировать пользователей на этом NAS" установлена по-умолчанию и не отключается |
Для всех маршрутизаторов с включенной синхронизацией поочередно запускается скрипт sync_nas, который непосредственно выполняет все действия по загрузке списков и наполнению стека событий.
Настройка
Настройки системы находятся в меню "Настройки" -> "Настройки (в файле)" -> "Управление абонентами и тарифами" и описаны в статье "Настройки (в файле)"
Схема работы
С оборудования во временные файлы загружаются списки абонентов, подобные списки выгружаются из биллинга, они сравниваются и если обнаружена разница, на оборудование отправляется ряд команд для исправления ситуации.
В зависимости от используемой схемы интеграции, временные файлы могут располагаться в следующимх местах:
- Базовый скрипт событий: /var/lib/event/sync/NAS-IP/
- OSS-схема: /OSS-директория/cache/sync/NAS-IP/
При интеграции "Пользовательской" схемы, в её директории должна быть папка bin и в ней - файл session, иначе синзронизация будет завершаться с ошибкой: /usr/local/bin/sync_nas: line 196: /var/oss/core/test/bin/session: Нет такого файла или каталога
Пользовательский скрип можно оставить в папке bin, а не ubin, или сделать его гиперссылкой:
ln -s /var/oss/core/test/ubin/session /var/oss/core/test/bin/session
Более детальное описание:
- Используя функцию users_from_nas() скрипта событий, система загружает с оборудования IP-адреса абонентов:
- auth_list.nas: авторизованные
- negbal_list.nas: заблокированные по балансу
- blocked_list.nas: заблокированные администратором
- Используя API биллинга выгружает IP-адреса абонентов и сравнивает с такими же списками загруженными с оборудования:
- auth_list.billing: авторизованные
- negbal_list.billing: заблокированные по балансу
- blocked_list.billing: заблокированные администратором
- auth_list.nas.add и auth_list.nas.del: абоненты, которых нужно добавить в лист авторизованных и удалить из него
- negbal_list.nas.add и negbal_list.nas.del: боненты, которых нужно заблокировать по балансу или снять соответствующую блокировку
- blocked_list.nas.add и blocked_list.nas.del:абоненты, которым нужно добавить административную блокировку или снять её
- Используя полученные списки add и del добавляет следующие команды в стек на отправку - таблица events_stack_compact в БД биллинга:
Если в списки, загруженные с оборудования, попал адрес, не относящийся к кому-либо из абонентов биллинга, то по нему не будет отправлено никаких команд. В логе синхронизации будет ошибка: ERROR' user_id= abonent_id= not found for 10.88.0.72 try direct call
В приведенном примере, синхронизатор нашел на NAS IP 10.88.0.72, но он не привязан какой-либо учетной записи.
- auth_list.nas.add: user_add
- auth_list.nas.del: user_del
- negbal_list.nas.add: user_redirect
- negbal_list.nas.del: user_redirect_cancel
- blocked_list.nas.add: user_drop
- blocked_list.nas.del: user_accept
Минимально необходимые списки с оборудования:
- Авторизованные абоненты
- Отрицательный баланс
Если по какой-то причине с оборудования пришел пустой список авторизованных абонентов, то автоматическая синхронизация по этому NAS не запустится. Для примера возьмём оборудование Mikrotik. Допустим, что интегрированный с биллингом Mikrotik вышел из строя и вы заменили его на новый. Загрузили правила firewall, но адрес листы по абонентам на нём не появляются. При попытке запустить синхронизацию вручную в логе синхронизации будет строка:
В файле /var/oss/core/Mikro_test/cache/sync/%IP-адрес NAS%//auth_list.nas 0 непустых строк
Для решения проблемы нужно внести произвольный адрес в адрес лист crb_auth_list. После этого остальные адреса будут добавлены синхронизацией.
/ip firewall address-list add address=192.168.254.254/32 list=crb_auth_list
Ручной запуск синхронизации
Синхронизацию можно запустить как по всем NAS, так и по конкретному оборудованию, что может быть полезно для отладки или решения проблемы с сессиями абонентов на определенном NAS.
Для всех NAS
sync_nas запускает синхронизацию всех маршрутизаторов сразу при запуске, перезапустить её вручную можно следующими способами:
- В веб-интерфейсе: зайдите в настройки, снимите галочку "Включить систему синхронизации абонентов", сохраните настройки, после чего установите галочку и снова сохраните.
- В командном интерфейсе:
chroot /app/asr_billing service sync_nasd restart
Для конкретного NAS
Выполните скрипт sync_nas
chroot /app/asr_billing sync_nas --help
запускается для конкретного NAS, подключает scriptname, сравнивает всё, отправляет команды sync_nas --nas <nas ip> --scriptname <event script in /var/lib/event/> --oss_path <oss path to nas folder in /var/oss/ 'rtsh list' to list folders ex:/var/oss/core/mikrotik> --coa_psw <coa password> --radius_secret <radius secret> --telnet_password <telnet password> --debug # usage: example: sync_nas --nas 169.1.18.12 --scriptname xge_router.sh --coa_psw 12345pass --debug
Отладка синхронизации
Отладить систему Вы можете анализируя лог её работы:
/app/asr_billing/var/log/sync_nasd.log
Так же Вы можете выполнить скрипт синхронизации конкретного маршрутизатора с повышенным логированием, например:
bash -x /usr/local/bin/sync_nas --nas 169.1.18.12 --scriptname xge_router.sh --coa_psw 12345pass --debug
![]() | Файл sync_nasd.log записывается только при запуске системы синхронизации sync_nasd, при запуске непосредственно скрипта sync_nas логи записаны не будут! Но Вы можете перенаправить вывод скрипта в отдельный файл для последующего анализа, например: sync_nas --nas 169.1.18.12 --scriptname xge_router.sh --coa_psw 12345pass --debug &> sync_nas_xge_debug.log |