В системе поддерживается возможность дайджест-аутентификации и авторизации абонентов с использованием RADIUS-сервера. Для этого необходимо создать динамических абонентов. Система не хранит данные о динамических абонентах. Номер абонента и его пароль для аутентификации хранятся на RADIUS-сервере. В системе ECSS-10 необходимо только указать количество динамических абонентов и параметры доступа к RADIUS-серверу.
Авторизация осуществляется при регистрации абонента (запрос REGISTER) и определяет, существует ли абонент в системе. Дополнительно авторизация осуществляется при совершении вызова абонентом (запрос INVITE) и определяет, разрешено ли абоненту пользоваться ресурсом. Все запросы (регистрация, установление соединений) обязательно проходят процедуру аутентификации.
Например, у абонента нет средств на счете, но при этом с отрицательным балансом он должен быть авторизован и иметь возможность совершать вызовы на экстренный номер 112. При этом требование прохождения процедуры аутентификации сохраняется. При вызовах на другие номера процедура авторизации вернет запрет на соединение — данные вызовы будут отбиты.
Комплекс ECSS-10 поддерживает три варианта дайджест-аутентификации на RADIUS-сервере:
Порядок настройки динамических абонентов:
RAIDUS-сервера прописываются к каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме авторизации.
Команды по настройки RADIUS серверов детально описаны в разделе Команды настройки параметров соединения c RADIUS-сервером.
Команда создания RADIUS сервера:
/domain/test_domain/aaa/radius/declare <Name> <Host> <Port> <Secret> [<Options>, ...] |
где:
Пример создания RADIUS сервера с именем "free_radius", IP адресом 10.0.20.35, портом 1812, секретным ключом "testing123" :
/domain/test_domain/aaa/radius/declare free_radius 10.0.20.35 1812 testing123 Radius server "free_radius" successfully declared. |
Проверить можно следующей командой:
/domain/test_domain/aaa/radius/info ┌───────────┬────────────────────────┬───────────────────┐ │ Name │ Host:Port │ Options │ ├───────────┼────────────────────────┼───────────────────┤ │free_radius│10.0.20.35:1812 (access)│secret = testing123│ │ │ │retry_count = 3 │ │ │ │retry_timeout = 2s │ │ │ │idle_timeout = 0ms │ │ │ │ip_family = inet │ └───────────┴────────────────────────┴───────────────────┘ |
Открыть приложение "Домены" , выбрать нужный домен, выбрать "Свойства домена":
В новом окне выбрать "Radius серверы", далее - "Radius серверы", "Добавить", заполнить параметры нового сервера:

Порядок настройки группы динамических абонентов:
Создать группу динамических абонентов командой:
/domain/<DOMAIN>/sip/user/dynamic-area/new <NEW AREA NAME> <ROUTING CONTEXT> <GROUP SIZE> |
где:
Назначить созданной группе список RADIUS-серверов командой:
/domain/<DOMAIN>/sip/user/dynamic-area/set <AREA NAME> servers [<ID1>, ...] |
где:
<DOMAIN> — имя домена;
<AREA NAME> — имя группы динамических абонентов;
<ID1> — имя RADIUS сервера.
Настройка остальных параметров:
/domain/<DOMAIN>/sip/user/dynamic-area/set <AREA NAME> <PARAMETER> <VALUE> |
где:
<DOMAIN> — имя домена;
<AREA NAME> — имя группы динамических абонентов;
<PARAMETER> — имя параметра;
<VALUE> — значение параметра.
Доступны следующие параметры:
Для просмотра информации по группе динамических абонентов используется команда:
/domain/<DOMAIN>/sip/user/dynamic-area/info [<AREA NAME>] |
где:
Создание группы динамических абонентов с именем "examlpe", размером 10:
/domain/test_domain/sip/user/dynamic-area/new example default_routing 10 Executed on the sip1@ecss2 ┌────────────┬─────────────────────────┐ │ Node │ Result │ ├────────────┼─────────────────────────┤ │ sip1@ecss1 │ ok, pid: <75517.6878.1> │ │ sip1@ecss2 │ ok, pid: <0.31916.0> │ └────────────┴─────────────────────────┘ |
Назначение созданной группе списка RADIUS-серверов, один предварительно созданный, RADIUS-сервер "free_radius"
/domain/test_domain/sip/user/dynamic-area/set example servers [free_radius ] Executed on the sip1@ecss2 ┌────────┬──────────┬──────────────────────────────────────────────┐ │Property│ Node │ Result │ ├────────┼──────────┼──────────────────────────────────────────────┤ │servers │sip1@ecss1│Servers list is changed: [] -> ["free_radius"]│ │ │sip1@ecss2│Servers list is changed: [] -> ["free_radius"]│ └────────┴──────────┴──────────────────────────────────────────────┘ |
Добавление дополнительных параметров:
/domain/test_domain/sip/user/dynamic-area/set example digest-version draft-sterman Executed on the sip1@ecss2 ┌──────────────┬──────────┬─────────────────────────────────────────────────────────────────────┐ │ Property │ Node │ Result │ ├──────────────┼──────────┼─────────────────────────────────────────────────────────────────────┤ │digest-version│sip1@ecss1│radius version using is changed: full/draft: true/false -> false/true│ │ │sip1@ecss2│radius version using is changed: full/draft: true/false -> false/true│ └──────────────┴──────────┴─────────────────────────────────────────────────────────────────────┘ |
Результат выполнения команды просмотра информации:
/domain/test_domain/sip/user/dynamic-area/info example Executed on the sip1@ecss2 ┌───────────────────────────┬───────────────────────────────────────────┐ │ Dynamic area (SIP domain) │ Parameters │ ├───────────────────────────┼───────────────────────────────────────────┤ │ example │ current size/limit 0/10 │ │ │ servers: │ │ │ free_radius ok │ │ │ draft sterman true │ │ │ number modification rule undefined │ │ │ full digest false │ │ │ routing context default_routing │ │ │ cisco vsa for all false │ └───────────────────────────┴───────────────────────────────────────────┘ |
В данной таблице в столбце "Current size/limit" указывается текущее количество зарегистрированных/созданных динамических абонентов.
добавить в конце файла /etc/freeradius/3.0/clients.conf следующие строки (наш ssw имеет IP адреса 10.0.20.31/10.20.32):
client ecss1 {
ipaddr = 10.0.20.31
secret = testing123
}
client ecss2 {
ipaddr = 10.0.20.32
secret = testing123
} |
добавить в конце файла /etc/freeradius/3.0/users следующую строчку (наш абонент будет иметь номер 42100/ пароль 42100):
42100 Cleartext-Password := "42100" |
В ssw абонента не создаем,

Прописываем только конфигурацию в ТА (для примера VP 15)

выполняем регистрацию с ТА:
Видим что регистрация прошла успешно, при этом был выполнен запрос на Radius сервер с IP адресом 10.0.20.35
Проверим информацию о группе абонентов в CoCon, видим что в настоящий момент один из 10 абонентов подключен (зарегистрирован) к SSW:
/domain/test_domain/sip/user/dynamic-area/info example Executed on the sip1@ecss2 ┌───────────────────────────┬───────────────────────────────────────────┐ │ Dynamic area (SIP domain) │ Parameters │ ├───────────────────────────┼───────────────────────────────────────────┤ │ example │ current size/limit 1/10 │ │ │ servers: │ │ │ free_radius ok │ │ │ draft sterman true │ │ │ number modification rule undefined │ │ │ full digest false │ │ │ routing context default_routing │ │ │ cisco vsa for all false │ └───────────────────────────┴───────────────────────────────────────────┘ |
После успешной регистрации мы видим абонента 42100 в списке абонентов SSW, абонент регистрируется как динамический, группы example:

Запоминаем данного абонента уже как алиас, но с пометкой "radius", чтобы при повторных регистрациях и звонках отправлять запросы на радиус сервер, так же указываем к какой группе динамических абонентов этот алиас относится. Если обновления регистрации не было и она истекла, интерфейс и алиас удаляются, что такой абонент существовал - "забываем".

Абонент 42100 делает тестовый звонок sip абоненту 42001 принадлежащему домену test_domain:
Видим успешный звонок , продолжительность разговора 4.5 сек.



В таблице ниже представлены все параметры передающиеся на Radius сервер при запросах на номер динамического абонента. Если данные верны, Radius сервер возвращает access на запроса и обработка интерфейса продолжается как с локальным абонентом SSW.
Таблица 1 — параметры запроса на Radius сервер
| AccessRequest | ID пакета: 0x01..0xFF |
| CalledStationId | CdPN (поле user из заголовка To) |
| CallingStationId | CgPN (поле user из заголовка From) |
| DigestMethod | метод запроса (INVITE, REGISTER) |
| DigestURI | значение URI из заголовка Digest |
| DigestRealm | значение realm из заголовка Digest |
| DigestResponse | значение ответа из заголовка Digest |
| DigestQop | значение qop из заголовка Digest |
| DigestAlgorithm | значение algorithm из заголовка Digest |
| DigestCNonce | значение cnonce из заголовка Digest |
| DigestNonce | значение nonce из заголовка Digest |
| DigestNonceCount | значение nc из заголовка Digest |
| DigestUsername | значение user из заголовка Digest |
| SipAor | URI в формате: sip:UserName@SipDomain. UserName. |
| NasIpAddress | локальный адрес SIP адаптера, с которого идет запрос на сервер |
| NasPort | локальный порт SIP адаптера, с которого идет запрос на сервер |
| NasPortType | 0 — асинхронный запрос |
| ServiceType | 1 — Login |
| FramedProtocol | 2 — SLIP |
| UserName | SIP user (Биллинговый номер если есть или REGISTER:CdPN, INVITE:CgPN) |
| VendorCisco + VendorSpecific + H323_conf_id | идентификатор в формате: <<0x11, CallRef:24, 0x7C, StartTime:32>> |
| VendorCisco + VendorSpecific + H323_gw_id | локальный адрес SIP адаптера, на который получен запрос |