Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54526
  • 博文数量: 15
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-27 11:01
文章分类
文章存档

2008年(15)

我的朋友
最近访客

分类: BSD

2008-08-27 11:39:18

IAX 设置详细
两台Asterisk服务器设置步骤如下:
*
设置iax.conf文件,一台设置成为peer模式另外一台设置成为user模式
*
设置userextensions.conf让他的用户可以从user发送呼叫peer
*
任意的, user上注册peer(peer是动态IP地址的时候)
*
相反设置以上的步骤, 如果你想实现相互呼叫

===========================================

声明IAX2 user(peer)
如果想一个peer能收到呼叫. 必须在peer机器上设置iax.conf识别呼叫来自user.

[username]
type=user
auth=md5
secret=secretword
context=iax2users

context非常重要,他用来设置user新来的呼叫路由如何处理.

这个步骤将允许远程的user设备注册到peer.如果你想限制请在peeriax.conf里增加限制和许可的设置.

=================================

声明IAX2 peer(user)
从一个user产生呼叫的时候必须在useriax.conf里设置到peer的验证.

[peername]
type=peer
host=hostname.domain.tld (
如果用"dynamic"就要先进行一下registerpeer)
auth=md5
secret=secretword                  ;
如果拨号的时候填写这里就不需要再填写
username=username-at-the-peer      ;
如果拨号的时候填写这里就不需要再填写

请注意:

    * type=user 表示你将通过这个号码将验证一个进来的呼叫
    * type=peer
表示你将通过这个号码发送呼叫给某人
    * type=friend
表示两个功能都有


Using type=friend makes life easier, but treat it as a shortcut. If you add both type=friend and host=hostname, domain.ext you limit the hosts your peer can place calls from, which may not be what you want.

现在完成第一步和第二步之后我们只需要考虑设置拨号方案了.读下面的例子看看怎么做吧.

================================
连接到拨号方案

示例1

extensions.conf:
exten => _7XXX,1,Dial(IAX2/myserver:passwordA@IAXserverA/${EXTEN:1},30,r)
exten => _7XXX,2,Dial(SIP/myserver:passwordA@SIPserverA/${EXTEN:1},30,r)
exten => _7XXX,3,Congestion

exten => _8XXX,1,Dial(IAX2/myserver:passwordB@IAXserverB/${EXTEN:1},30,r)
exten => _8XXX,2,Dial(SIP/myserver:passwordB@SIPserverB/${EXTEN:1},30,r)
exten => _8XXX,3,Congestion

记得要在iax.confsip.conf设置[IAXserverA]的这些定义.这个示例当出现问题后使用SIP做逃逸系统.注意你的用户名和密码可能会被CDR记录下来(你需要使用第二个示例的方法来实现隐藏).

 

 


示例2
这个示例将不会把用户名同密码显示在CDR当中

注意:在1.0.9版这个方法仍然不是Asterisk标准分支,所以仍然需要用户名和密码在dial字符串中
exten => _7XXX,1,Dial(IAX2/username:pass@serverB/${EXTEN:1},30,r)

(serverA)
iax.conf
[general]
register => :@

[serverB]
type=friend
user=
secret=
host=

extensions.conf
exten => _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r)
exten => _7XXX,2,Congestion

(serverB)
iax.conf
[serverA]
type=friend
user=
secret=
host= |

extensions.conf
exten => _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r)
exten => _8XXX,2,Congestion

在一些时候serverAserverB就是在对方服务器上的用户

 


示例3
extensions.conf使用switch对象你可以连接两台服务器或是其他服务器的连接方案。在这个方案中我们自己的serverC将连接ServerAserverB:

[default]
exten => _801XXX,1,Goto,srvA|${EXTEN}|1
exten => _802XXX,1,Goto,srvB|${EXTEN}|1

[srvA]
exten => _801XXX,1,StripMSD,3
exten => _XXX,2,Goto,1
switch => IAX/serverA

[srvB]
exten => _802XXX,1,StripMSD,3
exten => _XXX,2,Goto,1
switch => IAX/serverB

注意:你要注意不能建立死循环serverAserverB并且serverB又到serverA!同样考虑使用iax.conf中设置autokill来杀掉被悬起长时间进程(当远程服务器无法连接)

 

 

示例4
extensions.conf: (
主服务器)

[outbound]
switch => IAX2/master:secret@iax-gw1.company.net/outbound


iax.conf (
主服务器):
[slave]
type=user
auth=plaintext
context=outbound
secret=secret
host=dynamic
callerid="slave"
trunk=yes
notransfer=yes

[slave]
type=peer
auth=plaintext
context=outbound-nuphone
secret=secret
host=dynamic
trunk=yes
notransfer=yes

extensions.conf (从服务器):

[assigned-dids]
; uncomment a dial mechanism, first one goes to specific extension
; other one goes to dial parameter s.

;exten => 7046446999,1,Dial,IAX2/master@slave/${EXTEN}
;exten => 7046446999,1,Dial,IAX2/master@slave

iax.conf (从服务器):

register => slave:secret@iax-gw1.company.net

[master]
type=peer
host=iax-gw1.company.net
secret=secret
context=outbound
trunk=yes
canreinvite=no

[master]
type=user
secret=secret
context=acontext
trunk=yes
canreinvite=no


===========================
关于register命令
peerip并不明确,用户将不知道如何发送呼叫信息(当一个办公室用户呼叫在家里工作的peer,因为在家里工作的peer只有一个动态IP或他是在NAT设置) 这个时候peer要注册到user及时的把自己的IP告诉user:

peeriax.conf[general]上怎么写:

register => user:password@hostname.domain.ext

因为不断更新所以user总是知道peerip是否改变了.

register命令仅仅被用在动态IP地址的情况下,如果两台服务器都是静态IP地址你不需要做任何设置.

 

阅读(929) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~