ubuntu9.10 安装openSER 和 利用 RTP proxy 实现TURN,解决 symmetric NAT带给SIP语音无法沟通的困扰

ubuntu9.10 安装openSER 和 利用 RTP proxy 实现TURN,解决 symmetric NAT带给SIP语音无法沟通的困扰


转载自链接 http://hi.baidu.com/zj8la8la/blog/item/d700d8b2c11a41abd9335af9.html


留个笔记,方便其它的人,网上资源不全,我做个完整的吧,至少我测试通过:
我的目的很简单,只是实现sip网内互通 mysql 数据库支持。
开始了:设置域名

* 如果你的机器有域名,直接使用就可以了,如果没有,可以编辑一下/etc/hosts,加上一行:
代码: 127.0.0.1    sip.org )

需要安装:apt-get install openser   openser-mysql-module

配置只需要配置:/etc/openser/目录下的:openser.cfg openserctlrc 两个文件

先安装rtpproxy

取得 rtpproxy-1.1 (官網 http://www.rtpproxy.org/)
# wget
http://b2bua.org/chrome/site/rtpproxy-1.1.tar.gz

編譯 rtpproxy
# cd rtpproxy-1.1
# ./configure
# make ; make install


-- RTP Proxy --
設定為開機執行 rtpproxy
# vi /etc/rc.local (加入以下兩行)
/usr/local/bin/rtpproxy -F
/usr/local/sbin/opensipsctl start

手動執行 rtpproxy
# /usr/local/bin/rtpproxy -F

若跑起來成功, 則可以在 /var/run 目錄底下看到有2個檔案
rtpproxy.pid
rtpproxy.sock=

-- OpenSIPS --
設定 nathelper for NAT traversal
把原始的/usr/share/doc/openser/examples/nathelper.cfg 複製到
/etc/openser 目錄下, 並改名為 openser.cfg (
原始目录里有的是/usr/share/doc/openser/examples/nathelper.cfg.gz文件,请先解压.gz文件, gzid -d nathelper.cfg.gz   得到nathelper.cfg文件,然后再复制过去)


接着配置复制过来的:openser.cfg文件:

In /etc/openser/openser.cfg


#set module path
mpath="/usr/local/lib/openser/modules/" #这个修改为下面的黄字:

mpath="/usr/lib/openser/modules/"


Uncomment the line for MySQL DB support:
loadmodule “mysql.so”

Uncomment the following lines for MySQL based authentication support:
loadmodule “auth.so”
loadmodule “auth_db.so”

modparam("auth", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
if (!www_authorize("sip.org", "subscriber")) { www_challenge("sip.org", "0"); exit; };


Uncomment the following line to enable DB persistency for location entries:
modparam("usrloc", "db_mode", 2)
And comment the following line:
modparam("usrloc", "db_mode", 0)


找红字,删除前面的#号。sip.org改为您自己服务器的IP。

修改openserctlrc文件:
In /etc/openser/openserctlrc, uncomment the following lines:
SIP_DOMAIN = sip.org
DBENGINE = MYSQL
DBHOST = localhost

(If MySQL is installed in another machine, give its host name or IP address here)


找红字所在的行,删除前面的#号。
SIP_DOMAIN =这里填写您自己的服务器IP。

OK,配置好以上两个文件,就以支持mysql数据库了
然后建立openser数据库:
命令:
# /usr/sbin/openserdbctl create

MySQL password for root:
INFO: test server charset
INFO: creating database openser ...
INFO: Core OpenSER tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into openser ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute? (y/n): y
INFO: creating extra tables into openser ...
INFO: Extra tables succesfully created.

填写两个Y后,建库成功。数据库名为:openser 如果mysql有密码,输入命令时会提示密码,填入root密码即可。

启动openser:
root@ubuntu:
/usr/sbin# openserctl stop

INFO: Stopping OpenSER :
INFO: stopped
root@ubuntu:
/usr/sbin# openserctl start

INFO: Starting OpenSER :
INFO: started (pid: 21415)

注意启动文件的路径,网上说的大多是:/etc/init.d/openser star启动 其实,这是没用的。请用上面的红字启动:看到上面的提示,说明启动成功:21415会变化无所谓,那只是PID。

查看sip端口是否打开
root@louis-laptop:/home/louis#
netstat -au|grep "sip"
udp        0      0 louis-laptop.local:sip *:*                               
udp        0      0 localhost:sip           *:*   
有这提示,说明OK了。

如果有防火墙请打开端口 5060 8000。我防火墙都没开,所以也无须打开。

现在添加两个用户:
#openserctl add 100 100 100@localhost      (用户名:100 密码:100)
#openserctl add 101 101 101@localhost (用户或:101 密码:101)
(添加用户时提示输入密码,密码为;openserrw   这是默认的。

用软终端登录即可,测试互通成功。

说明下:安装成功后,mysql会自动生成两个用户,用户名分别为openser   openserro

关于修改默认密码 openserrw

1. edit /etc/openser/openserctlrc

* 注意openser在資料庫有分讀寫與唯讀兩帳號。
* DBRWPW 安全起見請務必設定,勿用default password.
至於 DBROPW,因為我在 openser.cfg 沒有找到對應的設定位置,
所以照 default 設為 openserro. 修改:/etc/openser/opensercltrc
* Uncomment and edit following lines.

SIP_DOMAIN=feena.csie.ncnu.edu.tw
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=openser
DBRWUSER=openser
DBRWPW="
foofoo" #这里修改为foofoo
DBROUSER=openserro
DBROPW="openserro"
DBROOTUSER="root"

3. Use the following command to create OpenSER database structures.
(you will be prompted for password of MySQL "root" user)

/usr/sbin/openserdbctl create

4. edit /etc/openser/openser.cfg

* Uncomment and edit following lines.

loadmodule "/usr/lib/openser/modules/mysql.so"
loadmodule "/usr/lib/openser/modules/auth.so"
loadmodule "/usr/lib/openser/modules/auth_db.so"

modparam("usrloc", "db_mode", 2)
modparam("usrloc", "db_url",                             #
如果按以上文档配置下来,要添加这以下两行
"mysql://openser:foofoo@localhost/openser")  

modparam("auth", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")
modparam("auth_db", "db_url",                        #
如果按以上文档配置下来,要添加这以下两行
"mysql://openser:foofoo@localhost/openser")


5. /etc/init.d/openser start  

总结 :安装好后改默认密码的话需要改二处, 一是数据库里的openser用户密码 二是.openser.cfg文件里,需要添加那两行,共两处

安装前没生成数据库前提前修改密码的话,需要多修改一处,即是./openserctlrc 里的.看上面的第1条修改.

出处:http://hi.baidu.com/zj8la8la/creat/blog    服务于:http://www.mansiyu.com时 尚假发经销商。

--------------------------------------------------------------




下面的是针对最新版的,openser已改为opensips。以上安装的是openser1.3.1.下面的是新版的内容,别处看到的,转过来了。

※ 如果這篇文章, 對您是有用而且可行的, 請在您試作之後回應給我, 好讓我知道是否有不足之處。

※ 本文所用的 NAT穿透是採用 TURN, 此種方式雖可處理各種 NAT 環境, 但容易產生系統瓶頸。

關鍵字: IP Phone, SIP, OpenSIPs,OpenSER, SER, NAT Traversal, RTP Proxy, TURN, Traversal Using Relay NAT

[環境]
作業系統: Linux (Trustix 3.0.5) Under VMware
核心版本: 2.6.19.7-3tr
CPU: Intel(R) Pentium(R) D CPU 2.80GHz
RAM: 128MB
NIC: PCnet/PCI II 79C970A (pcnet32)
NET: 在VM底下, 以橋接方式給予 Publick IP (140.111.xxx.xxx/255.255.255.0)
Firewall: 未設置

[軟體]
OpenSIPS(舊名 OpenSER), RTPProxy, gcc, make, bison or yacc, sed, tar

[觀念] (待補)

利用 RTP proxy 實現 TURN, 以解決 symmetric NAT 帶給 SIP 語音無法溝通的困擾。


[安裝及設定]
取得 opensips-1.4.2 (官網
http://www.opensips.org/)
# wget
http://opensips.org/pub/opensips/latest/src/opensips-1.x.x-notls_src.tar.gz (版本自己改一下)
取得 rtpproxy-1.1 (官網http://www.rtpproxy.org/)
# wget
http://b2bua.org/chrome/site/rtpproxy-1.1.tar.gz

解開
# tar zxvf opensips-1.5.1-tls_src.tar.gz
# tar zxvf rtpproxy-1.1.tar.gz

編譯 opensips
# cd opensips-1.5.1-tls/
# vim Makefile (找到 db_mysql, 刪掉, 這樣才能編入 mysql 的支援)
# make ; make modules ; make install

編譯 rtpproxy
# cd rtpproxy-1.1
# ./configure
# make ; make install


-- RTP Proxy --
設定為開機執行 rtpproxy
# vi /etc/rc.local (加入以下兩行)
/usr/local/bin/rtpproxy -F
/usr/local/sbin/opensipsctl start

手動執行 rtpproxy
# /usr/local/bin/rtpproxy -F

若跑起來成功, 則可以在 /var/run 目錄底下看到有2個檔案
rtpproxy.pid
rtpproxy.sock=


-- OpenSIPS --
設定 nathelper for NAT traversal
把原始的 tarball 裡的 example 目錄底下的 nathelper.cfg 複製到
/usr/local/etc/opensips 目錄下, 並改名為 opensips.cfg

執行
# opensipsctl start
若沒問題就會出現執行功成的 pid
-- ex: --
INFO: Starting OpenSIPS :
INFO: started (pid: 9296)


[後續維護] (幾個簡單的指令)

查看已上線的使用者
# opensipsctl online
監看系統
# opensipsctl moni
新增使用者 (建議有 mysql 配合, 以記下使用者資訊)
# opensipsctl add 'username' 'password' 'e-mail'

看一篇台湾人写的,和我写的差不多,转过来吧;;

OpenSER

OpenSER 是一個 open source 的 SIP Server
提供了大部分常用的 SIP Server 功能 :
- SIP proxy server
- SIP register server
- SIP redirect server

系統需求:
- gcc compiler
- flex
- bison
- libmysqlclient15-dev
- openssl
- mysql

編譯安裝 OpenSER
到這裡下載最新的版本
我使用的版本是:openser-1.3.2-tls.tar.gz

修改 Makefile 把 mysql 從 exclude modules 去除
....

exclude_modules?= .... mysql ...

....

make all
make install


附註:
如果不想改 Makefile 可以改用下面指令
make all include_modules="mysql"
make install include_modules="mysql"

會將相關檔案安裝在 /usr/local 底下
執行檔會出現在 /usr/local/sbin 底下 (openser openserctl openserdbctl openserunix)
config 檔會出現在 /usr/local/etc/openser 底下 (dictionary.radius openser.cfg openserctlrc)

建立 openser log 檔
修改 /etc/syslog.cfg 檔,加入藍色部份
.....

#
# don't log messages with LOG_LOCAL0 in /var/log/syslog anymore
*.*;auth,authpriv.none,local0.none -/var/log/syslog

#
# log messages with LOG_LOCAL0 in /var/log/openser.log
local0.* -/var/log/openser.log


.....


會在 /var/log/ 底下出現 openser.log

如果想要修改 openser log 設定
要修改 openser.cfg
相關參數:
- debug: set log level (0~9).
- log_stderror: If set to "yes", print debugging information to standard error output.
If set to "no", syslog will be used.
Default is "no" (printing to syslog).
- log_facility: is used to specify what type of program is logging the message.
Valid values are "LOG_LOCAL0" through "LOG_LOCAL7".
See the manual page of syslog for more information.

參考資料:
http://www.openser.org/dokuwiki/doku.php/tutorials:debug-syslog-messages#introduction


啟用認證使用者功能 (Mysql)
修改 openserctlrc
......

SIP_DOMAIN=<your server domain>

......

DBENGINE=MYSQL

......


修改 openser.cfg 取消以下的註解
......

loadmodule "mysql.so"

loadmodule "auth.so"
loadmodule "auth_db.so"

.......

modparam("usrloc", "db_mode",   2)

modparam("auth_db", "calculate_ha1", yes)
modparam("auth_db", "password_column", "password")

.......

if (!www_authorize("<your server domain>", "subscriber"))
{
www_challenge("<your server domain>", "0");
exit;
}

.......


建立 openser 的 mysql tabel
openserdbctl create

會建立兩個 mysql 使用者: openser openserro
預設密碼分別為: openserrw openserro

使用 openserct add 指令加入新帳號


使用方式
開啟服務: openserctl start
停止服務: openserctl stop
查詢誰在線上: openserctl online
新增帳號: openserctl add <username> <password> <email>

你可能感兴趣的:(mysql,ubuntu,domain,makefile,traversal)