通過部署opensips, opensips-cp, rtpproxy, mediaproxy實現voip通話。測試可以通過安卓原生客戶端驗證,CSipSimple客戶端通話(撥打/接收)
1.安裝opensips
opensips需要編譯源碼安裝
官網:http://opensips.org
文件目錄:http://opensips.org/pub/opensips/1.11.2/src/
wget http://opensips.org/pub/opensips/1.11.2/src/opensips-1.11.2_src.tar.gz
tar xcf opensips-1.11.2_src.tar.gz
cd opensips-1.11.2-tls/
make menuconfig
在menuconfig中選擇—>Configure Compile Options—> Configure Excluded Modules
方向鍵向下滾動,按空格選中[*] db_mysql

按q鍵返回上一級,選擇—> Configure Install Prefix,輸入/回車表示安裝在/目錄下的配置目錄而不是/usr/local目錄下。

選擇 —> Save Changes 保存修改。

按q返回,選擇 —> Compile And Install OpenSIPS,回車安裝。
安裝完成后會將配置文件放在/etc/opensips目錄下。運行文件在/sbin目錄下。
如果出現依賴錯誤,先通過apt-get安裝依賴。
2.配置opensips
進入/etc/opensips目錄,運行osipsconfig命令
cd /etc/opensips
osipsconfig
依次選擇—> Generate OpenSIPS Script —> Residential Script —> Configure Residential Script
選中如下幾項
[*] ENABLE_TCP
[*] USE_ALIASES
[*] USE_AUTH
[*] USE_DBACC
[*] USE_DBUSRLOC
[*] USE_DIALOG
[*] USE_NAT
按q返回,選擇 —> Generate Residential Script 回車,生成新的配置文件。按q(三次)退出命令
將新生成的opensips_residential_*.cfg文件重命名為opensips.cfg編輯
mv opensips_residential_2014-7-10_16:19:22.cfg opensips.cfg
vi opensips.cfg
修改為如下內容
debug=3
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=4
/* uncomment the following lines to enable debugging */
#debug=6
#fork=no
#log_stderror=yes
/* uncomment the next line to enable the auto temporary blacklisting of
not available destinations (default disabled) */
#disable_dns_blacklist=no
/* uncomment the next line to enable IPv6 lookup after IPv4 dns
lookup failures (default disabled) */
#dns_try_ipv6=yes
/* comment the next line to enable the auto discovery of local aliases
based on revers DNS on IPs */
auto_aliases=no
alias=xdty.org # 增加alias,修改為你的域名
listen=udp:域名對應ip地址:6060 # CUSTOMIZE ME
disable_tcp=no
listen=tcp:域名對應ip地址:6060 # CUSTOMIZE ME
disable_tls=yes
####### Modules Section ########
#set module path
mpath="/lib64/opensips/modules/" # 增加一個斜杠
#### SIGNALING module
loadmodule "signaling.so"
#### StateLess module
loadmodule "sl.so"
#### Transaction Module
loadmodule "tm.so"
modparam("tm", "fr_timer", 5)
modparam("tm", "fr_inv_timer", 30)
modparam("tm", "restart_fr_on_each_reply", 0)
modparam("tm", "onreply_avp_mode", 1)
#### Record Route Module
loadmodule "rr.so"
/* do not append from tag to the RR (no need for this script) */
modparam("rr", "append_fromtag", 0)
#### MAX ForWarD module
loadmodule "maxfwd.so"
#### SIP MSG OPerationS module
loadmodule "sipmsgops.so"
#### FIFO Management Interface
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
modparam("mi_fifo", "fifo_mode", 0666)
#### URI module
loadmodule "uri.so"
modparam("uri", "use_uri_table", 0)
#增加這一行,不然報錯
modparam("uri", "db_url", "mysql://opensips:opensipsrw@localhost/opensips")
#### MYSQL module
loadmodule "db_mysql.so"
#### USeR LOCation module
loadmodule "usrloc.so"
modparam("usrloc", "nat_bflag", "NAT")
modparam("usrloc", "db_mode", 2)
modparam("usrloc", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### REGISTRAR module
loadmodule "registrar.so"
modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT")
modparam("registrar", "received_avp", "$avp(received_nh)")
/* uncomment the next line not to allow more than 10 contacts per AOR */
#modparam("registrar", "max_contacts", 10)
#### ACCounting module
loadmodule "acc.so"
/* what special events should be accounted ? */
modparam("acc", "early_media", 0)
modparam("acc", "report_cancels", 0)
/* by default we do not adjust the direct of the sequential requests.
if you enable this parameter, be sure the enable "append_fromtag"
in "rr" module */
modparam("acc", "detect_direction", 0)
modparam("acc", "failed_transaction_flag", "ACC_FAILED")
/* account triggers (flags) */
modparam("acc", "db_flag", "ACC_DO")
modparam("acc", "db_missed_flag", "ACC_MISSED")
modparam("acc", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### AUTHentication modules
loadmodule "auth.so"
loadmodule "auth_db.so"
modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
modparam("auth_db", "load_credentials", "")
#### ALIAS module
loadmodule "alias_db.so"
modparam("alias_db", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### DIALOG module
loadmodule "dialog.so"
modparam("dialog", "dlg_match_mode", 1)
modparam("dialog", "default_timeout", 21600) # 6 hours timeout
modparam("dialog", "db_mode", 2)
modparam("dialog", "db_url",
"mysql://opensips:opensipsrw@localhost/opensips") # CUSTOMIZE ME
#### NAT modules
loadmodule "nathelper.so"
modparam("nathelper", "natping_interval", 10)
modparam("nathelper", "ping_nated_only", 1)
modparam("nathelper", "received_avp", "$avp(received_nh)")
loadmodule "rtpproxy.so"
modparam("rtpproxy", "rtpproxy_sock", "udp:localhost:22222") # 修改端口
#增加下邊這一段
#### MediaProxy module
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", "low-priority")
修改opensipsctlrc文件
去掉所有DB相關的注釋。
SIP_DOMAIN=xdty.org
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=opensips
DB_PATH="/usr/local/etc/opensips/dbtext"
DBRWUSER=opensips
DBRWPW="opensipsrw"
DBROOTUSER="root"
USERCOL="username"
為opensips新建數據庫,增加域名及用戶
opensipsdbctl create
opensipsctl domain add xdty.org
opensipsctl add 10000 123456
opensipsctl add 10001 123456
3.安裝rtpproxy并配置
apt-get install rtpproxy
vi /etc/default/rtpproxy
修改為如下內容
CONTROL_SOCK=udp:127.0.0.1:22222
# Additional options that are passed to the daemon.
EXTRA_OPTS=""
LISTEN_ADDR=你的域名對應ip地址
EXTRA_OPTS="-l ${LISTEN_ADDR}"
啟動rtpproxy
killall rtpproxy
/etc/init.d/rtpproxy start
如果rtpproxy啟動失敗,請檢查/etc/init.d/rtpproxy腳本DAEMON路徑是否正確,默認為DAEMON=/usr/sbin/$NAME,可能要改為DAEMON=/usr/bin/$NAME
4.安裝并配置mediaproxy
導入源密鑰,增加mediaproxy的源到/etc/apt/sources.list
wget http://download.ag-projects.com/agp-debian-gpg.key
apt-key add agp-debian-gpg.key
vi /etc/apt/sources.list
最后位置添加
deb http://ag-projects.com/ubuntu precise main
deb-src http://ag-projects.com/ubuntu precise main
安裝mediaproxy
apt-get update
apt-get install mediaproxy-dispatcher mediaproxy-relay mediaproxy-web-sessions
進入/etc/mediaproxy/tls目錄,拷本密鑰文件,修改配置文件
cd /etc/mediaproxy/tls/
cp /usr/share/doc/mediaproxy-common/tls/* .
cd ..
vi config.ini
修改為類似如下內容
[Relay]
dispatchers = 106.186.23.149
passport = None
relay_ip = 106.186.23.149
port_range = 50000:60000
log_level = DEBUG
stream_timeout = 90
on_hold_timeout = 7200
reconnect_delay = 10
traffic_sampling_period = 15
[Dispatcher]
socket_path = dispatcher.sock
listen = 106.186.23.149
listen_management = 106.186.23.149
management_use_tls = yes
passport = None
management_passport = None
log_level = DEBUG
relay_timeout = 5
[TLS]
certs_path = tls
verify_interval = 300
[Database]
[Radius]
[OpenSIPS]
socket_path = /var/run/opensips/socket
max_connections = 10
啟動mediaproxy服務
media-dispatcher restart
media-relay restart
5.啟動服務并檢驗
修改日志文件配置,是opensips的日志保存在/var/log/opensips.log
touch /var/log/opensips.log
chmod 777 /var/log/opensips.log
vi /etc/rsyslog.d/opensips.conf
增加如下內容
local0.* /var/log/opensips.log
為opensips.log文件增加vim的顏色自動化
增加如下內容
au BufNewfile,BufRead /var/log/* set filetype=messages
重啟syslog服務,啟動opensips
service rsyslog restart
opensipsctl start
如果啟動失敗,查看/var/log/opensips.log文件查找錯誤。
服務啟動后,防火墻開啟tcp及udp的端口
iptables -I INPUT -p tcp --dport 6060 -j ACCEPT
iptables -I INPUT -p udp --dport 6060 -j ACCEPT
iptables-save
然后在http://www.yougetsignal.com/tools/open-ports/查看端口是否打開
手機測試端安裝CSipSimple或其他sip客戶端測試。注意CSipSimple服務器輸入為類似xdty.org:6060 域名:端口的形式,撥打對方電話時直接輸入帳號名10001而不需要輸入域名。如果可以通話就表示配置成功了。
或者使用原生的系統撥號盤,在設置->通話設置->互聯網電話設置|賬戶->接聽來電(勾選)|添加賬戶->保存。當顯示為”主賬戶。接聽電話”時即配置成功。撥打電話時需要加入類似郵箱地址的后綴即10001@xdty.org,如果不能輸入非數字字符可以粘貼或者添加一個新的聯系人,在“增加其他字段”中添加“互聯網電話”,輸入10001@xdty.org,之后點擊此聯系人撥打互聯網電話即可。
下文增加網頁管理功能。
6.安裝配置opensips-cp
下載最新版本的opensips-cp,位置在http://sourceforge.net/projects/opensips-cp/
可以根據INSTALL文件安裝,主要配置一些數據庫的操作。
將文件解壓,復制到/var/www/目錄下重命名為opensips
安裝一些依賴關系
pear install MDB2#mysql
pear install log
更改權限
chown www-data:www-data web -R
進入config/tools/admin/add_admin/目錄,導入數據表
mysql -Dopensips -p<ocp_admin_privileges.mysql
mysql -uroot opensips
INSERT INTO ocp_admin_privileges (username,password,ha1,available_tools,permissions) values ('admin','admin',md5('admin:admin'),'all','all');
進入config/tools/system/cdrviewer/目錄
mysql -Dopensips -p < cdrs.mysql
mysql -Dopensips -p<opensips_cdrs.mysql
進入cron_job目錄,修改文件配置數據庫信息
vi generate-cdrs_mysql.sh
注意,generate-cdrs_mysql.sh這個文件里的“call opensips_cdrs_1_6()”可能要改為“call opensips_cdrs()”,必須要與opensips_cdrs.mysql里定義的名稱一致。
進入config/tools/system/smonitor/目錄,導入數據庫并添加定時任務。
mysql -Dopensips -p < tables.mysql
vi /etc/crontab
*/3 * * * * root /var/www/opensips/cron_job/generate-cdrs_mysql.sh
* * * * * root php /var/www/opensips-cp/cron_job/get_opensips_stats.php > /dev/null
打開瀏覽器訪問http://網址/opensips,使用admin/admin登錄,登錄后可以修改用戶名和密碼。
參考資料:
http://www.cnblogs.com/bjzhanghao/archive/2013/02/13/2910903.html
http://www.docin.com/p-163183480.html
http://www.linuxidc.com/Linux/2014-01/95847.htm
@import url(http://m.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);