Texting isn't as comfortable as voice calls. At least for me.

After switching to Vodafone, (which I regret doing) nowhere near my room, I can talk calls. I rely on Calls, and SMS besides IM. Vintage boy in data era. The pain is real. You can't just receive calls like others do and need to get out of the hostel to make a call. I have no other option than to utilize my university WiFi.

VoIP (think of Whatsapp calls) uses the Internet to provide voice call connectivity, and I have decent university WiFi. But there's a catch, all those Whatsapp or Telegram calls won't work here.

I got to tell you, why

Let me introduce you two popular badass guys behind the Internet, TCP, and UDP. They move data between your devices. Our first guy TCP, he does it safe and slow. Another one fast and fallible. We mostly use TCP and the second guy is for multimedia streaming like video, audio stuff. As you think, VoIP uses UDP.

One more thing you need to know is my university gateway. They don't want students to use those bandwidth consuming applications like video streaming or multiplayer gaming. To be precise, they want to restrict things to only browsing web pages. Below image is my not so good try to make you visualize the firewall.

University firewall

P.S. I didn't set the wall on fire. Think of my university firewall as a literal wall which only allows TCP out. The numbers near the wall represent the Port numbers (think as gates on the wall). Gate 80 is used for HTTP traffic, and 443 for HTTPS traffic. Only these two gates are open, and thus only web browsing can be done (At least that's what they think :P). VoIP applications use UDP, even if few use TCP there's no way they would use gates 80 and 443 by default. Now it's clear that any VoIP app is not going to work inside.

#1 Tunnel the traffic

We have a good old friend called SOCKS. He will create a virtual tunnel between two machines over any gate of our choice. Any TCP traffic we put on one side of the tunnel will reach the other side.

VoIP over SOCKS tunnel

UDP over SOCKS tunnel is complicated and to keep things simple, I found this application called wire, which supports TCP for VoIP. Now I can tunnel its TCP traffic through gate 443. It by itself won't use the gate 443.

Thus using SOCKS and wire, I'm able to do the most needed thing. However, I need to make my close circles install wire - the hardest part.

#2 Own VoIP server

Another solution is to run my own VoIP service. This seems a big thing, but it isn't. I found an open source VoIP software called mumble. With mumble, I can choose the gate (443) and the guy (TCP) I want.

When you take control of things - possibilities are endless.

VoIP over TCP port 443

Final thoughts

First intuitive is that the second solution will perform better as the first one messes with extra servers and tunnels. But it turns out wrong. Calls are more stable with wire over SOCKS, and mumble suffers from voice breaks.

I also tried few more methods such as running a TURN server and for some unknown reason, chrome WebRTC fails during TLS handshake  (Not a self signed certificate too.) when using custom port.

Happy calling :)

More suggestions are welcomed!!