We've had Vonage for quite a while now, which has been a little bit of love (price) but too often hate (silence when we pick up a call, inability to call home, and other annoyances).
Worst was when our phone calls battled it out with other IP traffic bandwidth. Our broadband provider is Comcast. When I was syncing podcasts, or uploading pictures to Flickr, phone calls were getting hammered. There was no traffic cop present to make sure that phone call got priority. We needed some form of Quality of Service (QoS).
I recently decided to upgrade my aging 802.11b router with a Linksys WRT54GL. The "L" stands for Linux. The beauty of this unit is there are open source Linux-based packages you can "flash" onto it's bios, replacing the stock factory installed firmware. You risk "bricking" the router, but that's the price you play to have a little fun. I chose DD-WRT, which not only provides improved QoS features, but also lets you play with radio output power, over-clocking, and many other goodies. It even supports SSH access, sort of like a little miniature Linux server - Cool!
Following is the story of how I made VOIP calls get the priority they need at our house.
Step one: Power up Linksys and get to homepage:
Step three: check the MD5 to make sure you got what you expected:
$ md5sum.exe dd-wrt.v23_generic.bin > dd-wrt.v23_generic.bin.md5
Step four: Upgrade the BIOS on the Linksys. My first attempt using IE7 choked:
My next attempt I used Firefox and all was well:
Step five: Bounce the router. Ooo! It wants me to login:
First try failed. Cute, check out the extension:
What to do? After resetting to factory defaults (holding reset for 30 seconds on power up) I tried again - noting the dialog now says "DD-WRT":
Woo-hoo! We're in!!!
Step six: Head over to the QoS tab and set it up:
"Start QoS" was disabled, so I enabled it.
Next up I did some tests to determine my upload bandwidth because in the end that is all you can really throttle. I used the SpeakEasy flash-based test here, hitting a bunch of endpoints multiple times, and looked at the averages:
It is important to get an accurate read on your upload speed, because you are going to tell the router how much it has to work with. If you underestimate your upload bandwidth, you may inadvertently throttle your upload speed - if you overestimate, the QoS will not be effective for the high-priority traffic. The DD-WRT Wiki recommends setting the uplink speed to 85% of your actual. This is to ensure latency stays tight - apparently if you go all in, you could saturate the line with so much traffic latency will suffer - and latency kills VOIP quality.
My average upload bandwidth is in the 768K/sec range. I ended up plugging in 668 for my uplink speed, and that seems to be working well. I ignored the Downlink field since Comcast controls the other end of the link and I have no control over it.
I also set the port to "WAN". I left the packet scheduler set to "HTB" - I am not quite sure what to do with that yet:
Finally, I plugged the Vonage router into an Ethernet port on the WRT54GL, and scrolling down on the QoS tab I set it's MAC address to the "Premium" priority level:
And that was it! We now enjoy clear calls at all times, even when the line is getting pounded by other traffic.
(Note - the DD-WRT Wiki has a note about prioritizing by Ethernet port not working on newer routers - I can concur that prioritizing the VOIP traffic by using the MAC address worked far better.)
I have barely begun to play with the many other interesting features and services that DD-WRT provides. One of the first things I tried was logging in via SSH (after enabling the SSH service):