Базовые понятия и алгоритм работы модуля VoiceIP

Структура взаимодействия основных частей модуля VoicеIP изображена на рисунке.

images/download/attachments/43386271/voip_img2-1.gif

NAS (Network Access Server) - сервер, через который происходит звонок клиента. В роли NASа могут выступать специализированные компьютеры типа Cisco, но практически может быть любое оборудование, способное обеспечивать звонки клиентов по IP и использующее аналогичный с Cisco h323 стандарт RADIUS-запросов.

Обрабатываются 3 типа запросов: авторизационный, старт и стоп.

Базовые сведения о протоколе RADIUS и конфигурировании атрибутов.

Протокол RADIUS основан на UDP, представляет из себя пакет определённого типа с набором атрибутов. Рассмотрим ход типового соединения по логу RADIUS запросов (radius.log).

В данном случае обмен запросами идёт между RADIUS-сервером и IVR-платформой, запрашивающей данные пользователя и проводящей авторизацию по телефону пользователя.

Код
01 13:13:21
Type=AUTHENTICATION_REQUEST
Attributes:
User-Password=
NAS-IP-Address=81.30.199.58
Service-Type=1
Calling-Station-Id=3472558528
cisco-avpair=h323-ivr-out\u61transactionID:69732
h323-conf-id=585DAE20 CFD411DC 9F39C1A6 BC2D9958
 
01 13:13:21
Type=AUTHENTICATION_ACCEPT
Process time:10
Attributes:
h323-credit-amount=99540.38
h323-return-code=0
 
01 13:13:26
Type=AUTHENTICATION_REQUEST
Attributes:
User-Password=
NAS-IP-Address=81.30.199.58
Service-Type=1
Calling-Station-Id=3472558528
Called-Station-Id=6767#79174444339
cisco-avpair=h323-ivr-out\u61transactionID:69732
h323-conf-id=585DAE20 CFD411DC 9F39C1A6 BC2D9958
 
01 13:13:26
Type=AUTHENTICATION_ACCEPT
Process time:10
Attributes:
h323-credit-amount=99540.38
h323-credit-time=7200
h323-return-code=0
 
01 13:14:36
Type=ACCOUNTING_REQUEST
Attributes:
User-Name=3472558528
NAS-IP-Address=81.30.199.58
Service-Type=1
Acct-Input-Octets=54043
Acct-Output-Octets=33311
Acct-Status-Type=2
Acct-Delay-Time=0
Acct-Session-Time=57
Acct-Input-Packets=1370
Acct-Session-Id=00033F15
Acct-Authentic=1
Acct-Output-Packets=1136
Calling-Station-Id=3472558528
Called-Station-Id=6767#79174444339
h323-gw-id=pool3.ufanet.ru
h323-voice-quality=31
h323-remote-address=81.30.206.222
h323-disconnect-cause=10
h323-connect-time=13:13:39.562 ESS Fri Feb 1 2008
h323-disconnect-time=13:14:36.387 ESS Fri Feb 1 2008
cisco-avpair=h323-incoming-conf-id\u61585DAE20 CFD411DC 9F39C1A6 BC2D9958
cisco-avpair=subscriber\u61RegularLine
cisco-avpair=session-protocol\u61cisco
cisco-avpair=gw-rxd-cdn\u61ton:4,npi:1,#:2900222
cisco-avpair=release-source\u614
cisco-avpair=remote-media-address\u6181.30.199.118
cisco-avpair=in-trunkgroup-label\u61TG1
cisco-avpair=gw-rxd-cgn\u61ton:2,npi:1,pi:0,si:3,#:3472558528
cisco-avpair=gw-final-xlated-cdn\u61ton:4,npi:1,#:6767#79174444339
cisco-avpair=gw-final-xlated-cgn\u61ton:2,npi:1,pi:0,si:3,#:3472558528
h323-conf-id=585DAE20 CFD411DC 9F39C1A6 BC2D9958
h323-setup-time=13:13:26.192 ESS Fri Feb 1 2008
h323-call-origin=originate
h323-call-type=VoIP

Каждый пакет содержит информацию о NASе (NAS-Identifier и/или NAS-IP-Address), на основании которой RADIUS-сервер сопоставляет пришедший пакет NASу в модуле. При сопоставлении сначала производится поиск NASа с названием, идентичным атрибуту NAS-Identifier пакета, затем, если результат отрицательный, идёт поиск NASа c IP-адресом, равным NAS-IP-Address. Если пришедшему пакету NAS не сопоставлен в radius.log, выводится ошибка NAS not found for Packet!!!.

Обмен сообщениями с каждым NASом шифруется определённым кодовым словом - секретом. Секрет должен совпадать для NASа в биллинге и для конфигурации самого NASа. При несовпадении секретов проверка пароля будет все время выдавать неверный результат, т.к. секрет используется в шифрации пароля.

Идентификатором соединения в пределах NASа для RADIUS-сервера выступает атрибут h323-conf-id. Обратите внимание, что он идентичен для всех пакетов в пределах сессии. NAS должен контролировать, чтобы в один момент времени одинаковый h323-conf-id не проставлялся в RADIUS-пакетах, относящихся к разным сессиям.

Далее рассмотрим попакетно обмен данными между NASом и RADIUS-сервером по ходу соединения.

1. AUTHENTICATION_REQUEST

Запрос авторизации отправляется NASом RADIUS-серверу и содержит помимо идентификационной информации соединения, указанной выше, информацию, идентифицирующую пользователя. Возможна идентификация пользователя по номеру звонящего, логину и паролю (запрашивает IVR) или любому другому атрибуту, режим поиска настраивается для типа логина.

При наличии пароль шифруется по алгоритму PAP с использованием секрета. При некорректном секрете пароль в PAP-режиме не расшифровывается и отображается в radius.log и в мониторе ошибок не в том виде, в котором был введён пользователем.

Передаётся последовательно два запроса авторизации. Первая авторизация передаётся до набора номера и содержит только идентифицирующую пользователя информацию.

Вторая авторизация высылается в случае успеха первой и содержит набранный номер, атрибут Called-Station-Id.

2. AUTHENTICATION_REJECT

Отказ в авторизации, код ошибки авторизации передаётся дополнительно в атрибуте h323-return-code. Детальную причину отказа в авторизации пользователя можно посмотреть в Мониторе модуля в режиме ошибок. Код ошибки авторизации указанный в квадратных скобках в мониторе совпадает со значением, передаваемым в атрибуте. Значение атрибута может быть использовано IVR системой для озвучивания причины ошибки.

3. AUTHENTICATION_ACCEPT

Пользователь авторизован.

Для первой авторизации это означает что он идентифицирован, пароль введён верно (если есть), остаток на балансе положителен, тариф установлен и т.п. В атрибутах передаётся h323-return-code=0 (нет ошибок) и h323-credit-amount=<остатку счета>.

При второй авторизации это означает, что верны все условия первой авторизации, а кроме того на набранный номер есть цена в тарифе. Дополнительно к атрибутам первой авторизации передаются атрибут h323-credit-time=<на сколько секунд разговора хватает баланса пользователя>. Значение данного атрибута ограничивается сверху значением переменной voip.max.time конфигурации модуля.

Дополнительно в AUTHENTICATION_ACCEPT могут передаваться атрибуты, указанные в конфигурации типа логина (см. далее).

4. ACCOUNTING_REQUEST

Модулем обрабатываются запросы аккаунтинга только типа Stop. Атрибут Acct-Status-Type для них равен 2. Данный тип запросов передаёт на RADIUS-сервер информацию о завершении соединения. Врямя соеденения берется из атрибута Acct-Session-Time.

5. ACCOUNTING_RESPONSE

Ответ RADIUS-сервера о том, что он получил запрос аккаунтинга. Ответ не содержит никаких атрибутов.

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