Asterisk譯爲星號(*)在很多應用中被用做通配符,Astrisk做爲PBX系統的完美名稱,原因之一是Asterisk可以連接數目龐大的接口類型,包括:
撥號方案語法
1模擬接接口,如你的電話線或模擬電話.
2數字線路,如T-1和E-1線路
3Voip協議,如SIP和IAX
目前正式版本是IAX2,但是IAX1的所有格式都已經停掉.所以當說到IAX都是特拽IAX2
使用接口配置文件
1.Zaptel.conf:硬件接口基層配置,我們將建立一個FX0和一個FXS通道.
2.zapata.conf:硬件配置Asterisk的接口.
3.extension.conf:撥號方案文件.
4.sip.conf:配置SIP協議的文件
5.iax.conf:配置呼入和呼出IAX通道的文件
FXO與FXS通信
區別:區別簡單,就在於連接的那端提供撥號音.FXO不生成撥號音,而是接收.FXS端口提供撥號音和震鈴電壓,在有呼叫的時候提醒用戶.兩者接口都提供雙向通訊(同時雙方向的通訊傳輸).
如果Asterisk有個兼容FXO端口,就可以把電話線接入這端口,可以使用這根電話線呼叫和接收電話呼叫.同理,如果有個FXS端口,可以連接一部模擬電話,Asterisk就可以呼叫這部電話,可能也可以呼叫.(端口:通過配置使用的信令進行定義)
FXS卡必須像中心局(CO)進行運轉,使用FXO信令.同理,FXO卡連接CO,就意味着它需要像終端進行運轉,使用FXS信令.
Zaptel配置(FXO)
在/etc/zaptel.conf文件,用於配置硬件,可以定義FXS端口與FXO信令的配置:
fxsks=1 ;定義fxs端口採用通道1以ks信令協議
;fxoks=2 ;定義fxo端口採用通道2以ks信令協議
loadzone=us
defaultzone=us
|
信令協議:Loop start(ls),ground start(gs),kewlstart(ks),使用ks外信令協議,把fxoks中的ks替換ls或gs,Asterisk的模擬電路推薦ks信令協議.
******編輯完zaptel.conf文件,需要使用/sbin/ztcfg -vv裝載配置到硬件(不須要詳細輸出可以省略-vv);修改信令方法需要重啓.在編輯sip.conf和iax.conf文檔後,分別需要裝載chan_iax2.so和chan_sip.so
Zapata配置
[trunkgroups] ;定義一個主幹組
; define any trunk groups
[channels] ;硬件通道和他們選項信令方式.
; hardware channels ;硬件通道
; default ;默認
busydetect=yes ;增加這兩行,要不FXO口不能檢測到掛機信號。
busycount=5 usecallerid=yes ;設置來電顯示
hidecallerid=no ;設置去電不隱藏號碼
callwaiting=yes ;設置呼叫等待
threewaycalling=yes ;開啓三方通話(先閃斷,再呼叫第三方,再閃斷,就可以實現三方通話)
transfer=yes ;轉叫前轉(需要三方通話支持)
echocancel=yes ;回聲消除
echotraining=yes ;迴音練習(會話前發個聲音,用於測試回聲)
; define channels ;定義通道
context=from-test ; Context內執行指令需要在extensions.conf內定義 [from-test]
signalling=fxs_ks ;FXO通道使用FXS信令
channel => 2 ; PSTN放在端口2上
|
允許zaptel和其它設備通過PCI硬件安裝到系統中,編輯udev
[root@ask asterisk]# vi /etc/udev/rules.d/50-udev.rules
#在末尾添加上以下
KERNEL="zapctl", NAME="zap/ctl"
KERNEL="zaptimer", NAME="zap/timer"
KERNEL="zapchannel", NAME="zap/channel"
KERNEL="zappseudo", NAME="zap/pseudo"
KERNEL="zap[0-9]*", NAME="zap/%n"
|
Dialplan配置
基本的撥號方案,使用Echo()校驗工作通道雙向通訊;
[from-test]
exten => s,1,Answer()
exten => s,n,Echo()
|
SIP
SIP(會話初始協議),通常用於VOIP電話,進行呼叫建立,呼叫協商,呼叫結束.它幫助兩個端互相通認,但它不處理媒體;當呼叫建立後,他通過實時傳輸協議(RTP)在電話A到電話B直接傳輸媒體.
SIP和RTP
SIP是一個應用層的信令協議.他使用的端口是5060(通常)進行通信.SIP可以通過UDP和TCP傳輸層協議進行傳輸.Asterisk目前沒有TCP用於傳輸SIP信息.
RTP用於端點間傳輸媒體(語音),Asterisk中RTP使用大數字的無特權端口(默認10,000到20,000)
SIP優點:普通的被接受和結構靈活.其它的VOIP協議還有H.323,IAX,MGCP.
SIP配置
/etc/asterisk/sip.conf文件中:
[general]
context=default
srvlookup=yet ;建立一個邏輯和可解析地址的方法,你可以達到這個地址,還可以獲取DNS很多好處
[10000]
username=10000 ;用戶名
type=friend ;可以定義用戶(user)/端(peer)/朋友(friend)
secret=123456 ;認證密碼
record_out=Always;去電錄音Adhoc須要時,Never從不,Always總是
record_in=Never ;來電錄音 callgroup ;呼叫組,默認爲"1"
pickupgroup ;代接組
disallow ;不允許編碼
allow ;允許編碼
port=5060 ;端口號
qualify=yes ;監視Asterisk服務器與電話之間是否延時(默認2,000可達;yes可替換毫秒)
context=default ;指令的地點
host=dynamic ;要求號碼要註冊,以便Asterisk如何找到電話.(static則不需要註冊)
dtmfmode=rfc2833 ;
callerid=test1 <10000>
canreinvite=no ;
|
用戶戶類型是用於認證呼入呼叫;端類型用於呼出呼叫;朋友類型兩種都用.(這個常用在sip.conf與iax.conf中用到)
IAX
IAX(Inter Aasterisk eXchange)協議通常用於服務器間通信.IAX和SIP協議最大區別在於媒體(語音)在端點之間傳輸的方式不同.
Asterisk默認情況是在5060端口接收SIP信令,在10000-20000端口接收RTP(媒體)流.而IAX所有的信令和媒體流都通過一個端口4569進行傳輸.這種方式的好處是IAX協議能更適合在NAT相關拓撲的應用.
IAX用戶習慣對進入PBX系統的呼叫進行鑑權和處理.對從PBX系統呼出的呼叫,Asterisk應用IAX的iax.conf文件的端點進入(條目)對遠端進行鑑權)
通過iax.conf設置進行呼叫的鑑權和處理:
[general] ;至少需要一個主要段落,主要定義IAX協議的相關設置.
jitterbuffer=no
register => remote_number:password@domain ;註冊到遠程服務器上,告訴服務器當前位置(互聯網位置)在哪
[REC_SERVER]
type=user ;用user來定義呼入呼叫的類型
context=incoming ;進行呼入呼叫鑑定
auth=rsa
inkeys= ;公鑰,是Asterisk標準
通過extensions.conf設置一個incoming的context:
[incoming]
exten => remote_number,1,Dial(SIP/number) ;撥打遠程號碼時(呼入)轉移到number(內部)號碼上
|
--------以上是IAX入局配置,下面配置出局IAX連接--------
在iax.conf設置呼出條目
[REMOTE_SERVER]
type=peer ;用peer定義呼出類型
host=my.receiving.server.ca ;接收服務器域名或IP地址
username=number ;接收服務器認證用戶(賬戶號碼)
secret=password ;接收服務器認證密碼(賬戶密碼)
qualify=yes ;不時檢查遠端的服務器是否響應用
disallow=all ;用於復位原來設置的所有編碼信息
allow=gsm ;支持gsm編碼
allow=libc ;支持libc編碼
allow=g726 ;支持持g726編碼
****使用disallow復位原來設置的所有編碼信息.再重新設置支持的編碼,優先級從高到低
|
在extensions.conf設置
[to_remove]
exten => remove_number,1,Dial(IAX2/REMOVE_SERVER/number)
|
Asterisk的撥號方案在文件extensions.conf中定義(/etc/asterisk/extensions.con)
extensions.conf(四部分:context,extension,priorities,application)
context:用於對extensions組命名,把撥號方案的不同部分進行分離,免得交織在一起.
表示方法是把名字放在[]的中間,名字只能用a~z,A~Z,0~9,以及連字號和下劃線組成(空格不在允許的字符裏面,context中不要 使用空格).如:[context1],[incoming],[default];所有放在context定義的之後的指令都是這個context一部 分,直到下一個context定義的開始.
context的一個重要用途就是加強安全性.如果沒有仔細設計撥號方案,可能會造成別人盜用你的系統的不良後果.
extensions:extensions是asterisk要執行的指令,由來電或通道上所撥數字來觸發.可以定義電話分機
extension的語法是單詞exten後面跟着一個由等號和大於號組成的箭頭,如:exten => extension的名字
一個完整的extension由三部分組成:
extensions的名字或號碼
priority(每個extension可以有多個步驟,步驟的編號稱作priority)
|
應用(或者命令),針對呼叫完成一些動作
這三個部分用英文逗號分開,如:
exten => name,priority,application() |
priorities:每個extension都可以有幾個步驟,稱作priorities
如:
exten=>50001,1,Answer() #編號爲1的priority,執行接聽電話
exten=>50001,2,Hangup() #編號爲2的priority,然後掛電話
|
必須確保priority從1開始並且連續的編號
application:動作,比如:播放聲音,接受音頻撥號輸入或者掛斷電話等.
如有引用本文http://lwb12915.bokee.com/control/diary/preview.b請註冊版權所有