FreeSWITCH開源介紹

FreeSWITCH架構設計景埃,靈活、開放顶别、可擴展的開發(fā)方式谷徙,支持集群特點,對多種協(xié)議的可支持驯绎,對高級SIP特性的可支持等特性完慧,非常適合用來商業(yè)級的通信業(yè)務開發(fā)。

信令加密

為了使用SSL/TLS加密剩失,必須在FreeSWITCH環(huán)境下骗随,編譯OpenSSL庫。另外赴叹,需要制作CA和服務器證書鸿染。

// 安裝Openssl
sudo apt-get openssl libssl-dev
?// 重新編譯Freeswitch
./configure --with-opensslmake && make install
// Freeswitch提供了一個簡單的腳本可以幫助用戶證書,生成的證書和密鑰會自動保存到conf/ssl/文件夾乞巧。
?// 制作CA證書(cafile.pem)涨椒,統(tǒng)一使用主機名或IP作為CommonName的參數(shù)gentls_cert setup -cn pbx.freeswitch.org -alt DNS:pbx.freeswitch.org -org freeswitch.org
// 制作服務器證書(agent.pem)
?gentls_cert create_server -cn 10.170.103.239 -alt DNS:10.170.103.239 -org 10.170.103.239
?// 啟用SSL/TLS,有兩種配置形式:
?// 一、修改全局配置vars.conf.xml蚕冬,則profile從這里獲取具體配置
?<X-PRE-PROCESS cmd="set" data="internal_ssl_enable=true"/> <X-PRE-PROCESS cmd="set" data="external_ssl_enable=true"/> // 其他相關參數(shù) <X-PRE-PROCESS cmd="set" data="sip_tls_version= tlsv1,tlsv1.1,tlsv1.2"/> <X-PRE-PROCESS cmd="set" data="sip_tls_ciphers=ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"/> <X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/> <X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/>
// 二免猾、修改單獨的profile,也可以配合使用vars.conf.xml囤热,比如sip_profiles/internal.conf.xml<param name="tls" value="true"/><param name="tls-sip-port" value="5061"/><param name="tls-version" value="tlsv1,tlsv1.1,tlsv1.2"/><param name="tls-cert-dir" value="/usr/local/freeswitch/conf/ssl"/><param name="tls-ciphers" value=" ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"/>
?// 其他可選相關參數(shù)
<param name="tls-only" value="false"/>?// 只啟用TLS端口
?<param name="tls-bind-params" value="transport=tls"/>?// 附加參數(shù)
<param name="tls-passphrase" value=""/> ?// 可選支持私鑰加密
<param name="tls-verify-date" value="true"/> ?// 檢查證書有效期
<param name="tls-verify-policy" value="none"/> ?// 檢查策略
<param name="tls-verify-depth" value="2"/>?// 檢查對端證書的嚴格程度
?<param name="tls-verify-in-subjects" value=""/> ?// 指定檢查特殊inbound用戶組?

導入根證書到客戶端

SSL/TLS加密通信要求客戶端必須驗證服務端的證書猎提,反之則可以不作要求∨园客戶端對服務端進行證書驗證的嚴格程度也是可以控制的锨苏。這里必須把服務端證書的根證書添加到客戶端的信任列表中。
?Windows操作系統(tǒng)下:復制CA證書并修改后綴名為.crt棺聊,雙擊彈出證書安裝對話框伞租,按照提示進行安裝即可。
?Ubuntu下:cat cafile.pem >> /etc/ssl/certs/ca-certificates.crt
4.1.3 使用SSLSSL加密工作類似于一種協(xié)商機制限佩,它通過網(wǎng)站或基于SSL服務端協(xié)商來實現(xiàn)加密葵诈。使用一個第三方來驗證安全證書,然后在發(fā)送方和接收方之間使用這個安全證書來交換信息祟同。理論上作喘,基于公共哈希和私有哈希的安全證書應該加載到電話本身和服務器端。通常情況下晕城,SSLv23 + SRTP是對防火墻支持最友好的泞坦,也是相對比較容易在Freeswitch上配置的,支持了大部分客戶端的加密和大部分的SIP終端广辰。
?若要啟用SSL加密,只需修改TLS Version為sslv2,sslv3,sslv23主之,比如vars.conf.xml中 <X-PRE-PROCESS cmd="set" data="sip_tls_version=sslv2,sslv3,sslv23"/>或profile中 <param name="tls-version" value="sslv2,sslv3,sslv23"/>
4.1.4 使用TLSTLS是另外一種加密機制择吊,支持建立安全信令。它看起來是相對比較成熟的策略槽奕,對所有TCP連接的數(shù)據(jù)加密几睛,并在會話中一直維持這個連接。若要啟用TLS加密粤攒,只需修改TLS Version為tlsv1,tlsv1.1,tlsv1.2所森,比如vars.conf.xml中<X-PRE-PROCESS cmd="set" data="sip_tls_version=tlsv1,tlsv1.1,tlsv1.2"/>或profile中<param name="tls-version" value="tlsv1,tlsv1.1,tlsv1.2"/>使用客戶端驗證。

媒體加密

4.2.1 使用SRTPSRTP定義了發(fā)送和接收RTP的方法夯接,在這個方法中焕济,使用認證信息和集成方法來保護RTP數(shù)據(jù)。它支持單播和多播程序盔几,由于它是一個比較老的方式并且由一些主流IP通信廠家開發(fā)晴弃,逐漸成為大部分標準設備必須支持的加密方式。SRTP通過SIP在呼叫創(chuàng)建過程中進行加密協(xié)商,SIP雙方都必須同意支持RTP加密上鞠,通過交換密鑰對SIP包加密际邻。SRTP的密鑰交換通過控制信道完成,通過這些信息對語音流加密芍阎。注意世曾,除非用戶開啟了SIP數(shù)據(jù)的加密和明確SRTP的密鑰已經(jīng)啟用,為了實現(xiàn)終端和Freeswitch完全的安全連接谴咸,用戶應該使用SIP加密和SRTP加密轮听。
如果僅開啟了SRTP,則僅對RTP包的凈荷數(shù)據(jù)類型加密寿冕∪锍蹋可以從撥號計劃中設置基于每個呼叫開啟的SRTP加密,通過以下方式設置:
<action application="set" data="rtp_secure_media=true"/><action application="export" data="rtp_secure_media=true"/>
通道變量rtp_secure_media的值有三種:true—強制驼唱,false—禁止藻茂,optional—可選。
也可以在用戶directory中的dial-string中設置玫恳。 <paramname="dial-string" value="{sip_secure_media=${regex(${sofia_contact(${dialed_user}@${dialed_domain})}|transport=tls)},presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
使用客戶端驗證辨赐,經(jīng)過SIP消息追蹤及分析,SDP加密媒體協(xié)商成功京办,獲取的相關SIP消息及日志結果如下:
m=audio 4002 RTP/SAVP 117 107 9 8 0 110 96 97 3 18 101
a=crypto:1 AES_CM_128_HMAC_SHA1_80?
?a=crypto:2 AES_CM_128_HMAC_SHA1_32?
使用ZRTPZRTP是一個相對新的方法掀序,使用密鑰自動協(xié)商,極大簡化了對RTP呼叫的加密設置和操作過程惭婿。它也添加了更多的優(yōu)點不恭,不再依賴于服務器端的加密。在服務器之間也可以進行加密财饥,并且雙方服務器都不會感覺到正在對RTP流媒體的內(nèi)容加密换吧。因為極大地降低了它們之間的依賴,這樣的方式提升了服務器的運行速度钥星。?

FreeSWITCH的開發(fā)方式

FreeSWITCH的開發(fā)方式較為多樣沾瓦,主要有以下幾種:
? 通過修改dialplan實現(xiàn)業(yè)務定制,不需要修改代碼谦炒,編寫腳本語言即可贯莺。
? 通過ESL方式實現(xiàn)業(yè)務定制,不需要修改代碼宁改,只需要編寫腳本語言即可缕探。
? 通過增加/修改mod實現(xiàn)業(yè)務定制和增加,當然也可以只實現(xiàn)application还蹲。
? 需要修改一定的核心代碼撕蔼。從上到下難易程度逐漸增加豁鲤,使用概率遞減,其中第一條不需要專業(yè)的研發(fā)人員開發(fā)鲸沮,技服琳骡,代理商,甚至客戶都可以編寫自己的dialplan讼溺,進行業(yè)務開發(fā)組合楣号。
開發(fā)方式有點:
較靈活,有多種方式可以進行業(yè)務開發(fā)怒坯,不一定需要編程炫狱;?
較開放,支持多種開放接口剔猿,包括XML视译,LUA,Javascript归敬,ESL等酷含,適合定制開發(fā);業(yè)務耦合較小汪茧,開發(fā)人員可以各自獨立開發(fā)模塊椅亚,并行開發(fā)效率較高

SIPP工具

安裝依賴庫apt-get install openssl libssl-dev libssl1.0.0 libssl0.9.8 pcaputils libssl-dev libncursesw5-dev libncurses5-dev libcap-dev make gcc bison flex build-essential libncurses-dev libpcap-dev sip-tester
下載源代碼wget http://sourceforge.net/projects/sipp/files/sipp/3.3/sipp-3.3.tar.gz/
編譯安裝
無TLS和密碼驗證支持:make
有安全傳輸和認證的方式支持:這種情況需要你的系統(tǒng)已經(jīng)安裝了OpenSSL
?make ossl
有PCAP播放、無認證支持:
make pcapplay
有PCAP播放和認證支持:
make pcapplay_ossl
驗證用內(nèi)置的測試場景模擬一個SIP客戶端和服務端.
# ./sipp -sn uas
# ./sipp -sn uac 127.0.0.1
sipp有幾個內(nèi)置場景舱污,可以查看sipp的幫助文件
腳本
?導出內(nèi)置腳本,根據(jù)需要的場景修改呀舔。
?./sipp -sd uac > uac.xml
?./sipp -sd uas > uas.xml

Valgrind工具

apt-getinstall libc6-dbg gdb valgrind
Valgrind是一個性能工具,用于提高軟件穩(wěn)定性扩灯。Valgrind由5個工具組成cachegrind媚赖,callgrind,massif珠插,helgrind 和memorycheck惧磺。
Cachegrind查看進程cache信息;
Callgrind 查看函數(shù)調用關系丧失;
Massif 詳細查看進程分配的內(nèi)存值豺妓;
Helgrind 調試線程工具 檢查各種同步錯誤(POSIX 和 PThreadAPI)惜互;
Memory check 內(nèi)存檢測工具布讹。

多線程程序GDB調試方法

第一步,首先獲得進程的所有線程id: ps -eLf | grep 進程名?
第二步训堆,通過gdb逐個連接線程 gdb attach <線程id> (需要確保單板上有可執(zhí)行的gdb程序描验,如果沒有傳一個上去) 如 gdb attach 1401?
第三步,連接上之后坑鱼,使用bt full查看調用棧 bt full 然后輸入q退出膘流,進程繼續(xù)執(zhí)行絮缅。使用同樣方法連接其他線程。

https://my.oschina.net/andywang1988/blog/698603

通過GDB代碼學習:

【啟動調試】gdb freeswitch? 【設置斷點】b?mod_rtmp.c:418
【運行】r
【回到gdb】ctrl+c
【繼續(xù)運行】c

NMON性能數(shù)據(jù)采集工具

apt-get install nmon
./nmon -f -t -r test -s 10 -c 3600

分析定位

apt-get install graphviz
apt-get install kcachegrind
gprof2dot https://github.com/jrfonseca/gprof2dot
valgrind --tool=callgrind --instr-atstart=no --collect-systime=yes --collect-bus=yes ./freeswitch -vg –nosql參數(shù)說明--tool=callgrind 使用callgrind工具 --instr-atstart=no 啟動時不進trace --collect-systime收集系統(tǒng)時間
?以下是過程控制
callgrind_control -i on 開啟跟蹤
callgrind_control -d dump跟蹤數(shù)據(jù)
callgrind_control -i off 關閉跟蹤
kcachegrind 是一個解析跟蹤數(shù)據(jù) 生成圖像的工具
kcachegrind callgrind.out.12208gprof2dot.py -f callgrind callgrind.out.* |dot -Tpng -o report.png
統(tǒng)計網(wǎng)絡流量 iptraf -u -d p49p1

FreeSWITCH性能規(guī)格

單臺服務器規(guī)格
vCPU:2P8C?核工作頻率:2200 MHz內(nèi)存:8G網(wǎng)口:4GE
呼叫性能
最大會話并發(fā)數(shù):10000CAPS:100
說明
FreeSWITCH單臺服務器最大支持2w用戶呼股,100caps呼叫耕魄,1w最大會話數(shù);
CPU利用率為44%彭谁,內(nèi)存利用率為65%吸奴,內(nèi)存是較為緊缺的資源。
媒體性能 G.711a/μ 600路G.729ab 300路iLBC 300路

可靠性分布式

支持雙機冗余缠局,基于HA軟件實現(xiàn)则奥,且支持呼叫持久化(性能會有一定影響),雙機切換后狭园,呼叫能接續(xù)读处; 支持集群部署,通過OpenSIPS進行分發(fā)唱矛,實現(xiàn)多個Freeswitch之間負荷分擔罚舱,支持集群可擴展。

協(xié)議能力&接口

SIP揖赴、Skype馆匿、H323、IAX及Google Talk燥滑、SCCP(Skinny Call Control Protocol與思科話機互通)渐北;通過T1/E1擴展卡支持模擬話機

安全性

支持TLS信令加密和SRTP媒體加密SIP協(xié)議支持協(xié)議與接口防攻擊

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铭拧,隨后出現(xiàn)的幾起案子赃蛛,更是在濱河造成了極大的恐慌,老刑警劉巖搀菩,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呕臂,死亡現(xiàn)場離奇詭異,居然都是意外死亡肪跋,警方通過查閱死者的電腦和手機歧蒋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來州既,“玉大人谜洽,你說我怎么就攤上這事∥庖叮” “怎么了阐虚?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚌卤。 經(jīng)常有香客問我实束,道長奥秆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任咸灿,我火速辦了婚禮构订,結果婚禮上,老公的妹妹穿的比我還像新娘避矢。我一直安慰自己鲫咽,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布谷异。 她就那樣靜靜地躺著分尸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歹嘹。 梳的紋絲不亂的頭發(fā)上箩绍,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音尺上,去河邊找鬼材蛛。 笑死,一個胖子當著我的面吹牛怎抛,可吹牛的內(nèi)容都是我干的卑吭。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼马绝,長吁一口氣:“原來是場噩夢啊……” “哼豆赏!你這毒婦竟也來了?” 一聲冷哼從身側響起富稻,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤掷邦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后椭赋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抚岗,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年哪怔,在試婚紗的時候發(fā)現(xiàn)自己被綠了宣蔚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡认境,死狀恐怖胚委,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情元暴,我是刑警寧澤篷扩,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布兄猩,位于F島的核電站茉盏,受9級特大地震影響鉴未,放射性物質發(fā)生泄漏。R本人自食惡果不足惜鸠姨,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一铜秆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讶迁,春花似錦连茧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至祟峦,卻和暖如春罚斗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宅楞。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工针姿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厌衙。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓距淫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親婶希。 傳聞我的和親對象是個殘疾皇子榕暇,可洞房花燭夜當晚...

推薦閱讀更多精彩內(nèi)容

  • 目錄 SIP SIP協(xié)議簡介 基本概念介紹 SIP的功能和特點 SIP消息 SIP工作原理簡介 SIP支持的傳輸協(xié)...
    阿七筆記閱讀 2,896評論 0 2
  • 原文地址 http://blog.csdn.net/u012409247/article/details/4985...
    0fbf551ff6fb閱讀 3,524評論 0 13
  • 本文分為以下五節(jié): 中間人攻擊:介紹中間人攻擊常見方法,并模擬了一個簡單的中間人攻擊喻杈; 校驗證書的正確姿勢:介紹校...
    半島夏天閱讀 2,265評論 0 1
  • 這次的作業(yè)怎么做拐揭?真把我難到了。因為沒有辦法聽課。嘗試了換網(wǎng)絡、清數(shù)據(jù)托启、重新登錄厂僧、再卸載等辦法。上節(jié)課就有問題州藕,勉...
    賀力_db90閱讀 220評論 22 4
  • 最近在看《聚寶盆》,這是小時候就追捧過的電視劇,看過了就過了式镐,對於劇情和臺詞有什麼亮點,完全忘記了固蚤!瞧娘汞,這就...
    落子無悔ss閱讀 309評論 0 0