Структура взаимодействия основных частей модуля VoicеIP изображена на рисунке.
(Network Access Server) - сервер, через который происходит звонок клиента. В роли NASа могут выступать специализированные компьютеры типа Cisco, но практически может быть любое оборудование, способное обеспечивать звонки клиентов по IP и использующее аналогичный с Cisco h323 стандарт RADIUS-запросов.
Обрабатываются три типа запросов: авторизационный, старт и стоп.
Базовые сведения о протоколе 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е (
и/или ), на основании которой RADIUS-сервер сопоставляет пришедший пакет NASу в модуле. При сопоставлении сначала производится поиск NASа с названием, идентичным атрибуту пакета, затем, если результат отрицательный, идёт поиск NASа c IP-адресом, равным . Если пришедшему пакету NAS не сопоставлен в , выводится ошибка .Обмен сообщениями с каждым NASом шифруется определённым кодовым словом - секретом. Секрет должен совпадать для NASа в биллинге и для конфигурации самого NASа. При несовпадении секретов проверка пароля будет все время выдавать неверный результат, т.к. секрет используется в шифрации пароля.
Идентификатором соединения в пределах NASа для RADIUS-сервера выступает атрибут
. Обратите внимание, что он идентичен для всех пакетов в пределах сессии. NAS должен контролировать, чтобы в один момент времени одинаковый не проставлялся в RADIUS-пакетах, относящихся к разным сессиям.Далее рассмотрим попакетно обмен данными между NASом и RADIUS-сервером по ходу соединения.
1.
Запрос авторизации отправляется NASом RADIUS-серверу и содержит помимо идентификационной информации соединения, указанной выше, информацию, идентифицирующую пользователя. Возможна идентификация пользователя по номеру звонящего, логину и паролю (запрашивает IVR) или любому другому атрибуту, режим поиска настраивается для типа логина.
При наличии пароль шифруется по алгоритму PAP с использованием секрета. При некорректном секрете пароль в PAP-режиме не расшифровывается и отображается в
и в мониторе ошибок не в том виде, в котором был введён пользователем.Передаётся последовательно два запроса авторизации. Первая авторизация передаётся до набора номера и содержит только идентифицирующую пользователя информацию.
Вторая авторизация высылается в случае успеха первой и содержит набранный номер, атрибут
.2.
Отказ в авторизации, код ошибки авторизации передаётся дополнительно в атрибуте
. Детальную причину отказа в авторизации пользователя можно посмотреть в в режиме ошибок. Код ошибки авторизации указанный в квадратных скобках в мониторе совпадает со значением, передаваемым в атрибуте. Значение атрибута может быть использовано IVR системой для озвучивания причины ошибки.3.
Пользователь авторизован.
Для первой авторизации это означает что он идентифицирован, пароль введён верно (если есть), остаток на балансе положителен, тариф установлен и т.п. В атрибутах передаётся
=0 (нет ошибок) и =<остатку счета>.При второй авторизации это означает, что верны все условия первой авторизации, а кроме того на набранный номер есть цена в тарифе. Дополнительно к атрибутам первой авторизации передаются атрибут
=<на сколько секунд разговора хватает баланса пользователя>. Значение данного атрибута ограничивается сверху значением переменной конфигурации модуля.Дополнительно в
могут передаваться атрибуты, указанные в конфигурации типа логина (см. далее).4.
Модулем обрабатываются запросы аккаунтинга только типа
. Атрибут для них равен 2. Данный тип запросов передаёт на RADIUS-сервер информацию о завершении соединения. Врямя соеденения берется из атрибута .5.
Ответ RADIUS-сервера о том, что он получил запрос аккаунтинга. Ответ не содержит никаких атрибутов.
Возможны схемы работы с учётом только
пакетов, без авторизации. В этом случае RADIUS-сервер не может запретить звонок при отсутствии цены в тарифе и, чтобы не потерять его, помещает его в лог без определённого направления и с нулевой стоимостью.