ubuntu上kamailio+rtpproxy+mediaproxy環(huán)境搭建

前言

最近項(xiàng)目中需要用SIP協(xié)議棧實(shí)現(xiàn)實(shí)時(shí)音視頻通信塑悼。因?yàn)榉?wù)器段暫時(shí)沒人做,所以就用kamailio搭建了一個(gè)SIP服務(wù)器做開發(fā)測(cè)試使用是整。安裝配置過程中踩了不少坑铡羡,現(xiàn)在講整個(gè)過程總結(jié)一下墅垮。

kamailio安裝配置

官方安裝文檔地址:

https://www.kamailio.org/wiki/install/4.4.x/git

下載源碼

mkdir -p /usr/local/src/kamailio
cd /usr/local/src/kamailio
git clone --depth 1 --no-single-branch https://github.com/kamailio/kamailio kamailio
cd kamailio
git checkout -b 4.4 origin/4.4

編譯配置

make cfg
nano -w modules.lst

這里需要加入db_mysql的選項(xiàng)榛泛,不然kamailio不會(huì)安裝mysql模塊

make include_modules="db_mysql dialplan" cfg

編譯安裝

make all && make install

安裝mysql

  • 安裝,安裝過程中會(huì)要求輸入root密碼

    apt-get install mysql-server mysql-client 
    

修改配置文件

輸入下面的命令編輯配置文件

vi /usr/local/etc/kamailio/kamailio.cfg

在######### Defined Values ##########前添加

#!define WITH_MYSQL 
#!define WITH_AUTH 
#!define WITH_ALIASDB 
#!define WITH_USRLOCDB
#!define WITH_NAT

修改DBURL噩斟,其中root是mysql賬號(hào)曹锨,aaaaaa是密碼

#!ifndef DBURL
#!define DBURL "mysql://root:aaaaaa@localhost/kamailio"
#!endif

由于我的服務(wù)器沒有直接綁定公網(wǎng)IP,是將一個(gè)公網(wǎng)IP進(jìn)行端口映射到這臺(tái)服務(wù)器的剃允,需要修改下面的配置選項(xiàng)

advertised_address="xx.xx.xx.xx"
alias="xx.xx.xx.xx"

在Route中沛简,替換record_route()為record_route_preset(“xx.xx.xx.xx”),例如:

if (is_method("INVITE|SUBSCRIBE"))
{
    #record_route();
    record_route_preset("xx.xx.xx.xx");
}

下面還需要修改kamctlrc斥废,運(yùn)行命令:

vi /usr/local/etc/kamailio/kamctlrc

修改下面的選項(xiàng)

SIP_DOMAIN="xx.xx.xx.xx"
DBRWUSER="root"
DBRWPW="aaaaaa"

至此kamailio配置結(jié)束

生成kamailio數(shù)據(jù)庫

在終端里輸入

/usr/local/sbin/kamdbctl  create

可能會(huì)遇到需要授權(quán)的問題,需執(zhí)行如下指令進(jìn)行解決:

執(zhí)行“mysql -u用戶名 -p密碼”,進(jìn)入數(shù)據(jù)庫,然后執(zhí)行下面的語句來為用戶授權(quán)

grant all on *.* to 'root'@'localhost' identified by 'yourpassword';

啟動(dòng)kamailio服務(wù)

輸入下面的命令啟動(dòng)kamailio

/usr/local/sbin/kamctl  start

可能會(huì)出現(xiàn):

“ERROR:PID file /var/run/kamailio/kamaillio.pid does not exist---Kamailio start failed"

需要檢查如下內(nèi)容

  • kamdbctlrc這個(gè)配置文件中的DBHOST處是否是127.0.0.1或者localhost,如果不是請(qǐng)將其修改成127.0.0.1或者localhost試試椒楣。
  • 執(zhí)行“kamailio -c”來檢測(cè)配置文件是否有錯(cuò)誤,如果有報(bào)錯(cuò),請(qǐng)根據(jù)具體報(bào)錯(cuò)信息解決問題。如果出現(xiàn)“config file ok,exiting......”,說明配置文件沒有問題了牡肉。
  • 執(zhí)行“kamailio -dddd”,看是否有ERROR輸出,若有,請(qǐng)依據(jù)錯(cuò)誤提示進(jìn)行修改
  • 執(zhí)行“kamailio -M 8 -E -e -dd”,查看具體錯(cuò)誤信息

添加賬號(hào)

執(zhí)行如下命令捧灰,添加用戶賬號(hào)

kamctl  add  test1  123456

測(cè)試kamailio及常用命令

kamctl stop  //停止服務(wù)
kamctl restart //重啟服務(wù)
kamctl ps //查看運(yùn)行狀態(tài)
tail /var/log/syslog //查看運(yùn)行日志,例如啟動(dòng)失敗日志

RTPProxy安裝配置

下載

git clone git://sippy.git.sourceforge.net/gitroot/sippy/rtpproxy

配置修改

由于服務(wù)器的端口是映射的,默認(rèn)kamailio的sip sdp信息里面帶的中轉(zhuǎn)服務(wù)器地址是服務(wù)器的內(nèi)網(wǎng)IP统锤,而不是公網(wǎng)IP毛俏,會(huì)造成中轉(zhuǎn)失敗。所以需要進(jìn)行下面的修改饲窿。如果服務(wù)器有公網(wǎng)IP則不需要進(jìn)行下面的修改煌寇。

下面的修改的實(shí)質(zhì)是給rtpproxy命令加上一個(gè) -A的參數(shù),用來標(biāo)識(shí)rtpproxy的公網(wǎng)IP

cd rtpproxy
vi main.c

cf->stable.log_facility = -1;

下面加上

cf->stable.advertised = NULL;

while ((ch = getopt(argc, argv, "vf2Rl:6:s:S:t:r:p:T:L:m:M:u:Fin:Pad:")) != -1)

改為

while ((ch = getopt(argc, argv, "vf2Rl:6:s:S:t:r:p:T:L:m:M:u:Fin:Pad:A:")) != -1)

再將

case 'f':

前面加上

case 'A':
    cf->stable.advertised = strdup(optarg);
    break;

保存退出

vi rtpp_command.c

if (lia[0] == NULL || ishostnull(lia[0]))
      len += sprintf(cp, "%d\n", lport);
else {
      len += sprintf(cp, "%d %s%s\n", lport, addr2char(lia[0]),
          (lia[0]->sa_family == AF_INET) ? "" : " 6");
}

修改為

if(cf->advertised != NULL)
     len += sprintf(cp, "%d %s%s\n", lport, cf->advertised,
         (lia[0]->sa_family == AF_INET) ? "" : " 6");
else
     len += sprintf(cp, "%d %s%s\n", lport, addr2char(lia[0]),
          (lia[0]->sa_family == AF_INET) ? "" : " 6");

保存退出逾雄。

vi rtpp_defines.h

int controlfd;

下面加上

char *advertised;

保存退出

編譯安裝

運(yùn)行下面的命令編譯安裝

./configure && make && make install

啟動(dòng)

執(zhí)行下面的命令啟動(dòng)rtpproxy

rtpproxy -A xx.xx.xx.xx -l 0.0.0.0 -s udp:localhost:5083 -n -F -d DBUG -m 5701 -M 5799 -d

其中

-A 服務(wù)器的外網(wǎng)IP
-s rtpproxy的本地端口阀溶,要和kamailio里面的配置相對(duì)應(yīng)
-m rtpproxy端口號(hào)最小值
-M rtpproxy端口號(hào)最大值

kamailio配置

確保kamailio加載了TLS模塊和NAT模塊

#!define WITH_TLS
#!define WITH_NAT

修改kamailio配置:

vi /usr/local/etc/kamailio/kamailio.cfg

#!ifdef WITH_NAT

下面加上

modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:5083")

里面的第三個(gè)參數(shù)要跟啟動(dòng)rtpproxy的參數(shù)相對(duì)應(yīng)

接下來重新啟動(dòng)kamailio

kamctl restart

至此rtpproxy安裝結(jié)束

MediaProxy安裝配置

MediaProxy安裝采用源碼安裝

下載源碼

darcs get http://devel.ag-projects.com/repositories/mediaproxy
cd mediaproxy
darcs pull -a

配置依賴

sudo apt-get install python-dev
sudo apt-get install libnetfilter-conntrack-dev
sudo apt-get install iptables-dev

編譯安裝

sudo python setup.py build
sudo python setup.py install

開啟ip_forward

sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf
sysctl -p

拷貝認(rèn)證文件

cd /etc/mediaproxy/tls/
sudo cp /usr/share/doc/mediaproxy-common/tls/* ./

修改配置

打開/etc/mediaproxy/config.ini腻脏,修改下面的配置

dispatchers = xx.xx.xx.xx:port
relay_ip = xx.xx.xx.xx
port_range = xxxxx:xxxxx
listen = 0.0.0.0:port
listen_management = 0.0.0.0:port+1
management_use_tls = yes
[Kamailio]
socket_path = /var/run/kamailio/

啟動(dòng)mediaproxy

service mediaproxy-dispatcher start  
service mediaproxy-relay start 

配置kamailio

在dialog模塊加載完成后,添加

loadmodule"mediaproxy.so"
modparam("mediaproxy","disable",0)
modparam("mediaproxy","mediaproxy_socket","/var/run/mediaproxy/dispatcher.sock")
modparam("mediaproxy","mediaproxy_timeout",1000)
modparam("mediaproxy","signaling_ip_avp","$avp(nat_ip)")
modparam("mediaproxy","media_relay_avp","$avp(media_relay)")
modparam("mediaproxy","ice_candidate","high-priority")
modparam("mediaproxy","ice_candidate_avp","$avp(s:ice_priority)")

重啟kamailio

kamctl restart

至此银锻,mediaproxy配置完成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末永品,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子击纬,更是在濱河造成了極大的恐慌腐碱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掉弛,死亡現(xiàn)場離奇詭異,居然都是意外死亡喂走,警方通過查閱死者的電腦和手機(jī)殃饿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芋肠,“玉大人乎芳,你說我怎么就攤上這事√兀” “怎么了奈惑?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長睡汹。 經(jīng)常有香客問我肴甸,道長,這世上最難降的妖魔是什么囚巴? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任原在,我火速辦了婚禮,結(jié)果婚禮上彤叉,老公的妹妹穿的比我還像新娘庶柿。我一直安慰自己,他們只是感情好秽浇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布浮庐。 她就那樣靜靜地躺著,像睡著了一般柬焕。 火紅的嫁衣襯著肌膚如雪审残。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天斑举,我揣著相機(jī)與錄音维苔,去河邊找鬼。 笑死懂昂,一個(gè)胖子當(dāng)著我的面吹牛介时,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼沸柔,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼循衰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褐澎,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤会钝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后工三,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迁酸,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年俭正,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奸鬓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掸读,死狀恐怖串远,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情儿惫,我是刑警寧澤澡罚,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站肾请,受9級(jí)特大地震影響留搔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铛铁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一催式、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧避归,春花似錦荣月、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至账锹,卻和暖如春萌业,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奸柬。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工生年, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人廓奕。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓抱婉,卻偏偏與公主長得像档叔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒸绩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理衙四,服務(wù)發(fā)現(xiàn),斷路器患亿,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • feisky云計(jì)算传蹈、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,827評(píng)論 0 5
  • Ubuntu的發(fā)音 Ubuntu咙冗,源于非洲祖魯人和科薩人的語言沾歪,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 99,203評(píng)論 9 467
  • 2017.03.02 周四 2004年我在江北商大附近買了一處70多平明廳房子(現(xiàn)在格局都不落伍)乞娄。那時(shí)打算買二套...
    魅力春天閱讀 142評(píng)論 0 1
  • 憤怒! 今日記事:下午去圖書館借書,一進(jìn)門口有個(gè)約摸十一二歲的小朋友甜甜地叫了我一聲姐姐显歧。那時(shí)候還...
    00呀閱讀 128評(píng)論 0 0