The Ultimate Portable Infrastructure


Contents

Introduction

I’ve always liked clean separation when it comes to doing tasks on my PC. Not because of privacy, risk mitigation or anything like that: I just hate my PC feeling messy and bloated. For the longest time I’ve solved this by just using VMWare Workstation and having separate local virtual machines for work, research and other projects.

I recently went self employed (building Combat Theater, the worlds best malware technique emulator for blue teams?!) and I’ve become very mobile. Since my big desktop isn’t portable I of course went out and bought a Macbook Pro due to its exceptional battery life, power and pretty display… Slight problem:

x86 emulation still kinda sucks on ARM and all I really do is x86 stuff

So how do I keep my nicely organized x86 VMs accessible and usable across my desktop and laptop? I ran a Twitter poll to weigh the options. It was either Azure cloud VMs or building a mini home server.

The consensus was clear! Thus I set out to build my mini server with the following requirements:

Now, it’s been about a year after building it and I can happily report that this was the best £850 I think I’ve ever spent. If you’ve ever even slightly considered a home server but live in a small apartment or wanted something portable, this blog post is for you!

The Architecture

The traditional way of doing a home server is rather simple:

Now if you don’t need portability, that’s it. But if I bought a mini PC and did this, I can just throw it in a backpack and move my machine around right?

Unfortunately not. Since Proxmox is headless it would be a massive pain getting your mini pc setup with (for example) hotel WIFI. You would need to plug it into a hotel TV with an HDMI cable, bring a mini keyboard with you, etc.

What I wanted was one power cable into the wall, wait a minute or two, and everything just works. Sounds impossible but actually there’s just one small thing that enables it all and opens up a huge (and awesome) feature set for convenience and privacy:

BYOR (Bring Your Own Router)

That’s right, if we get a high end travel router, strap it to the mini server and then have a tiny ethernet and USB-C power delivery cable, we can essentially have our own network come with us anywhere we go. It works like this:

You don’t even need an internet connection to access your VMs, it’s all a local WAN!

Not only does this work very well but you also get a huge array of features:

The Hardware Build

Warning

Clicking the links to the RAM and SSD will cause serious depression! I bought all of these items before prices skyrocketed, I paid £230 for the RAM and £190 for the SSD… Check the prices now at your own risk!

Below are the details for my build but in case this mini pc is no longer available or there are better options just make sure that the PC supports USB-C power delivery so it can power the router itself even if you turn off the machine power will still flow through to the router in case you want the PC off but still want the network features from your router.

The Mini PC

For the mini PC I wanted something small but powerful. Normally this comes at the cost of noisy fans that ramp up under the smallest amount of workload however after reading tons this seemed to not be noisy and still be powerful:

Minisforum UM890 Pro

I went with the barebones kit so I needed to get my RAM and storage seperate:

RAM

Crucial DDR5 RAM 96GB Kit (2x48GB) 5600MHz

Storage

Crucial P310 4TB SSD M.2 2280 NVMe PCIe Gen4

The Router

Not much research was required, the most powerful and feature rich travel router is this one by GLiNET:

Slate 7 (GL-BE3600) Portable Wi-Fi 7 Router

Other Bits

Setup

I did this a year ago so this might be a little rough and frankly you can just figure it out yourself but there are some small weird bits (like getting Tailscale to use local router DNS properly) so give this section a quick skim!

Setting up the server and router

This blog isn’t really a hand hold walk through but you’re smart and will figure it out. The TLDR is:

Enable the cool router features

The Slate7 router I recommended above has some great features you can enable really easily:

How to do networking for VMs

It’s pretty straightforward: When you create a Proxmox VM and set the Bridge to vmbr0 it will act just like when you set NAT in VMWare so the VM will act as a completely separate machine. Since your mini PC is ethernet connected directly to the router no config is required. The VM will just appear in the router’s client section:

For anything you want to apply a hostname for just toggle the Reserve IP option for the client so DHCP always assigns the same IP. You can then go to Network -> DNS -> Edit Hosts and set hostnames:

Super easy and don’t forget, since this is set on our router these hostnames will work no matter where you take your server or what network you connect it to!

How to get this DNS working in Tailscale

You generally have to fiddle around a little bit to get Tailscale working nice and clean but something I ran into was that Tailscale was not using the local hosts file on the router as a DNS source.

So when I was connected directly to the router I could ping http://proxmox.lan but if I disconnected and connected over Tailscale I could not ping http://proxmox.lan and I would have to use the raw IP address.

To fix this you can SSH into the router and edit the dnsmasq.conf to have option localservice '1'. This will allow Tailscale to use the local hosts file!

Extra things to do

GPU Passthrough

This isn’t a tutorial blog so if you wanna do it you can ask GPT to help you but the specific mini PC I chose has an AMD Radeon 780M dedicated GPU which you can pass through to a VM. Instead of passing it to a Windows machine I passed it to the Proxmox container that runs my Jellyfin media stack. This allows me to encode and transcode video formats like AV1 on devices that can’t natively play it!

Golden Images

Once you install your first Windows VM using the Tiny11 ISO, make it really nice. Install a proper browser and some basic general utilities. Set generic user creds (mine is User/User) then enable and setup RDP. Once that’s done shut down the machine → Right click and make it an “image”. Now you can instantly spin copies if you want quick throw away test machines or if you want to give your friends access to machines.

Auto start

Proxmox is super powerful, you can set VMs to auto start for you after the machine boots. I personally have mine auto launch my main developer VM and my Jellyfin media stack. If I want anything else I just log into Proxmox and manually boot.

Conclusion

Having a Proxmox home server is awesome, making it portable takes it to a whole new level. Even if you don’t need to physically move it, if you have flat mates or live in shared accommodation, having your own little private enclave brings a reassurance of privacy. If you can’t stomach the absurd component pricing right now I certainly wouldn’t blame you but if you happen to scout some used laptop ram and salvage an old NVME SSD I can’t recommend this form factor enough. Join me in the portable infra club!!

As per usual, any questions feel free to DM me on twitter!