Asterisk的基本配置 1 我到底需要什么 星號(*)在很多不同的應(yīng)用中被用作通配符。星號作為這個PBX系統(tǒng)的完美名稱,原因很多,其中之一是asterisk可以連接數(shù)目龐大的接口類型,包括: 模擬接口,如你的電話線和模擬電話 數(shù)字線路,如T1和E1 VOIP協(xié)議,如SIP和IAX 2 使用的配置文件 本文主要講述如何配置以下四種通道:FXO通道、FXS通道、SIP通道和IAX通道,目標(biāo)不是對所有的通道或拓?fù)溥M(jìn)行研究,而只是提供一個基本的平臺,在此基礎(chǔ)上建立自己的電話系統(tǒng)。 使用到的配置文件: zaptel.conf ---用于做硬件接口的基層配置。我們將建立一個FXO和一個FXS通道 zapata.conf ---用于為硬件配置Asterisk的接口 extensions.conf- ---撥號方案 sip.conf ---配置sip協(xié)議的文件 iax.conf ---配置呼入和呼出iax通道的文件 3 FXO和FXS通道 FXO不生成撥號音而是接受,撥號音由電話公司提供,該端口接入到電話公司 FXS口提供撥號音和振鈴電壓,在有呼入的時候提醒用戶,該端口接入到電話終端 端口是通過配置使用的信令進(jìn)行定義的,而不會是物理端口類型。例如,一個物理的FXO口可以在配置中使用FXS信令定義,而FXS端口可以用FXO信令定義。(未理解) 4 配置FXO通道 要配置FXO通道,先要配置zaptel,再配置zapata zaptel配置 配置文件為/etc/zaptel.conf。下面是定義FXS端口的FXS信令的最低限度的配置: fxsks=2 loadzone=us defaultzone=us 第一行,除了我們提到正在使用的FXO或FXS信令外,還可以為通道2定義了以下協(xié)議中的一種:Loop stars (ls)、Ground start(gs)、Kewlstart(ks) loop start和ground start之間的區(qū)別在于設(shè)備如何請求撥號音:ground start電路信號通知遠(yuǎn)端它需要撥號音,即刻grounding one of the leads;環(huán)路啟動電路使用一個short來請求撥號音。新的使用中不常見,但模擬ground start線路仍然在某些地區(qū)使用。例如,ground start線路的優(yōu)勢在于消除一種叫做glare的現(xiàn)象,這種現(xiàn)象在loop start線路和PBX較高的呼叫音量時出現(xiàn)。北美所有的家庭線路(和模擬電話、解調(diào)器、傳真)使用loopstart信令。kewlstart實際上和loopstart相同,只是更為智能,能夠更好的檢測遠(yuǎn)端的斷線。kewlstart是asterisk的模擬電路推薦的信令協(xié)議。 要配置kewlstart以外的信令,用ls或者gs替換fxsks中的ks。 第二行,loadzone配置通道使用的提示包(在zonedata.c中配置)。zonedata.c包含了在某個國家中電話系統(tǒng)需要使用的不同聲音信息:撥號音、回鈴音、忙音等等。當(dāng)你為zap通道應(yīng)用一個裝載過的音域,這個通道就會模擬特定國家的提示音。不同的提示包可以為不同的通道配置。 Defaultzone用于通道沒有指定音域的情況。 配置完zaptel.conf后,你可以載入板卡的驅(qū)動。modprobe用于裝載linux內(nèi)核模塊,例如裝載wctdm驅(qū)動,你需要運行: #modprobe wctdm 如果驅(qū)動裝載沒有任何提示,則表示裝載成功。你可以檢測硬件和端口是否正確裝載和配置,使用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? 從內(nèi)存中卸載驅(qū)動,使用rmmode命令,如下: #rmmod wctdm zttool是個分析工具,用來分析硬件的狀態(tài)。運行后,可以看到一個所有安裝硬件的菜單。你可以選擇某個硬件,查看目前狀態(tài)。OK表示硬件安裝正確。 Asterisk通常情況下可以認(rèn)為模塊安裝成功,但是要在裝載模塊時看調(diào)試輸出,需要看控制臺輸出(默認(rèn)輸出在TTY 9,可以在safe_asterisk中進(jìn)行配置。) zapata配置 asterisk使用zapata.conf文件確定系統(tǒng)中安裝的電話硬件的設(shè)置。zapata.conf文件同時控制硬件通道相關(guān)的不同功能和特性,例如主叫號碼顯示,呼叫等待,回聲消除,以及各種其它功能。 zapata.conf文件配置asterisk硬件和相關(guān)特性的控制: [trunkgroups] ;define any trunk groups [channels] ;hardware channels ;default usecallerid=yes ;--------設(shè)置來電顯示 hidecallerid=no ;----------設(shè)置呼出時不隱藏 callwaiting=no ;--------禁止呼叫等待 threewaycalling=yes ;----------開啟三方通話功能 transfer=yes ;--------可以使用閃斷鍵hook switch flash 實現(xiàn)呼叫前轉(zhuǎn),它需要先開啟三方通話 echocancel=yes ;----------消除模擬線路可能產(chǎn)生的回聲 echotraining=yes ;--------回聲消除需要一些時間去學(xué)習(xí),你可以使用回聲訓(xùn)練來加速這個過程 ;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=>定義之前配置選項。 當(dāng)一個呼叫到達(dá)FXO接口時,你可能希望執(zhí)行一些動作。這些在一個稱為上下文context指令集中進(jìn)行配置。FXO端口的呼入呼叫由context=incoming指向incoming context。 最后由于FXO通道使用FXS信令,我們用signalling=fxs_ks對此進(jìn)行定義 Dialplan配置 以下是基本撥號方案,使用ECHO()應(yīng)用來校驗工作通道的雙向通訊: [incoming] ;incoming calls from the FXO port are directed to this context from zapata.conf exten => s,1,Answer() exten => s,2,Ecsho() 無論你說什么,Echo()都將會回轉(zhuǎn)給你 呼入 以上FXO通道已經(jīng)配置完畢,我們來測試一下。運行zttool應(yīng)用,把PSTN線路連接到你的語音卡的FXO端口,你可以看到卡上有一個紅色的指示。 現(xiàn)在從另外一個電話上撥打這個PSTN號,Asterisk會接收這個呼叫并執(zhí)行Echo()應(yīng)用。如果你可以聽到回送過來的你的聲音,則FXO通道的安裝和配置已經(jīng)成功。 5 配置FXS通道 zaptel配置 以下是TDM400P的FXS通道的基本配置。配置和FXO通道的配置相似,只是增加了fxoks=1。 FXO口與FXS口的配置是相反的,F(xiàn)XO口配置fxs信令:fxsks,FXS口配置fxo信令:fxoks 配置如下: fxoks=1 ;----配置通道1使用FXO信令,通道1為S口 fxsks=2 ;----配置通道2使用FXS信令,通道2為O口 loadzone=us defaultzone=us 配置完后為硬件裝載驅(qū)動. 使用/sbin/ztcfg -vv檢測他們的狀態(tài) 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),通道號設(shè)置為1。 FXS通道可以設(shè)置 為電話摘機(jī)后執(zhí)行二種不同動作中的一種。最普遍的是Asterisk產(chǎn)生撥號間,等待用戶輸入。這種用immediate=no進(jìn)行配置。另一種是Asterisk自行執(zhí)行一套撥號方案中設(shè)置的指令,而不是產(chǎn)生撥號音,通過immediate=yes進(jìn)行配置。執(zhí)行指令在該通道的context中設(shè)置,并匹配s擴(kuò)展。 新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() 當(dāng)你在分機(jī)上括611后,你所說的話會返回給你,從而檢測雙向語音 6 sip配置 sip--會話初始協(xié)議,通常用于voip電話,進(jìn)行呼叫建立、呼叫結(jié)束以及呼叫進(jìn)程中的協(xié)商?;旧?,它幫助二個端點互相通話。sip不處理媒體;當(dāng)呼叫建立之后,它通過實時傳輸協(xié)議在電話之間直接傳輸媒體。 SIP使用UDP5060端口進(jìn)行通信,目前asterisk沒有TCP用于傳輸,但以后的版本可能會支持。我們所說的媒體是指端點之間傳輸?shù)挠糜谠诹硪欢它c重建你的聲音數(shù)據(jù)。同樣也指pbx音樂或聲音提示。 RTP用于在端點之間傳輸媒體。Asterisk中RTP使用大數(shù)字的無特權(quán)的端口(默認(rèn)10000至20000) SIP不是第一個,也不是唯一一個我們使用的VOIP協(xié)議(其它包括H.323,MGCP,IAX等),但是目前SIP似乎是硬件廠商最大的動力。SIP協(xié)議的優(yōu)點是普遍的被接受和結(jié)構(gòu)靈活,簡單。 下面是基本的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]項,包含通道設(shè)置,所有用戶和對端默認(rèn)選項。在一個端-用戶/端的基礎(chǔ)上,你可以不考慮默認(rèn)的配置,而在user/peer定義中重新進(jìn)行配置。 域名系統(tǒng)服務(wù)記錄(DNS SRV records)是建立一個邏輯和可解析地址的方法,你可以到達(dá)這個地址。這種方法可以是呼叫傳輸?shù)讲煌牡攸c,而不需要改變邏輯地址。使用SRV記錄,你可以獲取DNS的很多好處,然而禁止它們打破SIP RFC的規(guī)定,并且禁止了基于域名的SIP呼叫(注意如果多個記錄返回,Asterisk只會使用第一個)。 DNS SRV記錄查詢在ASterisk默認(rèn)禁止,但是強(qiáng)烈建議你打開。啟動使用sip.conf中[general]section里面的srvlookup=yes。 每個連接都會定義為用戶、端或者朋友。用戶類型是用于認(rèn)證呼入呼叫;端類型用于呼出呼叫;朋友類型兩種都用。擴(kuò)展名用中括號定義。 Secret是用于認(rèn)證的密碼。 qualify=yes,確認(rèn)遠(yuǎn)端設(shè)備是否可達(dá)。可用于監(jiān)視任何遠(yuǎn)端商務(wù),包括其它的Asterisk服務(wù)器。默認(rèn)情況是Asterisk認(rèn)為時延在2000ms以內(nèi)的設(shè)備可達(dá)。你可以通過將yes替換為毫秒來配置Asterisk判斷對端是否可達(dá)的時間。 如果一個號碼在NAT設(shè)備后面,例如路由器或者防火墻,必須配置nat=yes,強(qiáng)迫astersik忽略號碼的聯(lián)系信息,使用收到的包的地址信息。 設(shè)host=dynamic將要求號碼注冊,以便asterisk可以知道如何找到電話。將一個端點綁定到一個單獨地址或者FQDN,將dynamic替換成IP地址或者域名。注意這只是限制你呼叫的目的地址,用戶允許從任何地點發(fā)起呼叫(假定它鑒權(quán)成功)。如果你設(shè)置host=static,則終端設(shè)備不需要注冊。 設(shè)置canreinvite=no。在sip協(xié)議中,邀請用于發(fā)起呼叫,重寫向媒體。在初始邀請后相同對話中發(fā)起的任何邀請都被視作重邀請(reinvite).例如:假設(shè)雙方正在交換媒體信息。如果一方呼叫等待,asterisk設(shè)置為播放呼叫等待音樂,asterisk會發(fā)起到第二個客戶端的重邀請,告訴將他的媒體流定向到PBX。然后就可以傳輸音樂流,或者一個等待客戶的通知。最開始的用戶再到PBX的重邀請中發(fā)起一個接機(jī)的命令,然后pbx發(fā)起一個重邀請到第二方,要求它將媒體流重新定向到發(fā)起方,結(jié)束呼叫等待音樂,重新連接客戶端。 通常,當(dāng)二個端點建立起呼叫,他們直接從一端到另一端傳輸媒體。asterisk通常在媒體通道打破這個規(guī)則,允許它聽到電話鍵盤上的撥號音。這是必須的,因為如果asterisk不能確定呼叫長度,計費將不準(zhǔn)確。canreinvite=no讓asterisk媒體經(jīng)過自己,而不允許rtp信息直接在端點之間傳送。 asterisk在以下情況下不會發(fā)起重邀請: 1.客戶端的任何一方配置為canreinvite=no 2.客戶端不能協(xié)商編碼,asterisk需要執(zhí)行語音編碼轉(zhuǎn)換 3.客戶端的任何一方配置為nat=yes 4.如果asterisk在呼叫中需要監(jiān)聽雙音(DTMF)音(用于呼叫前轉(zhuǎn)或者其他功能) context=internal定義了指令的地點,用于控制電話的權(quán)限,以及如何處理此號碼的呼入呼叫。sip.conf中設(shè)置的context名稱和extensions.conf中的匹配。 如果你配置了一組相似的用戶,你可以在[general]字段中使用相似的命令。asterisk會使用默認(rèn)的定義,除非他們在用戶的配置文檔中明確改變。 客戶端配置(軟電話配置) 配置客戶端通常簡單。最重要的是注冊用戶名和密碼,和你要注冊的asterisk服務(wù)器地址。 Dialplan配置 很多sip電話,包括軟件和硬件,都是多線程電話,意味著可以接受多個同時呼入的電話。這樣,測試你的x-lite軟電話你可以呼叫你自己,然后呼叫在astersk環(huán)回,二個在線用戶端。撥打100,呼叫你自己。如果你選擇的客戶端不支持多線功能,你可以使用611號碼進(jìn)入Echo()應(yīng)用: [internal] exten=>100,1,Dial(SIP/john) exten=>611,1,Echo() 7 配置入局IAX連接 IAX協(xié)議通常用于服務(wù)器之間通信,就sip協(xié)議來說,硬件電話支持的更多些。然而,一些軟件電話已經(jīng)支持IAX協(xié)議,并且有人正致力于研究硬件電話對此協(xié)議的支持。IAX和SIP協(xié)議最大的區(qū)別在于媒體(語音)在端點之間傳輸?shù)姆绞讲煌?br>sip協(xié)議中,相對于使用信令模式來說,RTP流使用不同的端口進(jìn)行傳輸。例如,asterisk默認(rèn)的情況是在5060端口接收sip信令,在10000-20000端口接收RTP流。IAX協(xié)議則不同,所有的信令和媒體流都通過一個端口4569進(jìn)行傳輸。這種方式的好處是iax協(xié)議更能適應(yīng)在有nat的拓?fù)渲袘?yīng)用。 IAX用戶習(xí)慣對進(jìn)入pbx系統(tǒng)的呼叫進(jìn)行鑒權(quán)和處理。對從pbx系統(tǒng)呼出的呼叫,asterisk應(yīng)用iax的iax.conf文件的端點進(jìn)入(條目)對遠(yuǎn)端進(jìn)行鑒權(quán)。 本章說明如何通過iax為你的系統(tǒng)設(shè)置一個FWD(全球免費撥打FreeWorldDialup)賬號。FWD是一個免費的VOIP運營商,允許你免費撥打系統(tǒng)內(nèi)的任何號碼,不受物理位置的限制。FWD同時連接了一百多個其它你可以免費撥打的網(wǎng)絡(luò)。 iax.conf配置 在iax.conf文件中,段落是由方括號定義的([])。每個iax.conf文件至少需要一個主要段落[general]。這個[general]段落中,定義使用IAX協(xié)議的相關(guān)設(shè)置,例如默認(rèn)編碼和抖動緩沖。你可以不考慮在[general]段落中默認(rèn)編碼,而在user or peer定義中進(jìn)行設(shè)置。 以下[general]段落是iax.conf.sample配置文件中的默認(rèn)設(shè)置。 [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服務(wù)器你在互聯(lián)網(wǎng)的位置(你的IP)。當(dāng)呼叫你的FWD號碼時,F(xiàn)WD服務(wù)器在數(shù)據(jù)庫中搜尋,呼叫發(fā)送到和FWD號碼關(guān)聯(lián)的IP地址。 在[iaxfwd]段落中,通過type=user為用戶定義呼入呼叫。用context=coming進(jìn)行呼入呼叫鑒權(quán)。公鑰用inkeys=freeworlddialup進(jìn)行定義。freeworlddialup公鑰是astersik的標(biāo)準(zhǔn)。 Dialplan配置 在extension.conf中處理呼入呼叫十分簡單,首先建立一個context命名為imcoming。Context后面是Dial()陳述,用你的fWD賬號替換號碼10001撥號本章前面創(chuàng)建的sip分機(jī)。 [incoming] exten=>10001,1,Dial(SIP/john) 8 配置出局IAX連接 iax.conf配置 [iaxfwd] type=peer ;-->定義端點的類型 host=iax2.fwdnet.net ;-->設(shè)置用于呼叫的服務(wù)器 username=<fwd-account-number> ;-->FWD賬號 secret=<fwd-account-password> ;-->FWD密碼 qualify=yes ;-->定期檢查遠(yuǎn)端服務(wù)器是否響應(yīng) disallow=all ;-->用于復(fù)位原來設(shè)置的所有編碼信息,然后使用allow=codec設(shè)置你支持的編碼和優(yōu)先級(由高到低) allow=ulaw allow=gsm allow=ilbc allow=g728 在asterisk命令行使用iax2 show registry命令,檢驗?zāi)闶欠癯晒ψ浴?/span> Dialplan配置 在extensions.conf中定義一個section,使我們能夠?qū)⒛硞€呼叫設(shè)置FWD回聲測試應(yīng)用。和前面的設(shè)置一樣,我們要創(chuàng)建一個context,附帶連接FWD回聲測試的命令。使用連接fXS端口的電話,或者sip電話,撥打613,進(jìn)行呼叫。 [internal] exten=>613,1,Dial(IAX2/iaxfwd/613) 9 調(diào)試 asterisk提供了多種調(diào)試方法。連接控制臺后,可以察看不同級別的冗長和調(diào)試輸出,同時還有協(xié)議包tracing。 連接控制臺 直接在系統(tǒng)命令行啟動asterisk,使用下面的命令: #/usr/sbin/asterisk -c 遠(yuǎn)程連接控制臺,首先啟動asterisk,然后連接 #/usr/sbin/asterisk #/usr/sbin/asterisk -r 如果遇到某個模塊不能載入的問題,或者某個模塊導(dǎo)致asterisk不能載入,用-c flag啟動asterisk進(jìn)程,監(jiān)視模塊載入狀態(tài)。 啟動verbosity和Debugging
Asterisk可以以warning、notice和error消息形式輸出調(diào)試信息。這些消息可以為你提供系統(tǒng)信息,例如注冊、狀態(tài)、呼叫進(jìn)程和多種其它信息。請注意Warning和notice洲不是錯誤;error信息需要進(jìn)行檢查。激活不同級別的verbosity,使用set verbose,附加一個數(shù)值。有效佱從3-10,例如設(shè)置versosity的最高數(shù)值,使用: #set verbose 10 你也可以通過設(shè)置調(diào)試級別激活核心調(diào)試信息。激活控制臺的Debug輸出,需要在logger.conf文件中增加debug到console=>文段,例如: console=>warning,notice,error,event,debug 設(shè)置調(diào)試級別的有效值為3-10,例如: #set debug 10 |
|