Формат пакетов 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>
Таблица 1 - Описание переменных
Переменная | Описание и возможные значения |
---|---|
$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 запрос, то это время на оставшуюся часть разговора |
Таблица 2 – Описание внутренних системных причин разъединения, которые могут передаваться в 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 - Номер абонента который совершил переадресацию после преобразования