Fri 7 Apr 2006
A few months ago, I wrote a long story about VoIP on this blog. Today, I once again ventured into VoIP-land. I sometimes use Skype or Apple’s iChat for voice calls over the internet, but most of the time I turn to my trusty ISDN phone, which I like so much that I put up with the higher monthly costs for the ISDN line. But VoIP is coming, like it or not, so it’s important to keep up with the times. I’m a bit embarrassed to say that I haven’t managed to actually make calls with VoIP until today. The reason for this is that I was thoroughly confused by what’s out there in the standards world and the market place. So I’ll share what I learned to spare ablog readers the same confusion.
The basic idea behind Voice over IP is simple enough: digitize sound on both ends, transmit to the other end, play back. That’s the actual data, which is the simple part. (If there is no Network Address Translation somewhere in the middle, at least.) The hard part is the signaling: how to set up calls. Fortunately, the Internet Engineering Task Force came up with a nice protocol for this that’s now a de facto standard: the Session Initiation Protocol (SIP). So far so good.
VoIP/SIP is generally used in one of two ways. The first one is within an organization, where SIP phones replace the traditional expensive system phones that go with a PABX, and a SIP server and gateways to the public switched telephone network that jointly replace the PABX itself. The main benefit here is that it’s now no longer necessary to have separate voice and data infrastructures: everything runs over ethernet, nice, clean, simple. The SIP server can do advanced call routing to minimize per-minute costs. I’ve seen a few PABXes up close, and those are so complex to configure it can make a grown man cry. So I wasn’t surprised to see that Asterisk, an open source SIP server implementation, isn’t much better. I tried to get Asterisk to work one time, and failed miserably, even though I can configure a Cisco router in my sleep, I optimize SQL queries for fun and I have been known to get a Sendmail configuration to work on occasion.
The VoIP services that Vonage and so many other companies are trying to sell are fundamentally the same thing as such a PABX replacement setup, except that you use the public internet to connect to the SIP server and the PSTN gateways, and the main advantage is lower rates than what you get from regular long distance services. Effectively, you’re replacing your wire to the local phone company’s central office switch with a connection over the internet to your VoIP service provider. The end result is the same: at the other end of that connection, your calls are injected into the PSTN.
Now all my confusion came from the notion that a SIP server is required. Obviously it is in the above setups, but I have a one person company, so I have no use for PABX-like functions, and my monthly phone bill is low enough and my ISDN phone nice enough that I’m not really interested in making my phone service less reliable to save a handful of euros per month. However, I am interested in making phone calls that are end-to-end VoIP, because I firmly believe that’s what the future has in store for us, so I plan on skipping the whole VoIP-to-PSTN stage, using my ISDN line for PSTN destinations and VoIP for VoIP destinations.
So I wanted to find a free SIP server that would let me make end-to-end VoIP calls to people on other SIP servers. But as far as I can tell after half a day of research, such a SIP service doesn’t exist. People are very happy to let you call to/from the PSTN or other users of the same service, but not to random people around the internet. And then I stumbled on a very well kept VoIP secret: you don’t need a SIP server or SIP proxy. SIP phones (software or hardware) typically have enough SIP knowledge on board to make it possible to call from one phone directly to another, without a server or proxy in between.
This is how it works. First, you need a SIP phone. X-Lite from X-Ten is a good choice, and the price is right: it’s free. The second thing that you need is a SIP URL. Those take the same shape as email addresses. For instance, mine is iljitsch @ muada . com (without the spaces). This information goes into the X-Lite config, leaving all the SIP proxy settings empty. Last but not least, it’s necessary to point the DNS towards the address of the SIP phone, which in my case is my laptop, which runs X-Lite. Fortunately, I don’t have to point the whole muada.com domain to my laptop, I just have to add SRV records for the SIP protocol:
_sip._udp IN SRV 0 0 5060 alumange.bonjour.muada.nl.
This way, when someone tries to call me at my email address, their SIP phone or SIP proxy looks up the SIP service for muada.com and is then referred to the dynamically updated DNS entry of my laptop. The SIP phone or proxy then contacts my laptop on port 5060 and asks to speak to “iljitsch”. X-Lite on my laptop then rings and SIP has done its job. There is just one limitation: it’s not possible to have other users under muada.com in this setup, so for additional phones I would have to add extra (sub-) domains or bite the bullet and run my own SIP server. But for now I’m happy.
See the SIP.edu Cookbook for detailed information on how to configure everything.
Those were three faces of VoIP: PABX replacement, local loop replacement and end-to-end voice over the internet. There is however a fourth face, which few people have seen so far: ENUM. ENUM is a mechanism to turn phone numbers into DNS names, and add information that makes it possible to complete VoIP calls to those names. When ENUM is deployed, I should be able to get my phone company to add the DNS info listed above to my phone number in the ENUM part of the DNS, and like magic, everyone who uses VoIP with ENUM will be able to call my regular number and be connected over the internet without detours over the PSTN. However, since the people who hold the number blocks are also the people making money from those incoming calls today, this will probably take a while.
Update: you can also use the Gizmo client to listen for incoming VoIP calls (mind the non-default SIP port in the advanced settings) and to make calls to SIP addresses.