mozilla / connected-devices-experiments

INACTIVE - http://mzl.la/ghe-archive - A place to publish experiments and investigations from the Connected Devices team
10 stars 6 forks source link

Open WRT/DD-WRT #21

Closed mikehenrty closed 2 months ago

mikehenrty commented 8 years ago

Let's make an experiment with Open WRT/DD-WRT.

jimporter commented 8 years ago

Here is a summary of where I'm at now.

OpenWrt/DD-WRT

Background

OpenWrt is a custom firmware for wireless routers based on the Linux kernel and originally designed to be installed onto Linksys WRT54G-series routers. However, a much wider variety of devices are currently supported. Users typically install OpenWrt (and other similar firmwares) in order to upgrade the capabilities of their router to allow for things like QoS, wireless bridging, captive portals, etc. This and other custom firmwares for WRT54G-series routers was all made possible by a lawsuit against Cisco claiming GPL violations in several of their home routers.

DD-WRT is based on OpenWrt, but is designed to be friendlier out of the box, at the expense of being slightly harder to tinker with. DD-WRT has achieved some notability in recent years by being the default on some Buffalo and Linksys routers. Tomato is another similar custom firmware, but based on HyperWRT, which is in turn is based on Cisco's original firmware source.

Installation

Unless your router happens to be one with DD-WRT preinstalled, you'll have to install it. This can be fairly cumbersome, since the factory-installed firmware on your router may be limited in such a way that requires you to install a "minimal" version of your custom firmware before installing the full version. In any case, the installation process involves a user downloading the appropriate build for their router from the website, hard-resetting their router, opening up their router's management interface in their browser, and uploading the firmware. If all goes well, the router reboots and a few minutes later, you have an almost-enterprise-grade router for the price of a home router!

Unfortunately, installing firmware can be pretty painful! It's easy to make a mistake and brick your router if you fail to follow the instructions exactly, or worse, flash the wrong build. DD-WRT is especially bad in this regard because the officially-recommended firmwares on their router database are disrecommended by the forums community. Getting the "right" firmware involves a lot of effort and is generally very user-unfriendly.

Usage

Once everything's set up, the software is remarkably powerful and allows users to tweak nearly everything to their heart's content. I've used DD-WRT on a Linksys WRT54GL for several years, and compared to the default firmware, it's amazing. However, as you might guess, this is "nerds only" territory. While DD-WRT (likewise OpenWrt and Tomato) are powerful, they're really not much more user-friendly than factory-default firmwares.

Nevertheless, many of the features in OpenWrt/DD-WRT would be very useful for home users, provided they knew how to activate them. The security features are typically much better, and it's possible (although not exactly easy) to broadcast multiple wireless SSIDs with different access restrictions, e.g. one for family and one for guests.

Hacking

Since OpenWrt/DD-WRT are based on the Linux kernel (plus BusyBox for userspace), it's possible to do really unusual things with your router. Both firmwares come with a package manager, opkg, that lets users install any one of hundreds of packages, typically to enable support for some peripheral device.

OpenWrt can also be used as a wireless client connecting to an existing network, such as with the LinkIt Smart 7688 from Seeed Studio. This allows a developer to easily prototype IoT devices by hooking the board up to peripheral hardware and using OpenWrt to manage most of the low-level tasks.

OpenWrt has also been used in experiments to support management of IoT devices (it is a wireless router firmware, after all). In my estimation, this is a more fruitful area for OpenWrt, since production IoT devices would likely benefit from a lower-power (and lower-cost!) solution than a generic board running Linux.

Experiments

It's not entirely clear to me what experiments should be performed with OpenWrt or DD-WRT. Do we have a specific goal in mind, e.g. determining if we should use OpenWrt to power a product we design, or merely trying to scope out potential competition? Answers to this would significantly affect the kind of experiment I would perform. Currently, I see two obvious routes:

  1. Install OpenWrt on a test router and try modifying it to test whether we could use it as the basis of a home router product.
  2. Install OpenWrt on a single-board computer and see how well it works to create IoT prototypes.

Of the two, (1) seems considerably more useful to me, since I don't believe our goal is to design IoT devices (e.g. smart lightbulbs). However, I think I'd have to come up with something specific to do that's not already covered by the experience I have using DD-WRT. I'm open to any thoughts/ideas here.

davidascher commented 8 years ago

re: Specific experiments:

@autonome might have some suggestions here based on his previous work on data-capturing routers with university students.

A specific thing I'd love is an HTTP endpoint on the router that serves an app that tells me interesting things about what kind of data is coming to and from my network, and to which organizations on the internet.

gabrielesvelto commented 8 years ago

One idea that's been thrown around is of augmenting one of these firmwares with Project Link so that it runs in the same box. FYI I've worked on making sure that it builds on MIPS which is a requirement for running on many routers. I'm in the process of flashing one of my existing routers with DD-WRT so I'll actually try that when I have some time to spare.

jimporter commented 8 years ago

These both sound like they might be relatively big projects. For comparison, the Johnny-Five experiment was to make some lights blink: #20

Perhaps something like "replace all image requests with a funny picture" would be doable in a week...