Настройка динамических абонентов и системы Radius
В текущем разделе описывается настройка взаимодействия системы со службой RADIUS AAA (Authentication Authorization Accounting). Данные настройки осуществляются через командную консоль CLI.
Понятия, определения
- RADIUS (Remote Authorization Dial-In User Service) — протокол, который предоставляет централизованный метод аутентификации пользователей путем обращения к внешнему серверу. Протокол RADIUS используется для аутентификации, авторизации и учета стоимости (аккаунтинга). Сервер RADIUS использует базу данных пользователей, которая содержит данные проверки подлинности для каждого пользователя. Таким образом, использование протокола RADIUS обеспечивает дополнительную защиту при доступе к ресурсам сети и централизованное управление.
В системе поддерживаются три независимых режима работы с сервером RADIUS:
- Работа с сервером авторизации. Данный режим реализован для аутентификации и авторизации динамических абонентов, все аутентификационные данные в этом случае хранятся на RADIUS-сервере.
- Работа с сервером учета стоимости. В этом случае для всех вызовов, совершенных через виртуальную АТС, будут отправляться запросы аккаунтинга (accounting-request) на RADIUS-сервер;
- Внешняя маршрутизация посредством RADIUS-сервера.
Подсистема AAA (Authentication, Authorization, Accounting)
Подсистема AAA позволяет проверять права на совершение вызовов абонентом, слежение за потреблением ресурсов абонентом.
Этапы работы подсистемы ААА
Подсистема AAA подключается при обработки вызова на нижеперечисленных этапах (каждым из этапом может отсутствовать)
RADIUS-маршрутизация
На этапе маршрутизации вызова в правиле контексте маршрутизации можно указать, что необходимо выполнить внешнюю RADIUS-маршрутизацию.
В этом случае на RADIUS сервер посылаются следующие параметры:
- текущие номера А, Б и их признаки;
- имя текущего контекста маршрутизации;
- текущее значение параметра tag контекста маршрутизации;
- имя домена;
- имя входящего интерфейса;
- номер попытки маршрутизации (начинается с 1, и в в случае перемаршрутизации увеличивается);
- причина release-а предыдущего вызова по SIP, ISUP, ACP (в случае перемаршрутизации).
В ответ RADIUS сервер может прислать команды на изменения номеров А, Б, их признаков, параметра tag
Authentication и Authorization
После маршрутизации, прежде чем отправить вызов на абонента Б, делается запрос в подсистему Authentication. На этом этапе проверяется, можно совершать вызов с номера А на номер Б, или нет.
Если Authentication подсистема вернула accept — вызов отправляется на абонента Б. Иначе, в зависимости от значения параметра if_radius_unavaliable, либо вызов идет на абонента Б, либо отбивается.
domain/<DOMAIN>/aaa/general/info if_radius_unavaliable
В параметре if_radius_unavaliable перечислены направления, на которые необходимо отправлять вызов даже если RADIUS сервер недоступен, не пропускает вызов (Например вызовы на номера спецслужб).
Access-Request сторону RADIUS содержит параметры, детально описанные в пункте Формат пакетов RADIUS и значение атрибутов CISCO VSA.
Accounting
После ответа абонента Б, система отправляет Acct-Start Request с информацией о начале вызова и времени ответа на RADIUS сервер. Детально параметры запроса описаны в пункте Формат пакетов RADIUS и значение атрибутов CISCO VSA.
В ответ RADIUS сервер может прислать максимальную продолжительность вызова (в секундах), запрет вызова (в этом случае система тут же отобьет вызов если он не разрешен в свойстве if_radius_unavaliable), таймаут посылки промежуточных Accounting сообщений Acct-Interim-Update.
Если абоненты А, Б воспользовались услугами ДВО, на RADIUS сервер посылаются Acct-Update Request с информацией об этом, в случае если параметр send_ss_notification = true
domain/<DOMAIN>/aaa/accounting/info send_ss_notification
По завершению вызова посылается сообщение Acct-Stop Request с информацией о абонентах А, Б, а так же о времени начала, ответа и завершения вызова.
В случае, если ответа на вызов не было Acct-Stop Request посылается только в том случае, если параметр unsuccessful_call_info = true.
domain/<DOMAIN>/aaa/accounting/info unsuccessful_call_info
Конфигурирование подсистемы AAA
Конфигурирование подсистемы AAA состоит из трех этапов:
- Задание параметров подключения в RADIUS серверу(ам)
Детально команды по управлению RADIUS серверами описаны в пункте Команды настройки параметров соединения с RADIUS-сервером. - Конфигурирование подсистемы Authorization (access запросы)
Детально команды по управлению службой Authorization описаны в пункте Команды управления службой RADIUS AAA (Authorization). - Конфигурирование подсистемы Accounting (accounting запросы)
Детально команды по управлению службой Accounting описаны Команды управления службой RADIUS AAA (Accounting).
Пример команд CoCon-а по конфигурированию подсистемы AAA
% Создаем access сервер admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/radius/declare billing_access 192.168.23.250 access secret123 retry-count = 3, retry-timeout = 250 Radius server "billing_access" successfully declared. % Создаем accounting сервер admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/radius/declare billing_account 192.168.23.250 account secret123 retry-count = 3, retry-timeout = 250 Radius server "billing_account" successfully declared. admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/radius/info ┌───────────────┬─────────────────────────────┬──────────────────────┐ │ Name │ Host:Port │ Options │ ├───────────────┼─────────────────────────────┼──────────────────────┤ │billing_access │192.168.23.250:1812 (access) │secret = secret123 │ │ │ │retry_count = 3 │ │ │ │retry_timeout = 250 ms│ │ │ │idle_timeout = 0 ms │ │billing_account│192.168.23.250:1813 (account)│secret = secret123 │ │ │ │retry_count = 3 │ │ │ │retry_timeout = 250 ms│ │ │ │idle_timeout = 0 ms │ └───────────────┴─────────────────────────────┴──────────────────────┘ % выставляем RADIUS сервер billing_account в качестве access-сервера admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/access/set servers add billing_account Property "servers" successfully changed from: to 1: billing_account. % выставляем RADIUS сервер billing_account в качестве accounting-сервера admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/accounting/set servers add billing_account Property "servers" successfully changed from: to 1: billing_account. % включаем подсистему access admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/access/set enable true Property "enable" successfully changed from: false to true. % включаем подсистему accounting admin@[mycelium1@ryabkov]:/$ domain/test.domain/aaa/accounting/set enable true Property "enable" successfully changed from: false to true.
После этого при вызовах будут идти запросы на система AAA.
Работа с сервером авторизации
Если нужно авторизовать все совершаемые через виртуальную АТС вызовы, то настраивается взаимодействие с RADIUS-сервером авторизации.
Настройка локального адреса
Для настройки локального адреса RADIUS-клиента используется команда:
/domain/<DOMAIN>/voip/aaa/access/set my_address <ADDRESS>
где
- <DOMAIN> — имя виртуальной АТС;
- <ADDRESS> — IP-адрес, на котором будет запущен RADIUS-клиент.
Настройка серверов авторизации
RAIDUS сервера создаются для каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме аккаунтинга.
Команды по настройки RADIUS серверов детально описаны в секции Команды настройки параметров соединения c RADIUS-сервером
Далее нужно назначить RADIUS сервера для авторизации командой:
/domain/<DOMAIN>/aaa/access/set servers add <ID>
где
- <DOMAIN> — имя виртуальной АТС;
- <ID> — идентификатор (имя) RADIUS-сервера.
Затем назначить имя пользователя и пароль, с которыми будут авторизоваться все вызовы данной виртуальной АТС:
/domain/<DOMAIN>/aaa/access/set login <login>
/domain/<DOMAIN>/aaa/access/set password <password>
Для запуска RADIUS-клиента (включения взаимодействия с RADIUS-сервером авторизации) используется команда:
/domain/<DOMAIN>/aaa/access/set enable true
Если необходимо отключить RADIUS-клиента нужно установить значение "false" в команде.
Для просмотра данных о настройках подсистемы аккаунтинга используется команда:
/domain/<DOMAIN>/aaa/access/info
┌──────────┬──────────┬───────────────┐ │ Property │ Domain │ Value │ ├──────────┼──────────┼───────────────┤ │enable │voip.local│true │ │login │voip.local│"vl" │ │my_address│voip.local│127.0.0.1 │ │password │voip.local│"voip.local" │ │servers │voip.local│1: accessserver│ └──────────┴──────────┴───────────────┘
где
- <DOMAIN> — имя виртуальной АТС.
Работа с сервером аккаунтинга
Если нужно тарифицировать все совершаемые через виртуальную АТС вызовы, то настраивается взаимодействие с RADIUS-сервером аккаунтинга.
Система ESCC-10 в рамках виртуальной АТС поддерживает взаимодействие с несколькими серверами аккаунтинга. Если в течение определенного времени система не получает ответа от сервера, то выполняется повторная попытка отправки запроса на сервер. По истечении заданного числа попыток сервер считается неактивным. Запрос перенаправляется на другой сервер, если он указан, иначе детектируется сбой сервера.
При сбое сервера возможно установление ограничений на исходящую связь:
- разрешать все вызовы;
- разрешать вызовы только на локальные сети, междугородные сети, международные сети, спецслужбы, местные или зоновые сети (одновременно можно настроить любую комбинацию);
- запрещать все вызовы.
Данное ограничение определяет возможность маршрутизации вызова на определенные интерфейсы системы, в настройках которых устанавливается соответствующее значение параметра признака номера.
NumberIndicator — признак номера, принимает значения:
- private — частная сеть;
- local — местная сеть;
- zone — зоновая сеть;
- intercity — междугородная сеть;
- international — международная сеть;
- emergency — спецслужбы.
Порядок настройки:
- Настроить локальный адрес, на котором будет работать RADIUS-клиент.
- Настроить сервера аккаунтинга.
- При необходимости настроить индикаторы сети на интерфейсах системы.
Настройка локального адреса
Для настройки локального адреса RADIUS-клиента используется команда:
/domain/<DOMAIN>/voip/aaa/accounting/set my_address <ADDRESS>
где
- <DOMAIN> — имя виртуальной АТС;
- <ADDRESS> — IP-адрес, на котором будет запущен RADIUS-клиент.
Настройка серверов аккаунтинга
RAIDUS сервера создаются для каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме аккаунтинга.
Команды по настройки RADIUS серверов детально описаны в секции Команды настройки параметров соединения c RADIUS-сервером
Далее нужно назначить RADIUS-сервер для версии аккаунтинга командой:
/domain/<DOMAIN>/aaa/accounting/set servers add <ID>
где
- <DOMAIN> — имя виртуальной АТС;
- <ID> — Идентификатор (имя) RADIUS-сервера.
При использовании нескольких серверов, если есть необходимость, настраивается тайм-аут ожидания ответа сервера и количество попыток отправки запроса на сервер.
Сервер аккаунтинга может быть территориально удаленно расположен. При взаимодействии с таким сервером могут возникнуть сбои при доставке запросов/ответов по сети передачи данных, например, сервер может быть временно недоступен из-за отсутствия электропитания на объекте. Для случаев, когда детектируется сбой сервера и тарификация вызовов временно невозможна, можно установить ограничения на исходящую связь командой:
/domain/<DOMAIN>/aaa/general/set if_radius_unavaliable [NI1] ... [NI6]
где
- <DOMAIN> — имя виртуальной АТС;[NIN] — индикатор сети, в направлении которой разрешается исходящая связь при сбое сервера. Если параметр не указан, то вызовы будут запрещены на все направления, принимает значения:
- * — разрешены вызовы на все направления;
- emergency — разрешены вызовы на спецслужбы;
- intercity — разрешены вызовы на междугороднее направление;
- international — разрешены вызовы на международное направление;
- local — разрешены вызовы на локальных абонентов системы;
- private — разрешены вызовы на местную сеть;
- zone — разрешены вызовы на зоновую сеть.
Для настройки передачи на сервер аккаунтинга информации о "неуспешных" вызовах используется команда:
/domain/<DOMAIN>/aaa/accounting/set unsuccessful_call_info true
При этом в атрибутах cisco_vsa будет передаваться причина "неуспешного" вызова.
Если необходимо отключить передачу на сервер аккаунтинга информации о "неуспешных" вызовах, то нужно установить значение "false".
Следующая команда позволяет настроить профиль взаимодействия с системой учета, но в текущей версии программного обеспечения его устанавливать не требуется, поскольку в системе поддержан всего один профиль — CISCO_VSA. Профиль "default" соответствует CISCO_VSA.
/domain/<DOMAIN>/aaa/general/set profile <cisco_vsa|default>
Для возможности передачи промежуточных сообщений аккаунтинга необходимо настроить "интервал передачи промежуточных сообщений аккаунтинга". Для этого воспользуйтесь командой:
/domain/<DOMAIN>/aaa/accounting/set interim_interval <value|disable|server_configured>
где
- value — значение интервала в диапазоне от 60 до 86400 секунд;
- disable — не передавать промежуточные сообщения аккаунтинга;
- server_configured — использовать в качестве значения интервала значение, принятое от сервера авторизации в ответе access-accept.
Для запуска RADIUS-клиента (включения взаимодействия с RADIUS-сервером аккаунтинга) используется команда:
/domain/<DOMAIN>/aaa/accounting/set enable true
Если необходимо отключить RADIUS-клиента нужно установить значение "false" в команде.
Для просмотра данных о настройках подсистемы аккаунтинга используется команда:
/domain/<DOMAIN>/aaa/accounting/info
┌──────────────────────┬───────────┬──────────────────┐ │ Property │ Domain │ Value │ ├──────────────────────┼───────────┼──────────────────┤ │enable │biysk.local│true │ │interim_interval │biysk.local│server_configured │ │my_address │biysk.local│192.168.1.21 │ │send_ss_notification │biysk.local│false │ │servers │biysk.local│1: billing_account│ │unsuccessful_call_info│biysk.local│false │ └──────────────────────┴───────────┴──────────────────┘
где
- <DOMAIN> — имя виртуальной АТС.
Настройка индикаторов сети на интерфейсах системы на уровне администратора ВАТС
Для настройки индикаторов сети на интерфейс системы используется следующая команда:
/domain/<DOMAIN>/alias/set-for-iface <GROUP_NAME> <INTERFACE> ni <VALUE>
Для настройки индикаторов сети профиля домена алиаса необходимо выполнить следующую команду:
/domain/<DOMAIN>/alias/set-for-domain ni <VALUE>
где
- <DOMAIN> — имя виртуальной АТС;<GROUP_NAME> — имя группы интерфейсов, логическая привязка интерфейсов в определенной виртуальной АТС;
- <INTERFACE> — имя интерфейса;
- <VALUE> — значение признака номера:
- private — частная сеть;
- local — местная сеть;
- zone — зоновая сеть;
- intercity — междугородная сеть;
- international — международная сеть;
- emergency — спецслужбы.
Настройка работы с RADIUS c помощью web-конфигуратора
Работа с RADIUS настраивается также через расширенный web-конфигуратор в приложении Домены (Domains) → Свойства → RADIUS
RADIUS серверы
RADIUS общие
RADIUS авторизация
RADIUS аккаунтинг
Настройка динамических абонентов (уровень 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-серверов
Начиная с версии 3.5.0 RAIDUS-сервера создаются для каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме авторизации.
Команды по настройки RADIUS серверов детально описаны в разделе Команды настройки параметров соединения c 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/<DOMAIN>/sip/user/dynamic-area/set <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;
- group-size — максимальное количество регистрируемых в данную область sip-пользователей;
- number-modification — имя правила модификации, применяемое по необходимости к номерам, передаваемым на RADIUS-сервер;
- routing.context — имя контекста маршрутизации;
- servers — список RADIUS серверов.
Для просмотра информации по группе динамических абонентов используется команда:
/domain/<DOMAIN>/sip/user/dynamic-area/info [<AREA NAME>]
Результат выполнения команды просмотра информации:
admin@[mycelium1@ecss1]:/$ domain/test.domain/sip/user/dynamic-area/info Executed on the pa_sip@alex ┌───────────────────────────┬─────────────────────────────────────────┐ │ Dynamic area (SIP domain) │ Parameters │ ├───────────────────────────┼─────────────────────────────────────────┤ │ test_area.1 │ current size/limit 0/10 │ │ │ servers: │ │ │ free.radiu ok │ │ │ draft sterman true │ │ │ number modification rule rule.test │ │ │ full digest false │ │ │ routing context ctx_sip_local │ │ │ cisco vsa for all false │ │ │ │ │ test_area.2 │ current size/limit 0/20 │ ... └───────────────────────────┴─────────────────────────────────────────┘
В данной таблице в столбце "Current size/limit" указывается текущее количество зарегистрированных/созданных динамических абонентов.
Параметры передающиеся на 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 юзер (Биллинговый номер если есть или REGISTER:CdPN, INVITE:CgPN) |
VendorCisco + VendorSpecific + H323_conf_id | идентификатор в формате: <<0x11, CallRef:24, 0x7C, StartTime:32>> |
VendorCisco + VendorSpecific + H323_gw_id | локальный адрес SIP адаптера, на который получен запрос |
Более подробно команды для работы с динамическими абонентами описаны в справочнике CLI, раздел Команды управления динамически конфигурируемыми интерфейсами
Формат пакетов RADIUS и значение атрибутов CISCO VSA
- RADIUS (Remote Authorization Dial-In User Service) — протокол безопасности, который предоставляет централизованный метод аутентификации пользователей путем обращения к внешнему серверу. Протокол RADIUS используется для аутентификации, авторизации и учета. Сервер RADIUS использует базу данных пользователей, которая содержит данные проверки подлинности для каждого пользователя. Таким образом, использование протокола RADIUS обеспечивает дополнительную защиту при доступе к ресурсам сети.
В системе поддержаны два независимых режима работы с сервером RADIUS:
- Работа с сервером авторизации. Данный режим реализован для аутентификации и авторизации динамических абонентов, все аутентификационные данные в этом случае хранятся на RADIUS-сервере. Используется пакет Аccess-Request.
- Работа с сервером учета (аккаунтинга). В этом случае для всех вызовов, совершенных через виртуальную АТС, будут отправляться запросы аккаунтинга (Accounting-Request) на RADIUS-сервер.
В случае включения авторизации или аккаунтинга на RADIUS-сервере все вызовы сначала будут проходить авторизацию на RADIUS, после чего будут проходить по плану маршрутизации.
Описание каждого из режимов и процедуру настройки смотрите в Настройка динамических абонентов и системы Radius.
Описание каждого RADIUS-пакета состоит из описания всех пар Атрибут-Значение (Attribute-Value Pair) для этого типа пакета. Атрибуты могут быть как стандартными, так и специфичными атрибутами вендоров (Vendor-Specific Attribute). Если значение атрибута неизвестно (например, при отсутствии исходящего транка невозможно определить значение переменной CdPN_OUT, которое используется в качестве значения некоторых атрибутов), то этот атрибут не добавляется в сообщение.
Для стандартных атрибутов описание имеет вид:
Имя атрибута(Номер атрибута): Значение атрибута
Для специфичных атрибутов вендоров описание имеет вид:
Имя атрибута(Номер атрибута): Имя вендора(Номер вендора): Имя VSA: Значение VSA
где:
- Имя атрибута всегда Vendor-Specific;
- Номер атрибута всегда 26;
- Имя вендора – имя вендора;
- Номер вендора – номер вендора, присвоенный ему организацией IANA в документе “PRIVATE ENTERPRISE NUMBERS” (http://www.iana.org/assignments/enterprise-numbers);
- “Имя VSA” – имя атрибута вендора;
- “Значение VSA” – значение атрибута вендора.
В качестве значения атрибута может использоваться конструкция вида <$NAME>, где NAME – это имя переменной. Описание значения переменных приведено ниже.
Пакет Аccess-Request:
NAS-IP-Address(4): <$SSW_IP> NAS-Port(5): <$SSW_PORT> NAS-Port-Type(61): Async(0) Service-Type(6): Login-User(1) Framed-Protocol(7): SLIP(2) User-Name(1): <$CgPN_IN> Called-Station-Id(30): <$CdPN_IN> Calling-Station-Id(31): <$CgPN_IN> Digest-Attributes(207 для draft-sterman, иначе атрибуты передаются как отдельные параметры 104-122) Digest-Response (206 для draft-sterman, иначе 103) Message-Authenticator(80): <$Auth>
В ответ на данное сообщение ожидается одно из следующих сообщений: Access-Reject — в случае, если не было дано разрешение на выполнение вызова; Access-Accept — в случае, если разрешение на выполнение вызова было получено. В сообщение Access-Accept могут присутствовать следующие атрибуты:
Acct-Interim-Interval(85): <$INTERIM_INTERVAL> Session-Timeout(27): <$SESSION_TIMEOUT> Vendor-Specific(26): Cisco(9): h323-credit-time(102): <$H323_CREDIT_TIME>
Стартовый пакет Accounting-Request (Start):
Acct-Status-Type(40) - Start(1) Acct-Session-Id(44): <$SESSION_ID> NAS-IP-Address(4): <$SSW_IP> User-Name(1): <$CgPN_IN> Called-Station-Id(30): <$CdPN_IN> Calling-Station-Id(31): <$CgPN_IN> Event-Timestamp(55): согласно RFC2869 NAS-Port-Id(87): <$SESSION_ID> NAS-Port-Type(61): Async(0) Acct-Delay-Time(41): согласно RFC2866 Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-src-number-in=<$CgPN_IN> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-src-number-out=<$CgPN_OUT> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-dst-number-in=<$CdPN_IN> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-dst-number-out=<$CdPN_OUT> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-route-retries=<$ROUTE_RETRIES> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): h323-call-id=<$CALL_ID> Vendor-Specific(26): Cisco(9): h323-conf-id(24): h323-conf-id=<$CALL_ID> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): escc-domain-name=<$DOMAIN> Vendor-Specific(26): Cisco(9): h323-setup-time(25): h323-setup-time=<$TIME_SETUP> Vendor-Specific(26): Cisco(9): h323-call-origin(26): h323-call-origin=originate Vendor-Specific(26): Cisco(9): h323-call-type(27): h323-call-type=<$CALL_TYPE> Vendor-Specific(26): Cisco(9): h323-connect-time(28): h323-connect-time=<$TIME_CONNECT> Vendor-Specific(26): Cisco(9): h323-gw-id(33): h323-gw-address=<$SSW_IP> Vendor-Specific(26): Cisco(9): h323-gw-id(33): h323-gw-id=<$SSW_IP> Vendor-Specific(26): Cisco(9): h323-remote-id(1): h323-remote-id=<$OutTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): in-trunkgroup-label=<$InTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): out-trunkgroup-label=<$OutTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): in-iface=<$InIface> Vendor-Specific(26): Cisco(9): h323-remote-id(1): out-iface=<$OutIface>
В ответ на данное сообщение ожидается сообщение Accounting-Response, в котором может присутствовать следующий атрибут:
Vendor-Specific(26): Cisco(9): h323-credit-time(102): <$H323_CREDIT_TIME>
Промежуточный пакет Interim Accounting Request (Update):
Acct-Status-Type(40) - Start(1) Acct-Session-Id(44): <$SESSION_ID> NAS-IP-Address(4): <$SSW_IP> User-Name(1): <$CgPN_IN> Called-Station-Id(30): <$CdPN_IN> Calling-Station-Id(31): <$CgPN_IN> Event-Timestamp(55): согласно RFC2869 NAS-Port-Id(87): <$SESSION_ID> NAS-Port-Type(61): Async(0) Acct-Session-Time(46): <$INTERIM_SESSION_TIME> Acct-Delay-Time(41): согласно RFC2866 Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-src-number-in=<$CgPN_IN> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-src-number-out=<$CgPN_OUT> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-dst-number-in=<$CdPN_IN> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-dst-number-out=<$CdPN_OUT> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-route-retries=<$ROUTE_RETRIES> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): h323-call-id=<$CALL_ID> Vendor-Specific(26): Cisco(9): h323-conf-id(24): h323-conf-id=<$CALL_ID> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): escc-domain-name=<$DOMAIN> Vendor-Specific(26): Cisco(9): h323-setup-time(25): h323-setup-time=<$TIME_SETUP> Vendor-Specific(26): Cisco(9): h323-call-origin(26): h323-call-origin=originate Vendor-Specific(26): Cisco(9): h323-call-type(27): h323-call-type=<$CALL_TYPE> Vendor-Specific(26): Cisco(9): h323-connect-time(28): h323-connect-time=<$TIME_CONNECT> Vendor-Specific(26): Cisco(9): h323-gw-id(33): h323-gw-address=<$SSW_IP> Vendor-Specific(26): Cisco(9): h323-gw-id(33): h323-gw-id=<$SSW_IP> Vendor-Specific(26): Cisco(9): h323-remote-id(1): h323-remote-id=<$OutTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): in-trunkgroup-label=<$InTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): out-trunkgroup-label=<$OutTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): in-iface=<$InIface> Vendor-Specific(26): Cisco(9): h323-remote-id(1): out-iface=<$OutIface>
В ответ на данное сообщение ожидается сообщение Accounting-Response, в котором может присутствовать следующий атрибут:
Vendor-Specific(26): Cisco(9): h323-credit-time(102): <$H323_CREDIT_TIME>
Завершающий пакет Accounting-Request (Stop):
Acct-Status-Type(40) - Stop(2) Acct-Session-Id(44): <$SESSION_ID> NAS-IP-Address(4): <$SSW_IP> User-Name(1): <$CgPN_IN> Called-Station-Id(30): <$CdPN_IN> Calling-Station-Id(31): <$CgPN_IN> Event-Timestamp(55): согласно RFC2869 NAS-Port-Id(87): <$SESSION_ID> NAS-Port-Type(61): Async(0) Acct-Session-Time(46): <$SESSION_TIME> Acct-Delay-Time(41): согласно RFC2866 Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-local-disconnect-isup-cause=<DISCONNECT_CAUSE> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-src-number-in=<$CgPN_IN> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-src-number-out=<$CgPN_OUT> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-dst-number-in=<$CdPN_IN> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-dst-number-out=<$CdPN_OUT> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-route-retries=<$ROUTE_RETRIES> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): h323-call-id=<$CALL_ID> Vendor-Specific(26): Cisco(9): h323-conf-id(24): h323-conf-id=<$CALL_ID> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): escc-domain-name=<$DOMAIN> Vendor-Specific(26): Cisco(9): h323-setup-time(25): h323-setup-time=<$TIME_SETUP> Vendor-Specific(26): Cisco(9): h323-call-origin(26): h323-call-origin=originate Vendor-Specific(26): Cisco(9): h323-call-type(27): h323-call-type=<$CALL_TYPE> Vendor-Specific(26): Cisco(9): h323-connect-time(28): h323-connect-time=<$TIME_CONNECT> Vendor-Specific(26): Cisco(9): h323-disconnect-time(29): h323-disconnect-time=<$TIME_DISCONNECT> Vendor-Specific(26): Cisco(9): h323-disconnect-cause(30): h323-disconnect-cause=<$LOCAL_DISCONNECT_CAUSE> Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-local-disconnect-cause=<$LOCAL_DISCONNECT_CAUSE> Vendor-Specific(26): Cisco(9): h323-gw-id(33): h323-gw-address=<$SSW_IP> Vendor-Specific(26): Cisco(9): h323-gw-id(33): h323-gw-id=<$SSW_IP> Vendor-Specific(26): Cisco(9): h323-remote-id(1): h323-remote-id=<$OutTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): in-trunkgroup-label=<$InTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): out-trunkgroup-label=<$OutTrunkGroup> Vendor-Specific(26): Cisco(9): h323-remote-id(1): in-iface=<$InIface> Vendor-Specific(26): Cisco(9): h323-remote-id(1): out-iface=<$OutIface>
Таблица 2 — Описание переменных
Переменная | Описание и возможные значения |
---|---|
$CdPN_IN | номер вызываемого абонента до преобразования (принятого из интерфейса) |
$CdPN_OUT | номер вызывающего абонента после преобразования (переданного в интерфейс) |
$CgPN_IN | номер вызывающего абонента до преобразования (принятого из интерфейса) |
$CgPN_OUT | номер вызывающего абонента после преобразования (переданного в интерфейс) |
$LOCAL_DISCONNECT_CAUSE | причина завершения вызова в формате системы ECSS-10, описание значений приведено в следующей таблице |
$DISCONNECT_CAUSE | причина завершения вызова согласно рекомендации Q.850 |
$CALL_TYPE | тип вызова, всегда "Telephony" |
$CALL_ID | идентификатор вызова |
$SSW_IP | IP-адрес интерфейса системы ECSS-10, аутентифицирующего пользователя |
$SSW_PORT | транспортный порт интерфейса системы ECSS-10, аутентифицирующего пользователя |
$ROUTE_RETRIES | текущий номер попытки, отсчёт начинается с 1 (для первой попытки, соответственно) |
$SESSION_ID | идентификатор сессии |
$INTERIM_SESSION_TIME | время разговора к моменту отправки промежуточного сообщения |
$SESSION_TIME | время продолжительности разговора |
$TIME_SETUP | время поступления инициирующего запроса во входящий интерфейс в формате hh:mm:ss.uuu t www MMM dd yyyy |
$TIME_CONNECT | время ответа вызываемой стороны в формате hh:mm:ss.uuu t www MMM dd yyyy |
$TIME_DISCONNECT | время отбоя вызова одной из сторон в формате hh:mm:ss.uuu t www MMM dd yyyy |
$DOMAIN | имя виртуальной АТС |
$Auth | уникальный идентификатор запроса |
$InTrunkGroup | имя входящей транковой группы |
$OutTrunkGroup | имя исходящей транковой группы |
$InIface | имя входящего интерфейса |
$OutIface | имя исходящего интерфейса |
$INTERIM_INTERVAL | интервал времени (в секундах), через который будут посылаться промежуточные Acct-Interim-Update сообщения. Значение должно быть не меньше 60. В случае, если на уровне домена задано свойство interim_interval (domain/DOMAIN_NAME/aaa/accounting/info), то значение $INTERIM_INTERVAL будет вычислено на основе его значения |
$SESSION_TIMEOUT | выделенное время на разговор (в секундах). В случае, если время равно 0 — то вызов запрещен. -1 — вызов не ограничен |
$H323_CREDIT_TIME | выделенное время на разговор (в секундах). В случае, если время равно 0 — то вызов запрещен. -1 — вызов не ограничен. В случае, если данный параметр пришел на Acct-Interim-Update запрос, то это время на оставшуюся часть разговора |
Таблица 3 – Описание внутренних системных причин разъединения, которые могут передаваться в LOCAL_DISCONNECT_CAUSE
Внутренняя причина | Значение причины согласно рекомендации Q.850 | Описание |
---|---|---|
normal | 16 | нормальное разъединение |
originationDenied | 16 | абоненту запрещено совершать вызов, возможно административная блокировка |
authorisationFailure | 50 | ошибка авторизации |
aPtyAbandon | 16 | вызывающий абонент положил трубку до ответа |
invalidCollectedInformation | 1 | номер набран неверно, не найден маршрут |
collectInformationFailure | 1 | ошибка сбора цифр номера, может возникнуть, когда система ожидает дополнительных цифр номера, но они не поступают до истечения таймера |
aPtyDisc | 16 | разъединение по инициативе вызывающего абонента |
bPtyDisc | 16 | разъединение по инициативе вызываемого абонента |
routeSelectFailure | 1 | ошибка установления соединения, обычно возникает, когда все каналы в исходящем интерфейсе заняты либо от интерфейса принята ошибка |
oNoAnswer | 34 | внутренняя ошибка, возникает, когда таймер ожидания ответа в плече вызывающего абонента истек, а со стороны плеча вызываемого абонента не было ни ответа, ни сообщения отбоя |
terminationDenied | 27 | вызов на вызываемого абонента запрещен, например абонент заблокирован |
notReachable | 3 | вызываемый абонент недоступен, например не зарегистрирован или номер не существует |
bPtyNoAnswer | 18 | вызываемый абонент не отвечает |
bPtyBusyUDUB | 17 | отбой по инициативе вызываемого абонента до ответа |
bPtyBusyNDUB | 17 | вызываемый абонент занят |
ss7Failure | 38 | ошибка на сети ОКС7 |
calledPartyRejected | 21 | вызов к вызываемому абоненту запрещен, например анонимный вызов на абонента с активным сервисом ACB |
tException | 41 | ошибка обслуживания вызова, возникает обычно в случае системных проблем |
routeFailure1 | 2 | ошибка маршрутизации к вызываемому абоненту по причине занятости всех каналов в исходящем транке |
routeFailure2 | 2 | ошибка маршрутизации к вызываемому абоненту по причине занятости всех каналов направления на каком-то транзитном участке сети |
conversationTimeout | 31 | возникает, когда истек таймер, ограничивающий общую продолжительность разговора |
systemFailure | 127 | внутренняя неустранимая ошибка, детальное описание ошибки доступно в системном журнале |
Были добавлены RADIUS атрибуты вендора:
- xpgk-original-called-number-in — Оригинальный номер вызываемого абонента до преобразования
- xpgk-redirected-number-in — Номер абонента который совершил переадресацию до преобразования
- xpgk-original-called-number-out — Оригинальный номер вызываемого абонента после преобразования
- xpgk-redirected-number-out — Номер абонента который совершил переадресацию после преобразования
Проигрывание голосового сообщения при отбое RADIUS
Для настройки определенного голосового сообщения нужно в конфигурационном файле /etc/freeradius/users (в случае использования freeradius) указать атрибут Reply-Message. Данный атрибут может принимать следующие значения:
- ecss-routing-cause-isup=<INT>
- ecss-routing-cause-acp=<String>
Пример использования:
1010 Auth-Type := Reject Reply-Message = "ecss-routing-cause-isup=27, ecss-routing-cause-acp=systemFailure" 1111 Auth-Type := Reject Reply-Message = "ecss-routing-cause-isup=30"
Для настройки голосовых сообщений для isup_cause:
domain/test.ats/cfc/set external_isup_causes add 30 system sounds/ai_park_slot_empty.wav
Также можно настроить и для
acp_cause: domain/test.ats/cfc/set system_failure system sounds/ai_notaccess.wav
Для работы функционала нужно использовать существующие acp_cause:
- noCircuitAvailable;
- bPtyBusyUDUB;
- bPtyBusyNDUB;
- routeSelectFailure;
- calledPartyRejected;
- routeFailure1;
- routeFailure2;
- ss7Failure;
- pickupEmpty;
- tooManyHops;
- terminationDenied;
- doNotDisturb;
- unsupportedMedia;
- bPtyNoAnswer;
- systemFailure;
- unassignedNumber;
- tException;