Настройка динамических абонентов (уровень 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-серверов

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

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

Создание RADIUS сервера через CoCon

Команда создания RADIUS сервера:

/domain/test_domain/aaa/radius/declare <Name> <Host> <Port> <Secret> [<Options>, ...]

где:

  • <Name> : —  Имя RADIUS сервера (the name of the RADIUS server)
  • <Host> : —  Имя хоста или IP адрес сервера (IP or host name of server)
  • <Port> : —   Номер порта (port number) [1—49151] (рекомендованное значение 1812)
  • <Secret> : —  Секретный ключ RADIUS сервера (RADIUS server security key)
  • <Options> : —  Опциональные параметры <OptionName> = <OptionValue>
    • <OptionName> : 
      • retry-count : — кол-во повторных запросов если RADIUS сервер не отвечает (number of repeats when no answer from RADIUS server) (значение по умолчанию 3)
      • retry-timeout : — время через которое будет произведена повторная отправка запроса (timeout for RADIUS server response)  (значение по умолчанию 2000 ms)
      • idle-timeout : —  максимальное время ожидания ответа на запросы. После его истечения, повторные запросы перестанут отправляться. (pause for sending requests to unaccesible RADIUS server) (значение по умолчанию 0)
      • ip-family : —  версия протокола IP (inet family for radius server) (inet or inet6)
    • <OptionValue> : —  значение параметра (the value of the option)

Пример создания RADIUS сервера с именем "free_radius", IP адресом 10.0.20.35, портом 1812, секретным ключом "testing123" :

/domain/test_domain/aaa/radius/declare free_radius 10.0.20.35 1812 testing123              
Radius server "free_radius" successfully declared.

Проверить можно следующей командой:

/domain/test_domain/aaa/radius/info                           
┌───────────┬────────────────────────┬───────────────────┐
│   Name    │       Host:Port        │      Options      │
├───────────┼────────────────────────┼───────────────────┤
│free_radius│10.0.20.35:1812 (access)│secret = testing123│
│           │                        │retry_count = 3    │
│           │                        │retry_timeout = 2s │
│           │                        │idle_timeout = 0ms │
│           │                        │ip_family = inet   │
└───────────┴────────────────────────┴───────────────────┘

Создание RADIUS сервера через веб

Открыть приложение "Домены" , выбрать нужный домен, выбрать "Свойства домена":

В новом окне выбрать "Radius серверы", далее - "Radius серверы", "Добавить", заполнить параметры нового сервера:

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

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

  1. Создать группу динамических абонентов командой:

    /domain/<DOMAIN>/sip/user/dynamic-area/new <NEW AREA NAME> <ROUTING CONTEXT> <GROUP SIZE>

    где:

    • <DOMAIN> — имя домена;
    • <NEW AREA NAME> — имя группы динамических абонентов;
    • <ROUTING CONTEXT> — контекст маршрутизации;
    • <GROUP SIZE> — максимальное количество регистрируемых в данную область sip-пользователей.
  2. Назначить созданной группе список RADIUS-серверов командой:

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

    где:

    • <DOMAIN> — имя домена;

    • <AREA NAME> — имя группы динамических абонентов;

    • <ID1> — имя RADIUS сервера.

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

    /domain/<DOMAIN>/sip/user/dynamic-area/set <AREA NAME> <PARAMETER> <VALUE>

    где:

    • <DOMAIN> — имя домена;

    • <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, поддерживают сервера FreeRadius;
    • group-size — максимальное количество регистрируемых в данную область sip-пользователей;
    • number-modification — имя правила модификации, применяемое по необходимости к номерам, передаваемым на RADIUS-сервер;
    • routing.context — имя контекста маршрутизации;
    • servers — список RADIUS серверов.
  4. Для просмотра информации по группе динамических абонентов используется команда:

    /domain/<DOMAIN>/sip/user/dynamic-area/info [<AREA NAME>]

    где:


    • <DOMAIN> — имя домена;
    • <AREA NAME> — имя группы динамических абонентов.

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

  • Создание группы динамических абонентов с именем "examlpe", размером 10:

    /domain/test_domain/sip/user/dynamic-area/new example default_routing 10              
    Executed on the sip1@ecss2
    ┌────────────┬─────────────────────────┐
    │    Node    │         Result          │
    ├────────────┼─────────────────────────┤
    │ sip1@ecss1 │ ok, pid: <75517.6878.1> │
    │ sip1@ecss2 │ ok, pid: <0.31916.0>    │
    └────────────┴─────────────────────────┘
  • Назначение созданной группе списка RADIUS-серверов, один предварительно созданный, RADIUS-сервер "free_radius"

    /domain/test_domain/sip/user/dynamic-area/set example servers [free_radius ]            
    Executed on the sip1@ecss2
    ┌────────┬──────────┬──────────────────────────────────────────────┐
    │Property│   Node   │                    Result                    │
    ├────────┼──────────┼──────────────────────────────────────────────┤
    │servers │sip1@ecss1│Servers list is changed: [] -> ["free_radius"]│
    │        │sip1@ecss2│Servers list is changed: [] -> ["free_radius"]│
    └────────┴──────────┴──────────────────────────────────────────────┘
  • Добавление дополнительных параметров:

    /domain/test_domain/sip/user/dynamic-area/set example digest-version draft-sterman              
    Executed on the sip1@ecss2
    ┌──────────────┬──────────┬─────────────────────────────────────────────────────────────────────┐
    │   Property   │   Node   │                               Result                                │
    ├──────────────┼──────────┼─────────────────────────────────────────────────────────────────────┤
    │digest-version│sip1@ecss1│radius version using is changed: full/draft: true/false -> false/true│
    │              │sip1@ecss2│radius version using is changed: full/draft: true/false -> false/true│
    └──────────────┴──────────┴─────────────────────────────────────────────────────────────────────┘
  • Результат выполнения команды просмотра информации:

    /domain/test_domain/sip/user/dynamic-area/info example      
    Executed on the sip1@ecss2
    ┌───────────────────────────┬───────────────────────────────────────────┐
    │ Dynamic area (SIP domain) │                Parameters                 │
    ├───────────────────────────┼───────────────────────────────────────────┤
    │ example                   │ current size/limit        0/10            │
    │                           │ servers:                                  │
    │                           │   free_radius             ok              │
    │                           │ draft sterman             true            │
    │                           │ number modification rule  undefined       │
    │                           │ full digest               false           │
    │                           │ routing context           default_routing │
    │                           │ cisco vsa for all         false           │
    └───────────────────────────┴───────────────────────────────────────────┘

    В данной таблице в столбце "Current size/limit" указывается текущее количество зарегистрированных/созданных динамических абонентов.

Пример конфигурации на RADIUS-сервере (в примере freeradius) для проверки работоспособности

добавить в конце файла /etc/freeradius/3.0/clients.conf следующие строки (наш ssw имеет IP адреса 10.0.20.31/10.20.32):

client ecss1 {
ipaddr = 10.0.20.31
secret = testing123
}

client ecss2 {
ipaddr = 10.0.20.32
secret = testing123
}

добавить в конце файла /etc/freeradius/3.0/users следующую строчку (наш абонент будет иметь номер 42100/ пароль 42100):

42100   Cleartext-Password := "42100"

В ssw абонента не создаем,

Прописываем только конфигурацию в ТА (для примера VP 15)

выполняем регистрацию с ТА:

Видим что регистрация прошла успешно, при этом был выполнен запрос на Radius сервер с IP адресом 10.0.20.35

Проверим информацию о группе абонентов в CoCon, видим что в настоящий момент один из 10 абонентов подключен (зарегистрирован) к SSW:

/domain/test_domain/sip/user/dynamic-area/info example 
Executed on the sip1@ecss2
┌───────────────────────────┬───────────────────────────────────────────┐
│ Dynamic area (SIP domain) │                Parameters                 │
├───────────────────────────┼───────────────────────────────────────────┤
│ example                   │ current size/limit        1/10            │
│                           │ servers:                                  │
│                           │   free_radius             ok              │
│                           │ draft sterman             true            │
│                           │ number modification rule  undefined       │
│                           │ full digest               false           │
│                           │ routing context           default_routing │
│                           │ cisco vsa for all         false           │
└───────────────────────────┴───────────────────────────────────────────┘

После успешной регистрации мы видим абонента 42100 в списке абонентов SSW, абонент регистрируется как динамический, группы example:

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

Абонент 42100 делает тестовый звонок sip абоненту 42001 принадлежащему домену test_domain:

Видим успешный звонок , продолжительность разговора 4.5 сек.

Возможные проблемы при конфигурации

  • при создании группы не правильно указано "максимальное количество регистрируемых в данную область sip-пользователей" group-size=1. Один абонент сможет зарегистрировался, а у второго будет ошибка, при этом запрос в сторону RADIUS сервера не будет отправлен. Ограничение размера группы проверяется на SSW:

  • при конфигурации ТА в поле SIP домен указали реальный домен (имя вАТС) а не имя группы, регистрация будет не успешной , абонент создан не в домене, а в группе динамических абонентов:

Параметры передающиеся на 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 user (Биллинговый номер если есть или REGISTER:CdPN, INVITE:CgPN)
VendorCisco + VendorSpecific + H323_conf_idидентификатор в формате: <<0x11, CallRef:24, 0x7C, StartTime:32>>
VendorCisco + VendorSpecific + H323_gw_idлокальный адрес SIP адаптера, на который получен запрос
  • Нет меток