Openwrt Hardware Choice

2023/07/31

Short version: For a dual purpose of a small server host alongside a wireless router, Mediatek and Atheros chipsets are probably best. Many more recent Atheros based devices are nice because their chipsets are multi-core ARM processors. Try to get something with a good amount of flash and RAM (128/256mb respectively, as a bare minimum) if you plan on using it as a multi-purpose ‘server’ device, though it is possible to get around flash restrictions with some contortions.

Hardware Choices

This is all speaking from my own personal experience. I’ve gone through a few devices, but I’ve mostly focused on specific chipsets once I zeroed in on what I want in a device - not just a router, but something that can serve as a decent general computer for small purposes.

The OpenWRT table of hardware is a great resource for finding supported hardware. Make sure to look at device specific pages, sometimes they’re a pain to flash and sometimes they’re supported but for the wireless (ie. Broadcom wifi chips). You should start by looking at stuff supported by the current stable release, as they’ve been tested somewhat more than any devices only supported by snapshots. Though, at time of publishing, OpenWRT is currently in the middle of releasing a new stable version - take a look at their firmware selector to see if a device will be supported in the next stable release, if it is only supported by snapshots at the moment.

If you want something with good wireless support and halfway decent CPU, you will probably be looking for a router with a Qualcomm Atheros chip (supported by ath9k or ath10k) or a Mediatek chip supported by mt76. All of these drivers are relatively performant on supported hardware. If you care about libre-free open source as far down as possible, ath9k is probably the best option by my recollection, but those devices will be much slower, as they are well out of date by now.

If you want to follow my lead and host stuff on your router, you will likely also want one with a good amount of RAM. The amount you’ll need varies by service, of course, but my current personal ‘production’ stack has about ~150mb of the RAM reserved, with Adguard Home, Caddy as a TLS reverse proxy, radicale as a caldav server, and pulseaudio and bluez running mostly in the background. Half of that isn’t even typical for your average router. By my accounting, your bare minimum is probably 128mb if you wanna run a couple of lighter things, 256mb for a little more comfort, especially if there isn’t quite so much flash, since you can use RAM to get around flash space constraints. More is always ideal, of course, but 256mb seems to be the reasonable maximum without starting to step into somewhat pricey devices.

CPU-wise, you’ll probably want something with at least a couple cores/threads of reasonable speed. Having a (recent-ish) ARM CPU is nice, as many packages/binaries are already compiled for armv7 (or directions exist for doing so) due to the early Raspberry Pi devices. If you try to filter by this criteria to find devices, you’ll probably see many Qualcomm IPQ40XX and IPQ806X devices, mostly IPQ4018/4019 and IPQ8064/8065. These are probably most ideal. The former is about on par or a little worse than many early multi-core single board computers in the CPU department, like an RPi 2B. The latter is actually decievingly nice if you are willing to put in a little bit of work.

IPQ806x info

They have 1.4-1.7GHz dual core ARM processors, which is rather nice for a router, but they also have a pair of ~700mhz networking coprocessors (all these numbers vary by exact SoC variant). These networking coprocessors can significantly increase the networking performance - I can get 500mbit speeds over my ‘wifi bridge’ setup, which, as I understand it, cuts the speed in half as a matter of course.

Unfortunately, the drivers for these are not fully open source, so far as I know, and require precompiled kernel modules that have to be specially built into OpenWRT which will never be supported by official builds. They’re also quite buggy under certain conditions in my experience - you may experience some crashes - for example, I have been reliably able to get the drivers to kernel panic when attempting to make a same-subnet bridge with WDS, using another ath10k router as an AP - I plug a network cable into the port set up this way, and it immediately kernel panics and restarts. I use a client connection instead, but y’know.. that double NATs you. This is using the non-ct drivers, your mileage may vary here. There are user maintained builds for these, with a couple large caveats. You cannot install kernel modules, because installing the network coprocessor modules changes the kernel hash. If you want to add some in, you’ll need to build your own image. The other one, which I feel I need to underscore, is the instability. I’ve left myself in a bootlooping state before, and my only saving grace was the depthcharge bootloader on the Onhub that let me recover from scratch. A router without some sort of more robust recovery mode would likely be left pretty much bricked.

All of this said, here is the link for some unofficial builds with these kernel modules compiled in. A brief note - do NOT turn on software flow offloading in the firewall section of LuCI. That essentially overrules these modules, and causes additional problems.

Some more recent routers, like some of the Netgear Orbi devices and Google Wifi devices, have 4gb of eMMC, rather than (or in addition to) a smaller amount of more traditional flash. This is absolutely massive for OpenWRT routers, and these devices are absolutely ideal for this sort of dual purpose usage, as they have comparatively voluminous space for packages and data. I’d guess it’s somewhat less durable, but the large amount of space makes up for it. For this website, I am using a Google OnHub, which is IPQ8064 based with 1GB of RAM (!!), 4GB of eMMC, and a USB 3.0 port, so it has a lot of room to spare in flash and in RAM for hosting this tiny little static website, and can be expanded over USB if need be. This is unusually overkill specs for a router - I don’t think there’s any other consumer-grade dedicated router supported by OpenWRT that has this much memory in particular. Something more typical but still very usable for hosting a handful of stuff is 256/256, or 512/512. Some routers will have much smaller amounts of flash, but there are various way to work around this using USB or networked storage or some sort of tmpfs solution, or some combination of these techniques. (info to be added in another page).

Devices I have used

Netgear R6220 (mt7621, 128mb RAM and 128mb of flash, but a good portion of it is taken up by weirdness with the flash partitioning scheme, which leaves you with very little space in the end unless you want to put some work/space into using a reserved partition. Pretty good basic router, and recently got a massive improvement in its wired networking performance in .)

Linksys EA6350 v3 (ipq4018, 256/128mb - a little bit better, good amount of RAM but flash is taken up by A/B partition shit so you effectively only have ~64mb)

Google Wifi AC-1304/NLS-1304-25 (ipq4019, 512mb of ram? 4gb of emmc? USB-C powered? tell me I’m dreaming! makes a great base for a travel router that VPNs into a home network!)

Netgear EX6100v2 (ipq4018. 256mb RAM / 16mb flash. Generally hilariously stilted specs. It’s a wifi extender, so the stock firmware didn’t need to be very large, I guess. I got this one to experiment on using low-space solutions, and to act as a travel router itself when I’m out and about. I know I just said the Google Wifi is great for that and it is undebatably better specs-wise, but I got one of these for 8 dollars, and the typical price seems to be $13-15… Good travel router, if you can’t track down a Google Wifi puck at the right price, or maybe as a basis for a mesh Wi-fi network.)

TP-Link Google Onhub TGR1900 (ipq8064, 1GB RAM / 4GB eMMC, see above notes on IPQ806x hardware. This also has a number of unusual bells and whistles, such as a RGB LED ring that is controlled over I2C, a quite substansial 5w speaker, and chips for Zigbee (unsupported) and Bluetooth (supported via ath3k) - it’s atypical hardware, but it’s a very good wireless router, my best and fastest one: 450mbps speedtest over a Wi-fi to ethernet bridge setup, meaning, essentially, near gigabit wifi speeds.)

Check device specifi pages on the OpenWRT wiki before buying anything. Sometimes, a device will be supported, but it will come with major caveats, like a painful flashing process or a Wi-Fi chip not working well with any drivers OpenWRT is able to distribute.

--

Resources: mt7620 target devices, mt7621 target devices, ipq40xx target devices, ipq806x target devices

>> Home