說明:
在測試fusionpbx時,用戶需要對阿里云安全策略有一定的了解,用戶需要對FreeSWITCH的基礎(chǔ)配置有一定的了解。
測試環(huán)境包括:基于阿里云的FusionPBX,SIP trunk, 和落地網(wǎng)關(guān)和SIP終端。具體拓撲示例如下:
簡單配置說明:
- 用戶呼出呼入使用SIP trunk 和FXO/E1/LET方式實現(xiàn)
- 分機可以支持安卓版本的SIP APP,電腦端 SIP終端和物理SIP話機
- 在云服務(wù)器配置必要的安全策略
基于云平臺的fusionpbx可以應(yīng)用的業(yè)務(wù)場景:
- 分公司員工異地通信(無需VPN異地部署,各地分機直接注冊到云PBX,支持安卓蘋果SIP客戶端,支持基于PC的SIP 軟電話,支持物理SIP 終端)
- 云通信對講平臺對接
- 跨國公司之間的溝通
1通過腳本安裝FusionPBX
FusionPBX官方提供了各種開源操作系統(tǒng)支持的安裝方式,為了安裝方便,保證成功安裝,筆者建議用戶安裝Debian操作系統(tǒng)。所以在開啟云實例前,選擇Debian系統(tǒng)。其他系統(tǒng)包括FreeSWITCH官方也不推薦,因此,為了節(jié)省時間,建議用戶使用Debian比較新的版本。再次提醒,如果安裝云平臺的話,基于國內(nèi)客戶使用清華的源來更新系統(tǒng)的支持包,否則會相當(dāng)慢。
首先下載官方的安裝腳本,但是,官方腳本我們國內(nèi)可能訪問有問題,用戶使用VPN方式獲得腳本代碼,保存到示例中。
wget -O - https://raw.githubusercontent.com/fusionpbx/fusionpbx-install.sh/master/debian/pre-install.sh | sh;
cd /usr/src/fusionpbx-install.sh/debian && ./install.sh
注意,如果國內(nèi)用戶訪問以上鏈接時,其鏈接已經(jīng)被屏蔽,如果需要獲取安裝腳本的話,用戶需要通過VPN獲得此腳本。
#!/bin/sh
#upgrade the packages
apt-get update && apt-get upgrade -y // debian 或者centos 使用不同命令-yum
#install packages
apt-get install -y git lsb-release
#get the install script
cd /usr/src && git clone https://github.com/fusionpbx/fusionpbx-install.sh.git
#change the working directory
cd /usr/src/fusionpbx-install.sh/debian
或者切換到centos 路徑下安裝centos系統(tǒng)資源支持包
注意,我們需要訪問github,最近國內(nèi)訪問github非常慢,我們需要訪問github的fusionpbx代碼,所以,我們需要修改github.com 切換到github加速的域名上,訪問速度會比較快。因此,用戶需要修改install.sh 腳本中fusionpbx的訪問路徑來加速。
修改好了install.php 以后,然后執(zhí)行安裝腳本:
./install.sh的安裝命令,一步步安裝系統(tǒng)支持包,fusionpbx 包和freeswitch支持包,數(shù)據(jù)庫配置,最好提示安裝的IP地址和訪問界面。
這里,如果無需FreeSWITCH高清語音支持的話,可以移除下載安裝命令。
如果一切正常的話,安裝完成后會顯示用戶名稱和其數(shù)據(jù)庫,界面登錄密碼。
如果出現(xiàn)80端口被占用的錯誤的話,用戶可以移除apache2 或者關(guān)閉其服務(wù),或者修改apache2端口。
官方?jīng)]有ISO鏡像文件,用戶只能通過腳本安裝。如果是后期再次使用的話,基于用戶自己手動下載源代碼,然后拷貝到目的地鏈接,無需通過github下載。因為是基于互聯(lián)網(wǎng)環(huán)境的安裝,用戶每次安裝不能保證其版本和連接正常,因此會帶來很多維護的不確定性。
2配置FusionPBX的SIP trunk
為了實現(xiàn)呼入呼出的測試,我們使用SIP trunk的方式來進行接入支持。SIP trunk配置非常簡單,在賬號子菜單中網(wǎng)關(guān)中添加SIP trunk IP,用戶名稱和密碼即可。然后在ACL中添加SIP trunk 地址 允許設(shè)置。
reload sip external 設(shè)置,可以看到SIP trunk已經(jīng)注冊成功。
注意,一般運營商提供的對接是5060端口,F(xiàn)usionPBX的外部端口是5080端口,所以在配置時用戶需要核實具體配置。如果需要對接5060端口,需要特別在SIP IP地址處指定,當(dāng)然如果用戶熟悉freeswitch的話,也可以通過xml修改,或者通過fusionpbx 高級設(shè)置中修改全局變量。
3通過FusionPBX設(shè)置SIP trunk呼入呼出
因為FusinPBX的很多設(shè)置需要特別注意,因此,筆者把這些配置步驟都分開介紹。FusionPBX設(shè)置呼入呼出相對比較迷惑,用戶需要使用不同瀏覽器多次配置才能保證其呼叫正常。簡單配置的方式是,用戶通過撥號規(guī)則子菜單提供目的地設(shè)置選擇呼入還是呼出的方式進行設(shè)置。
點擊“show all”才能看到所有配置
通過SIP trunk 呼入路由,路由到分機 100:
配置呼出方式:
用戶如果自己可以修改xml的話,也可以修改xml文件實現(xiàn)非常靈活的配置:
以上配置中,呼出號碼是15位號碼(國際長途呼叫手機)。但是,在Fusionpbx環(huán)境中,筆者不建議這樣使用。這樣的配置和界面看到的配置有時可能是完全不同的,數(shù)據(jù)不能同步,這樣會導(dǎo)致后期很多的維護問題,并且增加了系統(tǒng)的風(fēng)險。
4FusionPBX呼入呼出配置界面存在的一些問題
通過FusionPBX設(shè)置呼入呼出時,因為可以通過編輯xml文件來實現(xiàn)某些特定的路由功能,因此用戶需要注意修改記錄的維護。
圖片界面顯示的語法和xml原始xml配置不同。用戶需要手動添加到界面。如果需要通過界面修改語法的話,用戶一定要非常熟悉FreeSWITCH的語法配置。
點擊目的地設(shè)置以后,沒有顯示分機選項。需要換不同瀏覽器測試或者重新刷新。
通過SIP 分機呼叫國內(nèi)手機號碼,手機接聽。
呼入以后,轉(zhuǎn)分機100
5云FusionPBX通過落地網(wǎng)關(guān)實現(xiàn)呼入呼出
這里,我們討論通過落地網(wǎng)關(guān)實現(xiàn)云Fusionpbx 呼入呼出的設(shè)置。因為相關(guān)部門對SIP trunk的管理不斷的規(guī)范,一些SIP trunk,甚至是正常的SIP trunk 雙向呼叫有時會遇到問題,一些客戶不得不使用落地網(wǎng)關(guān)的方式來實現(xiàn)企業(yè)通信的業(yè)務(wù)需求。但是,因為云FusionPBX在外網(wǎng)環(huán)境中,通過落地網(wǎng)關(guān)對接云FusionPBX的話,網(wǎng)關(guān)需要注冊到FusionPBX(一般,同一網(wǎng)段直接通過IP對接)。比較頭疼的是,F(xiàn)usionPBX本身的設(shè)計初衷是針對SIP trunk來支持呼入呼出的,它本身并沒有一個良好的配置方式來支持落地網(wǎng)關(guān)的路由。網(wǎng)關(guān)注冊到fusionPBX的話,網(wǎng)關(guān)可以作為一個SIP賬號的方式實現(xiàn)注冊,呼入呼出時通過bridge的方式橋接到這個SIP 分機。因此,用戶需要首先在SIP 分機注冊的基礎(chǔ)上,再添加一個橋接方式:
然后,如果用戶需要呼出的時候,選擇橋接的地址。FusionPBX 通過橋接呼叫到分機1000(網(wǎng)關(guān)分機),然后出局。注意,目的地地址的IP的分機的設(shè)置地址,用戶需要根據(jù)FreeSWITCH的語法自己手動添加。界面無選擇選項和提示,可能會讓用戶非常迷惑。有時,填寫了錯誤的語法,系統(tǒng)也可能不會提示錯誤。
如果用戶需要通過界面控制注冊分機的呼入呼出的話,用戶需要修改界面很多配置選項,例如context配置,xml配置選項。如果在呼入流程中涉及到其他業(yè)務(wù)處理的話,如果使用分機網(wǎng)關(guān)注冊的方式的話,控制界面就很難實現(xiàn)對其業(yè)務(wù)層面的管理。另外,因為fusionpbx可以實現(xiàn)多租戶的方式,如果多租戶方式在呼入路由方面有很多不同的路由策略的話,fusionpbx不修改xml文件很難實現(xiàn)其豐富的呼入路由功能,界面管理就會非常復(fù)雜或者失控。所以,如果用戶需要通過分機網(wǎng)關(guān)注冊模式對云FusionPBX實現(xiàn)雙向呼叫的話,簡單的辦法就是通過修改xml文件來實現(xiàn)。我們在測試環(huán)境中使用了openvox的無線落地網(wǎng)關(guān),在xml配置落地網(wǎng)關(guān)可以實現(xiàn)呼入呼出的功能。
在Openvox的無線網(wǎng)關(guān)設(shè)置中,呼入設(shè)置的話,可以修改xml文件來指定路由規(guī)則。
首先,修改freeswitch 配置文件/etc/freeswitch/dialplan/default.xml (呼出規(guī)則)
<extension name="gw">
<condition field="${sofia_contact(1008@$${local_ip_v4})}" expression="^sofia\/internal\/sip:s\@(.*)$" break="never">
<action application="set" data="openvox=$1"/>
</condition>
<condition field="destination_number" expression="^55(\d{+})$">
<action application="bridge" data="SOFIA/internal/$1@${openvox}"/>
</condition>
</extension>
以55開頭的號碼匹配此規(guī)則,改匹配規(guī)則可以自動獲取分機1008注冊的IP和端口號。
此處前傳號碼即為呼叫的DID,可以自己定義號碼,修改/etc/freeswitch/dialplan/default.xml 處匹配此號碼后做相應(yīng)的操作
綜上所述,筆者介紹了各種落地路由的問題和維護帶來的隱患。如果用戶在云平臺部署了FusionPBX需要通過網(wǎng)關(guān)落地的話,筆者只能建議通過修改xml配置文件,然后通過橋接方式出局。FusionPBX界面控制策略。
所以,為了保證界面控制的可維護性和配置便捷性,用戶如果非必要,盡量通過SIP trunk的方式來實現(xiàn)呼入呼出路由。
6FusionPBX其他配置的討論
筆者通過一點時間的測試和一些客戶反饋發(fā)現(xiàn)FusionPBX仍然有許多地方需要做大量的優(yōu)化和改進才能滿足市場中IPPBX產(chǎn)品的需求。因為沒有經(jīng)過完整的功能測試,目前用戶反饋的問題是:
- 中文界面漢化需要大量的配置文件的修改,有時需要涉及數(shù)據(jù)庫內(nèi)容修改。
- 界面配置風(fēng)格可以靈活配置,但是,如果針對多租戶用戶容易導(dǎo)致用戶對配置信息位置錯誤理解。
- 界面填寫的很多參數(shù)缺乏強制選項和提示說明,用戶很可能出現(xiàn)參數(shù)填寫錯誤。如果用戶不是一個FreeSWITCH專業(yè)工程師的話,他們就很難對FusionPBX配置有一個完整清晰的認識。
- 全局變量設(shè)置和具體的每個配置文件XML配置可能會產(chǎn)生沖突,多個配置文件同時支持對一個參數(shù)的配置,需要數(shù)據(jù)能夠及時同步。筆者通常也會遇到這樣的問題,修改了SIP 內(nèi)部文件的端口以后,但是界面仍然顯示歷史端口,重新刷新也不一定能夠保證同步。這樣就會導(dǎo)致系統(tǒng)排查困難。
- 目前,根據(jù)筆者測試,fusionpbx界面系統(tǒng)對微軟瀏覽器Edge支持相對比較好,谷歌瀏覽器相對比較差。例如,一些驗證碼(不能顯示)或者分機(呼入路由選擇中有時不能顯示)。
不同瀏覽器可能會出現(xiàn)驗證碼顯示錯誤。
7如何在FusionPBX添加Fail2ban
因為在云平臺部署,外網(wǎng)攻擊是經(jīng)常遇到的問題。除了通過SBC來過濾這些IP地址以外,用戶只能通過Fail2ban 實現(xiàn)對IP地址的關(guān)聯(lián)。因此,我們首先建議用戶在沒有SBC的前提下,使用fail2ban來降低一點安全風(fēng)險,通過簡單過濾方式對非法注冊地址進行過濾。
配置fail2ban配置流程如下, 通過界面在撥號規(guī)則中增加一個對呼入路由的處理規(guī)則:
添加一個名稱 no-found,號碼是*, context 是public。因為是呼入的,當(dāng)然需要從public開始過濾。
Tag Type Data Order
condition context public 10
action set call_direction=inbound 60
action log [inbound routes] 404 not found ${sip_network_ip} 100
Order: 999
Enabled: True
Description: Log invalid attempts
3. 手動修改fail2ban 對FreeSWITHC的配置文件支持(文件路徑 是/etc/fail2ban/filter.d/fusionpbx-inbound.conf)
# Fail2Ban configuration file
# inbound route - 404 not found
[Definition]
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>[\w\-.^_]+)
# Values: TEXT
#
#failregex = [hostname] FusionPBX: \[<HOST>\] authentication failed
#[hostname] variable doesn't seem to work in every case. Do this instead:
failregex = 404 not found <HOST>
#EXECUTE sofia/external/9999555150@domain.tld log([inbound routes] 404 not found 82.68.115.62)
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Edit /etc/fail2ban/jail.local
[fusionpbx-inbound]
enabled = true
port = 5080
protocol = udp
filter = fusionpbx-inbound
#logpath = /usr/local/freeswitch/log/freeswitch.log
logpath = /var/log/freeswitch/freeswitch.log
action = iptables-allports[name=fusionpbx-inbound, protocol=all]
# sendmail-whois[name=fusionpbx-inbound, dest=root, sender=fail2ban@example.org] #no smtp server installed
maxretry = 5
findtime = 300
bantime = 3600
重新啟動fail2ban:
/etc/init.d/fail2ban restart
執(zhí)行腳本,對fail2ban升級處理:
cd /usr/src/fusionpbx-install.sh/debian/resources/
./fail2ban.sh
cd /etc/fail2ban
nano jail.local
然后重新設(shè)置配置,默認是false,修改為true。
[freeswitch-ip-tcp]
enabled = true
[freeswitch-ip-udp]
enabled = true
jail.conf
bantime increase it to a larger number
bantime
86400 = 1 day
3600 = 1 hour
-1 = until restart
然后重新啟動fail2ban:
service fail2ban restart
7總結(jié)
本文章中對開源FreeSWITHC界面管理系統(tǒng)-FusionPBX的呼入呼出路由的配置策略做了完整說明,包括通過SIP trunk 呼入呼出配置,通過落地網(wǎng)關(guān)呼入呼出時在界面管理方面遇到的問題,還有在使用過程中,fuisonpbx的一些兼容性問題,界面變量配置問題的討論和如何通過fail2ban來實現(xiàn)對非法注冊的IP進行過濾的設(shè)置。
在未來的部署測試中,筆者將繼續(xù)針對fusionpbx的其他功能,例如WebRTC配置,振鈴組設(shè)置,IVR,呼叫隊列,億聯(lián)話機自動部署,方位話機自動部署等功能進行詳細介紹。
參考資料:
www.fusionpbx.com
www.freesbc.cn
- 關(guān)于Asterisk文檔,參考:www.asterisk.org.cn
- 融合通信/IPPBX/FreePBX商業(yè)解決方案:www.hiastar.com
- 最新Asterisk完整中文用戶手冊詳解:www.asterisk.org.cn
- Freepbx/FreeSBC技術(shù)文檔: www.freepbx.org.cn
- 如何使用免費會話邊界控制器-FreeSBC,qq技術(shù)分享群:334023047
- 關(guān)注微信公眾號:asterisk-cn,獲得有價值的通信行業(yè)技術(shù)分享