debian下面的安装方法
vax:/home/ailantian# apt-get install asterisk
asterisk 被设计成运行在2.4内核上的,不过对2.6的内核也有一些支持。如果需要一个稳定的系统,开发者推荐大家使用2.4的内核。
如果大家使用的是Digium hardware or ztdummy就需要安装zaptel ,有些asterisk应用需要使用这个包。如果是从源代码编译的,最初没有编译这个包的话,那么将来如果使用的时候需要这个包,就需要连asterisk一起重新编译。安装zaptel 需要bison,另外如果需要安装newt 工具包的话还需要安装ncurses以及其开发包。
vax:/home/ailantian# cd /etc/asterisk/
vax:/etc/asterisk# ls
adsi.conf codecs.conf logger.conf res_odbc.conf
adtranvofr.conf dnsmgr.conf manager.conf rpt.conf
agents.conf dundi.conf meetme.conf rtp.conf
alarmreceiver.conf enum.conf mgcp.conf sip.conf
alsa.conf extconfig.conf misdn.conf sip_notify.conf
asterisk.adsi extensions.ael modem.conf skinny.conf
asterisk.conf extensions.conf modules.conf telcordia-1.adsi
cdr.conf features.conf musiconhold.conf voicemail.conf
cdr_custom.conf festival.conf osp.conf vpb.conf
cdr_manager.conf h323.conf oss.conf zapata.conf
cdr_odbc.conf iax.conf phone.conf
cdr_pgsql.conf iaxprov.conf privacy.conf
cdr_tds.conf indications.conf queues.conf
vax:/etc/asterisk#asterisk -cvvv
终端输出信息太多,只看到了下面的,有问题,看看再说,这里输出信息太多了blog放不下省略了,只给出最后一行吧
== Manager registered action DBGet
== Manager registered action DBPut
== Parsing '/etc/asterisk/enum.conf': Found
Jul 28 14:38:17 NOTICE[2522]: chan_sip.c:10886 handle_request_register: Registration from '<sip:888@192.168.100.144>' failed for '192.168.100.236' - Username/auth name mismatch
Asterisk Ready.
*CLI> Jul 28 14:38:17 NOTICE[2522]: chan_sip.c:10886 handle_request_register: Registration from '<sip:777@192.168.100.144>' failed for '192.168.100.239' - Username/auth name mismatch
修改/etc/asterisk/sip.conf
bindaddr=192.168.100.144
allow=all;允许所有的解码类型。
配置为如下的时候
[777]
type=friend
username=777
secret=777
[888]
type=friend
username=888
secret=
[333]
type=friend
username=333
secret=
[222]
type=friend
username=222
secret=
另终端配置为号码777,用户777,密码777
号码888,用户空,密码空
错误如下
经验是不把所有的用户配置为一样的,这样可以看出区别来。
Asterisk Ready.
*CLI> Jul 28 15:11:31 ERROR[2663]: chan_sip.c:6407 register_verify: Peer '333' is trying to register, but not configured as host=dynamic
Jul 28 15:11:31 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:333@192.168.100.144>' failed for '192.168.100.213' - Username/auth name mismatch
Jul 28 15:11:45 ERROR[2663]: chan_sip.c:6407 register_verify: Peer '888' is trying to register, but not configured as host=dynamic
Jul 28 15:11:45 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:888@192.168.100.144>' failed for '192.168.100.236' - Username/auth name mismatch
Jul 28 15:11:45 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:111@192.168.100.144>' failed for '192.168.100.211' - Username/auth name mismatch
Jul 28 15:11:57 ERROR[2663]: chan_sip.c:6407 register_verify: Peer '777' is trying to register, but not configured as host=dynamic
Jul 28 15:11:57 NOTICE[2663]: chan_sip.c:10886 handle_request_register: Registration from '<sip:777@192.168.100.144>' failed for '192.168.100.239' - Username/auth name mismatch
配置为如下时,
[777]
type=friend
username=777
secret=777
host=dynamic ; This device registers with us
[888]
type=friend
username=888
secret=
host=dynamic ; This device registers with us
[333]
type=friend
username=333
secret=
host=dynamic ; This device registers with us
[222]
type=friend
username=222
secret=
错误如下
Asterisk Ready.
*CLI> -- Registered SIP '333' at 192.168.100.213 port 5060 expires 60
Jul 28 15:15:50 NOTICE[2686]: chan_sip.c:10886 handle_request_register: Registration from '<sip:111@192.168.100.144>' failed for '192.168.100.211' - Username/auth name mismatch
-- Registered SIP '888' at 192.168.100.236 port 5060 expires 60
-- Registered SIP '777' at 192.168.100.239 port 5060 expires 60
因此重点在于添加host=dynamic
另外要注意号码,用户名,密码的关系,asterisk里面只能设置用户名和密码
另外[]中的内容似乎要与用户名相同,不过例子中的似乎不是这样,可以不同,网络上很多都配置的没有相同也可以的。需要注意的是extensions的配置
type为friend
如果type不是friend,如果是user+peer则好像需要两个[]配置,分开配置,一个是拨入一个是拨出的,如果是friend就是两个都可以。
现在都能注册上了,但是不能拨通电话,发现是404,找不到的错误,可能是extensions的错误。
终端可以输入
sip debug看到信息
终于可以了,在extensions.conf里面加入拨号规则
exten => 888,1,Dial(SIP/888/1)
exten => 777,1,Dial(SIP/777/1)
这样777,888就可以互通了
> -- Executing Dial("SIP/777-0a13", "SIP/888/1") in new stack
-- Called 888/1
-- SIP/888-b6b3 is ringing
-- SIP/888-b6b3 answered SIP/777-0a13
-- Attempting native bridge of SIP/777-0a13 and SIP/888-b6b3
== Spawn extension (default, 888, 1) exited non-zero on 'SIP/777-0a13'
如果不对的话,如下提示
Jul 28 16:55:32 WARNING[3519]: app_dial.c:997 dial_exec_full: Dial argument takes format (technology/[device:]number1)
== Spawn extension (default, 333, 1) exited non-zero on 'SIP/777-9c87'
如果修改成如下
exten => 888,1,Dial(SIP/888,20)
exten => 777,1,Dial(SIP/777,20)
exten => 333,1,Dial(SIP/333/1)
exten => 222,1,Dial(SIP/222/1)
exten => 111,1,Dial(SIP/111/1)
则,结果如下
*CLI> -- Executing Dial("SIP/777-3565", "SIP/888|20") in new stack
-- Called 888
-- SIP/888-9e31 is ringing
-- SIP/888-9e31 answered SIP/777-3565
-- Attempting native bridge of SIP/777-3565 and SIP/888-9e31
== Spawn extension (default, 888, 1) exited non-zero on 'SIP/777-3565'
可以看出,下面的才是对的
在拨333的时候
-- Executing Dial("SIP/777-081d", "SIP/333/1") in new stack
Jul 28 17:04:04 NOTICE[3609]: app_dial.c:1029 dial_exec_full: Unable to create channel of type 'SIP' (cause 3 - No route to destination)
== Everyone is busy/congested at this time (1:0/0/1)
== Auto fallthrough, channel 'SIP/777-081d' status is 'CHANUNAVAIL'
重要的是认证,另外就是dialplan的问题(就是extensions里面的内容,不修改的话会有404或者407错误)
首先看看dialplan
http://www.voip-info.org/wiki/index.php?page=Asterisk+config+extensions.conf
看看这里的解说,我就翻译一下吧。
exten => 123,1,Answer
exten => 123,2,Playback(tt-weasels)
exten => 123,3,Voicemail(44)
exten => 123,4,Hangup
这个定义了一个名为”123”的扩展,当有一个呼叫到123的时候,asterisk会自己应答这个呼叫,播放一个叫tt-weasels的声音文件,然后给用户一个机会留言到mailbox 44,然后挂机。
但是需要注意的是asterisk并不关心你在extensions.conf文件写的顺序,它使用的是优先级,就是中间的1,2,3,4这些。
另外有一些选项用来。。。。
exten => 123/100,1,Answer()
exten => 123/100,2,Playback(tt-weasels)
exten => 123/100,3,Voicemail(123)
exten => 123/100,4,Hangup()
这将会匹配扩展123,并且执行下面的选项当且仅当呼叫用户的Caller-ID Number是100的时候。
当然我们也可以使用扩展。比如下面的表达式
exten => 1234/_256NXXXXXX,1,Answer()
匹配的是所有Caller-ID Number是256打头的
我们像下面写都是合法的。
exten => s,1,Answer
exten => s/9184238080,2,Set(CALLERID(name)=EVIL BASTARD)
exten => s,2,Set(CALLERID(name)=Good Person)
exten => s,3,Dial(SIP/goodperson)
这样在第二步的时候可以把不喜欢的人拒绝掉。
exten => _XXX.,1,Dial(SIP/888,20)
把所有以三个数字开头的号码都拨到888去,试了,是这样的。但是后面呼叫号码怎么确定还没弄清楚,应该有一个全局变量来标识被叫号码的。
另外callid=call name+call num
vax:/etc/asterisk# asterisk -cvvv
后来发现后面dial的的确是有一个全局变量来使用,可以使用如下的表达式来匹配就行了
exten => _X.,1,Dial(SIP/${EXTEN},20)
有这一句就行了,另外需要考虑的是sip.conf里面总是需要手动添加用户的方法太过复杂,应该改进一下,另外有疑问的就是extensions.conf里面的为什么没有起作用。看看
exten => s,1,Dial(${ARG2},20|p)这个ARG2没有被正常的解析,可能是因为版本和配置文件不配套,debian的打包者可能出了些小差错。
http://www.voip-info.org/wiki/index.php?page=Asterisk+config+extensions.conf
http://www.voip-info.org/wiki/index.php?page=Asterisk+Extension+Matching
http://www.voip-info.org/wiki/view/Asterisk+extensions+from+mysql
http://www.signate.com/book/codeview.php?filename=extensions.conf
http://threebit.net/mail-archive/asterisk-users/msg00010.html
http://bugs.digium.com/file_download.php?file_id=10554&type=bug
http://www.marko.net/asterisk/archives/0302/0235.html
http://www.voip-info.org/wiki-Asterisk
可以在网上搜exten => s,1,Dial(${ARG2},20)
或者估计搜asterisk+extensions.conf 也可以的,看看大家的配置文件。