VoIP系统大盘点
一、VoIP拓扑
PBX是程控交换机,程控交换机有实体交换机和软件模拟的交换机。
软件模拟的交换机,即交换机服务器,常用开源的sip服务器有asterisk,freepbx, opensip, freeswitch等,商用的minisipserver也不错,也不贵。
PSTN网关是接入电信运营商网络需要的,暂时不需要。
测试的SIP客户端工具比较多zoiper, microSIP, X-lite, Yate, eyeBeam, Linphone等。
可以推荐一些基于Sip协议的开源IP电话客户端吗?
https://www.zhihu.com/question/20093472?sort=created
二、VoIP服务器部署
为了避开网络穿透的问题,我将SIP服务器装在了阿里云(百度云 / vultr的vps也都行)主机上,也就是NAT之后,如果装在本地(NAT之前),就需要stun/tun服务器来协助穿透。
1、minisipserver装在阿里云ECS的windows 2012 r2服务器主机上
注意
*关闭windows 2012 r2防火墙,先保持网络通畅,调完了在配置防火墙端口。
*不需要配置nat,只需要把NAT内网映射到外网,因为阿里云服务器主机分配了公网,并且在nat之后,minisipserver默认配置就行。
*端口必须映射,在网络和安全组里设置,常用的ssh是22号端口,sip默认的语音数据端口是5060,我为了调试方便开通了所有端口。
2、 minisipserver装在vultr vps的windows 2012 r2服务器上
同样需要注意
*关闭windows 2012 r2防火墙,先保持网络通畅,调完了在配置防火墙端口。
*不需要配置nat,只需要把NAT内网映射到外网,因为vps是公网,并且在nat之后,minisipserver默认配置就行。
*端口必须映射,在网络和安全组里设置,常用的ssh是22号端口,sip默认的语音数据端口是5060,我为了调试方便开通了所有端口。
3、FreePBX安装在阿里云ECS的centos 7.2主机上
minisipserver虽然简单,但功能单一,不支持创建电话会议,所以这里将VoIP服务器换成开源的freepbx。
freepbx安装手册
https://wiki.freepbx.org/display/FOP/Installing+FreePBX+14+on+CentOS+7
https://wiki.freepbx.org/display/FOP/Installing+FreePBX+14+on+Ubuntu+18.04
1) 一键安装freepbx的脚本很方便
http://freepbx.org.cn/wiki/index.php?title=FreePBX
脚本的有些软件包失效了,比如asterisk-14-current.tar.gz,没有current版本,在脚本文件提供的网站里找到有效的版本,安装没报错就正常了。
2) 同样特别注意
*关闭centos 7.2防火墙,先保持网络通畅,调完了在配置防火墙端口。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
*端口必须映射,在网络和安全组里设置,常用的ssh是22号端口,sip默认的语音数据端口是5060,我为了调试方便开通了所有端口。
*不需要配置nat,只需要把NAT内网映射到外网,因为阿里云服务器主机分配了公网,并且在nat之后

*NAT本地IP到公网IP映射
设置--->Asterisk SIP设置--->NAT设置
扫描一下Detect Network Settings就行,我习惯性的把服务器本地IP也添上
配置好,添加分机,就可以用客户端工具连接了
新安装的freepbx可能模块加载不完全,最好重启一下freepbx
fwconsole start/restart
3) freepbx/asterisk( freepbx是带web ui的asterisk )常用指令
https://www.cnblogs.com/operationhome/p/9149171.html
4、freepbx安装到vultr的VPS上
装的FreePBX 14.0.5.2
https://www.freepbx.org/downloads/
1) vps安装freepbx
2) 同样的配置
设置--->高级设置--->sip nat 配置成never或者no
设置--->Asterisk SIP设置--->NAT设置
扫描一下Detect Network Settings就行,我习惯性的把服务器本地IP也添上
同样 新安装的freepbx可能模块加载不完全,最好重启一下freepbx
fwconsole start/restart
5、freeswitch
5.1、freeswitch安装
1) freeswitch一键安装脚本
https://blog.csdn.net/gredn/article/details/75393207
默认的配置注册不上,报403 Forbidden(Invalid domain in From: header)
2018-12-31
22:19:12.061220 [WARNING] sofia_reg.c:1792 SIP auth challenge
(REGISTER) on sofia profile 'internal' for [1001@182.61.56.247] from ip
119.131.168.166
2018-12-31 22:19:12.121205 [WARNING] sofia_reg.c:1737
SIP auth failure (REGISTER) on sofia profile 'internal' for
[1001@182.61.56.247] from ip 119.131.168.166
https://www.cnblogs.com/yoyotl/p/6552891.html
2) 快速安装
wget https://www.freeswitch.org.cn/Makefile && make install
找不到Makefile,地址已经失效了
3) 官网的安装手册也不一定靠谱,系统版本,各种依赖库一堆问题,下面是验证的可行的。
yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-release
yum install -y freeswitch-config-vanilla freeswitch-lang-* freeswitch-sounds-*
systemctl enable freeswitch
freeswitch
4) freeswitch v1.0在阿里云centos 7.03上的安装
https://blog.csdn.net/MoSee/article/details/77945546
5.2、freeswitch配置
以上默认能拨通,但是没声音,30秒左右就自动断线了,明显跟freepbx一样是NAT的故障
我偷懒用yun install安装的freeswitch,配置文件在/etc/freeswitch目录,安装文件比较分散
/var/lib/yum/repos/x86_64/7/freeswitch
/var/lib/freeswitch
/var/cache/yum/x86_64/7/freeswitch
/var/log/freeswitch
/usr/lib64/freeswitch
/usr/share/freeswitch
/usr/bin/freeswitch
/run/freeswitch
/etc/sysconfig/freeswitch
/etc/freeswitch
1) 修改internal.xml
cd /etc/freeswitch/sip_profiles
vi internal.xml
<param name="ext-rtp-ip" value="auto-nat"/>
<param name="ext-sip-ip" value="auto-nat"/>
将atto-nat改成云服务器公网IP
2) 关闭centos 7.2防火墙,先保持网络通畅,调完了在配置防火墙端口。
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
重启freeswitch
freeswitch -stop
freeswitch
测试rtp已经通了
5.3、freeswitch测试
sample sipp scenarios for testing freeswitch
https://github.com/os11k/sipp2freeswitch
5.4、FreeSwitch默认只支持音频,为支持视频,修改vars.xml如下:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=PCMU,PCMA,GSM,H264,H263-1998,H263"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=PCMU,PCMA,GSM,H264,H263-1998,H263"/>
5.5、杜金房的个人网站
6、VoIP客户端工具配置
1)android客户端连接,用zoiper注册,填如下几项就可以了
2) x-lite
3) tSIP与tSIP之间拨号
4) tSIP与eyebeam拨号
5) microsip与eyebeam拨号
三、网络穿透
虽然将服务器安装到公网主机上避免了网络穿透,但是网络问题是不得不面对的。因为国情,导致翻墙,打洞也成为了一门科学。
1、FireWall和NAT(防火墙和网络地址与端口转换)
具体细节参考Cisco VoIP
2、SIP穿越 NAT
1) NAT经常使用的分类例如以下:
Full Cone NAT(全然圆锥型)
Address Restricted Cone NAT(地址限制圆锥型 )
Port Restricted Cone NAT(port限制圆锥型)
Symmetric NAT(对称型)
https://www.cnblogs.com/jhcelue/p/7258803.html
2) NAT拓扑检测
A Python STUN client for getting NAT type and external IP (RFC 3489)
https://pypi.org/project/pystun/
办公司网路NAT类型是Address Restricted Cone NAT
3) stun/turn server穿越NAT
stun官网http://www.stunprotocol.org/
stun详解以及部分公用stun服务器 https://www.voip-info.org/stun
turn server安装 http://turnserver.open-sys.org/downloads/v3.2.4.4/INSTALL
3、网络跨域实战
stun server搭建与测试
https://blog.csdn.net/zhenzhen2014/article/details/45871397
http://nil.uniza.sk/sip/installing-and-configuring-restund-stunturn-server
https://www.cnblogs.com/jhcelue/p/7258803.html
免费的stun服务器
http://wiki.tomocha.net/SIP_STUNserver.html
基于pjsip实现p2p语音对讲
https://blog.csdn.net/voidreturn/article/details/65634390?locationNum=1&fps=1
四、其他开源VoIP服务器方案调研
1、Asterisk
Asterisk安装
https://blog.csdn.net/yuesichiu/article/details/41693577
Asterisk : Hello world 打通第一个电话
http://www.hiastar.com/doc/asterisk_cn/6914124.html
自己动手搭建免费VoIP服务器
https://blog.csdn.net/yuesichiu/article/details/41693577
在VPS上建asterisk server
其他补充
service httpd restart
service asterisk restart
service network restart
amportal restart
https://blog.csdn.net/liuxiao723846/article/details/79585897
https://blog.csdn.net/brandon2015/article/details/51811914
2、opensip安装
sudo apt-get update
sudo
apt-get install build-essential bison flex libncurses5 libncurses5-dev
perl libdbi-perl libdbd-mysql-perl libdbd-pg-perl libfrontier-rpc-perl
libterm-readline-gnu-perl libberkeleydb-perl
sudo apt-get install mysql-server mysql-client
sudo apt-get install libmysqlclient-dev
make menuconfig
参考https://blog.csdn.net/croop520/article/details/79096516
1)编译
默认目录机构如下:
配置文件位置:/usr/local/etc/opensips/
mysql 数据库表创建sql语句:/usr/local/share/opensips/mysql/
安装模块目录:/usr/local/lib/opensips/modules/
opensips 控制台模板:/usr/local/lib/opensips/opensipsctl/
程序运行路径:/usr/local/sbin/
2)测试
#/usr/local/sbin/opensipsctl start
#/usr/local/sbin/opensipsctl stop
#/usr/local/sbin/opensipsctl restart
#/usr/local/sbin/opensipsdbctl create
#/usr/local/sbin/opensipsctl add <username>@opensips_address <password>
#/usr/local/sbin/opensipsctl add 100@172.18.97.146 100
#/usr/local/sbin/opensipsctl add 101@172.18.97.146 101
#/usr/local/sbin/opensipsctl ul show
root@iZwz9ic9ggky8kwzyfkfayZ:/usr/local/sbin# sudo opensipsctl add 100 100
sudo: unable to resolve host iZwz9ic9ggky8kwzyfkfayZ
new user '100' added
root@iZwz9ic9ggky8kwzyfkfayZ:/usr/local/sbin# sudo opensipsctl add 101 101
sudo: unable to resolve host iZwz9ic9ggky8kwzyfkfayZ
new user '101' added
root@iZwz9ic9ggky8kwzyfkfayZ:/usr/local/sbin# sudo opensipsctl add 102 102
sudo: unable to resolve host iZwz9ic9ggky8kwzyfkfayZ
new user '102' added
root@iZwz9ic9ggky8kwzyfkfayZ:/usr/local/sbin# sudo opensipsctl add 103 103
sudo: unable to resolve host iZwz9ic9ggky8kwzyfkfayZ
new user '103' added
3)配置
/usr/local/etc/opensips/
3、阿里云部署freeswitch
https://blog.csdn.net/MoSee/article/details/77945546?locationNum=4&fps=1
http://bbs.freeswitch.org.cn/t/freeswitch/2093
vultr端口检测
https://www.vultrcn.com/11.html
在VPS上建asterisk server
vps,EC2比较
4、其他
SipDroid +miniSIPServer搭建SIP局域网语音通话
http://www.cnblogs.com/poe-blog/p/3553888.html
openmeetings
http://blog.51cto.com/jiangzhi2013/1218491
https://blog.csdn.net/ying357/article/details/10076967
https://blog.csdn.net/ying357/article/category/1342860
其他方案收集
1、resiprocate使用入门:内网搭建基于repro的sipproxy测试环境
https://blog.csdn.net/c359719435/article/details/54619139
Open Source VOIP applications, both clients and servers.
VoIP系统大盘点的更多相关文章
- VoIP应用系统大盘点
一.VoIP拓扑 PBX是程控交换机,程控交换机有实体交换机和软件模拟的交换机. 软件模拟的交换机,即交换机服务器,常用开源的sip服务器有asterisk,freepbx, opensip等,商用的 ...
- 当今游戏大作share的特性大盘点
极品游戏制作时的考虑要素大盘点 不知不觉入坑Steam已近4年,虽然说Steam的毒性让很多人走向一条不归路,但是想我这样即使"中毒"还是很快乐很感恩的.那么本期文章就谈谈我对其中 ...
- Python玩转硬件:TPYBoard-Micropython开发板大盘点
学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...
- 2018 AI产业界大盘点
2018 AI产业界大盘点 大事件盘点 “ 1.24——Facebook人工智能部门负责人Yann LeCun宣布卸任 Facebook人工智能研究部门(FAIR)的负责人Yann LeCun宣布卸 ...
- 回望2017,基于深度学习的NLP研究大盘点
回望2017,基于深度学习的NLP研究大盘点 雷锋网 百家号01-0110:31 雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 ...
- 世界名校网络课程大盘点,美国大学CS专业十三大研究方向,世界50所知名大学提供开放课程
世界名校网络课程大盘点 加州大学伯克利分校http://webcast.berkeley.edu/ 加州大学伯克利分校与斯坦福大学. 麻省理工学院等一同被誉为美国工程科技界的学术 领袖,其常年位居 ...
- PDA手持扫描资产标签,盘点完成后将数据上传到PC端,固定资产系统查看盘点结果
固定资产管理系统介绍: 致力于研发条码技术.集成条码系统的专业性公司,针对客户的不同需求,提供一站式的企业条码系统解决方案:包括功能强大的软件系统.安全可靠的无线网络.坚固耐用的硬件系统.灵活易用的管 ...
- C#开源系统大汇总(个人收藏)
C#开源系统大汇总 一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...
- 自主架设VOIP系统
my.oschina.net/fcboys/blog/2695 FXS (Foreign Exchange Station) FXS is an interface which drives a te ...
随机推荐
- 初学Java 彩票
import java.util.Scanner; public class Lottery { public static void main(String[] agrs) { ); Scanner ...
- poj 1845 Sumdiv (等比求和+逆元)
题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...
- Vue----渐进式框架的理解
对“渐进式”这三个字的理解:Vue渐进式-先使用Vue的核心库,再根据你的需要的功能再去逐渐增加加相应的插件. 以下理解出处:https://www.zhihu.com/question/519072 ...
- php htmlentities()函数 语法
php htmlentities()函数 语法 作用:把字符转换为 HTML 实体 语法:htmlentities(string,flags,character-set,double_encode) ...
- Python基础教程(018)--官方解释器交互运行
前言: 在交互式运行Python程序 内容 在Python的shell中直接输入Python的代码,可以立即执行结果 交互式运行Python的优缺点 1,缺点--代码不能保存 2,不适合运行太大的程序 ...
- 数字滚动动画效果 vue组件化
参考了这篇文章,作者思路很清晰,简单做了下修改,蟹蟹作者,链接在此:https://www.jb51.net/css/685357.html#comments 主要思路是利用css属性writing- ...
- delphi 程序嵌入桌面效果的实现
function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle): HRGN; var dc, dc_c: HDC; ...
- XenServer(服务器虚拟化平台)
Citrix Xenserver,思杰基于Xen的虚拟化服务器.Citrix XenServer是一种全面而易于管理的服务器虚拟化平台,基于强大的 Xen Hypervisor 程序之上.Xen技术被 ...
- 使用Echarts中遇到值得记录的小案例(一)
需求部分 在开发项目的时候遇到一个需求,就是如何保证echarts图表里至少显示一个图例的数据(也就是最后一个图例不能变成unselected的状态)下图是最初加载时的画面 不想出现图例都被点击取消导 ...
- HTTP返回码中200,302,304,404,500得意思
状态码的职责是当客户端向服务器端发送请求时,描述返回请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了什么错误. 2开头的,响应成功,客户端请求服务器正常响应处理了. 3开头的,响 ...