Настройка динамических абонентов (уровень SIP-адаптера)
Введение
В системе поддерживается возможность дайджест-аутентификации и авторизации абонентов с использованием RADIUS-сервера. Для этого необходимо создать динамических абонентов. Система не хранит данные о динамических абонентах. Номер абонента и его пароль для аутентификации хранятся на RADIUS-сервере. В системе ECSS-10 необходимо только указать количество динамических абонентов и параметры доступа к RADIUS-серверу.
Авторизация осуществляется при регистрации абонента (запрос REGISTER) и определяет, существует ли абонент в системе. Дополнительно авторизация осуществляется при совершении вызова абонентом (запрос INVITE) и определяет, разрешено ли абоненту пользоваться ресурсом. Все запросы (регистрация, установление соединений) обязательно проходят процедуру аутентификации.
Например, у абонента нет средств на счете, но при этом с отрицательным балансом он должен быть авторизован и иметь возможность совершать вызовы на экстренный номер 112. При этом требование прохождения процедуры аутентификации сохраняется. При вызовах на другие номера процедура авторизации вернет запрет на соединение — данные вызовы будут отбиты.
Комплекс ECSS-10 поддерживает три варианта дайджест-аутентификации на RADIUS-сервере:
- RFC — согласно полной рекомендации RFC5090 (обновленная версия стандарта, RFC4590 — устаревшая версия). Формирование базы запроса аутентификации (nonce и другие) выполняется сервером RADIUS (challenge запрос);
- RFC-no-challenge — согласно RFC5090, но без "challenge" запроса на сервере. База запроса аутентификации (nonce и другие) формируется адаптером и затем передается на сервер RADIUS вместе с ответом клиента;
- Draft-sterman — работа по черновику RFC "draft-sterman". Аналогично предыдущему варианту не выполняется "challenge" запроса на сервер, при отправке запроса на сервер RADIUS используется другая кодировка команд. В частности, такой вариант аутентификации поддерживают сервера FreeRadius, NetUp.
Порядок настройки динамических абонентов:
- Добавить в систему информацию о RADIUS-серверах.
- Создать группы с определенным количеством динамических абонентов.
- Назначить группе абонентов список RADIUS-серверов, с которыми они будут взаимодействовать, и настроить параметры группы.
Добавление RADIUS-серверов
RAIDUS-сервера прописываются к каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме авторизации.
Команды по настройки RADIUS серверов детально описаны в разделе Команды настройки параметров соединения c RADIUS-сервером.
Создание RADIUS сервера через CoCon
Команда создания RADIUS сервера:
/domain/test_domain/aaa/radius/declare <Name> <Host> <Port> <Secret> [<Options>, ...]
где:
- <Name> : — Имя RADIUS сервера (the name of the RADIUS server)
- <Host> : — Имя хоста или IP адрес сервера (IP or host name of server)
- <Port> : — Номер порта (port number) [1—49151] (рекомендованное значение 1812)
- <Secret> : — Секретный ключ RADIUS сервера (RADIUS server security key)
- <Options> : — Опциональные параметры <OptionName> = <OptionValue>
- <OptionName> :
- retry-count : — кол-во повторных запросов если RADIUS сервер не отвечает (number of repeats when no answer from RADIUS server) (значение по умолчанию 3)
- retry-timeout : — время через которое будет произведена повторная отправка запроса (timeout for RADIUS server response) (значение по умолчанию 2000 ms)
- idle-timeout : — максимальное время ожидания ответа на запросы. После его истечения, повторные запросы перестанут отправляться. (pause for sending requests to unaccesible RADIUS server) (значение по умолчанию 0)
- ip-family : — версия протокола IP (inet family for radius server) (inet or inet6)
- <OptionValue> : — значение параметра (the value of the option)
- <OptionName> :
Пример создания 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 серверы", далее - "Radius серверы", "Добавить", заполнить параметры нового сервера:
Настройка группы динамических абонентов
Порядок настройки группы динамических абонентов:
Создать группу динамических абонентов командой:
/domain/<DOMAIN>/sip/user/dynamic-area/new <NEW AREA NAME> <ROUTING CONTEXT> <GROUP SIZE>
где:
- <DOMAIN> — имя домена;
- <NEW AREA NAME> — имя группы динамических абонентов;
- <ROUTING CONTEXT> — контекст маршрутизации;
- <GROUP SIZE> — максимальное количество регистрируемых в данную область sip-пользователей.
Назначить созданной группе список 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> — значение параметра.
Доступны следующие параметры:
- cisco-vsa-for-all — во всех сообщениях на RADIUS-сервер использовать параметры CISCO VSA;
- digest-version — алгоритм авторизации SIP-абонентов с динамической регистрацией через RADIUS-сервер, принимает значение:
- rfc — полноценная реализация рекомендации RFC4590;
- rfc-no-challenge — работа по рекомендации RFC4590 с сервером, не передающим Access Challenge;
- draft-sterman — работа по проекту, на основании которого была написана рекомендация RFC4590, поддерживают сервера FreeRadius;
- group-size — максимальное количество регистрируемых в данную область sip-пользователей;
- number-modification — имя правила модификации, применяемое по необходимости к номерам, передаваемым на RADIUS-сервер;
- routing.context — имя контекста маршрутизации;
- servers — список RADIUS серверов.
Для просмотра информации по группе динамических абонентов используется команда:
/domain/<DOMAIN>/sip/user/dynamic-area/info [<AREA NAME>]
где:
<DOMAIN> — имя домена;- <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" указывается текущее количество зарегистрированных/созданных динамических абонентов.
Пример конфигурации на RADIUS-сервере (в примере freeradius) для проверки работоспособности
добавить в конце файла /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 сек.
Возможные проблемы при конфигурации
- при создании группы не правильно указано "максимальное количество регистрируемых в данную область sip-пользователей" group-size=1. Один абонент сможет зарегистрировался, а у второго будет ошибка, при этом запрос в сторону RADIUS сервера не будет отправлен. Ограничение размера группы проверяется на SSW:
- при конфигурации ТА в поле SIP домен указали реальный домен (имя вАТС) а не имя группы, регистрация будет не успешной , абонент создан не в домене, а в группе динамических абонентов:
Параметры передающиеся на Radius сервер
В таблице ниже представлены все параметры передающиеся на 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 адаптера, на который получен запрос |











