A number of years ago, I had my first encounter with open-source router firmware. My revelation came in 2014 or ’15, in the form of an old Linksys WRT54G pressed into service by a VoIP vendor. My casual observation at the time (backed up, after the fact, by some research I did for this blog post) was that the router had to be at least 10 years old, and my experience with consumer-grade routers was that they rarely provided more than 5 years of 24/7 service. There were much more powerful, industrial-grade routers to be had in 2014, so it seemed rather odd to me that a commercial VoIP vendor would choose such an old, clunky, outdated router to direct an office’s VoIP traffic. So, I did what came naturally to me: I asked the vendor, politely and diplomatically, of course, about his choice of routers for this application. His answer was that I was correct, a stock Linksys WRT54G would not be an appropriate piece of equipment for handling VoIP. However, this was not a stock Linksys WRT54G; it was a WRT54G whose original firmware had been replaced by an open-source router firmware called Tomato. Tomato not only had the magical power (well, it seemed magical to me at the time) to resurrect a failing consumer-grade router, but it could also unleash capabilities not normally found in consumer-grade routers. Well, that was certainly not the answer I had anticipated, and not knowing what else to do with it, I made a thoughtful face, uttered “Cool!”, or maybe a Mr. Spock-esque “Fascinating.”, and filed the information away in my brain for future reference.
The next time I thought about this was a year or so later, when my own home wi-fi router started acting flaky. Before running out to buy a replacement, I thought, “Hey, wait, let’s see if maybe this Tomato or Potato or Avocado or Whatever-o (I knew it was some fruit or vegetable ending in ‘o’) can resurrect my dying router. I fired up a web browser, did a quick search, and… no dice. I quickly discovered that Tomato didn’t support my router. It only supported a handful of routers, mainly variants of the Linksys WRT54G. I also found that there were other open-source router firmwares available, such as OpenWRT and DD-WRT, but they didn’t support my router, either. So, I went back to Plan A, and bought a new router. I didn’t think much about it again until 2018 or 2019, when I once again encountered an old, outdated-looking router in an office, only to discover that the router had been loaded with open-source firmware, this time DD-WRT.
Fast-forward to a little over a month ago, when my current router, a Netgear Nighthawk R7000P AC2300 model, started dropping wi-fi connections intermittently. It’s not an old router, but, frustratingly, its problems began just a couple weeks after its one-year warranty ended. Two Netgear firmware upgrades failed to fix it, Netgear’s online help provided no useful information, and all I could find out about it from public forums were posts from plenty of other Netgear R7000P owners who were experiencing the exact same problem, with no solutions mentioned. That’s when I remembered that VoIP vendor’s statement from all those years ago, that third-party, open-source firmware could sometimes fix problems with a failing wi-fi router. My most recent encounter with open-source router firmware was DD-WRT, so I looked up its web site and found that it works with my router. Yes!
I then set about finding out what I had to do to wave DD-WRT’s magic wand over my increasingly malfunctioning router. It didn’t take long for me to come across a stern warning to read DD-WRT wikis and forum posts before beginning, find the correct version of the firmware for my router, and then carefully follow the installation instructions, because there was a very real chance of turning my already unhappy router into a paperweight if I did something wrong. And to emphasize all that, the introductory instructions included the warning that “TL:DR is no excuse”. That did give me pause, at first. But then I remembered that my router was failing anyway, so, if worse came to worst, my attempt to load DD-WRT on it would brick the thing, at which point I’d just go buy a new one.
I’m not going to bore you with the technical procedures that transformed my flaky, stock Netgear Nighthawk R7000P into a DD-WRT-powered wi-fi router that seems to be stable so far. The main reason is that the procedures vary from router to router. Your router might require different procedures, or might not be supported at all. One thing you learn from reading those wikis and forum posts is that no two consumer-grade router manufacturers agree on how to implement the technology, and routers from the same manufacturer might all require different steps for loading DD-WRT. It must have been a maddeningly complicated project for DD-WRT’s developer community to make the product work with as many routers as it supports, and it sounds like an equally maddening project to continue to fix bugs and make improvements to the firmware. The bottom line is that if you want to run open-source firmware on your router, you’ll have to do your own homework, and a lot of it.
I will provide you with my observations, though. First, the results: As of right now, all the major features I was using before the firmware change – Internet routing, wired network switch, wi-fi network, guest wi-fi network and sharing a USB-connected external hard drive over my network – are working, at least for the most part. There appears to be a bug that prevents the 5GHz guest network from working, and attempts to make it work make the other wi-fi connections unreliable, but I can live without that. The parental controls that Netgear included with my R7000P, Netgear’s flavors of OpenDNS and Circle, are gone, but I no longer need those.
Another thing I picked up along the way is why not all routers can be supported by open-source firmware. First and foremost, in order for a router to be supported, its factory firmware must run on Linux. In fact, this is why the original Linksys WRT54G was the router supported by the first open-source router firmwares: it was the first consumer-grade router known to run Linux, which made it hackable. (Note that to programmers, “hacking” is not necessarily a bad thing. It simply refers to writing short, clever program code intended to accomplish a task. Only when we’re talking about a malevolent hacker does the task involve breaking through security and stealing data.) To this day, not all consumer-grade routers run Linux.
Be aware that when you load open-source firmware onto your router, you effectively become your own tech support provider. Open-source router firmware, like open-source application software, is written by consortia of volunteer programmers. There is generally no company bankrolling the project, and there is no company paying tech support agents to help people use it. There are wikis and knowledgebases containing a wealth of information about the firmware, but it, too, is written by volunteers, so it’s not always well-organized, it’s often out of date and it’s not unusual to encounter conflicting information. You can join the support forums for the firmware and post messages there requesting assistance, but if your message makes it obvious that you’ve made no attempt to look in the wikis or for other forum posts dealing with your issue, then you’ll most likely receive a brusque referral to those wikis or posts, or your message may be ignored entirely. And if you cop an attitude by demanding a response, calling programmers idiots or complaining about rude or inattentive support personnel, you will get a frosty response at best, and might even get banned from the forum. Open-source is a very cool concept, but you must remember that when you opt for open-source products, you are nobody’s valued customer.
Part and parcel with learning to support your open-source router firmware is learning a whole slew of unfamiliar terms. For example, earlier, I mentioned that I had gotten my “guest wi-fi network” working. You may be familiar with the concept of a guest wi-fi network from your own router, but when you look through DD-WRT’s administration pages, you won’t see any mention whatsoever of a guest wi-fi network. That’s because in DD-WRT, guest wi-fi networks are simply a specific application of what they call “virtual access points”. In a nutshell, to create a guest wi-fi network in DD-WRT, you create a virtual access point, turn on the Unbridged, AP (Access Point) Isolation and Net Isolation options, specify an IP address range and a DNS address, visit another page to set your virtual access point’s password and security settings, and visit yet another page to turn on something called Dnsmasq and type in several arcane-looking lines of code to make Dnsmasq create a DHCP server for your virtual access point. Got all that?!? Probably not, but maybe now you have gained some appreciation of all the things your stock wi-fi router does for you behind the scenes when you activate its guest wi-fi network feature, name it and give it a password. Personally, I had never heard of a Dnsmasq before. I still don’t quite know what one is, although I now have some idea of what it does.
This is my foray into DD-WRT open source firmware so far. It’s going to be an ongoing adventure for me, and I may post more about it in the future if it leads to any new, interesting stuff. I actually kind of hope it doesn’t, because now that my router appears to work reliably again, I would very much like it to go back to being an appliance that just works in the background and doesn’t require me to think about it much. I decided to write this only because I like to post once a week about interesting tech adventures, and this certainly qualifies. But it is not an announcement of a new product or service from Lebowitz IT Services. Please do not ask me to load DD-WRT or any other open-source firmware on your router. If you do, then my reply will tell you that as of right now, I don’t have the experience and in-depth understanding of open-source router firmware to do such a project, very likely followed by an offer to send an estimate for what a new router or mesh wi-fi system would cost.