目前对于VOIP这块网上很少有详细配置资料,即便是有对于初学者来说都是似懂非懂的,本文结合网上部分资料并整理,若有问题请评论说明。
ICE(互动式建立连接)试着寻找最佳路线去建立连接方式,它会并行的寻找所有的可能性,然后选择最有效的可行方式,它首先尝试用设备系统或网卡获取到的主机地址去连接,如果这个失败了(设备在NAT后就会),ICE会从STUN服务器获取外部地址进行连接,如果这个也失败了,就用TURN中转服务器做通讯。
首先说下实现NAT穿越的几种方式:
-
针对客户端的解决方案:STUN、TURN、ICE
-
路由边界解决方案:应用层网关ALG、通用即插即用uPNP、中间盒通信MIDCOM
-
服务器端解决方案:B2BUA、服务端RTP中继、会话边界控制SBC、FULL-PROXY、隧道技术
-
还有RSIP
如何区分对称和非对称NAT:
网关设备在实现NAT时,对于内网某主机的若干UDP请求,网关设备对应地在外网上所建立的UDP端口数量
对称NAT是一个请求对应一个端口
非对称NAT是多个请求对应一个端口
ICE的协商过程:
-
候选地址的收集:ICE客户端收集本地所有可能用于通讯的地址,所收集的地址分为3类:
(1)主机候选地址(Host Candidate):本地物理网卡的地址
(2)服务器反射地址(Server Reflexive Candidate就是NAT上关于本地IP映射的地址),这个地址通过STUN服务器来获取
(3)中转/中继候选地址(Relay Candidate)这个地址就是使用中继(Relay)的传输方式时,在中继服务器(或者称为TURN服务器)上为本机所分配的地址
2.候选地址的优先策略:一般情况下使用中继方式产生的中继候选地址的优先权最低,因为它的代价最昂贵。
3.本地候选地址编码:把编码来的地址传至对端,双方通过报告/应答的方式进行协商
4.候选地址配对:将本端的地址与对端的地址一一进行配对,此时应该通过某种方式的得到了对端的候选地址
5.每对地址做连接测试
6.得到结果:由于已经对所有的候选地址一一进行配置并一一进行连接测试,所以存在一个可以通信的路径,ICE肯定会得到它。
第一部分:opensips的安装
环境说明:
操作系统:CentOS 6.6 64位版,采用最小安装,安装的时候将“Devlopment Tools”选上并关闭SELinux及防火墙
软件:opensip-1.11.4
安装过程:
-
安装依赖库
1
2
3
4
|
yum -y
install
gcc
make
zlib-devel wget gdb
yum -y
install
flex bison ncurses-devel
yum -y
install
mysql mysql-server mysql-devel mysql-libs
yum -y
install
lynx svn libxslt
|
2.下载并安装配置opensips-1.11.4-latest-src.tar.gz
1
2
3
4
5
6
|
wget http:
//opensips
.org
/pub/opensips/1
.11.4
/src/opensips-1
.11.4-latest_src.
tar
.gz
tar
zxf opensips-1.11.4-latest_src.
tar
.gz
cd
opensips-1.11.4-tls/
make
prefix=
/data/opensips1
.11.4 all include_modules=
"db_mysql"
make
prefix=
/data/opensips1
.11.4
install
include_modules=
"db_mysql"
cd
..
|
说明:将opensips安装到/data/opensips1.11.4,并增加mysql支持
3.启动并配置数据库
1
2
3
4
|
/etc/init
.d
/mysqld
start
mysqladmin -uroot password 123456
mysql -uroot -p123456 -e
"delete from mysql.user where password=''"
mysql -uroot -p123456 -e
"drop database test"
|
说明:以上将数据库的root密码设置为123456,并删除数据库中空密码的账户。
4.配置opensips与mysql数据库的对接
1
2
3
4
5
6
|
sed
-i
's/\# DBENGINE=MYSQL/DBENGINE=MYSQL/g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
sed
-i
's/\# DBHOST=localhost/DBHOST=localhost/g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
sed
-i
's/\# DBNAME=opensips/DBNAME=opensips/g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
sed
-i
's/\# DBRWUSER=opensips/DBRWUSER=opensips/g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
sed
-i
's/\# DBRWPW="opensipsrw"/DBRWPW="opensipsrw"/g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
sed
-i
's/\# DBROOTUSER="root"/DBROOTUSER="root"/g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
|
以上主要就是修改/data/opensips1.11.4/etc/opensips/opensipsctlrc中mysql的配置
5.建立软链接
1
2
3
|
ln
-s
/data/opensips1
.11.4
/etc/opensips/
/etc/
echo
"export PATH=$PATH:/data/opensips1.11.4/sbin/"
>>
/etc/profile
source
/etc/profile
|
说明:以上说明以后opensips的配置文件就可以直接打开/etc/opensips/目录下.另外也将opensips的执行文件加到环境变量
6.创建opensips数据库
1
2
3
4
5
6
7
8
9
10
11
|
[root@CentOS6 opensips-1.11.4-tls]
# /data/opensips1.11.4/sbin/opensipsdbctl create
MySQL password
for
root:
#输入mysql root密码,这里是123456
INFO:
test
server charset
INFO: creating database opensips ...
INFO: Core OpenSIPS tables succesfully created.
Install presence related tables? (y
/n
): y
#确认安装presence表,也可以否
INFO: creating presence tables into opensips ...
INFO: Presence tables succesfully created.
Install tables
for
imc cpl siptrace domainpolicy carrierroute userblacklist b2b cachedb_sql registrant call_center? (y
/n
): y
#确认安装表,也可以否
INFO: creating extra tables into opensips ...
INFO: Extra tables succesfully created.
|
7.创建opensips配置文件,使用图形界面运行
1
|
/data/opensips1
.11.4
/sbin/osipsconfig
|
按照 Generate OpenSIPS Script ---> Residential Script ---> Configure Residential Script
路径,并选择以下几个:
Configure Residential Script
____________________________________________
| |
| [ ] ENABLE_TCP |
| [ ] ENABLE_TLS |
| [*] USE_ALIASES |
| [*] USE_AUTH |
| [*] USE_DBACC |
| [*] USE_DBUSRLOC |
| [*] USE_DIALOG |
| [ ] USE_MULTIDOMAIN |
| [*] USE_NAT |
| [ ] USE_PRESENCE |
| [ ] USE_DIALPLAN |
| [ ] VM_DIVERSION |
| [ ] HAVE_INBOUND_PSTN |
| [ ] HAVE_OUTBOUND_PSTN |
| [ ] USE_DR_PSTN |
| [ ] USE_HTTP_MANAGEMENT_INTERFACE |
|____________________________________________|
然后按"<-"键盘,选择"Generate Residential Script"回车即可,然后一直按"<-"键退出.
如果这里选择了USE_MULTIDOMAIN,则需要往OpenSIPS的opensips数据库的domain表插入domain值。
8.使用生成的配置文件替换默认的配置文件
1
2
|
rm
-f
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
mv
/data/opensips1
.11.4
/etc/opensips/opensips_residential_
*.cfg
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
|
9.更改opensips的配置文件
1
2
3
4
|
sed
-i
's/disable_tcp=no/disable_tcp=yes/g'
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
sed
-i
's/listen=udp:127.0.0.1:5060/listen=udp:eth0:5060/g'
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
sed
-i
's#mpath="/usr/local/lib/opensips/modules/"#mpath="/data/opensips1.11.4/lib64/opensips/modules/"#g'
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
sed
-i -e
'/modparam("uri", "use_uri_table", 0)/a\modparam("uri", "db_url","mysql://opensips:opensipsrw@localhost/opensips")'
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
|
10.更改opensips日志路径,查看opensips日志,只要查看/var/log/opensips.log,方便我们对出现问题的处理
1
2
|
echo
"local0.* /var/log/opensips.log"
>>
/etc/rsyslog
.conf
service rsyslog restart
|
11.配置opensips的启动文件,以后就可以使用service opensips [start/stop/restart]管理opensips服务.
1
2
3
4
5
6
|
cp
/root/opensips-1
.11.4-tls
/packaging/fedora/opensips
.init
/etc/init
.d
/opensips
sed
-i
's#opensips=/usr/sbin/$prog#opensips=/data/opensips1.11.4/sbin/$prog#g'
/etc/init
.d
/opensips
chmod
+x
/etc/init
.d
/opensips
groupadd opensips
useradd
-g opensips -s
/sbin/nologin
-d
/dev/null
opensips
service opensips start
|
13.配置域的名字
1
|
sed
-i
's#\# SIP_DOMAIN=opensips.org#SIP_DOMAIN=192.168.88.10#g'
/data/opensips1
.11.4
/etc/opensips/opensipsctlrc
|
1
|
#以上的192.168.88.10可以更改成自己的域名或IP
|
12.RTPProxy的安装与配置(这部分可省略,因为后面会使用Mediaproxy)
1
2
3
4
5
6
7
8
9
|
yum -y
install
git
git clone git:
//sippy
.git.sourceforge.net
/gitroot/sippy/rtpproxy
cd
rtpproxy
.
/configure
make
make
install
rtpproxy -u opensips -F
sed
-i
's#udp:localhost:12221#unix:/var/run/rtpproxy.sock#g'
/data/opensips1
.11.4
/etc/opensips/opensips
.cfg
service opensips restart
|
13.添加测试账户
1
2
3
4
5
6
7
8
|
[root@CentOS6 ~]
# opensipsctl add 1 123456
new user
'1'
added
[root@CentOS6 ~]
# opensipsctl add 2 123456
new user
'2'
added
[root@CentOS6 ~]
# opensipsctl add 3 123456
new user
'3'
added
[root@CentOS6 ~]
# opensipsctl add 4 123456
new user
'4'
added
|