目前对于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
安装过程:
安装依赖库
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
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.启动并配置数据库
/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数据库的对接
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.建立软链接
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数据库
[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配置文件,使用图形界面运行
/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.使用生成的配置文件替换默认的配置文件
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的配置文件
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,方便我们对出现问题的处理
echo "local0.* /var/log/opensips.log" >> /etc/rsyslog.conf service rsyslog restart
11.配置opensips的启动文件,以后就可以使用service opensips [start/stop/restart]管理opensips服务.
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.配置域的名字
sed -i 's#\# SIP_DOMAIN=opensips.org#SIP_DOMAIN=192.168.88.10#g' /data/opensips1.11.4/etc/opensips/opensipsctlrc
#以上的192.168.88.10可以更改成自己的域名或IP
12.RTPProxy的安装与配置(这部分可省略,因为后面会使用Mediaproxy)
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.添加测试账户
[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