从 VoIP 和 SIP 到 WebRTC

在本文中,我们将介绍在 WebRTC 客户端和传统 SIP 客户端之间进行 WebRTC 呼叫的解决方案。

SIP 简介

SIP(会话初始协议)是一种信令协议,用于在特定网络上的两个客户端之间建立、配置和终止会话。SIP 的创建是为了支持使用 IP 地址在两个对等点之间进行音频呼叫、视频呼叫、消息传递、状态信息和文件传输。

SIP 在标准中被定义RFC2543为会话发起协议。它由 IEFT(互联网工程任务组)于 1999 年发布,是为了解决其前身 H.323 的缺点而开发的,H.323 受限于集中式呼叫路由信息服务器,并且某些方面没有总体标准化。FRC2543 已被该协议的新版本所取代,但至今仍然具有相关性,因为它为构建其他标准奠定了基础。

VoIP 和 SIP 之间的区别

我们将通过互联网进行的呼叫类型称为 VoIP,而 SIP 是支持两个设备之间进行 VoIP 通信的行业标准协议。它们可以是任何设备,而不仅仅是 IP 电话。作为实例,我们可以在对讲设备和移动应用程序之间发起呼叫。VoIP 依靠数据而不是公共交换电话网络 (PSTN) 来传输语音数据包,而 SIP 支持文本和视频,因此您的通信系统可以更加动态、灵活并与其他协议交互。大多数 SIP 中继提供商还会提供 VoIP 服务和统一通信即服务 (UCaaS)。

VoIP 的优点和缺点

许多企业可以通过单独使用 VoIP 来发挥巨大作用。它是一种低成本的解决方案,易于实施和使用,无需长期投入。

VoIP 的优点

VoIP 可以单独用作一种简单、低成本的语音通信解决方案。主要好处包括:

  • 持续节省费用和统一费率计费,启动成本低廉。
  • VoIP 系统不需要现场安装并且易于移动。
  • 大多数 VoIP 提供商不需要长期合同。

尽管易于使用,但单独使用 VoIP 时仍需要考虑一些限制。

VoIP 的缺点

虽然仅使用 VoIP 当然有其优点,但对于许多企业来说,它通常不是一个足够强大的解决方案。您可能需要考虑一些事情:

  • VoIP 需要足够的带宽来维持通话质量。
  • 它缺乏对多媒体通信的支持,并且仅限于语音。
  • 它缺乏与常用第三方应用程序的集成。

SIP 的优缺点

虽然单独使用 VoIP 有一定的优势,但使用 SIP 可以增强这种优势。您可以使用 SIP 提高可扩展性和多功能性,添加多媒体通信等。虽然利用 SIP 的理由有很多,但与单独使用 VoIP 一样,也有缺点。

SIP 中继的优点

在您的企业中使用 SIP 有很多优势。虽然单独使用 VoIP 有其优势,但 SIP 的灵活性使其成为许多公司的绝佳选择。

  • SIP 具有很强的可扩展性,不仅限于语音,还可以扩展到视频、消息传递等领域。
  • 通常与常用软件进行内置集成,以提高工作效率。
  • 可与 PRI 线路集成,形成最适合您业务的组合电话系统。
  • 定价非常灵活,允许根据需要提供额外的功能和产品线。

SIP 中继的缺点

虽然 SIP 的多功能性和成本节约使其成为一个很好的解决方案,就像单独使用 VoIP 一样,但它也有其缺点。

  • 需要足够的带宽来维持服务质量。
  • 并非所有 SIP 提供商都提供相同的功能或服务质量,因此您需要确保为您的业务选择正确的提供商。
  • 如果在公共互联网上使用,SIP 可能会出现质量和安全问题。

SIP服务器

PBX(专用交换机)系统最重要的部分之一是 SIP 服务器,它处理本地或公共网络中的协议和所有 SIP 呼叫路由。SIP 服务器旨在使两个或多个端点之间的通信成为可能,无论其位置如何。SIP 服务器可以响应来自网络上其他类型设备的任何创建、修改或终止电话呼叫请求。SIP服务器的示例如下:

  • 呼叫信令(拨号)
  • 通话设置
  • 管理用户授权和身份验证
从 VoIP 和 SIP 到 WebRTC

大多数情况下,您希望在组织的本地网络内设置 SIP 服务器,而不是将其公开访问。在这种情况下,你很可能希望从网络外的客户端拨打电话。有一种方法可以实现这一目的,即在企业内部网络中建立 SIP 代理服务器,也可以由第三方运营商托管。一般来说,SIP 代理服务器(SPS)有两种主要类型

  • 无状态 SIP 代理服务器

不保存任何呼叫信息的代理。这意味着通常不会保留用于故障排除和管理连接的记录。一种仅路由数据包的代理。

  • 有状态 SIP 代理服务器

存储与每个呼叫或连接相关的所有信息的代理。因此,如果您的连接出现任何问题,您可以查看通话日志并开始故障排除。此外,如果一个 SIP 用户代理退出,它可以重新建立与另一端点的连接,而无需启动新会话。这为双方节省了带宽和时间,因为建立新连接时不会出现延迟。缺点是有状态 SIP 代理比无状态 SIP 代理具有更多开销,而且也更昂贵,因为它们需要更多资源来存储数据。

WebRTC 转 SIP,反之亦然

从 VoIP 和 SIP 到 WebRTC

在本文中,我们将介绍在 WebRTC 客户端和传统 SIP 客户端之间进行 WebRTC 呼叫的解决方案。为此,我们需要设置 Kamailio、RTPEngine 和 TURN 服务器。该配置默认启用 IPv6,并将桥接 SRTP 到 RTP 和 ICE 到 nonICE。你可以在这里找到 Javascript Webrtc 客户端。

无论使用哪种 Linux 发行版,都需要安装以下工具:

  • Kamailio
  • RTPEninge
  • Nginx (Proxy + WebRTC client)
  • Coturn

在 Ubuntu 20.04/18.04/16.04 上设置 Kamailio

  • MariaDB,安装 Kamailio 之前要安装的第一个依赖项是 MariaDB 或 Mysql。所以我们需要先安装这些数据库之一。
sudo apt update 
sudo apt install mariadb-server
  • Kamailio存储库
wget -O- http://deb.kamailio.org/kamailiodebkey.gpg | sudo apt-key add -

然后根据所选的 Kamailio 版本,在 /etc/apt/sources.list 文件中添加存储库行

For Ubuntu 20.04

sudo tee /etc/apt/sources.list.d/kamailio.list<<EOF
deb     http://deb.kamailio.org/kamailio55 focal main
deb-src http://deb.kamailio.org/kamailio55 focal main
EOF

For Ubuntu 18.04

sudo tee /etc/apt/sources.list.d/kamailio.list<<EOF
deb http://deb.kamailio.org/kamailio55 bionic main
deb-src http://deb.kamailio.org/kamailio55 bionic main
EOF

For Ubuntu 16.04

sudo tee /etc/apt/sources.list.d/kamailio.list<<EOF
deb     http://deb.kamailio.org/kamailio55 xenial main
deb-src http://deb.kamailio.org/kamailio55 xenial main
EOF
  • 在 Ubuntu 20.04|18.04|16.04 上安装Kamailio

配置存储库后,更新您的系统并安装 Kamailio。您还将安装 Kamailio MySQL 模块:

sudo apt update 
sudo apt install kamailio kamailio-mysql-modules
sudo apt install kamailio-websocket-modules kamailio-tls-modules

在 Ubuntu 20.04|18.04|16.04 上配置 Kamailio

编辑文件/etc/kamailio/kamctlrc并确保DBENGINE变量设置为 MySQL。删除该#符号以取消注释。

设置数据库引擎为MYSQL

$ sudo vim /etc/kamailio/kamctlrc 
DBENGINE=MYSQL
DBHOST=localhost

接下来是为Mysql创建数据库。下面的命令将创建 Kamailio 所需的用户和表(架构)

$ sudo kamdbctl create
MySQL password for root: 
INFO: creating database kamailio ...
INFO: granting privileges to database kamailio ...
INFO: creating standard tables into kamailio ...
INFO: Core Kamailio tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into kamailio ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute
drouting userblacklist htable purple uac pipelimit mtree sca mohqueue
rtpproxy rtpengine? (y/n): y
INFO: creating extra tables into kamailio ...
INFO: Extra tables succesfully created.
Install tables for uid_auth_db uid_avp_db uid_domain uid_gflags
uid_uri_db? (y/n): y
INFO: creating uid tables into kamailio ...
INFO: UID tables succesfully created.

系统将提示您提供 MySQL root 密码。上述命令添加的 Mysql 用户和密码为:

  • kamailio与密码kamailiorw。它具有对 Kamailio 数据库的读/写访问权限。
  • kamailioro:该用户的密码是kamailioro。它具有 Kamailio 数据库的只读访问权限。

/etc/kamailio/kamailio.cfg是 Kamailio 的配置文件。编辑它可以启用它附带的一些功能。

还可以设置您的 SIP 域:

$ sudo vim /etc/kamailio/kamctlrc
## your SIP domain
SIP_DOMAIN=computingforgeeks.com

如果本地网络上没有有效的 DNS 服务器,也可以使用IP 地址代替域名。

在 #!KAMAILIO下方添加以下行

$ sudo vim /etc/kamailio/kamailio.cfg
#!define WITH_MYSQL
#!define WITH_AUTH
#!define WITH_USRLOCDB
#!define WITH_ACCDB

这些指令将打开必要的模块。例如,当您指定时,WITH_MYSQL它会启用 mysql.so 的加载:

#!ifdef WITH_MYSQL
loadmodule "db_mysql.so"
#!endif

然后重新启动Kamailio服务:

sudo systemctl restart kamailio

您的 Kamailio 服务应该正在运行,您可以使用此功能确认:

systemctl status kamailio ● kamailio.service - Kamailio (OpenSER) - the Open Source SIP Server    Loaded: loaded (/lib/systemd/system/kamailio.service; enabled; vendor preset: enabled)    Active: active (running) since Fri 2018-07-27 18:15:20 UTC; 2min 59s ago   Process: 14062 ExecStart=/usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f $CFGFILE -m $SHM_MEMORY -M $PKG_MEMORY -u $USER -g $GROUP (code=exi  Main PID: 14075 (kamailio)     Tasks: 40 (limit: 4704)    CGroup: /system.slice/kamailio.service            ├─14075 /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamailio            ├─14083 /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamailio            ├─14084 /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamailio            ├─14085 /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamailio            ├─14086 /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamailio            ├─14087 /usr/sbin/kamailio -P /var/run/kamailio/kamailio.pid -f /etc/kamailio/kamailio.cfg -m 64 -M 8 -u kamailio -g kamailio

如果您在使用 Kamailio 服务时遇到任何问题,可以在以下位置获取日志:/var/log/kamailio.log

证书

下一步是制作证书。为此,我们可以使用像 Let’s Encrypt 这样的解决方案。然后我们可以对 Kamailio TLS、Nginx TLS 和 TURN TLS 使用相同的证书。

apt-get install certbot
certbot certonly --standalone -d YOUR-DOMAIN

然后可以在以下位置找到证书:

/etc/letsencrypt/live/YOUR-DOMAIN/privkey.pem
/etc/letsencrypt/live/YOUR-DOMAIN/fullchain.pem

获取配置文件

在 Debian 9 Stretch 上设置所有组件所需的所有文件。

git clone https://github.com/havfo/WEBRTC-to-SIP.git
cd WEBRTC-to-SIP
find . -type f -print0 | xargs -0 sed -i 's/XXXXXX-XXXXXX/PUT-IPV6-OF-YOUR-SIP-SERVER-HERE/g'
find . -type f -print0 | xargs -0 sed -i 's/XXXXX-XXXXX/PUT-IPV4-OF-YOUR-SIP-SERVER-HERE/g'
find . -type f -print0 | xargs -0 sed -i 's/XXXX-XXXX/PUT-DOMAIN-OF-YOUR-SIP-SERVER-HERE/g'

安装 RTPEngine

这将完成使 WebRTC 客户端与传统 SIP 服务器/客户端通信所需的 SRTP-RTP 桥接。您可以在其自述文件中找到最新的构建说明。

最简单的安装方法是从 Sipwise 存储库获取它:

echo 'deb https://deb.sipwise.com/spce/mr9.4.1/ buster main' > /etc/apt/sources.list.d/sipwise.list
echo 'deb-src https://deb.sipwise.com/spce/mr9.4.1/ buster main' >> /etc/apt/sources.list.d/sipwise.list
wget -q -O - https://deb.sipwise.com/spce/keyring/sipwise-keyring-bootstrap.gpg | apt-key add -
apt-get update
apt-get install -y ngcp-keyring ngcp-rtpengine

成功安装 RTPEngine 后,从该存储库复制配置。

cd WEBRTC-to-SIP 
cp etc/default/ngcp-rtpengine-daemon /etc/default/
cp etc/rtpengine/rtpengine.conf /etc/rtpengine/
/etc/init.d/ngcp-rtpengine-daemon restart

安装 IPTables 防火墙(可选)

RTPEngine 自行处理该链,但确保不会阻塞其正在使用的 RTP 端口。查看 iptables.sh 了解详细信息,并通过执行以下操作来应用它。重新启动后这将持续存在。设置后,您可以随时运行 iptables.sh 脚本。

cd WEBRTC-to-SIP
chmod +x iptables.sh
cp etc/network/if-up.d/iptables /etc/network/if-up.d/
chmod +x /etc/network/if-up.d/iptables
touch /etc/iptables/firewall.conf
touch /etc/iptables/firewall6.conf
./iptables.sh

安装WebRTC客户端

可在此处找到的客户端。

为了能够支持在同一端口 (443) 上运行 HTTP(S) 和 TURN,我们需要一个较新版本的 Nginx,它可以按照我们需要的方式支持流。从官方仓库获取:

echo 'deb http://nginx.org/packages/mainline/debian/ buster nginx' > /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
apt-get update
apt-get install nginx
cd WEBRTC-to-SIP
cp etc/nginx/nginx.conf /etc/nginx/
cp etc/nginx/conf.d/default.conf /etc/nginx/conf.d/
cp -r client/* /var/www/html/
service nginx restart

安装 TURN 服务器

apt-get install coturn 
cp etc/default/coturn /etc/default/
cp etc/turnserver.conf /etc/
service coturn restart

现在应该能够访问https://XXXX-XXXX/并呼叫传统 SIP 客户端。单击右上角的帐户图标并添加以下设置:

  • Display name: Whatever
  • SIP URI: websip@XXXX-XXXX
  • Password: websip
  • Outbound Proxy: wss://XXXX-XXXX/ws

要手动配置其他 TURN 服务器,请更改client/config.js.

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(1)

相关推荐

发表回复

登录后才能评论