Homelab
A while back I had a QNAP, in other words a NAS (Network Attached Storage), a mini home server for storing files and reaching them from any device on your network (or from outside it, if you set that up). Basically, it's like having your own Google Drive/Dropbox... I used it for music, movies, that sort of thing.
All good, until one day I lost the power supply. No big deal, I thought, I'll just buy a compatible replacement… (which turned out not to be compatible…) I plug it in and right away: a flash, the smell of burnt cable, and my beloved QNAP shipped off to Valhallelectronics. RIP, soldier. On top of that, it fried a few chips on one of the drives (it had 2 of 4TB in there), so instead of crying about it I had to fix it, and after a while of mulling it over I told myself: let's do this better.
I grabbed an old 2015 HP laptop, installed Debian 12 and XFCE (a pretty lightweight desktop environment) on it, and got to work: Nextcloud for my own file cloud, Navidrome to build a private "Spoti" for streaming all my music, and Tailscale to reach everything from wherever I am, without wrestling with crazy VPNs or open ports on the router. Here I get into all the details.
That worked out well, so well that the project kept evolving, that damn silicon hijacked my neural network and kept it mutating. Today the setup is made up of a few more machines, each with its own name:
Chapter 1: Zakarias
The HP did its job, but a laptop moonlighting as a server is pretty overmotherfuckinghead. So when I discovered the ZimaBlade, I decided to "retire" it.
The ZimaBlade is an SBC (Single Board Computer), a full computer on a single board, like a Raspberry Pi, but with one particular twist: its processor architecture is x86, the same as a regular PC, and not ARM like the Raspberry. In practice that means you can install almost any program built for a PC without fighting compatibility issues. Mine runs a Celeron N3350, which won't move mountains but is more than enough for serving my own files (nothing too heavy). Anyway, I rechristened the ZimaBlade as Zakarias. Why? Doesn't matter, no need to know that.
It came stock with Debian Bookworm plus a visual web interface (CasaOS) that IceWhale (the company behind this machine) stopped maintaining, a genuinely useful tool that makes visually managing containers a lot easier, for hosting a huge stack of programs and services running efficiently.
Now! Here's the bad part (pretty bad, in my opinion): it kept connecting every so often to a server over at Alibaba, with a persistence that was, at the very least, curious (the attempts ended up blocked on my network, more on that in Chapter 2). What was inside those requests? No idea: could be something as boring as checking for updates or usage telemetry, or it could be something less admissible. I haven't checked, that would mean capturing the traffic and picking it apart, but I'm too late for that now: it would have been a great exercise, but like I said, CasaOS isn't maintained anymore, and I'd rather not run unpatched software on my network. So I won't sell you any certainties. What I do know for a fact: persistent connections, undocumented, unannounced, with no switch to turn them off. And that, whatever it was carrying, already strikes me as questionable for something marketed as a digital-liberation tool.
Inside the box came a card, thanking you for the purchase and pitching the ZimaBlade as the server for those who dare to be "the ultimate outsiders of this rich, post-capitalist supra-activist era." And get this, the card wraps up with a quote from Albert Camus about becoming so free that your very existence becomes an act of rebellion. Anyway, lots of Camus and lots of questionable logs. I'll leave it there… By the way, the successor is called ZimaOS, and it's no longer a layer you install on top of Debian, but a full operating system. I'll give it a try someday.
That said, I switched operating systems, and after a lot of back and forth I ended up installing Rocky Linux 9. A free clone of Red Hat Enterprise Linux, the distro running a good chunk of the world's enterprise servers, and since I'm knee-deep in the sysadmin world these days, it was good practice to get my hands dirty with SELinux, rpm, dnf, and all that. Then, on top of Rocky, 3 things:
1.Cockpit, a web panel for managing the server from your browser: disks, services, logs, updates. The terminal is still boss, but for a quick check from your phone, say, it's pretty deluxe.
2. Navidrome, but this time in a container, unlike on the old HP where I installed it bare-metal… This time I skipped Nextcloud; for now I just need to get files up there, and rsync (a command for copying and syncing files between machines) handles that, end of story.
And 3. Tailscale, which already showed up in the intro and deserves another bar. It's a VPN (Virtual Private Network, a private network between your devices) but without the usual headache that comes with one, meaning no opening ports or hand-editing config files. You install the app on each device, log in, and they all see each other as if they were in the same room, wherever you are. Thanks to that I can hit play on my music from the car, or check in on Zakarias from another country, all encrypted and without exposing anything to the internet.
Chapter 2: Federico and Berta
A router is a computer. With its own processor, memory, operating system. The thing is, the router your ISP hands you ships with factory firmware that's usually a "black box": the manufacturer updates it whenever it feels like it, if it feels like it at all, until it stops feeling like it altogether, and the router turns into a hole in your network.
OpenWrt is a full GNU/Linux system built for routers. Its own package manager (opkg), its services, a configurable firewall, SSH... GL.iNet routers ship with OpenWrt out of the box.
Federico is a GL.iNet Flint 2, and it's the home router. It hands out addresses, routes traffic, holds up the firewall. And it runs AdGuard Home, a filtering DNS server: it intercepts the question "what IP does this domain resolve to?", and if the domain is on an ads-or-tracking blocklist (you can configure those lists easily from its admin panel), it answers that the domain doesn't exist, and the connection never gets made.
I already wrote on the Hackeed blog about how to set up Pi-hole on an old Raspberry Pi. Pi-hole can also be installed straight on the router, no problem. The difference is that AdGuard Home installs from Federico's own admin panel in a couple of clicks, and overall I find the experience more polished than with Pi-hole. Moving the "filter" over to Federico meant taking one machine out of the equation.
On the other hand, Berta is a GL.iNet Beryl AX, the travel router. It fits in the palm of your hand, plugs in anywhere, and spins up its own network wherever it is. I usually run it off my phone's connection, but if you'd rather use the hotel's, the airport's, or the library's, that's on you.
Between Federico and Berta there's a WireGuard tunnel; that's a VPN protocol. The difference with Tailscale comes down to layers: Tailscale is a service built on top of WireGuard that handles the hard parts for you (finding devices, managing keys, punching through NAT) in exchange for depending on its infrastructure. Plain WireGuard means you're the one generating keys and writing the config by hand. A bit more work, but zero middlemen.
With that tunnel, whenever I switch Berta on, wherever I am, all the traffic from anything connected to it goes out through my house. If I'm in another country, say, my connection points straight back to my living room.
Chapter 3: Alba
Alba is a Raspberry Pi 4 8GB in a DeskPi Pro V3 case, running Debian with no desktop environment. It started out as an observability node, with Prometheus, Grafana, and Loki keeping watch over the rest of the homelab, hence the name: Alba, Latin for dawn, the thing that clears up before the rest of the day does… I dunno... don't grill me about it. XD.
Over time Alba stopped just watching and started serving too. These days, on top of keeping an eye on the homelab, it also hosts a site out on the internet: meowrawr.org, a wiki about wild cats. Nginx takes the request, and a Cloudflare tunnel gets it there without needing to open a single port on Federico. I get into exactly how that's set up here.
Lastly, I installed Matomo, a sort of open-source Google Analytics: if you've got a server (like I do), you can run it for free, and sure, if you ever want to extend its capabilities or use their hosted infrastructure, that comes with a cost. Here you're not the product. The tool itself is brilliant, and I use it partly for security (relax, no shady cookies involved) across my own sites: Damalga, meaning this very site, plus Alcarcia, Polymorphism, Meowrawr, and of course Hackeed, which on top of letting me spot suspicious connections, lets me see which products get searched the most. Right now the ClockworkPi uConsole is the most popular one. Which also happens to be one of the two stars of the Epilogue.
Epilogue: Hugo and Martin
Hugo is a uConsole from ClockworkPi. No mods for now, straight out of the box, aside from a Sway config (the window manager) I've put a fair bit of care into. You can grab the dotfiles here. It's the pocket machine for tinkering, with no bigger ambition than learning the noble art of pentesting bit by bit, so I installed Kali Linux on it and kept it lean, so I don't overwhelm myself with tools I'm not going to touch for now.
Martin is more or less the same idea in a different body: a Raspberry Pi 4 4GB instead of a Compute Module 4 (which is Hugo's brain), sitting on a 52Pi battery carrier, with a 4G LTE HAT from also 52Pi stacked on top. The modem I fitted is an Arduino in Mini PCIe format (any compatible one works here), linked to the Pi with a very short USB cable, plus its antenna, a SIM card, and on top of all that, an Alfa Network AWUS036ACS, the smallest go-to card for wifi auditing.
Martin also lends its name to a bit of wordplay: Hackeed Martin, after Lockheed Martin, the company behind the F-117 Nighthawk. "Invisible" to radar, slipping in where it's least expected. Scale aside, obviously, between a stealth jet and a Raspberry Pi, the idea points at the same thing: the intruder that shouldn't be there. Can you picture Martin strapped to a drone? That could get dangerous in the wrong hands, and no, buddy, we don't want that. Deconstruct to construct, never to destruct, that's the spirit!
To reach Martin remotely, I go straight to WireGuard. I could also use Tailscale, though for this one Headscale feels more consistent, or some other self-hostable VPN service, for coordinating several nodes without depending on servers or infrastructure that isn't mine. Though let's not get carried away, the real point of these last two machines is understanding how a network gets broken into, so I can audit it and learn to lock it down better. Anyway... From a fried QNAP to a handful of machines with names of their own, all of them under my control… I hope this doesn't get too out of hand, though honestly I wouldn't mind if it went completely off the rails. Whatever's meant to be.
A virtual hug.