跳转到内容
搜索文档

为混合用户部署自托管 VoIP 服务

最后更新 查看 MarkdownAgent 设置

简介

传统 VPN 解决方案为 VoIP 部署带来了诸多问题,主要由于其在处理 SIPRTP 等实时流量协议方面效率低下。旧版 VPN 部署会引入高延迟和抖动,严重影响语音通话质量。此外,它们通常还难以应对 NAT 穿越,导致 VoIP 通话出现连接问题。

Cloudflare 通过利用其在 over 330 cities 个城市拥有数据中心的全球网络,显著降低远程用户的延迟,从而改善传统 VPN 解决方案。使用我们的设备代理时,远程用户会自动连接到最近的 Cloudflare 数据中心,从而降低延迟。

本文档说明如何使用 Cloudflare 架构对自托管 VoIP 服务的访问。注意以下解决方案使用 Cloudflare Mesh(前身为 WARP Connector)——一款部署在与 VoIP 服务器同一子网的服务器上的小型软件,它通过 Cloudflare 创建与用户之间的双向流量流。

双向 VoIP 流量流

图 1:Cloudflare 提供从用户设备到 SIP 服务器所在网络的安全连接。
图 1:Cloudflare 提供从用户设备到 SIP 服务器所在网络的安全连接。

上图展示了 Cloudflare Mesh 和我们的设备代理部署,用于为私有 VoIP 服务建立高性能、可靠的连接。注意 Cloudflare 将为远程用户分配来自 CGNAT 范围 的地址,该地址用于在设备代理之间创建的私有网络。Cloudflare Mesh 确保远程用户与本地 SIP 服务器之间的安全双向通信,无需将服务器暴露于公共互联网。这在维持实时通信无缝加密连接的同时,保护 VoIP 基础设施免受潜在攻击。

  1. VoIP 服务器位于没有公共 IP 的私有网络上。
  2. Cloudflare Mesh 创建一条到 Cloudflare 的安全隧道,并被配置为私有网络中的虚拟路由器。
  3. 允许来自 Cloudflare 的流量到达 VoIP 服务器,同时也允许私有网络发起的流量(如服务器发出的出站 VoIP 通话)通过 Cloudflare 隧道路由。在上图中,我们在默认网关上为目标 100.96.0.0/12(WARP CGNAT 范围)添加了一条静态路由,下一跳为 10.0.50.10(Cloudflare Mesh 虚拟路由器)。
  4. 流量通过我们的安全 Web 网关(SWG),该网关对入站和出站流量应用网络层防火墙规则。
  5. 在远程用户设备上安装设备代理。代理与 Cloudflare 建立安全隧道,允许 VoIP 软件接收和拨打电话。

通话流程示例

在远程用户设备上运行的 VoIP 软件使用 SIP 向 VoIP 服务器注册。Cloudflare 设备代理将被分配来自 CGNAT IP 范围 100.96.0.0/12 的地址。由于已建立到 100.96.0.0/12 的 Cloudflare 路由以及到本地网络 10.0.50.0/24 的路由,通话流程将正常工作——支持直接媒体和间接媒体。

远程用户呼叫另一个远程用户

用户之间的通话时,部分流量从用户设备通过 Cloudflare 流向本地服务器,而其他流量则直接通过 Cloudflare 流向另一个用户。注意设备代理正在创建一条安全隧道,通过该隧道路由 CGNAT 地址。此流程中两个用户都已向服务器注册其 SIP 客户端。

图 2:对于远程用户到远程用户,并非所有流量都通过 Cloudflare Mesh 流向 SIP 服务器。
图 2:对于远程用户到远程用户,并非所有流量都通过 Cloudflare Mesh 流向 SIP 服务器。

上图显示了高层信令和媒体路径。

  1. Alice 直接向 SIP 服务器(10.0.50.60)注册,Cloudflare 分配的 CGNAT IP 为 100.96.0.12
  2. Bob 也直接向 SIP 服务器(10.0.50.60)注册,其 CGNAT IP 为 100.96.0.13
  3. 当 Alice 呼叫 Bob 时,SIP 服务器将向 Bob 的地址 100.96.0.13 发送 SIP INVITE 消息。
  4. SIP 服务器的默认网关为 10.50.0.1,但我们已定义静态路由,使目标为 100.96.0.0/12 的下一跳为 Cloudflare Mesh 接口(10.0.50.10)。
  5. SIP INVITE 消息将通过 Cloudflare Mesh 路由至 Cloudflare 网络,然后被 Bob 接收。
  6. Bob 接受后,SIP 服务器将向 Alice 和 Bob 双方发送 SIP/SDP 消息,指定 RTP(音频)数据使用的参数。
  7. 对于 SIP 服务器不在音频路径中、RTP 流直接在 Alice 和 Bob 之间传输的直接媒体路径,请确保在 Cloudflare 中启用了允许所有 Cloudflare One 流量到达已注册设备。直接媒体用例中的音频流无需通过 Cloudflare Mesh 路由。

远程用户呼叫本地用户

远程用户与本地用户之间的通话非常相似,但 RTP 音频流除了 SIP 信令外,还将通过 Cloudflare Mesh 发送。

图 3:远程用户呼叫本地用户时,所有流量通过 Cloudflare 路由至 SIP 服务器和客户端。
图 3:远程用户呼叫本地用户时,所有流量通过 Cloudflare 路由至 SIP 服务器和客户端。

以下展示了高层信令和媒体路径:

图 4:信令和媒体(音频、视频等)均通过安全隧道从远程设备传输至本地客户端。
图 4:信令和媒体(音频、视频等)均通过安全隧道从远程设备传输至本地客户端。
  1. Alice 直接向 SIP 服务器(10.0.50.60)注册,其 CGNAT IP 为 100.96.0.12
  2. Bob 也直接向 SIP 服务器(10.0.50.60)注册,其 LAN IP 为 10.0.50.101
  3. 当 Alice 呼叫 Bob 时,SIP 服务器将向 Bob 的地址 10.0.50.101 发送 SIP INVITE 消息。
  4. SIP 服务器的默认网关为 10.50.0.1,但我们已定义静态路由,使目标为 100.96.0.0/12 的下一跳为 Cloudflare Mesh 接口(10.0.50.10)。
  5. SIP INVITE 消息将通过本地网络发送给 Bob。
  6. Bob 接受后,SIP 服务器将向 Alice 和 Bob 双方发送 SIP/SDP 消息,指定 RTP(音频)数据使用的参数。
  7. Bob 将音频发送至 Alice 的地址 100.96.0.12,该音频将通过 Cloudflare Mesh 路由至 Cloudflare,Alice 将音频发送至 Bob 的地址 10.0.50.101,该音频将从 Cloudflare 通过 Cloudflare Mesh 发送至本地网络。

总结

借助 Cloudflare Mesh,通过本地 SIP 服务器与其他远程用户或本地用户通信的远程用户,将获得双方均无缝且安全的体验。主要优势包括:

  1. 双向连接:Cloudflare Mesh 支持双向流量,这对于远程用户与本地用户通信至关重要。信令和媒体流量(SIP/RTP)在双方之间安全流动,无论用户实际位于何处。这通过 Cloudflare 的全球网络,使用加密隧道实现,确保数据完整性和加密。

  2. 通过 CGNAT 进行私密通信:Cloudflare Mesh 为设备分配运营商级 NAT(CGNAT)IP,允许远程用户通过私有网络与本地用户安全通信。这确保通信与公共互联网隔离,增强安全性。CGNAT 功能意味着远程用户和本地用户可以像在同一网络上一样进行通信。

  3. 无 NAT 穿越问题:NAT 穿越在 VoIP 场景中通常是一大挑战,但由于 Cloudflare Mesh 保留源 IP 地址并在没有额外 NAT 边界的情况下处理双向流量,远程用户和本地用户可以在不受防火墙或 NAT 设备通常造成的问题影响下进行通信,从而提高整体通话建立质量。

相关资源

这篇文档对您有帮助吗?