asterisk的简单安装配置

这个文章在vim下写的,刚才sina的blog搞的我的firefox崩溃了,真郁闷,大概是提示说文章太长了,
我们现在会使用一些voip的产品,但是我们怎么知道好不好用呢?
首先就是测试,评估,我们可能经常使用的软件是ondo server,不过这个是使用java的,我不太喜欢java,还要使用tomcat,256M的机器跑的慢的不行,更何况大家都平时喜欢装好多的软件。机器就卡的不行了,而且我还是喜欢在linux下面解决问题,这个我们可以考虑asterisk,有很多开源的解决方案的,sip和323的都有,下面的是我的草稿,懒得整理了,太麻烦了,另外还有很多事情要做,真的是很多事情要做,写文章总结是可以的,但是要像发表的文章那样整理就算了吧,累,下面只是给了一个最简单的asterisk的配置方式,大家可以看看我走过的弯路。这时一个过程。平时找程序中的问题,加上测试,比较忙。有时侯看代码,唉,不说了,最近一直没有时间写blog:(

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 也可以的,看看大家的配置文件。

   

转自http://blog.sina.com.cn/s/blog_49c8079b0100061d.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值