Thin-ITX Router
Thin-ITX Router

I had been using a Banana Pi BPI-R1 as my router. Due to some reliability issues, I attempted to replace it with a ClearFog Pro, which also met with unfavorable results. Many hobbyist tend to use old PCs as routers, as I have in the past. Due to some scaling down, I no longer have a bucket of spare parts to build a low powered Linux box. Instead of going with another ARM solution, I decided to build a custom x86_64 system based on the Thin-ITX form factor. I discovered that a x86/Thin-ITX solution was more reliable than the ARM alternatives I have tried, and ran the same cost as a high end home router.

In 2003, I was in University and was using an old Pentium 90 as a Linux router to provide Internet to my seven other housemates. At one point the hard drive on the router died and I couldn’t afford to replace it, so I ran dhcp/tftp on my file server (pictured to the right of the router), PXE booted the router and mounted its root file system via NFS. This meant that the file server had to be up first and the router booted remotely from it, before the router could serve Internet.

My Router when I was in University
My Router when I was in University

A Pentium 90 was more than enough at the time to handle routing cable Internet for around eight devices. If I still had a Pentium 90, I’d be curious to run benchmarks against it and my current setup. Many of the components listed are definitely overkill for a router, even considering that I need to handle gigabit speeds.

Parts List

Part Cost
ASUS H110T Thin-ITX Motherboard $69.99
Intel Celeron G3900 $42.18
Silverstone PT13B Thin-ITX Case $55.99
Silverstone SST-AR04 CPU Cooler $29.79
2x 4GB DDR4 (8GB) Ram $43.98
128GB M.2 2242 SSD $45.99
Intel 8260 M.2 802.11ac Wi-Fi Card $22.49
2 x 11” MHF4 to RP-SMA Pigtails $7.95
120W 19V DC Power Brick $19.99
Netgear 5-port Gigabit Switch $19.99
2x +5dBi Wireless Antenna $11.90
Router Parts
Router viewed from the top with case open

Lessons Learned

There were a couple of parts compatibility mistakes I made, which did result in some returns. The DC power supply needed for Thin-ITX boards isn’t clearly stated in any of the manuals I looked at, but after some research I realize that all Thin-ITX boards use a circular plug with a 7.5mm outer radius and 5mm inner radius. The exact size may vary on some models by a few tenths of a millimeter, but it’s the plug that’s used on many HP laptops. The ASUS H110T supports both 12V and 19V power supplies with different wattage requirements depending on the type of processor. Be sure to check your specific board and processor to make sure you buy the correct power brick.

I also made the mistake of purchasing an Intel HTS1155LP fan, which doesn’t fit in a Thin-ITX case of this form factor. It’s designed for wider cases that have room for the heat sink to dissipate heat off to the side of the motherboard. The Silverstone SST-AR04 fits directly on top of the processor and allows room for USB header access. Despite its low form factor, it does a good job of dissipating heat from one of these low powered processors.

In this setup, I also have an external switch. There are thin-ITX boards with multiple gigabit Ethernet ports, some which even have a built in Atom processor and memory. However, the ones I found only had VGA output. My monitor only supports DisplayPort/HDMI and I wanted to avoid an additional adapter or trying to rely on the board booting up with a headless Linux distribution (one that enables SSH and DHCP on boot for remote headless installation/diagnostic).

Some of the Jetway boards offered a serial port console, but that would still require yet another serial to USB adapter, plus the horizontal PCI-E expansion slots on some of these boards would require modifying standard Thin-ITX cases1. Using this board, plus a switch, ended up not being significantly higher in cost than thin-ITX board with multiple Ethernet ports built-in.

Router viewed from the top with case open and switch

Operating System

At first I looked at Alpine Linux, but became frustrated trying to have it install to disk and boot from UEFI. The testing branch of Alpine does have a grub2 package (the base uses the syslinux bootloader), but I didn’t want to run a testing branch as the OS for my primary router. The Alpine wiki currently has working instructions for creating a UEFI USB boot image2, but their GPT wiki page still seems to instruct users to boot in legacy/MBR mode3. Once tools like efibootmgr have Alpine packages45 and grub2 is in the stable branch, I’m sure this will be trivial. As it stands, I couldn’t get the stock kernel to boot via rEFInd or Gummiboot. It may have been missing EFI stub support, or it may have simply been my configuration, but I eventually gave up without finding a solution.

I realize this may tread on ideological differences, but the fact remains that systemd has been one of the most divisive topics in the Linux community. I prefer to avoid using it for a number of reasons I won’t go into here. Although I use Gentoo and Funtoo on my desktop and laptop respectively, I wanted a binary distribution for this router.

I decided to take a chance and try Void Linux. With its first release in 2008, Void Linux is a relatively new, minimalistic distribution. The documentation and installation were aimed to an audience that’s already familiar with Linux. Even considering that, it was dead simple. The runit init system is quite different, but still well documented. All the packages I’d need for a router, such as iptables, openvpn, hostapd and others, were all available in the default package tree. I had Void Linux up and running as a router in just a couple of hours.

Conclusions

The build I put together was a little overkill and a substantially good router could be built for less by using less RAM, smaller/cheaper storage and an ITX board with a built-in processor. An older Core2 system with gigabit Ethernet would be just as powerful as a router.

The large advantage of using an Intel based solution, over an ARM solution, was the choice in operating systems. Any standard x86/64 Linux distribution has hardware support for most major components, where as most ARM distributions need to be customized for specific boards. Although there’s been some work done to bring better standards to ARM board with things such as Device Trees, the landscape is still a mess and ARM fragmentation is still a major issue.

Overall the router has been stable, both over wired and Wi-Fi connections. Void Linux has been easy to work with and the hardware way overkill for a router. A system like this would also work well as as a media center PC or a low powered gaming system. What is truly amazing is the Thin-ITX form factor, which is able to cram an incredible amount of standard x86/64 hardware in a very small amount of space.

Router viewed from the top with case open
  1. Jetway NF9HG-2930 + Silverstone PT13 Slim ITX. 16 June 2015. Wiretap. PF Sense Forums. Retrieved 9 November 2016. 

  2. Create UEFI boot USB - Alpine Linux. Retrieved 9 November 2016. Alpine Linux Wiki. Archived Version 

  3. Installing on GPT LVM - Alpine Linux. Retrieved 9 November 2016. Alpine Linux Wiki. Archived Version 

  4. Feature #3819: A efibootmgr package would be useful. 28 January 2015. Alpine Linux Bug Tracker. Retrieved 9 November 2016. 

  5. Feature #5730: Package request: efibootmgr. 17 June 2016. Alpine Linux Bug Tracker. Retrieved 9 November 2016.