一、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://www.freepbx.cn/

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之后

设置--->高级设置--->sip nat 配置成never或者no
 

*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

http://www.izcv.com/1310.html

http://www.izcv.com/1363.html

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、杜金房的个人网站

http://www.dujinfang.com/

6、VoIP客户端工具配置

1)android客户端连接,用zoiper注册,填如下几项就可以了

2) x-lite

3) tSIP与tSIP之间拨号

4) tSIP与eyebeam拨号

5) microsip与eyebeam拨号

三、网络穿透

虽然将服务器安装到公网主机上避免了网络穿透,但是网络问题是不得不面对的。因为国情,导致翻墙,打洞也成为了一门科学。

1、FireWall和NAT(防火墙和网络地址与端口转换)

具体细节参考Cisco VoIP

https://www.cisco.com/c/zh_cn/support/docs/ip/network-address-translation-nat/211269-NAT-in-VoIP.html

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

https://www.v2ex.com/t/72698

其他补充

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

https://www.v2ex.com/t/72698

vps,EC2比较

http://www.laozuo.org/myvps

4、其他

SipDroid +miniSIPServer搭建SIP局域网语音通话

http://www.cnblogs.com/poe-blog/p/3553888.html

openmeetings

http://blog.51cto.com/jiangzhi2013/1218491

https://github.com/sippy

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.

https://www.voip-info.org/open-source-voip-software

VoIP系统大盘点的更多相关文章

  1. VoIP应用系统大盘点

    一.VoIP拓扑 PBX是程控交换机,程控交换机有实体交换机和软件模拟的交换机. 软件模拟的交换机,即交换机服务器,常用开源的sip服务器有asterisk,freepbx, opensip等,商用的 ...

  2. 当今游戏大作share的特性大盘点

    极品游戏制作时的考虑要素大盘点 不知不觉入坑Steam已近4年,虽然说Steam的毒性让很多人走向一条不归路,但是想我这样即使"中毒"还是很快乐很感恩的.那么本期文章就谈谈我对其中 ...

  3. Python玩转硬件:TPYBoard-Micropython开发板大盘点

    学习python能做什么? 可以快速搭建一个漂亮的网站 可以写爬虫 实现微信机器人助手 可以实现很多自动化的任务 -- IEEE发布2017年编程语言排行榜:Python更是高居首位,那么Python ...

  4. 2018 AI产业界大盘点

    2018  AI产业界大盘点 大事件盘点 “ 1.24——Facebook人工智能部门负责人Yann LeCun宣布卸任 Facebook人工智能研究部门(FAIR)的负责人Yann LeCun宣布卸 ...

  5. 回望2017,基于深度学习的NLP研究大盘点

    回望2017,基于深度学习的NLP研究大盘点 雷锋网 百家号01-0110:31 雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 ...

  6. 世界名校网络课程大盘点,美国大学CS专业十三大研究方向,世界50所知名大学提供开放课程

    世界名校网络课程大盘点   加州大学伯克利分校http://webcast.berkeley.edu/ 加州大学伯克利分校与斯坦福大学. 麻省理工学院等一同被誉为美国工程科技界的学术 领袖,其常年位居 ...

  7. PDA手持扫描资产标签,盘点完成后将数据上传到PC端,固定资产系统查看盘点结果

    固定资产管理系统介绍: 致力于研发条码技术.集成条码系统的专业性公司,针对客户的不同需求,提供一站式的企业条码系统解决方案:包括功能强大的软件系统.安全可靠的无线网络.坚固耐用的硬件系统.灵活易用的管 ...

  8. C#开源系统大汇总(个人收藏)

    C#开源系统大汇总 一.AOP框架        Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...

  9. 自主架设VOIP系统

    my.oschina.net/fcboys/blog/2695 FXS (Foreign Exchange Station) FXS is an interface which drives a te ...

随机推荐

  1. 初学Java 彩票

    import java.util.Scanner; public class Lottery { public static void main(String[] agrs) { ); Scanner ...

  2. poj 1845 Sumdiv (等比求和+逆元)

    题目链接:http://poj.org/problem?id=1845 题目大意:给出两个自然数a,b,求a^b的所有自然数因子的和模上9901 (0 <= a,b <= 50000000 ...

  3. Vue----渐进式框架的理解

    对“渐进式”这三个字的理解:Vue渐进式-先使用Vue的核心库,再根据你的需要的功能再去逐渐增加加相应的插件. 以下理解出处:https://www.zhihu.com/question/519072 ...

  4. php htmlentities()函数 语法

    php htmlentities()函数 语法 作用:把字符转换为 HTML 实体 语法:htmlentities(string,flags,character-set,double_encode) ...

  5. Python基础教程(018)--官方解释器交互运行

    前言: 在交互式运行Python程序 内容 在Python的shell中直接输入Python的代码,可以立即执行结果 交互式运行Python的优缺点 1,缺点--代码不能保存 2,不适合运行太大的程序 ...

  6. 数字滚动动画效果 vue组件化

    参考了这篇文章,作者思路很清晰,简单做了下修改,蟹蟹作者,链接在此:https://www.jb51.net/css/685357.html#comments 主要思路是利用css属性writing- ...

  7. delphi 程序嵌入桌面效果的实现

    function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle): HRGN; var dc, dc_c: HDC; ...

  8. XenServer(服务器虚拟化平台)

    Citrix Xenserver,思杰基于Xen的虚拟化服务器.Citrix XenServer是一种全面而易于管理的服务器虚拟化平台,基于强大的 Xen Hypervisor 程序之上.Xen技术被 ...

  9. 使用Echarts中遇到值得记录的小案例(一)

    需求部分 在开发项目的时候遇到一个需求,就是如何保证echarts图表里至少显示一个图例的数据(也就是最后一个图例不能变成unselected的状态)下图是最初加载时的画面 不想出现图例都被点击取消导 ...

  10. HTTP返回码中200,302,304,404,500得意思

    状态码的职责是当客户端向服务器端发送请求时,描述返回请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了什么错误. 2开头的,响应成功,客户端请求服务器正常响应处理了. 3开头的,响 ...