Протоколирование CDR на сервер RADIUS


Настройка сервера Asterisk для отправки CDRs записей на сервер (Free)RADIUS.


Что для этого нужно:

  • Сервер FreeRADIUS
  • Клиентская библиотека Radiusclient-ng
  • собственно сам Asterisk PBX

Клиентская библиотека Radiusclient


Инсталляция

Получаем исходники с сайта:

http://developer.berlios.de/projects/radiusclient-ng/

распаковываем архив.
root@localhost:/usr/local/src# tar xvfz radiusclient-ng-0.5.2.tar.gz


Компилируем и устанавливаем библиотеку.
root@localhost:/usr/local/src# cd radiusclient-ng-0.5.2
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# ./configure
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make
root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make install


Или устанавливаем из портов в случае *BSD.


Конфигурация


По умолчанию, все конфигурационные файлы библиотеки radiusclient находятся в директории: /usr/local/etc/radiusclient-ng .

Редактируем файл "radiusclient.conf"

Откроем файл и ищем строки содержащие следующее:

authserver localhost

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

acctserver localhost

Этот параметр определяет имя или IP адрес сервера RADIUS, который будет использоваться для учета ресурсов (accounting). Вы можете оставить это значение как есть или изменить его, если RADIUS сервер запущен на другой машине.


Файл "servers"
Протокол RADIUS использует простой механизм проверки доступа, базирующийся на значении поля "secrets", на основании которого сервер RADIUS ограничивает доступ RADIUS клиентов.

Для каждого сервера RADIUS задано значение параметра "secret" и только те RADIUS клиенты, которые имеют такое же значение этого параметра, получат доступ к серверу.

Вам необходимо указать значение параметра "secret" для каждого из сервера, который вы сконфигурировали в предыдущем файле radiusclient.conf. Значения клиентского параметра "secret" указывается в файле /usr/local/etc/radiusclient-ng/servers.

Каждая строка этого файла содержит имя хоста RADIUS сервера и значения параметра "secret", который будет использоваться для работы с ним. Эти два параметра отделены друг от друга пробелами. Не забудьте указать "secret" для каждого из сервера RADIUS, с которыми Вы собираетесь работать.

Файл "dictionary"
Сервер Asterisk использует набор специальных атрибутов, которые не включены в словарь (dictionary) библиотеки radiusclient, следовательно, необходимо добавить описание этих атрибутов в этот словарь. Файл с именем dictionary.digium (находиться в директории contrib, дистрибутива Asterisk) содержит список всех новых атрибутов, которые используются сервером Asterisk.

Добавим его в конце файла словаря клиентской библиотеки RADIUS /usr/local/etc/radiusclient-ng/dictionary директивой:
$INCLUDE /path/to/dictionary.digium



Сервер FreeRADIUS


Инсталляция

Получаем исходники с сайта:

http://freeradius.org/

Распаковываем архив, компилируем и устанавливаем сервер.
root@localhost:/usr/local/src# tar xvfz freeradius-1.1.1.tar.gz
root@localhost:/usr/local/src# cd freeradius-1.1.1
root@localhost"/usr/local/src/freeradius-1.1.1# ./configure
root@localhost"/usr/local/src/freeradius-1.1.1# make
root@localhost"/usr/local/src/freeradius-1.1.1# make install


В случае *BSD, просто ставим из портов.

Все файлы конфигурации сервера FreeRADIUS должны находиться в директории: /usr/local/etc/raddb.

Конфигурация


Файл "clients.conf"

Файл /usr/local/etc/raddb/clients.conf содержит описания RADIUS клиентов, которые могут использовать данный сервер. Для каждого клиента Вам необходимо определить его имя хоста или IP адрес, а также значение параметра "secret". Значение параметра "secret" должно совпадать с тем, что задано у клиента для для доступа к данному серверу.

Пример:
client myhost {
secret = mysecret
shortname = foo
}

Этот фрагмент разрешает доступ RADIUS клиенту с адресом "myhost". Если он использует secret со значением "mysecret". Данный файл всегда содержит запись для localhost (127.0.0.1) и , если Вы запустили RADIUS сервер на тойже машине, что и Asterisk, то можете просто отредактировать существующую запись, изменив пароль по умолчанию.


Файл "dictionary"

Обратите внимание: начиная с версии 1.1.2, файл dictionary.digium поставляется в комплекте дистрибутива FreeRADIUS.
Нижеописанная процедура относиться только к предыдущим версиям FreeRADIUS, которые не включают в себя файл dictionary.digium.

Файл /usr/local/etc/raddb/dictionary содержит в себе словарь (dictionary) сервера FreeRADIUS. Вам необходимо добавить в этот словарь тотже файл (dictionary.digium), что вы подключили в словарь клиентской библиотеки radiusclient-ng. Вы можете добавить его в основной словарь сервера RADIUS, добавив в конце файла /usr/local/etc/raddb/dictionary следующую строку:
$INCLUDE /path/to/dictionary.digium

Тем самым Вы добавите те-же определения атрибутов, что будут использоваться библиотекой radiusclient-ng, что даст возможность серверу и клиенту понимать друг друга.


Настройка учета вызовов в Asterisk


Компиляция и установка:

Модуль cdr_radius будет скомпилирован в том случае, если клиентская библиотека radiusclient-ng установлена и будет обнаружена на вашей системе.

По умолчанию, сервер FreeRADIUS хранит лог учетных запросов (accounting requests) в директории /usr/local/var/log/radius/radacct в обычных текстовых файлах. Сервер создаст в каталоге по одному файлу для каждого хоста.

Следующий пример показывает сходства между созданием CDR лога в asterisk и при использовании RADIUS сервера.

Когда Asterisk создает CDR запись. Он заполняет ее поля, cм содержимое файла: /include/asterisk/cdr.h, заполняя соответствующие поля их значениями. Далее, по умолчанию, он передает эту запись интерфейсу (backend), который в свою очередь сохраняет записи в каком-то хранилище. По умолчанию - это csv файл, который находиться в директории /var/log/asterisk/cdr-csv.

Чтобы использовать вместо (или совместно) с этим методом ведения учета CDR записей, метод отправки их на сервер RADIUS, задействуем модуль cdr_radius.so, конфигурация которого указывается в файле: /etc/asterisk/cdr.conf

Где, используя интерфейс (backend) radius, указываем в нем путь к конфигурационному файлу radiusclient.conf клиентской библиотеки radiusclient-ng:

Пример:

[radius]
usegmtime=yes ; Время по GMT
loguniqueid=yes
loguserfield=yes
radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf



Протоколируемые поля:


  • "Asterisk-Acc-Code", Имя аккаунта CDR
  • "Asterisk-Src",
  • "Asterisk-Dst",
  • "Asterisk-Dst-Ctx", Контекст назначения вызова
  • "Asterisk-Clid",
  • "Asterisk-Chan", Имя канала
  • "Asterisk-Dst-Chan", (если доступно)
  • "Asterisk-Last-App", Последняя команды выполненная в канале
  • "Asterisk-Last-Data", Аргумент последней выполненной команды.
  • "Asterisk-Start-Time",
  • "Asterisk-Answer-Time",
  • "Asterisk-End-Time",
  • "Asterisk-Duration", Продолжительность всего сеанса связи, от момента приема вызова до его полного завершения. ("end time" минус "start time")
  • "Asterisk-Bill-Sec", Продолжительность вызова с момента, когда на вызов ответили. ("end time" минус "answer time")
  • "Asterisk-Disposition", ANSWERED, NO ANSWER, BUSY
  • "Asterisk-AMA-Flags", DOCUMENTATION, BILL, IGNORE и т.д.
  • "Asterisk-Unique-ID", Уникальный идентификатор вызова
  • "Asterisk-User-Field" Пользовательские данные, установленные командой SetCDRUserField



Ссылки по теме: