I recently moved into a new house that I share with 3 other people. As a web developer and general internet enthusiast, I needed a way to make sure a couple of people simultaneously streaming Netflix and Hulu plus some Pandora and stray downloading thrown in would not diminish my ability to
constantly refresh Hacker News Get Things Done™.
I stumbled upon the concept of Quality of Service (QoS) while reading Jeff Atwood’s eye-opening post on the wonders of open source firmware on commodity hardware. QoS allows you to apply classification rules to all traffic through your router, and limit the incoming or outgoing bandwidth available to each type of traffic. It can also prioritize SYN, FIN, and RST packets for snappy TCP performance.
DD-WRT appears to be a “one size fits all” package with a large forum presence and a broad range of supported hardware. It appears to be one of the oldest of the available firmware, and as such there is a wealth of documentation/tutorials/forum-postings — albeit some things will be outdated.
OpenWrt takes a more built-to-order approach in that it aims to provide a smorgasbord of packages. The user can pick and choose which functionality they need and build a custom firmware to their specifications. This approach appeals to me, but alas, I needed a quick solution. In the future I may revisit OpenWrt and see how the package management works in practice.
Tomato proper was last updated in June of 2010, but there is an active community with roughly ten individuals maintaining their own branches, and making releases with different subsets of features available. Check out the feature comparison table. I zeroed in on the “Toastman” version of Tomato mainly because there was a wealth of information listed on Toastman’s website.
Here is a sampling of the wonders within Toastman Tomato:
- QoS Classification grants a better idea of what traffic is being handled
- Real-time bandwidth analysis, by IP address
- Wireless Distribution System (WDS) allows you to link together routers to use the same SSID for seamless transition
- Adjustable multicast rate — this helps force the hand of clingy devices to use the strongest signal available to them
- Adjustable transmit power — this allows you to fine-tune signal overlap and coverage
- Overclock the router CPU — how cool is this?!
- CPU load averages, RAM usage, and NVRAM space monitoring
- OpenVPN server so that you can access your network externally
- VLANs in case you are one of those crazy “I want to manage a complicated IT infrastructure at work AND at home” kind of guys!
- Share printers and NAS devices connected via USB
A roughly four year old Linksys WRT54GL (200MHz Broadcom CPU, 16MB RAM, 4MB Flash) willingly gave itself to the cause of being a Tomato guinea pig. I read a good amount of the links on Toastman’s website, as well as some background information on the DD-WRT site (including the all-important 30/30/30 rule, which is to be performed before and after every flash of the NVRAM). Upgrading from the stock firmware to Tomato went without a hitch. I spent a good couple of hours poking around and exploring all the options available.
I picked up a Belkin Share Max N300+ router. With 4 gigabit ethernet ports, 2 USB ports, and 802.11n wireless — this router is a steal for $26 shipped (from Expansys). It has a 453MHz CPU, 8MB of flash, and a lofty 64MB of ram. In initial testing I found it’s wireless signal strength to be marginally stronger than the WRT54GL’s, even without any external antennae. I like the simplicity of it’s single LED on the front. It’s either green (all systems go) or yellow (services restarting, or problem).
WDS (Wireless Distribution System)
WDS is a way for access points to wirelessly associate with each other. It allows you to extend your wireless network without having to have a physical ethernet cable connecting your access points. It is quite simple to set up — you just need to make sure both access points are configured with the same network speed, SSID, channel, security/encyption/key, and you need to explicitly tell each AP the MAC address of the other APs.
This article describes how to extend a wireless network with tomato routers. It was helpful in making sure I understood the basics of what was going on, and verifying I made all the setting changes required. This post on superuser.com explains Multi Access Point Networking and was useful to get my brain fully wrapped around the concepts of wireless networking that I hadn’t properly understood before.
Quality of Service
The pie charts to the left show a snapshot of my traffic while I am streaming a YouTube video, downloading an application, and using Chrome with many tabs open. I can see how the QoS rules are classifying my traffic, and by clicking on either the pie chart or the listing at the left I can drill down and see exactly what connections are active, their source/destination ports and IP addresses, and the total amount of data transferred for each connection. This is clearly overkill for most, but just KNOWING all that information is there for the gleaning makes me happy. It’s also pushed my understanding of TCP/IP networking and related concepts. Previously I had a VERY simplistic understanding of ports, TCP vs UDP, and TCP control flags.
I was easily able to get both routers talking to each other via WDS by simply following the instructions given. I can walk from one corner of the property to another and my wireless devices will seamlessly transition from one router to the other due to the multicast rates set. Even with four people simultaneously using bandwidth-intensive applications, web browsing is still smooth as silk! I can monitor the bandwidth used, and make sure I don’t get close to Comcast’s undocumented 250GB cap. Everything seems to Just Work™ in a way that I have never experienced before with proprietary router firmware.
My networking-fu is stronger than before, and I realize there is still much to learn. The chart at the right shows one page of advanced wireless settings which will take weeks of tinkering to exhaust, but should yield more illuminating/esoteric knowledge! Check out this list of settings for a comprehensive description of every Tomato option.
I would recommend anyone comfortable with flashing firmware to give Tomato a try, specifically the Toastman version. It is regularly updated by an active maintainer, provides tons functionality with minimal fuss, all with a very usable interface — and you will likely learn something to boot!