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

{toc}
h1. Описание

Система синхронизации исправляет сессии абонентов на оборудовании: она сравнивает их состояния на NAS и в биллинге, если обнаружена разница, добавляет нужные команд в стек для отправки.
В биллинге эта система называется *sync_nasd*. Для того или иного маршрутизатора её запуск и работа зависят от следующих опций:
* Вкладка "*Описание*"
*- "*Синхронизировать пользователей на этом NAS*": синхронизация выполняется.
*- "*В эксплуатации*": синхронизация выполняется и в случае если она завершена неудачно создаётся автоматическая заявка в портале HelpDesk

{note}Во всех стандартных схемах опция "*Синхронизировать пользователей на этом NAS*" установлена по-умолчанию и не отключается{note}

Для всех маршрутизаторов с включенной синхронизацией поочередно запускается скрипт *sync_nas*, который непосредственно выполняет все действия по загрузке списков и наполнению стека событий.

h2. Настройка

Настройки системы находятся в меню "*Настройки*" \-> "*Настройки (в файле)*" \-> "*Управление абонентами и тарифами*" и описаны в статье "[Настройки (в файле)|CarbonBilling:Настройки (в файле)]"

h1. Схема работы

С оборудования во временные файлы загружаются списки абонентов, подобные списки выгружаются из биллинга, они сравниваются и если обнаружена разница, на оборудование отправляется ряд команд для исправления ситуации.
В зависимости от используемой схемы интеграции, временные файлы могут располагаться в следующимх местах:
* Базовый скрипт событий: */var/lib/event/sync/*{color:#ff0000}{*}NAS-IP{*}{color}*/*
* OSS-схема: */*{color:#ff0000}{*}OSS-директория{*}{color}*/cache/sync/*{color:#ff0000}{*}NAS-IP{*}{color}*/*
{note}При интеграции "Пользовательской" схемы, в её директории должна быть папка *bin* и в ней - файл *session*, иначе синзронизация будет завершаться с ошибкой:
{code}/usr/local/bin/sync_nas: line 196: /var/oss/core/test/bin/session: Нет такого файла или каталога{code}
Пользовательский скрип можно оставить в папке bin, а не ubin, или сделать его гиперссылкой:
{code}ln -s /var/oss/core/test/ubin/session /var/oss/core/test/bin/session{code}{note}

Более детальное описание:
# Используя функцию *users_from_nas()* [скрипта событий|CarbonBilling:Интеграция оборудования интернет], система загружает с оборудования IP-адреса абонентов:
\\
\\
#* *auth_list.nas*: авторизованные
#* *negbal_list.nas*: заблокированные по балансу
#* *blocked_list.nas*: заблокированные администратором
\\
\\
# Используя [API биллинга|CarbonBilling:API REST v2.0] выгружает IP-адреса абонентов и сравнивает с такими же списками загруженными с оборудования:
\\
\\
#* *auth_list.billing*: авторизованные
#* *negbal_list.billing*: заблокированные по балансу
#* *blocked_list.billing*: заблокированные администратором
\\
\\
#* *auth_list.nas.*{color:#3366ff}{*}add{*}{color} и *auth_list.nas.*{color:#ff9900}{*}del{*}{color}: абоненты, которых нужно добавить в лист авторизованных и удалить из него
#* *negbal_list.nas.*{color:#3366ff}{*}add{*}{color} и *negbal_list.nas.*{color:#ff9900}{*}del{*}{color}: боненты, которых нужно заблокировать по балансу или снять соответствующую блокировку
#* *blocked_list.nas.*{color:#3366ff}{*}add{*}{color} и *blocked_list.nas.*{color:#ff9900}{*}del{*}{color}:абоненты, которым нужно добавить административную блокировку или снять её
\\
\\
# Используя полученные списки *add* и *del* добавляет следующие команды в стек на отправку - таблица *events_stack_compact* в БД биллинга:
\\
\\
{note}Если в списки, загруженные с оборудования, попал адрес, не относящийся к кому-либо из абонентов биллинга, то по нему не будет отправлено никаких команд. В логе синхронизации будет ошибка:
{code}ERROR' user_id= abonent_id= not found for 10.88.0.72 try direct call{code}
В приведенном примере, синхронизатор нашел на NAS IP 10.88.0.72, но он не привязан какой-либо учетной записи.{note}
\\
#* *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

Минимально необходимые списки с оборудования:

* Авторизованные абоненты
* Отрицательный баланс
\\
\\
{note}Если по какой-то причине с оборудования пришел пустой список авторизованных абонентов, то автоматическая синхронизация по этому NAS не запустится.

Для примера возьмём оборудование Mikrotik. Допустим, что интегрированный с биллингом Mikrotik вышел из строя и вы заменили его на новый. Загрузили правила [firewall|firewall_filter.cfg], но адрес листы по абонентам на нём не появляются. При попытке запустить синхронизацию вручную в логе синхронизации будет строка:

{code}В файле /var/oss/core/Mikro_test/cache/sync/%IP-адрес NAS%//auth_list.nas 0 непустых строк{code}

Для решения проблемы нужно внести произвольный адрес в адрес лист *crb_auth_list*. После этого остальные адреса будут добавлены синхронизацией.
{code}
/ip firewall address-list add address=192.168.254.254/32 list=crb_auth_list
{code}
{note}


h1. Ручной запуск синхронизации
Синхронизацию можно запустить как по всем NAS, так и по конкретному оборудованию, что может быть полезно для отладки или решения проблемы с сессиями абонентов на определенном NAS.
h2. Для всех NAS
*sync_nas* запускает синхронизацию всех маршрутизаторов сразу при запуске, перезапустить её вручную можно следующими способами:
* В веб-интерфейсе: зайдите в настройки, снимите галочку "Включить систему синхронизации абонентов", сохраните настройки, после чего установите галочку и снова сохраните.
* В командном интерфейсе:
{code}chroot /app/asr_billing service sync_nasd restart{code}

h2. Для конкретного NAS
Выполните скрипт *sync_nas*
{panel}chroot /app/asr_billing sync_nas --help{panel}
{code}запускается для конкретного 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{code}

h1. Отладка синхронизации
Отладить систему Вы можете анализируя лог её работы:
{code}/app/asr_billing/var/log/sync_nasd.log{code}
Так же Вы можете выполнить скрипт синхронизации конкретного маршрутизатора с повышенным логированием, например:
{code}bash -x /usr/local/bin/sync_nas --nas 169.1.18.12 --scriptname xge_router.sh --coa_psw 12345pass --debug{code}
{note}Файл *sync_nasd.log* записывается только при запуске системы синхронизации *sync_nasd*, при запуске непосредственно скрипта *sync_nas* +логи записаны не будут+!
Но Вы можете перенаправить вывод скрипта в отдельный файл для последующего анализа, например:
{code}sync_nas --nas 169.1.18.12 --scriptname xge_router.sh --coa_psw 12345pass --debug &> sync_nas_xge_debug.log{code}{note}