TL;DR: I wanted my JetKVM to always be reachable without relying on JetKVM Cloud. Since my homelab runs on Netbird already, I figured, why not install Netbird directly on the JetKVM itself? It wasn’t straightforward (no systemd, no certs, no scp, missing tun module, etc.), but with some persistence and tweaks I got it working. This post walks through the exact process and all the gotchas so you don’t waste as much time as I did.
Why Netbird on a JetKVM?
I picked up a JetKVM for my homelab so I can:
- Power-cycle my server remotely (after a power cut, for example).
- Mess with BIOS settings without dragging out a monitor/keyboard.
JetKVM comes with its own cloud service for remote access, but I’m trying to move toward self-hosted, open-source solutions where I can. Since my home network already runs on Netbird (a WireGuard overlay that you can self-host), I thought: why not make the JetKVM a Netbird node?
That way, even if my main homelab server goes down, I’ll still have a backdoor into my network, because the JetKVM is always on.
I did some Googling, hoping someone else had written a guide… nope. Closest thing was Brandon Tuttle’s Tailscale on JetKVM guide, which gave me a starting point. From there, it was trial, error, and a lot of poking around.
Getting Started
First things first: enable Developer Mode in JetKVM and SSH into it:
ssh root@<JETKVM_IP>
uname -aLike Brandon mentioned in his Tailscale guide, the JetKVM runs BusyBox Linux. It’s very minimal: no certs, no HTTPS support in wget, no systemd, and the init system is old-school /etc/init.d/.
So we’ve got some work to do.
Installing the Netbird Binary
At first, I tried copying the binary over with scp. Turns out JetKVM’s Dropbear SSH server doesn’t support scp. Nice.
Next attempt: wget. The built-in wget works, but only over plain HTTP (no SSL). So here’s the workaround:
cd /userdata
mkdir netbird
cd netbird
wget -O netbird.tar.gz http://github.com/netbirdio/netbird/releases/download/v0.54.2/netbird_0.54.2_linux_armv6.tar.gz
tar xzf netbird.tar.gz
rm netbird.tar.gz
chown root:root netbird
chmod +x netbirdPro tip: always install stuff into
/userdata, because anything outside that will get wiped on reboot.
Debugging Connection Issues
At this point, I thought: easy, just bring it up!
./netbird up --foreground-mode --setup-key <KEY>Nope. Immediate TLS errors. Why? Because JetKVM ships without CA certificates. So Netbird couldn’t talk to its control plane.
Grabbed a cert bundle and dropped it in place:
mkdir -p /etc/ssl/certs
wget -O /etc/ssl/certs/ca-certificates.crt https://curl.se/ca/cacert.pemTried again… still failed. Different problem this time:
no tun interface. Right, BusyBox doesn’t load it by default. Fix:
lsmod | grep tun
modprobe tun
lsmod | grep tunNow it connected. Nice.
Making It Persistent
Running netbird up manually is fine for testing, but I needed it to survive reboots. Netbird provides a service installer:
./netbird service installBut this failed with:
install service: symlink /etc/init.d/netbird /etc/rc.d/S50netbird: no such file or directoryTurns out JetKVM doesn’t use /etc/rc.d/. It runs scripts directly from /etc/init.d/. So:
mv /etc/init.d/netbird /etc/init.d/S50netbirdCouple of extra tweaks:
Logs default to
/var/log, which is not persistent -> change it:BASHsed -i 's|/var/log|/userdata|g' /etc/init.d/S50netbirdAuto-load the tun module at boot:
BASHsed -i '/echo "Starting \$name"/a\ modprobe tun ' /etc/init.d/S50netbird
Now you can start Netbird with:
./netbird service start -s S50netbird
./netbird statusAnd after a reboot:
ssh root@<JETKVM_IP>
cd /userdata/netbird
./netbird statusIt works!
Caveats & Gotchas
- Firmware updates: If you update your JetKVM firmware, you’ll probably need to reinstall the Netbird service. Keep your notes handy.
- DNS resolution: When I tried using the JetKVM Netbird node as an exit node, DNS broke until I added a DNS server to Netbird. After that, it worked fine.
- CPU limits: Like with Tailscale, the JetKVM’s tiny ARM chip isn’t built for high throughput. Don’t expect gigabit speeds, but it’s enough for KVM access.
Wrapping Up
So yeah, that’s how I got Netbird running on my JetKVM. It was a mix of:
- Borrowing tricks from the Tailscale guide
- Installing certs
- Hacking around missing system paths
- And making sure logs + tun survive reboots
It’s not the cleanest setup, and I’m sure I made a few rookie Linux mistakes along the way. If you spot something dumb or know a better way, drop a comment, I’d love to refine this so others don’t have to stumble through the same mess.
But the end result? I can now reach my homelab through Netbird even if everything else is down. For me, that’s a win.
Comments