如何在阻塞的网络中隧道传输voip流量

时间:2014-06-27 09:30:37

标签: sip vpn tunneling

我有一个Android VOIP应用程序。由于一些网络阻止VOIP流量,我想找到一些方法绕过该块。我认为VPN可以做到这一点,但没有任何VPN解决方案可以轻松实现。使用Android提供的VPN API,您需要自己实现几乎所有内容(例如,那里没有任何协议实现)。

那么还有其他方法可以实现我的需求吗?可能是SSH隧道或任何其他类型的隧道?

任何建议都会有所帮助,因为我不知道从哪里开始。

3 个答案:

答案 0 :(得分:5)

过去几年,许多国家实施了非常严格的VoIP拦截。例如,在伊朗,所有具有VoIP特性(大约3-60千位,相同的上传和下载)的流现在都被阻止。在其他国家,VoIP并未完全阻止,但质量降低(丢弃一些数据包,改变其他数据包的延迟)。这是因为通常拥有互联网网络的公司也拥有电信基础设施,这样就试图让客户远离VoIP。传统的VPN现在可以轻松过滤,最近各种深度包检测软件和设备都得到了改进。加密通常是不够的,您还必须混淆VoIP流量。即便如此,VoIP服务器也很容易找到并且流量也会降低。

如果您需要克服所有这些,我可以推荐以下内容:

  • 将信令(SIP)与媒体(RTP)复用和/或使用多个媒体流
  • 使用强加密
  • 使用不同的上游和下游
  • 在某些位置UDP被阻止,因此您必须通过TCP或HTTP实现RTP
  • 使用某种分布式网络来避免IP /域检测和阻塞

我建议检查以下内容:

我最近在同一主题上做了一个研究。不幸的是,我发现只有商业解决方案来解决这些问Tor看起来很有希望,但此时我的测试后它无法用于高质量的VoIP。如果一个更简单的解决方案可以满足您的需求,那么我仍然建议使用专用的VoIP软件,如SIPTunnel,而不是通用VPN。

答案 1 :(得分:2)

解决此限制的一种简单方法是使用其他端口传输VoIP数据;您的ISP很可能不会阻止所有端口。某些网站提供可用于传输SIP数据的出站代理服务器。只需在您的出站代理服务器字段中输入其中一个,(希望)这应该有助于您的情况。

如果一个端口不工作,请尝试其他端口,例如,您的ISP可能已阻塞端口53,但端口1812可能仍处于打开状态。要找出打开的端口,可以在命令提示符中使用“netstat -a”命令。开放端口的状态应为“Listening”或“Established”。

答案 2 :(得分:2)

您可以使用Android SDK中的VpnService对象将您的应用程序连接到现有的VPN服务提供商。连接后,所有网络流量都通过VPN;当用户挂断电话时,您可以断开VPN连接。你可以做到这一切。这种方法的唯一问题是,当呼叫进行时,所有流量都通过VPN。