Начитался здешних тем, и пришел к такой вот схеме:
За основу были взяты две статьи:
http://www.braams.ru/asterisk-utm (Обсчет звонков)
http://voip.rus.net/tiki-index.php?page=asterisk-utm (Авторизация)
Из который взял по половине идеи и скриптов , вот что получилось:
Имеем Asterisk 1.4.42 и UTM5
1. Все устанавливаем как описано в первой статье
2. Все устанавливаем как написано во второй статье, кроме ast-rad-acc.pl - этот демон нам не понадобится, собственно у меня и не получилось его запустить
Ничего дополнительно патчить не нужно
Для примера имеем транк до Cisco и пользователя 7000
Соответственно этот же пользователь прописан в биллинге (единственный минус, приходится дублировать данные, но это поправимо )
После всех установой пишем конфиги:
Подгружаем agi
modules.conf
Код: Выделить всё
load => res_agi.so
Вписываем юзверей
users.conf
Код: Выделить всё
[cisco_trunk]
context=in
type=friend
host=xx.xx.xx.xx
canreinvite=no
disallow = all
allow=gsm
allow=ulaw
allow=alaw
insecure=port,invite
[7000]
type=friend
secret=7000
context=sip_auth
host=dynamic
disallow=all
allow=ulaw
allow=alaw
qualify=yes
callerid = <7000>
extensions.conf
Код: Выделить всё
[general]
static=yes
clearglobalvars=yes
[globals]
RADIUS_Server=ХХ.ХХ.ХХ.ХХ
RADIUS_Secret=secret
RADIUS_Auth_Port=1812
RAIUS_Acct_Port=1813
Acct_Update_Timeout=60
NAS_IP_Address=ХХ.ХХ.ХХ.ХХ
[default]
[in]
exten => s,1,Agi(utm5-agi.py,start,${ARG1},${ARG2},${ARG3},${ARG4});
exten => _XXXX,1,Set(id=${UNIQUEID});
exten => _XXXX,n,Set(src=${CALLERID(num)});
exten => _XXXX,n,Set(dst=${EXTEN});
Dial(SIP/${EXTEN},,L(${maxdur})M(utm5^${src}^${id}^${src}^${dst})))
exten => _XXXX,n, Hangup()
exten => h,1,DeadAgi(utm5-agi.py,stop,${src},${id},${src},${dst});
[sip_auth]
exten => _X.,1,Set(SIP_Authorization=${SIP_HEADER(Proxy-Authorization)})
exten => _X.,n,AGI(agi-rad-auth.agi|Mode=SIP)
exten => _X.,n,Goto(macro-utm5,${EXTENSION},1)
exten => _X.,n,Hangup()
[macro-utm5]
exten => s,1,Agi(utm5-agi.py,start,${ARG1},${ARG2},${ARG3},${ARG4});
exten => _X.,1,Set(id=${UNIQUEID});
exten => _X.,n,Set(src=${CALLERID(num)});
exten => _X.,n,Set(dst=${EXTEN});
exten => _X.,n,Agi(utm5-agi.py,auth,${src},${src},${src},${dst});
exten => _X.,n,Dial(SIP/${EXTEN}@cisco_trunk,,L(${maxdur})M(utm5^${src}^${id}^${src}^${dst}))
exten => _X.,n,Hangup()
exten => h,1,DeadAgi(utm5-agi.py,stop,${src},${id},${src},${dst});
Вполне работоспособный биллинг, который в реальном времени обрабатывает звонки.
При звонке сперва срабатывает agi-rad-auth.agi этот скрипт нужен для проверки блокировки абонента, если блокировка , то вызовов не будет проходить (также скрипт обрабатывает, если в утмке настроено количество одновременных сессий), далее при удачной регистрации переходим на macro-utm5 , который уже отправляет все значения радиусу.
В [in] идет обработка входящих звонков, которые также уходят в утм.
В данный момент занимаюсь тестированием данной схемы, пока полет нормальный. Кто будет использовать, делитесь впечатлениями.