Устройства без регистрации
Введение
Кейс решался в рамках задачи #140.
Телефоны подключены к конкретным гейтам (роль sg) на конкретные адреса (домены). Это настройка телефонов.
Звонок от телефона проходит без проверки авторизации (исключительно по адресу отправителя и связи с учетной записью sipuser без регистрации). Обеспечением этой части задачи занимаются роли SG и B2BUA, используя кэши учетных записей без регистрации, поддерживая данные в них в актуальном состоянии. При звонке с учетной записи без регистрации в поведении системы отличается исключительно авторизационная составляющая, а username и domain анализируются и используются аналогично стандартному режиму.
При звонке на телефон (на учетную запись без регистрации) система действует полностью аналогично учетным записям с регистрацией. Разница скрыта в поведении независимых внутренних сервисов, эмулирующих регистрацию. Так, данные о таких учетных записях лежат в регистраре (роль sr) и поддерживаются там в актуальном состоянии.
Поля учетной записи sipuser
reg
(типа intbool
) определяет режим работы учетной записи: с регистрацией или без, по умолчанию true
– с регистрацией.
devices
указывает совокупность устройств и их свойства в формате списка объектов (array<object>
):
"devices": [
{
"device": "192.168.0.10:5060",
"gates": [ 4, 6 ],
"proto": "udp"
}
]
-
gates
- указывает адрес внутреннего сервера (роль гейта sg), с которого отправлять запросы (порт не обязателен, и фактически игнорируется) в формате SrvIdx ::int
(см. раздел Конфигурация) или IP-адрес и порт ::str
. -
device
- указывает адрес внешнего сервера (IPV4), порт по умолчанию5060
, но может быть указан. -
proto
- протокол связи с устройством (tcp
,udp
,tls
), по умолчаниюudp
.
Особенности работы
Каждая учетная запись может содержать несколько девайсов, их вызов осуществляется одновременными форками.
Каждый девайс имеет привязку к конкретному гейту с тем, чтобы исходящий звонок на учетную запись проходил строго через него. Это обеспечивает синхронизацию устройств, ведь оппозитное устройство аналогично настроено на конкретный адрес.
Значение поля gates
может содержать также
* список из чисел SrvIdx, строк с ip-адресом гейта, строк с ip-адресом и портом,
* значение ""
- используется случайный гейт на сайте, обслуживающем домен, и имеющем лексикографически минимальное имя.
* пустой список или пустая строка - используется значение по умолчанию, установленное в настройках домена (settings.ext.default_sipuser_noreg_gates
), ожидается что там находится число RoleId, либо ip-адрес гейта, либо ip-адрес и порт гейта, либо список из этих значений. Если значение не задано, то поведение аналогично .
Если итоговое значение не имеет пересечения с гейтами сайтов, обслуживающих домен, то учетная запись не регистрируется и звонки на нее невозможны, хотя с нее звонки проходить в систему будут через любой гейт на сайтах, обслуживающих домен.
Одно конкретное устройство (суть адрес устройства) может использовать несколько гейтов (роль SG). При этом запрос на одно устройство уходит всегда только с одного гейта, другие игнорируются и применяются только при недоступности гейта. Запросы же с устройств принимаются на любые гейты сайтов, где обслуживается домен, которому принадлежит учетная запись.
Количество адресов устройств не должно превышать количества лицензий, отведенных данному sipuser. Проверка и запрет изменения в каждую сторону в момент изменения учетной записи.
Если указан адрес гейта, который не обнаруживается, то система не включает его в работу. А при удалении гейта из конфигурации выключает его из работы, не удаляя автоматически из свойств учетной записи.
Поддержкой данных в регистраре занимается особый сервис эмуляции регистраций (роль mware, действует в режиме Active-Passive на каждом сайте). Он мониторит доменный центр (периодически забирает учетные записи) и сверяет данные с прошлой копией, создавая/обновляя/удаляя учетные записи в регистраре, одновременно проверяя доступность гейтов и гарантируя сохранение в регистраре пути через доступный гейт.
Сервис эмуляции регистраций занимается только теми девайсами (подмножество всех девайсов учетной записи), которые относятся к гейтам текущего сайта. Таким образом гарантируется отсутствие дублирования и паразитных влияний на регистрар с нескольких сайтов, но одновременно требует в одном девайсе не указывать несколько гейтов, относящихся к разным сайтам. Ответственность за это лежит на администраторе домена.
Особенности решения проблемы отсутствия домена в запросе
Для решения проблемы случая, когда в INVITE-запросе в поле домена указан только IP-адрес, используется общий кэш на b2b. По адресу и порту отправителя определяется, есть ли в каком либо домене, обслуживаемом на текущем сайте, устройство без регистрации с соответствующими значениями. Если таких устройств нет, то система работает в обычном режиме, применяя алгоритмы авторизации и определения учетной записи по заголовкам From и Authorization. Если устройства обнаруживаются, то в зависимости от количества учетных записей, привязанных к этому адресу отправителя, количества доменов на адресе, а также адреса From – домен или IPV4 – запрещает или обрабатывает звонок, рассматривая его как звонок от конкретной учетной записи конкретного домена.