A few months ago we were having a lot of trouble with reliable
internet. The problem was that we had up to three computers and three
iPhones on the network at once, and a 1.5Mbit ADSL connection that was
very easy to saturate if one or more of those devices was uploading or
downloading. Additionally our ADSL router would slow and eventually stop
working after a day or so of BitTorrent traffic flowing through it.
So there were a few problems that needed addressing. I needed a way
to offload the routing from the modem, get some insight into what
was using bandwidth and ideally set up some QoS so that some bandwidth was reserved for higher
priority traffic like HTTP and SSH.
My chosen solution was to drop some birthday money on an [ALIX single
board computer from PC Engines][alix]. I ordered the alix2d13 version
along with a nice silver case for it. Its a neat little board around the
size of two CD cases stacked on top of each other. It has a 500Mhz AMD
Geode (x86 compatible) CPU, 256Mb RAM, USB, 3 × 10/100 Ethernet
ports and an on-board CompactFlash socket.
[alix]: http://www.pcengines.ch/alix2d13.htm
TODO(Add Photos)
Whilst waiting for the board to arrive I checked out some open source
router targetted operating systems such as [pfSense], [m0n0wall] and
[IPFire][ipfire]. I decided to go with m0n0wall as it was based on
a good foundation ([FreeBSD]), happily fit on an 8Mb CF card I had lying
around and had out of the box support for the ALIX boards.
[pfSense]: http://www.pfsense.org/
[m0n0wall]: http://www.pfsense.org/
[ipfire]: http://www.ipfire.org/
[FreeBSD]: http://www.freebsd.org/
m0n0wall was a breeze to get up an running. I basically inserted the CF
card, powered the board up and it was working with separate WAN and LAN
networks, with NAT and firewall between them. It was very easy to add QoS
through the guided traffic shaper configuration as well.
I ran the board like this for a while and it helped with our issues but
did not eliminate them. We still had the problem of unknown network
activity using up all the bandwidth. The next step was to find a compact
OS that allowed additional software to be installed. I considered
[Alpine Linux][alpine], but settled on [OpenWRT][openwrt]. OpenWRT fit
the bill perfectly. It was designed for embedded systems so the base
install was very small, was designed to run from CF, has a great little
package manager for adding an removing software, a large selection of
packages including an optional web UI and an easy to use build system
for building custom images and packages.
[alpine]: http://alpinelinux.org/
[openwrt]: https://openwrt.org/
The recommnded installation method for OpenWRT on ALIX boards was to
build from source so that the ALIX specific configuration and kernel
modules can be selected. It took some time to produce an image that
I was happy with but after that it was a simple matter of writing the
image to a CF card and booting the ALIX board from it.
Out of the box OpenWRT was configured for separate WAN and LAN networks
like m0n0wall. Along with the base system I added the neat Lua based
[LuCI][luci] web UI, support for USB mass storage devices and iftop for
watching traffic on network interfaces.
[iftop]: http://www.ex-parrot.com/pdw/iftop/
[luci]: http://luci.subsignal.org/
The addition of iftop allowed the network traffic to be examined when
our Internet connection appeared to be be flooded. I was able to determine
that that in some cases the problem was Wi-Fi backup to iCloud on our
iPhones.
There was still some instability with the ADSL though. I decided to
swap the modem I was using for another that allowed more control
and turned off everything except the ADSL modem functionality,
delegating all of that to the ALIX board including maintaining the PPPoE connection. Since this change everything has been
running very smoothly.
With OpenWRT's great build and packaging system I was also able to build
a custom package for the weather logging software that communicates with
my [weather station][weather]. With this package installed the ALIX
board now does the logging instead of my Mac Pro, consuming vastly less
power in the process.
[weather]: /personal/2010/09/weather-station/