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

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

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

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

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

  1. Задание параметров подключения в RADIUS серверу(ам)
    Детально команды по управлению RADIUS серверами описаны в пункте Команды настройки параметров соединения с RADIUS-сервером.
  2. Конфигурирование подсистемы Authorization (access запросы)
    Детально команды по управлению службой Authorization описаны в пункте Команды управления службой RADIUS AAA (Authorization).
  3. Конфигурирование подсистемы 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 — спецслужбы.

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

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

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

Для настройки локального адреса 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).

Порядок настройки динамических абонентов:

  1. Добавить в систему информацию о RADIUS-серверах.
  2. Создать группы с определенным количеством динамических абонентов.
  3. Назначить группе абонентов список RADIUS-серверов, с которыми они будут взаимодействовать, и настроить параметры группы.

Добавление RADIUS-серверов

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

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

Настройка группы динамических абонентов

Порядок настройки группы динамических абонентов:

  1. Создать группу динамических абонентов командой:
    /domain/<DOMAIN>/sip/user/dynamic-area/new <NEW AREA NAME> <ROUTING CONTEXT> <GROUP SIZE>
  2. Назначить созданной группе список RADIUS-серверов командой:

    /domain/<DOMAIN>/sip/user/dynamic-area/set <AREA NAME> servers [<ID1>, ...]


  3. Настройка остальных параметров:

    /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 серверов.
  4. Для просмотра информации по группе динамических абонентов используется команда:

    /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 сервер

AccessRequestID пакета: 0x01..0xFF
CalledStationIdCdPN (поле user из заголовка To)
CallingStationIdCgPN (поле 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
SipAorURI в формате: sip:UserName@SipDomain. UserName.
NasIpAddressлокальный адрес SIP адаптера, с которого идет запрос на сервер
NasPortлокальный порт SIP адаптера, с которого идет запрос на сервер
NasPortType0 — асинхронный запрос
ServiceType1 — Login
FramedProtocol2 — SLIP
UserNameSIP юзер (Биллинговый номер если есть или 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:

  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 атрибуты вендора:

  • 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;