Tomato ROCKS!

One of the interesting things about Linux is the license that governs its use: the General Public License (GPL). Under the GPL, you are free to take Linux and customize it to your heart’s delight, as long as you release the source code of your changes to the public. I could, for example, buy a bunch of PDAs from a Chinese manufacturer and take a version of Linux, strip it down to the bare essentials, and load it on the PDAs. As long as I give the source code out to anyone that wants it, I can legally sell these “ PDAs” all day long.

Network appliance maker Linksys released several routers in the early 2000s that used Linux as their firmware (firmware is the term used for “operating systems for devices”. Almost anything electronic has a firmware, and many devices – like CD\DVD drives, motherboards and routers – have firmwares that can be updated as new features or bug fixes become available).

A group of folks got the source code from Linksys and created DD-WRT, a free, open-source firmware that added a lot of interesting features not commonly seen in consumer-grade routers. In time, DD-WRT either branched off or directly inspired many similar firmwares, like HyperWRT, OpenWrt, X-Wrt and Tomato. Tomato is a free, open-source project that adds many of the same features as DD-WRT, but with a user-friendly interface.

I’ve replaced the wireless router at my home several times. The first was an early Linksys 802.11b model, which worked fine but seemed a bit slow, so it was replaced with a Microsoft MN-700 802.11g model. This worked OK, but had a bug (common to home routers) that caused it to stop responding after using Bittorrent for a few days. This router was replaced with a Gigabyte 802.11g model that I loved; sadly, this router gave up the ghost after a couple year’s good service. This was replaced with a D-Link model that was nothing but junk. The D-Link rebooted several times a day, sometimes as many as 10 times in a row.

I decided to get a new router, but this time I’d do some research. We have VoIP service at home from a company similar to (but cheaper than) Vonage. VoIP requires upstream bandwidth, and if I have Bittorrent running, callers frequently can’t hear my voice as all of my upstream bandwidth is being sucked away by Bittorrent. So I needed a router that would do Quality of Service (QoS), a technology whereby data packets are assigned a priority based on certain characteristics, and some data packets may be delayed (or dropped altogether, if necessary) to allow other, more important, packets to be delivered.

My research led me to the Linksys WRT54GL, a router that Linksys makes especially for home enthusiasts.

To upgrade to Tomato, set up the new router, then download the latest version of the firmware from the project page. Next, log in to the router’s admin panel and navigate to the “upgrade firmware” page. Select the appropriate Tomato firmware for your router model and click the “Update” button. In around 2 minutes, simply reload the admin page. If everything has gone well, you should see something like this:

Tomato (1)

You then configure the router basics, just as you would with any model. Although Tomato’s interface takes a bit getting used to (especially with its advanced features), it’s easy once you get the hang of it. I also appreciate many of the “Web 2.0” type aspects of the UI. For example, one of Tomato’s most popular features are the bandwidth graphs. As you might guess, these graphs show you how much bandwidth you’ve used; the neat thing is that the graphs update in real time, so you can see at an instant where your bandwidth is going. Many other features that normally require you to reload a typical router’s admin page are handled dynamically in Tomato. And you can also sort most things in any way you’d like. For example, on the “port forwarding” page you can sort the forwardings by name, IP address, or port range – which is handy in situations where you need to forward a lot of ports to different computers.

But the Tomato’s best feature – the one that the geeks love – is QoS. Setting up QoS isn’t easy or intuitive, even with Tomato. But once you get everything set up, it works beautifully. I’ve had Bittorrent uploading at the maximum rate, then gotten a phone call. The caller reports that I sound just fine, and I can actually watch my Bittorrent program slow down as BT packets are dropped in favor of VoIP packets:

Tomato (2)

My QoS configuration. In the screen cap above, I have given highest priority to any data coming from the MAC address of my PAP2 phone adapter. After that, priority is given to DNS packets and basic web browsing. HTTP traffic of greater than 512kb (a.k.a downloads) is then given priority, with Bittorrent traffic getting the lowest priority. Remember, QoS only drops or slows down packets if necessary, so if I’m not getting a phone call or surfing the Internet, BT operates a full speed.

Tomato also has the ability to update not just one, but two DDNS providers. So if you use a dynamic DNS update service like DynDNS or No-IP and you use OpenDNS, you can have Tomato update both services as your IP address changes. In fact, when\if you go to set up OpenDNS in the DDNS page, Tomato will ask if you want to use OpenDNS’s DNS servers permanently; just click “OK” and the static DNS entries will be added to your router’s configuration automatically. It’s a nice touch!

There are some nice features for wireless users, too. You can change the amount of power applied to the antenna in Tomato, which makes your wireless network more powerful and helps eliminate “dead spaces” in your house. A router running Tomato can also act as a wireless client if necessary. Tomato can even scan the area for other wireless networks:

Tomato (3)

This feature isn’t, strictly speaking, necessary. But it’s really cool to be able to scan wireless networks without having to go downstairs and get on Lisa’s wireless desktop.

I can’t tell you how happy I am with Tomato so far. It’s only been a few weeks, but online life is just so much easier with Tomato. I no longer have to use my Bittorrent client’s scheduler to slow down upstream bandwidth during “calling hours”, nor do I have to dash across the room to slow it down manually when a call comes in. Everything “just works”. It’s sad that it’s taken this long, but now that I’m here I won’t go back to the “old way”.

If you’re in the market for a new router, make sure that it’s compatible with Tomato – even if you don’t plan on making the leap any time soon!

9 Replies to “Tomato ROCKS!”

  1. As far as I can tell from the README file that comes with the Tomato installation files, you simply go to the MN-700s admin page (usually at and go to the firmware update section. You then point to the TOMATO.TRX file you downloaded from Tomato. After a couple of minutes, the router will reboot, and you can login with the default Tomato username and password. Note that your router’s IP address will default to after the upgrade.

    This sounds right to me. To install it on a Linksys router, you just login to the router and go to the firmware upgrade page, then choose the Tomato firmware that’s named after your router model (e.g. WRT54G_WRT54GL.bin).

    Don’t sue me if I’m wrong though… It’s all I could find in a quick search.

  2. No, with the MN-700 there isn’t an update firmware section 🙁 Leave it to Microsoft… there isn’t seem to be a way to manually do this? I searched everywhere for ste-by-step instructions… no luck.

  3. I just did this upgrade on my MN-700 to tomato 1.19(have to say I’m loving it). The only way to do this is to make/get a Jtag cable and open the router and solder the cable to the board.

    The whole thing is a little involved but a decent project considering how out of date the MN is. Search on the net for and you will find several sites. and using them all you can probably do it if you are technically inclined.

    My advice, take the EMI/short cable seriously, backup everything (takes a while using “modified-jtag” in a dos box) and don’t give up!

    Hope this helps.

  4. I too have a MN-700 but found it easier to just go buy a Linksys WRT54GL and load tomato on it. Not as cool or nerdy but really friggin easy.

  5. I’m using Linksys wrt54gl with Tomato 1.28 i add my opendns username and password and when my Dynamic IP addresse changed it was not updated automatically.

    any help?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.