Asterisk号称是VOIP领域的瑞士军刀,Radius是AAA计费协议的圆月弯刀。且看Asterisk+Radius如何双刀合璧,称雄VOIP的江湖。。。
Asterisk 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案。Asterisk是一种功能非常齐全的应用程序,提供了许多电信功能,能够把你的x86机器变成你自己的交换机,还能够当作一台企业级的商用交换机。Asterisk让人激动的事情是它在小企业预算可承受的范围内提供了商业交换机的功能和可伸缩性。你可以使用一台老式的奔腾3计算机,让你的机构看起来就同世界上的大企业一样。
Asterisk官方站点: http://www.asterisk.org/
RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系统
由RFC2865,RFC2866定义,是目前应用最广泛的AAA协议。
RADIUS协议最初是由Livingston公司提出的,原先的目的是为拨号用户进行认证和计费。后来经过多次改进,形成了一项通用的认证计费协议。
Radius RFC2865网址: http://www.ietf.org/rfc/rfc2865.txt
一.前期准备工作
1. 获取asterisk-1.4.5源代码
wget --passive-ftp ftp.digium.com/pub/asterisk/asterisk-1.4.5.tar.gz
解压源代码
tar zxvf asterisk-1.4.5.tar.gz
二. 调整代码
为了添加使用radius进行计费的模块,涉及到三个radius相关库:appradius1.0和cpprad以及radiusclient-ng库
1. cpprad是使用C实现radius通信协议的模块
2. appradius是专用于asterisk的radius通信模块,其中底层通信使用到了cpprad的库函数
3. radiusclient-ng是另外一个radius通信库
asterisk1.4.5的cdr_radius.c默认使用radiusclient-ng库,本项目的做法如下,
1. 把cpprad中的实现代码(radlib.c, md5.c)揉合到appradius的实现代码中(app_radius.c, cdr_radius.c)
2. 再把appradius的实现代码app_radius.c拷贝到asterisk的app路径下,cdr_radius.c覆盖asterisk的cdr路径下的同名文件,因此就去掉了与radiusclient-ng的耦合关系。
3. 把appradius和cpprad的相关头文件全部拷贝到asterisk的include文件夹下
4. 特别注意,不能随便把上述库的编译结果,如libradiusclient-ng.so.2放到asterisk的模块路径夹/usr/lib/asterisk/modules/下,asterisk启动时默认会加载这个路径下的所有模块,但是这些模块必须满足asterisk加载的特殊要求,因此一般的linux模块放在此路径下不生效。倒是可以考虑放到/usr/lib/下供某些模块使用。
三. 编译部署
1.清除上次编译的中间文件
make clean
2. 加载cdr_radius模块
asterisk1.4.5虽然带了cdr_radius.c源文件,但是因为依赖于radiusclient-ng库,所以默认是不编译该模块的,运行make menuselect找到cdr_radius模块,其中显示[XXX]可以看出是因为模块依赖关系默认不编译的。 因此想要编译cdr_radius.c,必须运行一次下面这个命令,之后就会编译这个模块了。
./configure --prefix=/data/asterisk --exec-prefix=/data/asterisk --with-radius=/data/radiusclient-ng/
3.运行configure设置编译的初始条件
指定安装路径,请指定prefix和exec-prefix的值,第二个configure将指示安装asterisk到/data/asterisk目录中。
./configure --prefix=/data/asterisk --exec-prefix=/data/asterisk
4.运行make命令进行编译
make
5.运行make install进行部署
make install
6.如果是第一次安装,请运行make samples拷贝默认的配置文件
make samples
7.了解常用的asterisk文件夹
配置文件默认保存在以下目录
/etc/asterisk/
/var/lib/asterisk/sounds/下保存了ivr使用到的语音文件(gsm后缀的文件)
/var/spool/asterisk
Asterisk的日志运行将保存在以下文件夹中
/var/log/asterisk
这里保存了asterisk启动的进程id等,因此登录用户需要有访问这个文件夹的权限
/var/run/asterisk.pid
/var/run/asterisk.ctl
四. 配置Asterisk
Asterisk的默认配置文件夹是
/etc/asterisk
Extensions.conf 设置拨号应用方案
Sip.conf 设置sip相关
五.运行调试Asterisk
1. 运行调试常用命令
./asterisk & 在后台启动asterisk
./asterisk –vvvc 启动asterisk并尽量多的在控制台显示调试信息
./asterisk –r 连接asterisk控制台
set verbose 9999 设置打印详细信息
2.asterisk控制台下常用命令
sip reload 重新加载sip配置信息
sip set debug 设置显示更多的sip信息
sip set debug off关闭显示更多的sip信息
sip show channels 显示所有活动的SIP通道
sip show peers 显示所有已定义的SIP peer
dialplan show 显示拨号方案
dialplan reload重新加载拨打方案
stop gracefully 优雅地停止asterisk
stop now 立即停止运行asterisk
module show 显示所有已加载模块
module load cdr_radius.so 加载模块cdr_radius.so
module reload cdr_radius.so 重新加载模块cdr_radius.so
module unload cdr_radius.so 卸载模块cdr_radius.so
core show applications 显示所有的应用,比如Dial, Radius, Hangup, Answer等
core show channels 显示所有的通话频道
core show codecs 显示所有支持的编解码器
core show functions 显示所有的功能函数
本文转自:http://blog.csdn.net/colinchan/archive/2007/07/24/1705501.aspx