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:

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:

BASH
ssh root@<JETKVM_IP>
uname -a
Click to expand and view more

Like 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:

BASH
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 netbird
Click to expand and view more

Pro 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!

BASH
./netbird up --foreground-mode --setup-key <KEY>
Click to expand and view more

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:

BASH
mkdir -p /etc/ssl/certs
wget -O /etc/ssl/certs/ca-certificates.crt https://curl.se/ca/cacert.pem
Click to expand and view more

Tried again… still failed. Different problem this time: no tun interface. Right, BusyBox doesn’t load it by default. Fix:

BASH
lsmod | grep tun
modprobe tun
lsmod | grep tun
Click to expand and view more

Now 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:

BASH
./netbird service install
Click to expand and view more

But this failed with:

PLAINTEXT
install service: symlink /etc/init.d/netbird /etc/rc.d/S50netbird: no such file or directory
Click to expand and view more

Turns out JetKVM doesn’t use /etc/rc.d/. It runs scripts directly from /etc/init.d/. So:

BASH
mv /etc/init.d/netbird /etc/init.d/S50netbird
Click to expand and view more

Couple of extra tweaks:

  1. Logs default to /var/log, which is not persistent -> change it:

    BASH
    sed -i 's|/var/log|/userdata|g' /etc/init.d/S50netbird
    Click to expand and view more
  2. Auto-load the tun module at boot:

    BASH
    sed -i '/echo "Starting \$name"/a\
                modprobe tun
    ' /etc/init.d/S50netbird
    Click to expand and view more

Now you can start Netbird with:

BASH
./netbird service start -s S50netbird
./netbird status
Click to expand and view more

And after a reboot:

BASH
ssh root@<JETKVM_IP>
cd /userdata/netbird
./netbird status
Click to expand and view more

It works!


Caveats & Gotchas


Wrapping Up

So yeah, that’s how I got Netbird running on my JetKVM. It was a mix of:

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.

Copyright Notice

Author: Laurence Rawlings

Link: http://laurencerawlings.com/posts/installing-netbird-on-a-jetkvm/

License: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

Comments

Start searching

Enter keywords to search articles

↑↓
ESC
⌘K Shortcut