The GL-MT300N A $20 hackable Linux Router

gl-mt300n

Introduction

The Gl.iNET GL-MT300N is a $21/£19 travel router designed for WIFI on the go. The device runs a custom version of OpenWRT that is easily replaced with a standard release of OpenWRT making this device an ultra cheap hackable Dual NIC router/SBC.

Specs

The Gl-MT300N is powered by a MediaTek MT7628AN SoC featuring a single core MIPS CPU @ 580Mhz, 128MB DDR2 RAM and 16Mb Flash storage. WiFi b/g/n and 2x 100Mb Ethernet Ports.

There is a single serial port internal to the case and several GPIO ports as follows:

GPIO pins on the Gl-MT300N
LabelGPIONote
No label0Controls power to the USB A port, export GPIO 0 and set its value 0/1 to control
WPS_PBC2Shared with WPS button according to docs, however this button appears not to exist
RST_PBC1Shared with Reset Button
3.3VD3.3V
LINK444Unused
LINK343Shared with toggle switch on side of device
Gl-MT300N GPIO ports

Installing OpenWRT on the Gl-MT300N

Installing OpenWRT is very simple as the device already runs a modified version of OpenWRT.

Download the latest release for the Gl-MT300N from here: http://downloads.openwrt.org/releases/19.07.5/targets/ramips/mt76x8/openwrt-19.07.5-ramips-mt76x8-gl-mt300n-v2-squashfs-sysupgrade.bin

Browse to the IP of your Gl-MT300N followed by /cgi-bin/luci/admin/system/flashops in a web browser and upload the OpenWRT image file. The system will soon reboot with a full featured openWRT image installed.

Configuring OpenWRT on the Gl-MT300N

As 16MB of flash storage isn’t a lot I purchased a 32GB SanDisk Ultra Fit flash drive from Amazon for around £6 Linked below:

Amazon UK
Amazon US

I then moved to rootfs from the flash to the USB Flash Drive using the instructions found here: https://openwrt.org/docs/guide-user/additional-software/extroot_configuration

I now have ~26GB of usable storage:

root@GL-MT300N-V2:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 2.5M      2.5M         0 100% /rom
tmpfs                    61.0M    944.0K     60.1M   2% /tmp
/dev/sda1                28.1G    202.3M     26.4G   1% /overlay
overlayfs:/overlay       28.1G    202.3M     26.4G   1% /
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock6           11.8M      2.3M      9.6M  19% /rwm

Benchmarks

Whilst UnixBench might seem like an unusual benchmark for a router lets look at this as if it was another cheap SBC. It performs about as expected coming in slightly faster than the first generation Raspberry Pi.

UnixBench

Bench.sh (Disk Speed)

The disk speed benchmarks below were taken using bench.sh. This is the speed of the rootfs running on a SanDisk Ultra Fit flash drive .

----------------------------------------------------------------------
 I/O Speed(1st run)    : 19.4 MB/s
 I/O Speed(2nd run)    : 12.0 MB/s
 I/O Speed(3rd run)    : 11.3 MB/s
 Average I/O speed     : 14.2 MB/s
----------------------------------------------------------------------

Power Consumption

I tested the power consumption using my Keweisi USB Power meter

Idle

The idle power consumption is tiny at 0.19A at 5.08V this is around 1 Watt which is tiny!

Gl-MT300N Power Consumption at idle

Full load

I fired up stress-ng with 4 CPU threads and a single IO thread to create an artificial load, this completely maxed out the CPU

Running stress-ng to create an artificial load on the Gl-MT300N

Amazingly the power consumption didn’t budge at all! Staying at a total of around 1W

Gl-MT300N Power Consumption at full load

Conclusion

Whilst this post doesn’t go into much of the details of how the Gl-MT300N functions as a router I hope it was entertaining to see how this device can function as a tiny Linux computer.

If you would like to try this for yourself it is currently available on Amazon at around £20:

Buy a GL.iNET GL-MT300N on Amazon UK

Buy a GL.iNET GL-MT300N on Amazon US

If you would like to see how this device functions as a router check out Ian Lim’s review here.

8 comments

  1. Thanks for this write up, prompted me to purchase one of these devices.

    One question, I have is if you upgrade the underlying OpenWRT installation and shift the install to extroot as you described does it retain the GL-iNet interface?

    1. Hello, upgrading to the default OpenWRT install will remove the GL-iNet interface. You could likely install to an extroot using the stock GL-iNet install but I’ve not tested that.

      1. Thanks for the clarification James, appreciated. Been using OpenWRT on a Linksys WRT1900AC for a few years now (and years ago on the classic WRT54g) so not adverse to ditching the GL-iNet UI. I’ll perhaps have a play around and try moving the stock GL-iNet firmware.

  2. In case anyone else comes across this following the OpenWRT instructions for extroot works fine with the GL-iNet firmware (I’d updated to 3.105 first should that make any difference).

  3. So I just tried that upgrade but used openwrt-19.07.7…etc instead of openwrt-19.07.5 as this was the version on the OpenWrt page.
    The flash upgrade just kept running, after a couple of hours I rebooted and its now dead:-(
    Any ideas how to retrieve it or why it did not work?

    1. There is a serial header on the board which should let you get a console and see exactly what is going on. I also believe you can tftp boot these although I haven’t tested it.

Leave a comment

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