3

I have an Android VOIP application. As some networks block VOIP traffic I wold like to find some way to bypass the block. I think that VPN can do this, but there is no any VPN solution that can be implemented easily. With the VPN API that Android provides you need to implement almost everything yourself (e.g. there is no any protocol implementation there).

So are there any other ways to achieve what I need? May be SSH tunneling or any other type of tunneling?

Any kind of advice will help, because I don't know where to start from.

Andranik
  • 2,729
  • 1
  • 29
  • 45

3 Answers3

8

Many countries have implemented a very strict VoIP blocking in the last years. For example in Iran all streams with VoIP characteristics (around 3-60 kbits, same upload and download) is blocked now. In other countries VoIP is not completely blocked but the quality is lowered (dropping a few packets, changing the delay of others). This is because usually the companies who owns the internet network also owns the telecom infrastructure, this way trying to keep customers away from VoIP. Traditional VPN’s are easily filtered nowadays with recent improvements in various deep packet inspection software and devices. Encryption is usually not enough, you also have to obfuscate the VoIP traffic. Even so, the VoIP servers can easily found and their traffic lowered.

If you need to overcome all these, I can recommend the followings:

  • multiplex the signaling (SIP) with the media (RTP) and/or use multiple streams for media
  • use a strong encryption
  • use different upstream and downstream
  • at some locations UDP is blocked so you have to implement RTP over TCP or HTTP
  • use some kind of distributed network to avoid IP/domain detection and blockage

I recommend to check the followings:

I made a research recently in the same subject. Unfortunately I found only commercial solutions to cover these issues. Tor looks promising, but at this moment it is not usable for quality VoIP after my tests. If a more simple solution might fulfill your needs, then I still recommend to use a specialized software for VoIP such as SIPTunnel and not a general purpose VPN.

Istvan
  • 1,591
  • 1
  • 13
  • 19
2

A simple approach to get around this restriction would be use some other port to transmit VoIP data; most likely your ISP will not block all the ports. Some websites provide an outbound proxy server that you can use to transmit your SIP data. Just enter one of those in your Outbound Proxy server field and (hopefully) that should help your case.

If one port is not working, try some other port, e.g., your ISP may have blocked port 53, but port 1812 may still be open. To find out which port is open, you can use the “netstat –a” command in the command prompt. Open ports should have status “Listening” or “Established”.

Rose Ab
  • 421
  • 2
  • 6
2

You can use the VpnService object in the Android SDK to connect your application to an existing VPN service provider. Once you are connected, all network traffic goes through the VPN; and when the user hangup the call, you can disconnect the VPN. You can do all this programmably. The only problem with this approach is that while the call going on, all traffic goes through the VPN.