I recently upgraded my home internet connection from 1 to 10gbps. The only problem was, I didn’t have any devices that supported it. My router, switches and all but one other device were all 1gbps or lower. Of course, there’s little practical need for 10gbps considering that far exceeds regular hard disk speeds but still, I felt this would a good excuse to upgrade my home network. So I did.

As I might have mentioned before, I do have quite a few special requirements for my home network, so I couldn’t simply use the devices from my ISP. The main constraint is that I run OpenWRT (an open-source custom firmware) on my router, and this only works on select routers where the drivers are available. So there aren’t many routers with 10gbps that run on OpenWRT. But one that does is the QNAP QHora-301W which is the one I went for. (Singapore readers: you can get it on Shopee from MyRepublic for $399: here)

A boxed QNAP routerr

I should mention at this point that if you want to use your own router, you need to select a plan from your ISP that uses an ONT, not an ONR. An ONR (optical network router) is like a modem and a router in one device, so you can’t replace just the router part. You might need to specifically request for the ISP to give you an ONT instead of an ONR.

Now, another caveat here is that actually routing 10gbps is quite computationally expensive. OpenWRT by default will rely heavily on the CPU for handling traffic, which will max out before it can reach the full 10gbps speeds. The solution for this device, since it uses a Qualcomm chipset, is to use something called NSS (Network Subsystem) to offload network tasks onto special hardware integrated into the SoC (System-on-Chip). Unfortunately, NSS isn’t supported by OpenWRT since it relies heavily on proprietary vendor code and makes complex changes to the network stack. However, it is supported by a special development fork. I used this fork which contains prebuilt binaries: https://github.com/AgustinLorenzo/openwrt.

Note: I did not have a serial cable so I can’t comment on how to use that. However, I would strongly recommend that you have a serial cable before trying these steps, because if anything goes wrong, you can only revert to the stock firmware by using the serial cable. I only didn’t do this because I couldn’t wait, so I YOLO’d it.

The installation steps are essentially as follows:

  1. Download the latest sysupgrade image from https://github.com/AgustinLorenzo/openwrt/releases (note you do want sysupgrade, even though you are not upgrading).
  2. Hold down the WPS button until the second beep.
  3. Connect a computer to the router with a lan cable and set your IP address to something like 192.168.1.200.
  4. Follow the instructions from the OpenWRT device page to install OpenWRT.
  5. After rebooting into OpenWRT (remember to change your device ip back to 192.168.1.x), SSH again ([email protected]) and install the firmware for the 10g ports (note there’s different firmware for each port(!)).

For some reason, I only had one 10g port working after doing this, so I repeated the steps to install the 10g firmware. It worked properly after that.

Now I had another issue: changes I made didn’t persist after a reboot. To solve this, I had to copy the sysupgrade image again onto the router and flash it with sysupgrade -n <sysupgrade.bin>. Things worked properly after that, and I had OpenWRT working properly!

At the time of writing though, no packages could be installed, because OpenWRT has recently switched from opkg to apk and there are no longer any opkg packages available to snapshot builds. I managed to install some things like tcpdump by manually downloading the package, but some other things like haproxy I couldn’t get to install. I’m not sure how to switch to apk on a snapshot build that only has opkg, so I don’t know the solution to this except to wait until the NSS build moves to apk.

And that was basically it. The only thing left was to get 10g routed to my LAN devices, for which I purchased a very nice 10g switch, the MikroTik CRS304 (Shopee link). I put this switch in a different room to my router and connected it via my house’s wall cabling. My PC’s LAN port is ‘only’ 2.5g, but as mentioned before, that is more than enough to saturate my hard disk, so there’s no real point in upgrading it.

And here’s the obligatory speed test:

Speed test result screenshot showing 2.5gbps speeds

If you want to use OpenWRT with a 10g router, I’d highly recommend this QNAP device. For those based in Singapore, you should have no trouble getting hold of one, since MyRepublic uses it for their plans and sells the device in their Shopee store. I picked mine up on Carousell for a bit of a discount.

I hope this post helps someone enjoy 10g internet with OpenWRT :)