Packetize Me No Packet Left Behind

The Humble Homelab

It’s a common joke that when something is prefixed with “humble”, it often isn’t. My homelab isn’t a rack full of shiny new equipment, but it isn’t a couple of Raspberry Pis either. My lab lives in a cabinet nestled in to a corner of my home office, primarily to keep it from being used as a cat warmer.

What’s in my rack?

An Ubiquiti router and switch provide network connectivity. Power in the rack is distributed by an APC PDU, backed by an APC UPS.

The heart of the lab is a MiniITX tower (“virt1”) living on a shelf in the rack, rather than in a proper rackmount chassis. It was available at the time, and works pretty well. One day I’d like to move this into another chassis. virt1 has a Xeon D-1540 CPU, 64GB of memory, a ~500GB M2 SSD, and 8 4TB HDDs.

virt1 runs ESXi; I’m interested in moving this to something else, but like many small organizations my production environment and lab environment are not cleanly separated. Yes, I feel shame for this. But you didn’t really think I was going to dedicate 32TB of storage to a lab, did you?


Now that you know the truth, let’s call virt1 what it is: homeprod. It will host lab VMs too, but this post is about the “production” systems that I use at home. At home, we test in prod all the time. I’m going to list it all, because I want to be a

The homeprod network consists of:

  • virt1: VM host for the rest of homeprod, running ESXi.
  • code: CentOS VM dedicated to running Phabricator. I use this to host my git repositories, some of which are replicated to Github. It also keeps local copies of some Github repositories. The wiki (“phriction”) and project workboards are lightly used; I want to like them, but find the wiki to be lacking and my own habits to be lacking with regard to the workboards.
  • trun: CentOS VM acting as a Drydock host, used by phabricator’s CI system (Harbormaster) to build various things (like this website).
  • storage: FreeNAS VM. All 8 of the previously mentioend HDDs are connected to a Host Bus Adapter (HBA), which is passed through directly to this VM, and added to a raidz3 pool. Primarily used to provide local network shares for our photos, digitized copies of CDs that we own, etc. This system has become more than it was originally intended to, and is something I intend to replace. I’m a huge fan of ZFS, but I’m becoming less a fan of FreeNAS with time; I will probably replace this with a simple FreeBSD or Linux VM, still running ZFS and without changes to the pool.
  • dns1: CentOS VM. DNS server for my local domain, recurses to root servers. Handed out via DHCP to systems in homeprod.
  • dns2: Ubuntu VM. DNS server for my local domain, recurses to root servers. Handed out via DHCP to systems in homeprod.
  • huginn: Ubuntu VM. Runs Huginn, performing basic recurring tasks like compiling an email equivalent to a made-just-for-me daily newspaper.
  • LibreNMS: CentOS VM. Runs LibreNMS, mostly used to track CPU, memory, disk and power usage by homeprod.
  • pihole: CentOS VM. Runs Pi-hole and recurses to dns1 and dns2. This is the DNS server handed out by DHCP to clients on my network, except for those running in homeprod itself.
  • salt: CentOS VM. Runs a Salt master, configuring (most of) the other VMs.
  • bookmarks: CentOS VM. Runs a bookmark manager called Shiori.
  • unifictl: Ubuntu VM. Runs the UniFi controller software required to manage the wireless access points in our house.
  • logger: Runs a graylog virtual appliance, handling logs from everything in the house.

Storage runs a few jails:

  • plex: Runs Plex, allowing us to stream the digital copies I’ve made of the music and movies that we own. I often enjoy the act of inserting physical media into a player, but sometimes convenience can’t be beat.
  • backup: Has read-only access to a number of datasets that I want to back up. Runs borg, sends backups to
  • syncthing: Runs syncthing, a file synchronization program. This acts as a hub for all of the files that I want to sync between my various devices. This runs a bit contrary to syncthing’s usual mode of operation, but results in a dropbox-like experience which is what I wanted.


OK, homeprod was a mess - what does the lab look like? Right now, non-existent. I’m starting fresh.

Previous uses of the lab:

  • Exploring the use of FreeIPA
  • Trying out Salt, before it was put into use in homeprod.
  • Network monitoring using Suricata
  • Network monitoring using BroZeek