В текущем разделе описывается настройка взаимодействия системы со службой RADIUS AAA (Authentication Authorization Accounting). Данные настройки осуществляются через командную консоль CLI.

Понятия, определения

В системе поддерживаются четыре независимых режима работы с сервером RADIUS:

  1. Работа с сервером авторизации. Данный режим реализован для аутентификации и авторизации динамических абонентов, все аутентификационные данные в этом случае хранятся на RADIUS-сервере.
  2. Работа с сервером учета стоимости. В этом случае для всех вызовов, совершенных через виртуальную АТС, будут отправляться запросы аккаунтинга (accounting-request) на RADIUS-сервер;
  3. Внешняя маршрутизация посредством RADIUS-сервера.
  4. Работа с сервером Antifraud.

Подсистема AAA (Authentication, Authorization, Accounting)

Подсистема AAA позволяет проверять права на совершение вызовов абонентом, слежение за потреблением ресурсов абонентом.

Этапы работы подсистемы ААА

Подсистема AAA подключается при обработке вызова на нижеперечисленных этапах (каждым из этапом может отсутствовать)

RADIUS-маршрутизация

На этапе маршрутизации вызова в правиле контексте маршрутизации можно указать, что необходимо выполнить внешнюю RADIUS-маршрутизацию.

В этом случае на RADIUS сервер посылаются следующие параметры:

В ответ 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 состоит из трех этапов:

  1. Задание параметров подключения в RADIUS серверу(ам)
    Детально команды по управлению RADIUS серверами описаны в пункте Команды настройки параметров соединения с RADIUS-сервером.
  2. Конфигурирование подсистемы Authorization (access запросы)
    Детально команды по управлению службой Authorization описаны в пункте Команды управления службой RADIUS AAA (Authorization).
  3. Конфигурирование подсистемы Accounting (accounting запросы)
    Детально команды по управлению службой Accounting описаны Команды управления службой RADIUS AAA (Accounting).

Пример команд CoCon-а по конфигурированию подсистемы AAA

% Создаем access сервер
/domain/test.domain/aaa/radius/declare billing_access 192.168.23.250 access secret123 retry-count = 3, retry-timeout = 250ms
Radius server "billing_access" successfully declared.

% Создаем accounting сервер
/domain/test.domain/aaa/radius/declare billing_account 192.168.23.250 account secret123 retry-count = 3, retry-timeout = 250ms
Radius server "billing_account" successfully declared.

/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-сервера
/domain/test.domain/aaa/access/set servers add billing_account
Property "servers" successfully changed from:

   to
1: billing_account.

% выставляем RADIUS сервер billing_account в качестве accounting-сервера
/domain/test.domain/aaa/accounting/set servers add billing_account
Property "servers" successfully changed from:

   to
1: billing_account.

% включаем подсистему access
/domain/test.domain/aaa/access/set enable true
Property "enable" successfully changed from:
false
   to
true.

% включаем подсистему accounting
/domain/test.domain/aaa/accounting/set enable true
Property "enable" successfully changed from:
false
   to
true.

После этого при вызовах будут идти запросы на систему AAA.

Работа с сервером авторизации

Если нужно авторизовать все совершаемые через виртуальную АТС вызовы, то настраивается взаимодействие с RADIUS-сервером авторизации.

Настройка локального адреса

Для настройки локального адреса RADIUS-клиента используется команда:

/domain/<DOMAIN>/aaa/access/set my_address <ADDRESS>

где

Настройка серверов авторизации

RAIDUS сервера создаются для каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме аккаунтинга.

Команды по настройки RADIUS серверов детально описаны в секции Команды настройки параметров соединения c RADIUS-сервером

Далее нужно назначить RADIUS сервера для авторизации командой:

/domain/<DOMAIN>/aaa/access/set servers add <ID>

где

Затем назначить имя пользователя и пароль, с которыми будут авторизоваться все вызовы данной виртуальной АТС:

/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│
└──────────┴──────────┴───────────────┘

где

Работа с сервером аккаунтинга

Если нужно тарифицировать все совершаемые через виртуальную АТС вызовы, то настраивается взаимодействие с RADIUS-сервером аккаунтинга.

Система ESCC-10 в рамках виртуальной АТС поддерживает взаимодействие с несколькими серверами аккаунтинга. Если в течение определенного времени система не получает ответа от сервера, то выполняется повторная попытка отправки запроса на сервер. По истечении заданного числа попыток сервер считается неактивным. Запрос перенаправляется на другой сервер, если он указан, иначе детектируется сбой сервера.

При сбое сервера возможно установление ограничений на исходящую связь:

Данное ограничение определяет возможность маршрутизации вызова на определенные интерфейсы системы, в настройках которых устанавливается соответствующее значение параметра признака номера.
NumberIndicator — признак номера, принимает значения:

Порядок настройки:

  1. Настроить локальный адрес, на котором будет работать RADIUS-клиент.
  2. Настроить сервера аккаунтинга.
  3. При необходимости настроить индикаторы сети на интерфейсах системы.

Настройка локального адреса

Для настройки локального адреса RADIUS-клиента используется команда: 

/domain/<DOMAIN>/aaa/accounting/set my_address <ADDRESS>

где

Настройка серверов аккаунтинга

RAIDUS сервера создаются для каждой виртуальной АТС отдельно, и затем могут быть использованы в подсистеме аккаунтинга.

Команды по настройки RADIUS серверов детально описаны в секции Команды настройки параметров соединения c RADIUS-сервером.

Далее нужно назначить RADIUS-сервер для версии аккаунтинга командой:

/domain/<DOMAIN>/aaa/accounting/set servers add <ID>

где

При использовании нескольких серверов, если есть необходимость, настраивается тайм-аут ожидания ответа сервера и количество попыток отправки запроса на сервер.

Сервер аккаунтинга может быть территориально удаленно расположен. При взаимодействии с таким сервером могут возникнуть сбои при доставке запросов/ответов по сети передачи данных, например, сервер может быть временно недоступен из-за отсутствия электропитания на объекте. Для случаев, когда детектируется сбой сервера и тарификация вызовов временно невозможна, можно установить ограничения на исходящую связь командой: 

/domain/<DOMAIN>/aaa/general/set if_radius_unavaliable [NI1] ... [NI6]

где

Для настройки передачи на сервер аккаунтинга информации о "неуспешных" вызовах используется команда:

/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>

где

Для запуска 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>/alias/set-for-iface <GROUP_NAME> <INTERFACE> ni <VALUE>

Для настройки индикаторов сети профиля домена алиаса необходимо выполнить следующую команду:

/domain/<DOMAIN>/alias/set-for-domain ni <VALUE>

где

Настройка работы с RADIUS c помощью web-конфигуратора

Работа с RADIUS настраивается также через расширенный web-конфигуратор в приложении Домены (Domains) → Свойства домена → RADIUS серверы

RADIUS серверы

где:

RADIUS общие

где:

RADIUS авторизация

где:

RADIUS аккаунтинг

где:

RADIUS antifraud

где:

login  - начиная с версии 3.14.16 sip/billing/cgpn не будет доступен к выбору. Будут поддерживаться два значения default/или любая другая строка.
password - начиная с версии 3.14.16 sip/billing не будет доступен к выбору. Будут поддерживаться два значения default/или любая другая строка.

Формат пакетов RADIUS

Описание каждого пакета состоит из описания всех пар Атрибут-Значение (Attribute-Value Pair) для этого типа пакета. Атрибуты могут быть как стандартными, так и специфичными атрибутами вендоров (Vendor-Specific Attribute). Если по какой-то причине значение атрибута неизвестно (например, при отсутствии исходящего транка невозможно определить значение переменной CdPN_OUT, которое используется в качестве значения некоторых атрибутов), то этот атрибут не добавляется в сообщение.
Для стандартных атрибутов описание имеет вид:

Имя атрибута (Номер атрибута): Значение атрибута

Для атрибутов вендоров вид:

Имя атрибута (Номер атрибута): Имя вендора (Номер вендора): Имя VSA (Номер VSA): Значение VSA

Где:

В качестве значения атрибута может использоваться конструкция вида <$NAME>, где NAME – это имя переменной. Описание значения переменных приводится в  таблице1 Описании переменных.

Пакет Аccess-Request


User-Name(1): <$USER_NAME>
User-Password(2): строится на основе пароля "eltex" (без кавычек)
NAS-IP-Address(4): <$SSW_IP>
Called-Station-Id(30): <$CdPN_IN>
Calling-Station-Id(31): <$CgPN_IN>
Acct-Session-Id(44): <$SESSION_ID>
NAS-Port(5): <$NAS_PORT>
NAS-Port-Type(61): Virtual(5)
Service-Type(6): Call-Check(10)
Framed-IP-Address: <$USER_IP>

Стартовый пакет Accounting-Request


Acct-Status-Type(40) – Start(1)
User-Name(1): <$USER_NAME>
Called-Station-Id(30): <$CdPN>
Calling-Station-Id(31): <$CgPN_IN>
Acct-Delay-Time(41): согласно RFC2866
Event-Timestamp(55): согласно RFC2869
NAS-IP-Address(4): <$SSW_IP>
Acct-Session-Id(44): <$SESSION_ID>
Framed-IP-Address: <$USER_IP>
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-remote-id=<$DST_ID>Vendor-Specific(26): Cisco(9):
Cisco-AVPair(1): h323-call-id=<$CALL_ID>
Vendor-Specific(26): Cisco(9): h323-remote-address(23): h323-remote-address=<$DST_IP>
Vendor-Specific(26): Cisco(9): h323-conf-id(24): h323-conf-id=<$CALL_ID>
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-id=<$SSW_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Incoming-SIP-call-id(2): <$inc_SIP_call_ID>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Outgoing-SIP-call-id(3): <$out_SIP_call_ID>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Incoming-RTP-local-address(4): <$inc_RTP_loc_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Incoming-RTP-remote-address(5): <$inc_RTP_rem_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Outgoing-RTP-local-address(6): <$out_RTP_loc_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Outgoing-RTP-remote-address(7): <$out_RTP_rem_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): call-record-file=<$call_record_file_name>

Стоповый пакет Accounting-Request

Acct-Status-Type(40) – Stop(2)
User-Name(1): <$USER_NAME>
Called-Station-Id(30): <$CdPN>
Calling-Station-Id(31): <$CgPN_IN>
Acct-Delay-Time(41): согласно RFC2866
Event-Timestamp(55): согласно RFC2869
NAS-IP-Address(4): <$SSW_IP>
Acct-Session-Id(44): <$SESSION_ID>
Acct-Session-Time(46): <$SESSION_TIME>
Framed-IP-Address: <$USER_IP>
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-remote-id=<$DST_ID
Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): h323-call-id=<$CALL_ID>
Vendor-Specific(26): Cisco(9): Cisco-AVPair(30): h323-disconnect-cause=<$DISCONNECT_CAUSE>
Vendor-Specific(26): Cisco(9): Cisco-AVPair(1): xpgk-local-disconnect-
cause=<$LOCAL_DISCONNECT_CAUSE>
Vendor-Specific(26): Cisco(9): h323-remote-address(23): h323-remote-address=<$DST_IP
Vendor-Specific(26): Cisco(9): h323-conf-id(24): h323-conf-id=<$CALL_ID>
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-gw-id(33): h323-gw-id=<$SSW_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Incoming-SIP-call-id(2): <$inc_SIP_call_ID>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Outgoing-SIP-call-id(3): <$out_SIP_call_ID>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Incoming-RTP-local-address(4): <$inc_RTP_loc_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Incoming-RTP-remote-address(5): <$inc_RTP_rem_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Outgoing-RTP-local-address(6): <$out_RTP_loc_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): Outgoing-RTP-remote-address(7): <$out_RTP_rem_IP>
Vendor-Specific(26): Eltex Enterprise, Ltd.(35265): call-record-file=<$call_record_file_name>

Пакет Access-Accept

При получении пакета Access-Accept от сервера RADIUS вызов считается авторизованным. После чего осуществляется поиск исходящего транка, и в случае успеха, производится попытка установления соединения. Если в пакете был передан атрибут Session-Time(27) или атрибут Cisco VSA(9) h323-credit-time(102), а также была задана соответствующая настройка в профиле RADIUS, то значение атрибута будет использовано для ограничения максимальной продолжительности вызова. По истечении этого времени соединение будет разорвано.

Описание переменных

таблица 1

ПеременнаяОписание и возможные значения
$CALL_TYPEопределяется на основании того, к какой среде передачи принадлежит исходящий транк:
• "Telephony", если исходящий транк – PSTN (TDM);
• "VoIP", если исходящий транк – VoIP
$CdPNопределяется исходя из настроек:
• $CdPN = $CdPN_IN [по умолчанию];
• $CdPN = $CdPN_OUT
$CdPN_INномер вызываемого абонента до преобразования (полученного в SETUP/INVITE)
$CdPN_OUTномер вызываемого абонента после преобразования (отправленного вызываемой стороне в SETUP/INVITE)
$CgPN_INномер вызывающего абонента до преобразования (полученного в SETUP/INVITE)
$CgPN_OUTномер вызывающего абонента после преобразования (отправленного вызываемой стороне в SETUP/INVITE)
$DISCONNECT_CAUSEQ.850 причина завершения вызова
$DST_IDназвание исходящего транка для данного вызова
$DST_IP (string)IP-адрес терминирующего устройства в случае, если исходящий транк VoIP; (для примера: 192.168.0.1)
$USER_IPIP-адрес устройства, инициировавшего вызов, если входящий транк VoIP или SIP-абонент
$LOCAL_DISCONNECT_CAUSEлокальная причина завершения вызова; значения:
  1. соединение с вызываемым абонентом было установлено (User-Answer);
  2. неверный или неполный формат номера (Incomplete-Number);
  3. номер не существует (Unassigned-Number);
  4. неуспешная попытка установления соединения, причина не определена (Unsuccesfull-Other-Cause);
  5. вызываемый абонент занят (User-Busy);
  6. неисправность оборудования (Out-of-Order);
  7. нет ответа от вызываемого абонента (No-Answer);
  8. исходящий транк недоступен (Unavailable-Trunk);
  9. получен отказ в авторизации от сервера RADIUS (Access-Denied);
  10. нет свободного канала для установления соединения (Unavailable-Voice-Channel);
  11. сервер RADIUS недоступен (RADIUS-Server-Unavailable)
$NAS_PORT(xport.type<<24) + (xport.slot<<16) + (xport.stream<<8) + (xport.cell)
$ROUTE_RETRIESтекущей номер попытки; отчёт начинается с 1 (для первой попытки, соответственно)
$SESSION_IDидентификатор сессии
$SESSION_TIMEвремя продолжительности разговора
$SSW_IPIP-адрес SSW
$SRC_IDназвание входящего транка для данного вызова
$TIME_SETUPвремя прихода сообщения SETUP/INVITE в формате hh:mm:ss.uuu t www MMM dd yyyy
$TIME_CONNECTвремя получения CONNECT/200 OK от вызываемой стороны в формате hh:mm:ss.uuu t www MMM dd yyyy
$TIME_DISCONNECTвремя получения DISCONNECT/BYE от одной из сторон в формате hh:mm:ss.uuu t www MMM dd yyyy; если звонок неуспешный, то указывается время сообщения, при получении которого SSW начинает процедуру разрушения вызова (CANCEL, прочие)
$USER_NAMEопределяется исходя из настроек входящего транка:
• <$CgPN_IN>;
• IP-адрес источника или номер потока E1 [по умолчанию];
• имя входящего транка
<$inc_SIP_call_ID>значение поля Call-ID сообщений SIP входящего плеча соединения
<$out_SIP_call_ID>значение поля Call-ID сообщений SIP входящего плеча соединения
<$inc_RTP_loc_IP>локальный IP-адрес устройства для установления RTP-сессии входящего плеча соединения
<$inc_RTP_rem_IP>удаленный IP-адрес взаимодействующего устройства для установления RTP-сессии входящего плеча соединения
<$out_RTP_loc_IP>локальный IP-адрес устройства для установления RTP-сессии исходящего плеча соединения
<$out_RTP_rem_IP>удаленный IP-адрес взаимодействующего устройства для установления RTP-сессии исходящего плеча соединения
<$call_record_file_name>имя файла записи разговора. (например: call_records/2016-12-13-0000/2016-12-13_12-41-45_20000-10000.wav)


Формат пакетов RADIUS и значение атрибутов CISCO VSA


  • RADIUS (Remote Authorization Dial-In User Service) — протокол безопасности, который предоставляет централизованный метод аутентификации пользователей путем обращения к внешнему серверу. Протокол RADIUS используется для аутентификации, авторизации и учета. Сервер RADIUS использует базу данных пользователей, которая содержит данные проверки подлинности для каждого пользователя. Таким образом, использование протокола RADIUS обеспечивает дополнительную защиту при доступе к ресурсам сети.

В системе поддержаны два независимых режима работы с сервером RADIUS:

  1. Работа с сервером авторизации. Данный режим реализован для аутентификации и авторизации динамических абонентов, все аутентификационные данные в этом случае хранятся на RADIUS-сервере. Используется пакет Аccess-Request.
  2. Работа с сервером учета (аккаунтинга). В этом случае для всех вызовов, совершенных через виртуальную АТС, будут отправляться запросы аккаунтинга (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>
Vendor-Specific(26): Eltex Enterprise(35265): Eltex-AVPair(1): calling-id=<$CallingId>

В ответ на данное сообщение ожидается сообщение 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>
Vendor-Specific(26): Eltex Enterprise(35265): Eltex-AVPair(1): calling-id=<$CallingId>

В ответ на данное сообщение ожидается сообщение 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>
Vendor-Specific(26): Eltex Enterprise(35265): Eltex-AVPair(1): calling-id=<$CallingId>

Таблица 2 — Описание переменных

ПеременнаяОписание и возможные значения
$CdPN_INномер вызываемого абонента до преобразования (принятого из интерфейса)
$CdPN_OUTномер вызывающего абонента после преобразования (переданного в интерфейс)
$CgPN_INномер вызывающего абонента до преобразования (принятого из интерфейса)
$CgPN_OUTномер вызывающего абонента после преобразования (переданного в интерфейс)
$LOCAL_DISCONNECT_CAUSEпричина завершения вызова в формате системы ECSS-10, описание значений приведено в следующей таблице
$DISCONNECT_CAUSEпричина завершения вызова согласно рекомендации Q.850
$CALL_TYPEтип вызова, всегда "Telephony"
$CALL_IDидентификатор вызова
$SSW_IPIP-адрес интерфейса системы ECSS-10, аутентифицирующего пользователя
$SSW_PORTтранспортный порт интерфейса системы ECSS-10, аутентифицирующего пользователя
$ROUTE_RETRIESтекущий номер попытки, отсчёт начинается с 1 (для первой попытки, соответственно)
$SESSION_IDидентификатор сессии(CallRef вызова в системе)
$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 запрос, то это время на оставшуюся часть разговора
$CallingIdID вызова(CallId вызова в системе)

Таблица 3 – Описание внутренних системных причин разъединения, которые могут передаваться в LOCAL_DISCONNECT_CAUSE

Внутренняя причинаЗначение причины согласно рекомендации Q.850Описание
normal16нормальное разъединение
originationDenied16абоненту запрещено совершать вызов, возможно административная блокировка
authorisationFailure50ошибка авторизации
aPtyAbandon16вызывающий абонент положил трубку до ответа
invalidCollectedInformation1номер набран неверно, не найден маршрут
collectInformationFailure1ошибка сбора цифр номера, может возникнуть, когда система ожидает дополнительных цифр номера, но они не поступают до истечения таймера
aPtyDisc16разъединение по инициативе вызывающего абонента
bPtyDisc16разъединение по инициативе вызываемого абонента
routeSelectFailure1ошибка установления соединения, обычно возникает, когда все каналы в исходящем интерфейсе заняты либо от интерфейса принята ошибка
oNoAnswer34внутренняя ошибка, возникает, когда таймер ожидания ответа в плече вызывающего абонента истек, а со стороны плеча вызываемого абонента не было ни ответа, ни сообщения отбоя
terminationDenied27вызов на вызываемого абонента запрещен, например абонент заблокирован
notReachable3вызываемый абонент недоступен, например не зарегистрирован или номер не существует
bPtyNoAnswer18вызываемый абонент не отвечает
bPtyBusyUDUB17отбой по инициативе вызываемого абонента до ответа
bPtyBusyNDUB17вызываемый абонент занят
ss7Failure38ошибка на сети ОКС7
calledPartyRejected21вызов к вызываемому абоненту запрещен, например анонимный вызов на абонента с активным сервисом ACB
tException41ошибка обслуживания вызова, возникает обычно в случае системных проблем
routeFailure12ошибка маршрутизации к вызываемому абоненту по причине занятости всех каналов в исходящем транке
routeFailure22ошибка маршрутизации к вызываемому абоненту по причине занятости всех каналов направления на каком-то транзитном участке сети
conversationTimeout31возникает, когда истек таймер, ограничивающий общую продолжительность разговора
systemFailure127внутренняя неустранимая ошибка, детальное описание ошибки доступно в системном журнале


Были добавлены RADIUS атрибуты вендора:

Проигрывание голосового сообщения при отбое RADIUS

 Для настройки определенного голосового сообщения нужно в конфигурационном файле /etc/freeradius/users (в случае использования freeradius) указать атрибут Reply-Message. Данный атрибут может принимать следующие значения:

Пример использования:

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: