苍山网站建设,微信公众号运营怎么做,南京网站制作报价,长沙网站建设外贸本文操作系统为CentOS#xff0c;所用Opensips版本为1.8.2。 Update2013/6/27: 版本1.9.1也已验证通过#xff0c;下载地址为http://opensips.org/pub/opensips/latest/src/opensips-1.9.1_src.tar.gz 安装CentOS #xff08;若已有环境可跳过此步骤#xff09; 1、安装虚拟… 本文操作系统为CentOS所用Opensips版本为1.8.2。 Update2013/6/27: 版本1.9.1也已验证通过下载地址为http://opensips.org/pub/opensips/latest/src/opensips-1.9.1_src.tar.gz 安装CentOS 若已有环境可跳过此步骤 1、安装虚拟机VMWare Server 2.0遇到问题无法显示consoleChrome里换为Virtualbox 4.2后可正常使用 2、在虚拟机里安装CentOS 6.3选择standard server类型安装。 对这种纯命令行界面的虚拟机可以用telnet直接访问操作剪贴板什么的比较方便 若虚拟机映射的网卡没有自动启动用ifup eth0命令启动。 若(Virtualbox的)虚拟机是复制过来的可能需要先删除 /etc/udev/rules.d/70-persistent-net.rules再修改/etc/sysconfig/network-scripts/ifcfg-eth0里的HWAddr地址。 若需要配置网卡ip地址先ifconfig -a查看网卡设备号和MAC地址然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件示例如下 DEVICEeth0
BOOTPROTOnone
HWADDR08:00:27:81:30:F4
NM_CONTROLLEDyes
ONBOOTyes
TYPEEthernet
UUIDdcd43c45-adf4-480b-b461-179ee8d2e8d6
IPADDR192.168.1.120
NETMASK255.255.255.0
GATEWAY192.168.1.1 在/etc/resolv.conf里指定dns以便安装软件包CentOS6以后可以在ifg-eth0里指定dns了 nameserver 202.181.202.140
nameserver 208.67.220.220 安装Opensips根据官方的Tutorial视频整理的主要步骤 opensips提供了一个视频教程这个页面有下载链接90M推荐使用menuconfig方式更方便且不容易出错。以下为步骤摘要 yum install gcc make yum install flex bison ncurses libncurses-dev ncurses-devel yum install mysql mysql-server mysql-libs mysql-devel wget http://opensips.org/pub/opensips/1.8.2/src/opensips-1.8.2_src.tar.gz tar zxvf opensips-1.8.2_src.tar.gz cd opensips-1.8.2-tls make menuconfig (勾选db_mysql其他不用动) 菜单里选Compile And Install Opensips 退出menuconfig vi /usr/etc/opensips/opensipsctlrc把与mysql有关的注释去掉DB_PATH和USERCOL保留注释 service mysqld start opensipsdbctl create提示的两个问题都选no osipsconfig (选择ENABLE_TCP,USE_AUTH,USE_DBACC,USE_DBUSERLOC,USE_DIALOG然后generate residential script) 用生成的opensips_residential_xxx.cfg替换原先的opensips.cfg vi /usr/etc/opensips/opensips.cfg (改listen地址和mpath后者一般是/usr/lib/opensips/modules) opensipsctl start (netstat -anp查端口) service iptables stop 关闭防火墙 如果启动opensips时提示错误检查/var/log/messages若opensips.cfg里设置了log_stderrorno则日志都进入此文件链接一般是模块参数未设置引起的。例如在log里发现“ERROR:uri:db_checks_fixup1: configuration error - no database URL is configured!”则在opensips.cfg里的“loadmodule uri.so”后添加modparam(uri, db_url,mysql://opensips:opensipsrwlocalhost/opensips)即可。 创建测试用户 opensipsctl add 101 101 如果创建用户时提示“ERROR: domain unknown: use usernames with domain or set default domain in SIP_DOMAIN”可修改opensipsctlrc文件将SIP_DOMAIN设为本机域名或IP地址。 进一步配置Opensips 设置日志输出方式 在opensips.cfg里有几个参数控制日志的输出 debug3 #此值控制日志输出的详细程度3为普通4为详细会产生很多日志。 log_stderrorno #设置为no表示将日志输出到文件否则输出到控制台应该是以前台方式启动opensips服务时才有用。 log_facilityLOG_LOCAL0 #应该是用于在syslog服务的配置文件里区分opensips产生的日志见下面“使用独立的log文件”。 forkyes #设置为yes表示在后台启动opensips服务设置为no表示在前台启动。 使用独立的log文件 opensips使用syslog服务所以缺省情况下日志会进入/var/log/message这个文件如果希望使用独立的log文件可以这样设置 touch /var/log/opensips.log vi /etc/rsyslog.conf -- 增加一行local0.* /var/log/opensips.log /etc/init.d/rsyslog restart 配置STUN模块 opensips自带一个stun模块可以实现stun服务器的功能需要双网卡。配置方法也很简单官方文档在opensips.cfg里添加如下内容 #### STUN module loadmodule stun.so modparam(stun, primary_ip, 11.22.33.44) #opensips服务器的ip地址 modparam(stun, primary_port, 5060) #必须与opensips的udp端口相同一般是5060 modparam(stun, alternate_ip, 55.66.77.88) #另一网卡的ip地址 modparam(stun, alternate_port, 3479) #另一端口号 配置好stun以后可以使用stun-client来测试以windows下为例测试命令为 stun-client-0-96.exe 11.22.33.44:5060 -v 安装配置RTPProxy模块 rtpproxy模块通常与nathelper模块一起使用。首先要确保服务器上已经安装了rtpproxy启动rtpproxy rtpproxy -F 然后在opensips.cfg文件里做如下配置 loadmodule rtpproxy.so modparam(rtpproxy, rtpproxy_sock, unix:/var/run/rtpproxy.sock) # CUSTOMIZE ME 安装配置MediaProxy模块 MediaProxy官方文档链接 一个在CentOS6上安装MediaProxy2.5.2的参考链接。 下载mediaproxy源码和所需要的各种依赖包并安装过程略。安装完成后 把config.ini.sample复制到/etc/mediaproxy/config.ini把tls目录也复制过来。 echo 1 /proc/sys/net/ipv4/ip_forward media-dispatcher restart media-relay restart 在opensips.cfg里配置mediaproxy模块如下 #### MediaProxy module loadmodule mediaproxy.so modparam(mediaproxy, disable, 0) #modparam(mediaproxy, mediaproxy_socket, /var/run/mediaproxy/dispatcher.sock) modparam(mediaproxy, mediaproxy_timeout, 500) modparam(mediaproxy, signaling_ip_avp, $avp(nat_ip)) modparam(mediaproxy, media_relay_avp, $avp(media_relay)) 若mediaproxy提示“No suitable relay found”可能是certification方面的问题。 参考链接 未完 抓取SIP包 在Opensips所在服务器上使用tcpdump可以抓取SIP包以便分析问题注意要抓取的网卡是eth0或eth1 tcpdump -nqt -s 0 -A -i eth0 port 5060 -w /home/capture_file_name.pcap 参考http://jonathanmanning.com/2009/10/26/how-to-voip-sip-capture-with-tcpdump-on-linux/ 要抓手机上的包稍微复杂一些要先root手机然后把tcpdump复制到手机上使用 adb shell su tcpdump -nqt -s 0 -w /sdcard/packets_xx.pcap adb pull /sdcard/packets_xx.pcap 具体请参考这篇文章。 安装opensips-cp 从sourceforge下载opensips-cp源码压缩包后里面附有名为INSTALL的文档建议根据这个文档进行安装网上能查到的一些资料往往是过期的或不准确的。 yum install httpd php php-mysql php-xmlrpc php-pear pear install MDB2 pear install MDB2#mysql pear install MDB2#mysqli pear install log 在/etc/php.ini里 把short_open_tag置为On 把/usr/share/pear加到inculde_path变量里一些教程写的是加/usr/share/php实际检验要加/usr/share/pear wget http://sourceforge.net/projects/opensips-cp/files/opensips-cp/5.0/opensips-cp_5.0.tgz/download tar -zxvf opensips-cp_5.0.tgz 将解压缩后的文件夹名字一般是“5.0”复制到/var/www目录下并改名为opensips-cp vi /etc/httpd/conf/httpd.conf添加下面一行 Alias /cp /var/www/opensips-cp/web chown apache:apache /var/www/opensips-cp/config/access.log 如果是其他版本linux用户名可能是www-data或其他 随源码附带的安装文档INSTALL有点看不懂postgresql应该是与mysql二选一。 安装必须的admin cd /var/www/opensips-cp/config/tools/admin/add_admin/ mysql -Dopensips -pocp_admin_privileges.mysql mysql -uroot opensips进入mysql命令行执行下面的命令添加管理员用户 INSERT INTO ocp_admin_privileges (username,password,ha1,available_tools,permissions) values (admin,admin,md5(admin:admin),all,all); 安装cdrviewer cd /var/www/opensips-cp/config/tools/system/cdrviewer/ mysql -Dopensips -p cdrs.mysql mysql -Dopensips -popensips_cdrs.mysql cd /var/www/opensips-cp/cron_job vi generate-cdrs_mysql.sh 填写数据库连接信息 注意generate-cdrs_mysql.sh这个文件里的“call opensips_cdrs_1_6()”可能要改为“call opensips_cdrs()”必须要与opensips_cdrs.mysql里定义的名称一致。 vi /etc/crontab 添加定时任务例如每三分钟生成一次*/3 * * * * root /var/www/opensips-cp/cron_job/generate-cdrs_mysql.sh 安装smonitor cd /var/www/opensips-cp/config/tools/system/smonitor/ 此处INSTALL文档有笔误这里已更正 mysql -Dopensips -p tables.mysql vi /etc/crontab 添加定时任务例如每分钟一次* * * * * root php /var/www/opensips-cp/cron_job/get_opensips_stats.php /dev/null 安装add_user 最前面已经装过了ocp_admin_privileges.mysql这里应该不需要再做一次INSTALL文档的小问题不少 启动opensips-cp service mysqld start service httpd start 打开浏览器访问http://xxx.xxx.xxx.xxx/cp/ 应该能看到登录界面用之前创建的admin用户登录。 未完待续.. 其他有用链接 Opensips官方论坛 关于sip和sip的客户端 Best practices for SIP NAT traversal 一些问题和解决 服务器端保持连接使用 nat_traversal或nathelper模块根据讨论组里的一些帖子这两个模块的功能几乎相同让opensips每个一段时间向客户端发一个包使得路由器上的端口映射将保持即洞口一直打开。在客户端抓包时应该可以看到这些来自服务器的sip包一般名称为OPTIONS。 客户端接收到INVITE命令后没有RING很奇怪的问题但在我这里时不时的发生客户端程序为Boghe v2.0.153.836暂时还没有找到原因和解决方法。 路由器修改SIP包使用Volans VE602W作为路由器从客户端发出的REGISTER包里的Via字段会被修改为公网地址导致opensips服务器判断是否来自内网nat_traversal模块中的nat_client_test方法失败其他三个路由器TPLink、Mercury和Buffalo没有这种情况。暂时没有找到解决方法。这里有一个类似问题。 客户端接收到重复的OPTIONS消息由于重复通过不同路由器登录到opensipsOpensips有时会发送多个OPTIONS包给客户端直到服务器认为客户端已经掉线。若客户端在REGISTER消息的Contact字段里添加了expiresxxx时服务器会在location表里记录客户端失效的时间若这个时间很长则服务器会一直尝试连接客户端。 有时接通以后没有视频画面遇到过这样的问题拨打十次每次都能接通但有时没有画面。后来发现是服务器防火墙禁止了一些端口用iptables --list INPUT查询发现服务器仅允许udp 35000~50000进入。解决方法是启动rtpproxy时指定端口范围例如rtpproxy -m 40000 -M 50000 -F。 Contact URI字段没有被改为公网IP通过增加调试信息发现虽然fix_nated_contact()方法已经被调用但服务器端发回的sip包里Contact URI里的内网地址并没有被替换为公网地址。在公司没有这个问题在家有这个问题更换路由器无效暂时没找到原因。更正这个问题本身有误应该观察从服务器返回的200OK消息而不是服务器接收到的原始消息 单向有声音/视频或仅音频能拨通可能是SIP包的长度超出了网络设备的MTU值在UDP协议下如果客户端不能处理过长的SIP包一般是带有SDP的那些SIP消息而且视频请求比音频请求产生的SIP消息要大多出的部分可能会被丢弃导致服务器发送/接收的SIP包失效。解决办法有1)切换到TCP协议2)精简SIP包尺寸有些客户端生成的SIP包里带有不必要的字段可以删除掉如果能够定制开发的话另外这里有一个参考链接3)使用支持超长UDP包或SIP包比较小的客户端我用的基于doubango的boghe这部分做的不太好换用x-lite后发现同样的请求SIP包长度小很多18xx vs 10xx。 清除在线用户用opensipsctl ul rm id可以删除一个在线用户一个用户段时间内多次登录时会造成重复记录这时可能需要清除掉这个用户的在线状态。 本文地址http://www.cnblogs.com/bjzhanghao/archive/2013/02/13/2910903.html