打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
电话未来之路之四--Asterisk的基本配置-jerichen-ChinaUnix博客
Asterisk的基本配置
 
1 我到底需要什么
星号(*)在很多不同的应用中被用作通配符。星号作为这个PBX系统的完美名称,原因很多,其中之一是asterisk可以连接数目庞大的接口类型,包括:
模拟接口,如你的电话线和模拟电话
数字线路,如T1和E1
VOIP协议,如SIP和IAX
2 使用的配置文件
本文主要讲述如何配置以下四种通道:FXO通道、FXS通道、SIP通道和IAX通道,目标不是对所有的通道或拓扑进行研究,而只是提供一个基本的平台,在此基础上建立自己的电话系统。
使用到的配置文件:
zaptel.conf           ---用于做硬件接口的基层配置。我们将建立一个FXO和一个FXS通道
zapata.conf           ---用于为硬件配置Asterisk的接口
extensions.conf-      ---拨号方案
sip.conf              ---配置sip协议的文件
iax.conf              ---配置呼入和呼出iax通道的文件
3 FXO和FXS通道
FXO不生成拨号音而是接受,拨号音由电话公司提供,该端口接入到电话公司
FXS口提供拨号音和振铃电压,在有呼入的时候提醒用户,该端口接入到电话终端
端口是通过配置使用的信令进行定义的,而不会是物理端口类型。例如,一个物理的FXO口可以在配置中使用FXS信令定义,而FXS端口可以用FXO信令定义。(未理解)
4 配置FXO通道
要配置FXO通道,先要配置zaptel,再配置zapata
zaptel配置
配置文件为/etc/zaptel.conf。下面是定义FXS端口的FXS信令的最低限度的配置:
fxsks=2
loadzone=us
defaultzone=us
第一行,除了我们提到正在使用的FXO或FXS信令外,还可以为通道2定义了以下协议中的一种:Loop stars (ls)、Ground start(gs)、Kewlstart(ks)
loop start和ground start之间的区别在于设备如何请求拨号音:ground start电路信号通知远端它需要拨号音,即刻grounding one of the leads;环路启动电路使用一个short来请求拨号音。新的使用中不常见,但模拟ground start线路仍然在某些地区使用。例如,ground start线路的优势在于消除一种叫做glare的现象,这种现象在loop start线路和PBX较高的呼叫音量时出现。北美所有的家庭线路(和模拟电话、解调器、传真)使用loopstart信令。kewlstart实际上和loopstart相同,只是更为智能,能够更好的检测远端的断线。kewlstart是asterisk的模拟电路推荐的信令协议。
要配置kewlstart以外的信令,用ls或者gs替换fxsks中的ks。
第二行,loadzone配置通道使用的提示包(在zonedata.c中配置)。zonedata.c包含了在某个国家中电话系统需要使用的不同声音信息:拨号音、回铃音、忙音等等。当你为zap通道应用一个装载过的音域,这个通道就会模拟特定国家的提示音。不同的提示包可以为不同的通道配置。
Defaultzone用于通道没有指定音域的情况。
配置完zaptel.conf后,你可以载入板卡的驱动。modprobe用于装载linux内核模块,例如装载wctdm驱动,你需要运行:
#modprobe wctdm
如果驱动装载没有任何提示,则表示装载成功。你可以检测硬件和端口是否正确装载和配置,使用ztcfg程序:
#/sbin/ztcfg -vv
配置的通道和使用的信令会显示出来。
如果你收到如下错误,则说明你配置了错误的信令方式:
ZT_CHANCONFIG failed on channel 2:Invalid argument(22)
Did you forget that FXS interfaces are configured with FXO signalling and that FXO interfaces use FXS signalling?
从内存中卸载驱动,使用rmmode命令,如下:
#rmmod wctdm
zttool是个分析工具,用来分析硬件的状态。运行后,可以看到一个所有安装硬件的菜单。你可以选择某个硬件,查看目前状态。OK表示硬件安装正确。
Asterisk通常情况下可以认为模块安装成功,但是要在装载模块时看调试输出,需要看控制台输出(默认输出在TTY 9,可以在safe_asterisk中进行配置。)
zapata配置
asterisk使用zapata.conf文件确定系统中安装的电话硬件的设置。zapata.conf文件同时控制硬件通道相关的不同功能和特性,例如主叫号码显示,呼叫等待,回声消除,以及各种其它功能。
zapata.conf文件配置asterisk硬件和相关特性的控制:
[trunkgroups]
;define any trunk groups
[channels]
;hardware channels
;default
usecallerid=yes      ;--------设置来电显示
hidecallerid=no      ;----------设置呼出时不隐藏
callwaiting=no       ;--------禁止呼叫等待
threewaycalling=yes  ;----------开启三方通话功能
transfer=yes         ;--------可以使用闪断键hook switch flash 实现呼叫前转,它需要先开启三方通话
echocancel=yes       ;----------消除模拟线路可能产生的回声
echotraining=yes     ;--------回声消除需要一些时间去学习,你可以使用回声训练来加速这个过程
;define channels
context=incoming;Incoming calls goto [incoming]in extensions.conf
signalling=fxs_ks ;use FXS signalling for an FXO channel
channel=>2;PSTN attached to port 2
[trunkgroups]用于配置NFAS和GR-303连接。
[channels]决定硬件通道和他们选项的信令方式。一量一个选项定义完毕,文件的其它部分会继承这个定义。一个通道定义使用channel=>,则其他每个通道定义继承以上行所定义的所有选项。如果你想给每个通道定义不同的徒然,要记住在channel=>定义之前配置选项。
当一个呼叫到达FXO接口时,你可能希望执行一些动作。这些在一个称为上下文context指令集中进行配置。FXO端口的呼入呼叫由context=incoming指向incoming context。
最后由于FXO通道使用FXS信令,我们用signalling=fxs_ks对此进行定义
Dialplan配置
以下是基本拨号方案,使用ECHO()应用来校验工作通道的双向通讯:
[incoming]
;incoming calls from the FXO port are directed to this context from zapata.conf
exten => s,1,Answer()
exten => s,2,Ecsho()
无论你说什么,Echo()都将会回转给你
呼入
以上FXO通道已经配置完毕,我们来测试一下。运行zttool应用,把PSTN线路连接到你的语音卡的FXO端口,你可以看到卡上有一个红色的指示。
现在从另外一个电话上拨打这个PSTN号,Asterisk会接收这个呼叫并执行Echo()应用。如果你可以听到回送过来的你的声音,则FXO通道的安装和配置已经成功。

5 配置FXS通道
zaptel配置
以下是TDM400P的FXS通道的基本配置。配置和FXO通道的配置相似,只是增加了fxoks=1。
FXO口与FXS口的配置是相反的,FXO口配置fxs信令:fxsks,FXS口配置fxo信令:fxoks
配置如下:
fxoks=1           ;----配置通道1使用FXO信令,通道1为S口
fxsks=2           ;----配置通道2使用FXS信令,通道2为O口
loadzone=us
defaultzone=us
配置完后为硬件装载驱动.
使用/sbin/ztcfg -vv检测他们的状态
Zaptel Configuration
=========================
Channel map:
Channel 01:FXO Kewlstart(Default)(Slaves:01)
Channel 02:FXS Kewlstart(Default)(Slaves:02)
2 channels configured
zapata配置
配置与FXO通道的配置相同,只是增加了FXS端口的字段和immediate=no行。FXS端口的context是internal,信令是fxoks(kewlstart),通道号设置为1。
FXS通道可以设置 为电话摘机后执行二种不同动作中的一种。最普遍的是Asterisk产生拨号间,等待用户输入。这种用immediate=no进行配置。另一种是Asterisk自行执行一套拨号方案中设置的指令,而不是产生拨号音,通过immediate=yes进行配置。执行指令在该通道的context中设置,并匹配s扩展。
新zaptat.conf:
[trunkgroups]
;define any trunk groups
[channels]
;hardware channels
;default
usecallerid=no
hidecallerid=no
callwaiting=no
treewaycalling=yes
transfer=yes
echocancel=yes
echotraining=yes
immediate=no
;define channels
context=internal       ;Uses the [internal] context in extensions.conf
signalling=fxo_ks      ;Use FXO signalling for an FXS channel
channel =>1            ;Telephone attached to port 1
context=incoming       ;incoming calls goto [incoming] in extensions.conf
signalling=fxs_ks      ;Use FXS signalling for an FXO channel
channel =>2            ;Telephone attached to port 2
Dialplan配置
[internal]
exten =>611,1,Answer()
exten =>611,2,Echo()
当你在分机上括611后,你所说的话会返回给你,从而检测双向语音

6 sip配置

sip--会话初始协议,通常用于voip电话,进行呼叫建立、呼叫结束以及呼叫进程中的协商。基本上,它帮助二个端点互相通话。sip不处理媒体;当呼叫建立之后,它通过实时传输协议在电话之间直接传输媒体。
SIP使用UDP5060端口进行通信,目前asterisk没有TCP用于传输,但以后的版本可能会支持。我们所说的媒体是指端点之间传输的用于在另一端点重建你的声音数据。同样也指pbx音乐或声音提示。
RTP用于在端点之间传输媒体。Asterisk中RTP使用大数字的无特权的端口(默认10000至20000)
SIP不是第一个,也不是唯一一个我们使用的VOIP协议(其它包括H.323,MGCP,IAX等),但是目前SIP似乎是硬件厂商最大的动力。SIP协议的优点是普遍的被接受和结构灵活,简单。
下面是基本的sip.conf配置:
[general]
context=default
srvlookup=yes
[john]
type=friend
secret=welcome
qualify=yes ;qualify peer is no more than 2000 ms away
nat=no ;this phone is not natted
host=dynamic ;this device registers with us
canreinvite=no ;Asterisk by default tries to redirect
context=internal ;the internal context controls what we can do
sip.conf文件开始是一个[general]项,包含通道设置,所有用户和对端默认选项。在一个端-用户/端的基础上,你可以不考虑默认的配置,而在user/peer定义中重新进行配置。
域名系统服务记录(DNS SRV records)是建立一个逻辑和可解析地址的方法,你可以到达这个地址。这种方法可以是呼叫传输到不同的地点,而不需要改变逻辑地址。使用SRV记录,你可以获取DNS的很多好处,然而禁止它们打破SIP RFC的规定,并且禁止了基于域名的SIP呼叫(注意如果多个记录返回,Asterisk只会使用第一个)。
DNS SRV记录查询在ASterisk默认禁止,但是强烈建议你打开。启动使用sip.conf中[general]section里面的srvlookup=yes。
每个连接都会定义为用户、端或者朋友。用户类型是用于认证呼入呼叫;端类型用于呼出呼叫;朋友类型两种都用。扩展名用中括号定义。
Secret是用于认证的密码。
qualify=yes,确认远端设备是否可达。可用于监视任何远端商务,包括其它的Asterisk服务器。默认情况是Asterisk认为时延在2000ms以内的设备可达。你可以通过将yes替换为毫秒来配置Asterisk判断对端是否可达的时间。
如果一个号码在NAT设备后面,例如路由器或者防火墙,必须配置nat=yes,强迫astersik忽略号码的联系信息,使用收到的包的地址信息。
设host=dynamic将要求号码注册,以便asterisk可以知道如何找到电话。将一个端点绑定到一个单独地址或者FQDN,将dynamic替换成IP地址或者域名。注意这只是限制你呼叫的目的地址,用户允许从任何地点发起呼叫(假定它鉴权成功)。如果你设置host=static,则终端设备不需要注册。
设置canreinvite=no。在sip协议中,邀请用于发起呼叫,重写向媒体。在初始邀请后相同对话中发起的任何邀请都被视作重邀请(reinvite).例如:假设双方正在交换媒体信息。如果一方呼叫等待,asterisk设置为播放呼叫等待音乐,asterisk会发起到第二个客户端的重邀请,告诉将他的媒体流定向到PBX。然后就可以传输音乐流,或者一个等待客户的通知。最开始的用户再到PBX的重邀请中发起一个接机的命令,然后pbx发起一个重邀请到第二方,要求它将媒体流重新定向到发起方,结束呼叫等待音乐,重新连接客户端。
通常,当二个端点建立起呼叫,他们直接从一端到另一端传输媒体。asterisk通常在媒体通道打破这个规则,允许它听到电话键盘上的拨号音。这是必须的,因为如果asterisk不能确定呼叫长度,计费将不准确。canreinvite=no让asterisk媒体经过自己,而不允许rtp信息直接在端点之间传送。
asterisk在以下情况下不会发起重邀请:
1.客户端的任何一方配置为canreinvite=no
2.客户端不能协商编码,asterisk需要执行语音编码转换
3.客户端的任何一方配置为nat=yes
4.如果asterisk在呼叫中需要监听双音(DTMF)音(用于呼叫前转或者其他功能)
context=internal定义了指令的地点,用于控制电话的权限,以及如何处理此号码的呼入呼叫。sip.conf中设置的context名称和extensions.conf中的匹配。
如果你配置了一组相似的用户,你可以在[general]字段中使用相似的命令。asterisk会使用默认的定义,除非他们在用户的配置文档中明确改变。
客户端配置(软电话配置)
配置客户端通常简单。最重要的是注册用户名和密码,和你要注册的asterisk服务器地址。
Dialplan配置
很多sip电话,包括软件和硬件,都是多线程电话,意味着可以接受多个同时呼入的电话。这样,测试你的x-lite软电话你可以呼叫你自己,然后呼叫在astersk环回,二个在线用户端。拨打100,呼叫你自己。如果你选择的客户端不支持多线功能,你可以使用611号码进入Echo()应用:
[internal]
exten=>100,1,Dial(SIP/john)
exten=>611,1,Echo()
 
7 配置入局IAX连接
IAX协议通常用于服务器之间通信,就sip协议来说,硬件电话支持的更多些。然而,一些软件电话已经支持IAX协议,并且有人正致力于研究硬件电话对此协议的支持。IAX和SIP协议最大的区别在于媒体(语音)在端点之间传输的方式不同。
sip协议中,相对于使用信令模式来说,RTP流使用不同的端口进行传输。例如,asterisk默认的情况是在5060端口接收sip信令,在10000-20000端口接收RTP流。IAX协议则不同,所有的信令和媒体流都通过一个端口4569进行传输。这种方式的好处是iax协议更能适应在有nat的拓扑中应用。
IAX用户习惯对进入pbx系统的呼叫进行鉴权和处理。对从pbx系统呼出的呼叫,asterisk应用iax的iax.conf文件的端点进入(条目)对远端进行鉴权。
本章说明如何通过iax为你的系统设置一个FWD(全球免费拨打FreeWorldDialup)账号。FWD是一个免费的VOIP运营商,允许你免费拨打系统内的任何号码,不受物理位置的限制。FWD同时连接了一百多个其它你可以免费拨打的网络。
iax.conf配置
在iax.conf文件中,段落是由方括号定义的([])。每个iax.conf文件至少需要一个主要段落[general]。这个[general]段落中,定义使用IAX协议的相关设置,例如默认编码和抖动缓冲。你可以不考虑在[general]段落中默认编码,而在user or peer定义中进行设置。
以下[general]段落是iax.conf.sample配置文件中的默认设置。
[general]
bandwidth=low
disallow=lpc10
jitterbuffer=no
tos=lowdelay
autokill=yes

register=>fwd_number:password@iax2.fwdnet.net
[iaxfwd]
type=user
context=incoming
auth=rsa
inkeys=freeworddialup
在[gerneral]段落中,你需要增加一个register陈述。这个register陈述的目的是通知FWD IAX服务器你在互联网的位置(你的IP)。当呼叫你的FWD号码时,FWD服务器在数据库中搜寻,呼叫发送到和FWD号码关联的IP地址。
在[iaxfwd]段落中,通过type=user为用户定义呼入呼叫。用context=coming进行呼入呼叫鉴权。公钥用inkeys=freeworlddialup进行定义。freeworlddialup公钥是astersik的标准。
Dialplan配置
在extension.conf中处理呼入呼叫十分简单,首先建立一个context命名为imcoming。Context后面是Dial()陈述,用你的fWD账号替换号码10001拨号本章前面创建的sip分机。
[incoming]
exten=>10001,1,Dial(SIP/john)
 
8 配置出局IAX连接
iax.conf配置
[iaxfwd]
type=peer   ;-->定义端点的类型
host=iax2.fwdnet.net  ;-->设置用于呼叫的服务器
username=<fwd-account-number> ;-->FWD账号
secret=<fwd-account-password> ;-->FWD密码
qualify=yes   ;-->定期检查远端服务器是否响应
disallow=all   ;-->用于复位原来设置的所有编码信息,然后使用allow=codec设置你支持的编码和优先级(由高到低)
allow=ulaw
allow=gsm
allow=ilbc
allow=g728
在asterisk命令行使用iax2 show registry命令,检验你是否成功注册。
Dialplan配置
在extensions.conf中定义一个section,使我们能够将某个呼叫设置FWD回声测试应用。和前面的设置一样,我们要创建一个context,附带连接FWD回声测试的命令。使用连接fXS端口的电话,或者sip电话,拨打613,进行呼叫。
[internal]
exten=>613,1,Dial(IAX2/iaxfwd/613)
9 调试
asterisk提供了多种调试方法。连接控制台后,可以察看不同级别的冗长和调试输出,同时还有协议包tracing。
连接控制台
直接在系统命令行启动asterisk,使用下面的命令:
#/usr/sbin/asterisk -c
远程连接控制台,首先启动asterisk,然后连接
#/usr/sbin/asterisk
#/usr/sbin/asterisk -r
如果遇到某个模块不能载入的问题,或者某个模块导致asterisk不能载入,用-c flag启动asterisk进程,监视模块载入状态。
启动verbosity和Debugging
Asterisk可以以warning、notice和error消息形式输出调试信息。这些消息可以为你提供系统信息,例如注册、状态、呼叫进程和多种其它信息。请注意Warning和notice洲不是错误;error信息需要进行检查。激活不同级别的verbosity,使用set verbose,附加一个数值。有效佱从3-10,例如设置versosity的最高数值,使用:
#set verbose 10
你也可以通过设置调试级别激活核心调试信息。激活控制台的Debug输出,需要在logger.conf文件中增加debug到console=>文段,例如:
console=>warning,notice,error,event,debug
设置调试级别的有效值为3-10,例如:
#set debug 10
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Asterisk学习资料
zapata.conf配置参数说明(一)
Asterisk语音卡、语音网关的区别和不同配置
了解Asterisk软电话工具
FreeSWITCH通过迅时网关连接PSTN
1FXS、1FXO口带路由语音网关! 支持SIP加密模式,防止封杀
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服