After ongoing issues maintaining a reliable Internet connection at home I
decided to add a custom built router to the network that would be in charge of
assigning IP addresses and sharing our Internet connection with the rest of the
network.  I wanted something with at least two Ethernet ports so that all
Internet traffic would flow through the device and allow bandwidth hogs to be
identified at times when the connection appeared flooded.

After a bunch of research into appropriate hardware and software I
decided on a [PC Engines ALIX][alix] single board computer (alix2d13). The
ALIX is a small board about the size of a CD case with the following
features:

* 500Mhz AMD Geode (x86 compatible) CPU
* 256Mb RAM
* 2 × USB ports
* 3 × 10/100 Ethernet ports
* Mini-PCI socket (for WiFi if desired)
* RS-232 serial port
* CompactFlash socket

I also ordered one of [PC Engines cases][case] (case1s2u) to go with it.

[alix]: http://www.pcengines.ch/alix2d13.htm
[case]: http://www.pcengines.ch/case1d2u.htm

For the software I settled on [OpenWRT][openwrt]. I chose it for a number of
reasons:

* Good support for ALIX boards.
* Designed to run from Flash and read-only file systems.
* Great binary package manager that allows additional software to be
  installed.
* Lightweight [Lua] based Web UI available ([LuCI][luci]).

[openwrt]: https://openwrt.org/
[luci]: http://luci.subsignal.org/
[Lua]: http://www.lua.org/

After learning to use the excellent OpenWRT build system I was able to
build a custom CompactFlash image for the board to run. I also created a
package for my [weather logging software][weather-software] so that the
ALIX can do all my [weather station][weather] logging.

[weather]: /personal/2010/09/weather-station/
[weather-software]: /technical/2010/09/weather-station-software/

I moved many of services that my ADSL modem and AirPort base station were
performing to the box and it's proven extremely reliable. This includes
maintaining the PPPoE connection to my ISP. I'd certainly recommend a set up
like this to anyone who is looking for a small, dedicated home router.

If you don't like the prospect of building your own custom OS image I'd
also highly recommend <tt>[m0n0wall]</tt>, which is a [FreeBSD] derived
router system. I ran this on the ALIX initially and it was very easy
to get up an running (write image to CF card, boot from card - default
settings worked fine but can be changed via a web UI) and very reliable.

[m0n0wall]: http://m0n0.ch/wall/
[FreeBSD]: http://www.freebsd.org/

<figure>
  <img src="/images/2012/01/_MG_0562.jpg" width="600" height="258" alt="Front view" />
  <figcaption>Front with three LEDs. The behaviour of the LEDs can
  be customised in OpenWRT. I have the left one indicating power and
  the middle one indicating activity on the WAN port. The other one is
  currently unused.</figcaption>
</figure>

<figure>
  <img src="/images/2012/01/_MG_0569.jpg" width="600" height="600" alt="Top view with CD for size comparison" />
  <figcaption>Top of case, showing size in comparison to a CD case.</figcaption>
</figure>

<figure>
  <img src="/images/2012/01/_MG_0567.jpg" width="600" height="600" alt="alix2d13 board" />
  <figcaption>The ALIX board itself with the following connected: WAN
  and LAN Ethernet, 8Gb [MosKeyto USB flash drive][moskeyto],
  weather station USB cable and 32Mb CF card that the system boots from.</figcaption>
</figure>

[moskeyto]: http://www.lacie.com/au/products/product.htm?id=10425