Потребовалось билинговать клиентов asterisk, купленный биллинг у меня — UTM. Поскольку не хотелось изобретать велосипеды, за основу были взяты следущие доки:


Необходимые компоненты:

1. radiusclient-1.4, скрипты Perl.
2. p5-Authen-Radius, установка из портов.
3. p5-Crypt-CBC, установка из портов.
4. asterisk-perl, установка из http://asterisk.gnuinter.net.
5. radiusclient, установка из портов.

Принимаем за основу, что UTM5 и utm_radius у нас запущены, работают с настроенными зонами, и номерами телефонов, то же и для asterisk. Установил скрипты:

  • ast-rad-acc.pl — в /usr/local/libexec. Здесь следует заметить, что в оригинальном скрипте не хватает radius-атрибута Acct-Session-Id, поэтому, обновленный скрипт нужно можно взять здесь: http://voip.rus.net/tiki-index.php?page=perl_acct&highlight=utm.
  • agi-rad-auth.agi — в /usr/local/share/asterisk/agi-bin

Следующие действия:

1. Завести логин/пароль для подключения к cdr_manager скрипта ast-rad-acc.pl.
2. Зарегистрировать новый NAS в UTM5.
3. Прописать в extensions.conf в секции [globals] параметры подключения к utm_radius:

[globals]
RADIUS_Server=10.x.x.x
RADIUS_Secret=secret
RADIUS_Auth_Port=1812
RAIUS_Acct_Port=1813
Acct_Update_Timeout=5
NAS_IP_Address=10.x.x.x


4. Выделить биллингуемых клиентов в отдельный контекст. (впрочем, возможно, кто-то решит это иначе)

[403]
type=friend
secret=secret
context=sip_auth
host=dynamic
disallow=all
allow=ulaw
allow=alaw
qualify=yes


5. В нужный контекст вставить следующий код:

[sip_auth]
exten => _8XXXXXXXXXX,n,AGI(agi-rad-auth.agi,Mode=Account&Username= ${CALLERID(num)} )
exten => _8XXXXXXXXXX,n,Goto(default,${EXTEN},1) ; успешно авторизовались, звоним куда надо.
exten => _8XXXXXXXXXX,n,Hangup()


Собственно, всё. Набираем 8(XXX)XXXXXXX, во вкладке "Отчеты" в админке UTM появляются нужные звонки.

Комменты принимаются по адресу ice-croft [the_dog] yandex.ru. Пишу сумбурно, и времени на описание полной настройки схемы нет, думаю, со временем появится.