sip服务器的搭建

     我们都知道使用VOIP网络电话,需要连接上sip服务器,这样用户之间才可以通信。
     在这里,我就简单介绍下如何搭建sip服务器。 在windows系统下可搭建minisipserver,其官网为http://www.myvoipapp.com/,我们可以从中选取对应的版本,具体配置步骤见http://jingyan.baidu.com/article/03b2f78c744ab55ea237aef3.html。当然我们也可以下载Linux版本,安装和使用教程见http://www.myvoipapp.com/docs/mss_services/linux/index.html,我就不再赘述。
     这里我着重讲解下如何在ubuntu下搭建O pensSIPS服务器,OpenSIPS是一个成熟的开源SIP服务器,除了提供基本的SIP代理及SIP路由功能外,还提供了一些应用级的功能。OpenSIPS的结构非常灵活,其核心路由功能完全通过脚本来实现,可灵活定制各种路由策略,可灵活应用于语音、视频通信、IM以及Presence等多种应用。同时OpenSIPS性能上是目前最快的SIP服务器之一,可用于电信级产品构建。凭借其可扩展、模块化的系统架构,OpenSIPS提供了一个高度灵活的、用户可配置的路由引擎,可以为voice、video、IM和 presence等服务提供强大高效的路由、鉴权、NAT、网关协议转化等功能。由于其稳定高效等特点,OpenSIPS已经被诸多电信运营商应用在自己的网络体系中。

一.前提条件:

(1)mysql已经配置好

1 sudo apt-get install mysql-server
2 sudo apt-get isntall mysql-client
3 sudo apt-get install libmysqlclient-dev

(2)如果找不到curses.h,安装sudo apt-get install libncurses5-dev

二.安装:

1. 下载 opensips
我使用的是1.8版本,即可以git下来
 git clone https://github.com/OpenSIPS/opensips.git -b 1.8 opensips_1_8

2. 解压后,进入opensips目录

    make all  ,如果出错,一般是缺少一些编译工具,直接sudo apt-get install xxx(相应的工具)
    make install
可能设置到权限不足的问题,为了省事,我们不妨在root用户下进行操作

三.配置

1.opensips数据库
   cd /usr/local/etc/opensips/查看发现有三个文件,分别是opensips.cfg opensipsctlrc osipsconsolerc,然后vim将其对应的ip地址修改成自己主机上的。

2.开启数据库
   /usr/local/sbin/opensipsdbctl create 
   如果出现以下错误
    “ERROR: could not load the script in /usr/local/lib/opensips/opensipsctl/opensipsdbctl.mysql for database engine MYSQL
     ERROR: database engine not loaded - tried 'MYSQL'”
     则
1 cd /usr/local/lib64/opensips/opensipsctl/
2 cp $(你的opensips目录)/scrips/*.mysql  ./
3 mkdir mysql
4 cp  $(你的opensips目录)/scrips/mysql/*.sql ./mysql
5 cd /usr/local/share/opensips
6 cp $(你的opensips目录)/scrips/*.mysql  ./
7 mkdir mysql
8 cp  $(你的opensips目录)/scrips/mysql/*.sql ./mysql
如果ubuntu是32位的话,则为/usr/local/lib/opensips/opensipsctl
    成功后,会有两个选项,全选y
3.察看设置是否正确
   /usr/local/sbin/opensipsctl -c

四.使用

1.开启opensips服务
   /usr/local/sbin/opensipsctl start
   关闭stop 重启restart
    这里我遇到了ERROR: PID file/var/run/opensips.pid does not exist -- OpenSIPS start failed. 的问题。在这里使用tail -n 20 /var/log/syslog,可以查看错误原因,我发现是权限的问题,因而要sudo /usr/local/sbin/opensipsctl start 。
     
2.添加sip用户
    /usr/local/sbin/opensipsctl  add username password   如:/usr/local/sbin/opensipsctl add 100 100
     可以使用/usr/local/sbin/opensipsctl  rm 100删除用户。

如果出现ERROR: domain unknown: use usernames with domain or set default domain in SIP_DOMAIN,说明环境变量未配置,所以vim /etc/environment,在里面写入SIP_DOMAIN="你的IP Domain",而后再source下即可

默认的数据库用户为opensips,密码为opensipsrw,当然你也可以设置成对应的用户,直接在/usr/local/etc/opensips的配置文件修改对应的DBRWUSER,DBRWPW
                               
3.查看sip用户
     可以使用mysql -u root -p而后输入你的密码,就能够通过show databases;查看数据库,再使用use opensips;并且show tables;就可以查看opensips数据库里的表格,最后使用select * from subscriber;便能够查看添加的sip用户情况
4.可随意找一款网络电话进行测试,如sipdroid或linphone,设置用户信息,发现仍然连接不上,这到底是什么原因呢?我查了很久,才发现是由于对应默认的端口5060未打开,因而使用sudo ufw allow 5060。再次测试,总算连接成功,而后就可以愉快地进行通话喽!!!下面就是我测试成功的结果:
           
 
注意:如若不是公网IP,手机与服务器要确保在同一区域网里
 
   

转载于:https://www.cnblogs.com/xlwm/p/4414207.html

<think>好的,我现在需要帮用户解决关于搭建WebRTC、Kamailio、rtpengine和WebSocket SIP服务器的问题。首先,我得理清楚这些组件各自的作用以及它们之间的协作方式。 用户可能是一个开发者或者系统管理员,想要搭建一个支持WebRTC的实时通信系统。WebRTC通常用于浏览器之间的直接通信,但涉及到NAT穿透和信令处理,这时候就需要SIP服务器和媒体转发组件。Kamailio作为SIP服务器,处理信令部分,而rtpengine负责媒体流的转发和NAT穿透。WebSocket则是为了让浏览器能够通过WebSocket协议与SIP服务器通信,因为传统的SIP通常使用UDP,而浏览器环境更适合WebSocket。 接下来,我需要考虑用户的需求可能包括详细的安装步骤、配置文件的修改、各个组件的集成方式,以及可能的常见问题解决方法。用户可能对Linux环境比较熟悉,所以步骤可能需要基于Ubuntu或CentOS等常见系统。 首先,安装Kamailio。我需要确认不同Linux发行版的安装命令,比如Ubuntu使用apt,CentOS使用yum。然后,配置Kamailio支持WebSocket,这可能需要加载特定的模块,比如websocket模块,并配置监听地址和端口。用户可能需要修改kamailio.cfg文件,添加必要的路由逻辑来处理SIP over WebSocket的消息。 然后是安装rtpengine。rtpengine通常需要从源码编译或者使用第三方仓库。在Ubuntu上,可能需要添加deb包源,然后安装。配置rtpengine时,需要指定与Kamailio的交互接口,比如ng控制协议,以及监听的媒体端口范围。还需要配置Kamailio与rtpengine的通信,通过rtpengine模块发送控制命令。 WebSocket的支持需要在Kamailio中正确配置,确保浏览器可以通过ws或wss连接到Kamailio。可能需要生成SSL证书,配置TLS,以便使用安全的WebSocket连接。 集成的过程中,用户可能会遇到Kamailio无法启动的问题,这时候需要检查配置文件语法,模块是否加载正确,端口是否被占用。rtpengine的日志也需要查看,确认媒体端口是否正确打开,与Kamailio的通信是否正常。 另外,测试环节可能需要使用Web客户端,比如JS SIP库,来发起呼叫,检查信令和媒体流是否正常。如果媒体不通,可能需要检查防火墙设置,rtpengine的配置是否正确,ICE和STUN的设置是否恰当。 可能还需要考虑高可用性和扩展性,比如多个rtpengine实例,Kamailio的集群配置,但用户当前的请求可能更关注基础搭建,所以先提供基本步骤,再在高级部分简要提及扩展可能。 总结下来,步骤大致分为安装各个组件,配置它们之间的通信,处理WebSocket和SIP的集成,配置媒体转发,最后测试整个系统。需要确保每个步骤的命令准确,配置文件示例正确,并且给出常见问题的解决提示。</think>以下为WebRTC+Kamailio+rtpengine+WebSocket SIP服务器搭建的详细教程,按逻辑步骤分解: --- ### 一、基础环境准备 **系统要求**:Ubuntu 20.04+/CentOS 8+,4核CPU,4GB+内存 **依赖安装**: ```bash # Ubuntu示例 sudo apt update sudo apt install git gcc make libssl-dev libcurl4-openssl-dev ``` --- ### 二、Kamailio安装与配置 #### 1. 安装Kamailio ```bash # Ubuntu sudo apt install kamailio kamailio-websocket-modules kamailio-rtpengine-modules ``` #### 2. 配置WebSocket支持 编辑`/etc/kamailio/kamailio.cfg`: ```cfg # 加载模块 loadmodule "websocket.so" loadmodule "rtpengine.so" # 监听WebSocket端口 listen=ws:0.0.0.0:5066 listen=wss:0.0.0.0:5067 # 路由逻辑示例 route[WS_REQUEST] { if (is_ws_handshake()) { ws_handle_handshake(); exit; } } ``` --- ### 三、rtpengine安装与配置 #### 1. 安装rtpengine ```bash # Ubuntu sudo add-apt-repository ppa:sipwise/rtpengine sudo apt install ngcp-rtpengine ``` #### 2. 配置rtpengine 编辑`/etc/rtpengine/rtpengine.conf`: ```conf [rtpengine] interface = 127.0.0.1 listen-ng = 127.0.0.1:2223 port-min = 20000 port-max = 30000 ``` #### 3. 关联Kamailio与rtpengine 在Kamailio配置中添加: ```cfg modparam("rtpengine", "rtpengine_sock", "udp:127.0.0.1:2223") ``` --- ### 四、WebSocket TLS配置(可选但推荐) #### 1. 生成SSL证书 ```bash sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/kamailio/key.pem -out /etc/kamailio/cert.pem -days 365 -nodes ``` #### 2. 修改Kamailio配置 ```cfg # 指定证书路径 modparam("tls", "certificate", "/etc/kamailio/cert.pem") modparam("tls", "private_key", "/etc/kamailio/key.pem") ``` --- ### 五、服务启动与验证 ```bash sudo systemctl restart kamailio sudo systemctl restart ngcp-rtpengine # 检查端口监听 ss -tulnp | grep -E '5066|5067|2223' ``` --- ### 六、客户端测试方案 1. **Web客户端**:使用[JsSIP](https://jssip.net/)库 2. **信令测试**:通过浏览器开发者工具查看WebSocket握手过程 3. **媒体测试**:检查`rtpengine`日志`/var/log/rtpengine.log`确认端口分配 --- ### 七、高级调试技巧 1. **Kamailio日志**:`tail -f /var/log/kamailio.log` 2. **抓包分析**:`tcpdump -i any port 5066 or port 20000-30000` 3. **常见错误**: - **ICE失败**:检查STUN服务器配置 - **媒体不通**:确认防火墙放行RTP端口范围 - **证书错误**:检查浏览器控制台的TLS警告 --- ### 八、扩展架构建议 1. **高可用方案**:部署多个rtpengine节点 + Kamailio集群 2. **负载均衡**:使用DNS轮询或专用LB设备 3. **监控系统**:Prometheus + Grafana监控QoS指标 实际部署需根据网络环境调整NAT穿透策略(建议配合coturn实现完整ICE支持)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值