NetBird Self-Hosted on Proxmox LXC: The Tailscale Alternative That Actually Gives You Full Control (2026)
Self-Hosting

NetBird Self-Hosted on Proxmox LXC: The Tailscale Alternative That Actually Gives You Full Control (2026)

Ricardo Gil
June 8, 2026
7 min read
#NetBird #Proxmox #Self-Hosting #WireGuard #Home Lab

I've been running Tailscale for two years across my Proxmox cluster, a couple of cloud VMs, and my laptop. It's genuinely good software β€” effortless peer-to-peer connectivity, solid ACLs, the Funnel feature. But the control plane lives in Tailscale's cloud, and after digging into NetBird earlier this year, I can't unsee that gap. NetBird gives you the same WireGuard-based mesh VPN experience with a self-hosted control plane you actually own. Here's how to run it on Proxmox LXC.

What NetBird Is and Why It's Different from Tailscale and Headscale

NetBird is an open-source mesh VPN platform built on WireGuard. Unlike Tailscale, both the client and the control server are fully self-hostable. Unlike Headscale (Tailscale's community control plane replacement), NetBird ships its own management server, signal server, TURN relay, and dashboard β€” all in one Docker Compose stack β€” so you're not patching together community forks.

Key differences that matter in 2026:

vs Tailscale: Tailscale's control plane is proprietary and cloud-only. You get great UX but your network topology, ACLs, and device metadata live on Tailscale's servers. NetBird self-hosted means zero external dependencies β€” nothing leaves your network unless you want it to.

vs Headscale: Headscale is a community reimplementation of the Tailscale coordination server. It works, but it's always playing catch-up with upstream Tailscale features and doesn't ship its own relay or signal server. NetBird is a complete, independently-developed stack.

vs raw WireGuard: NetBird handles the hard parts β€” key distribution, NAT traversal, peer discovery, ACLs β€” that you'd build yourself on top of raw WireGuard. You keep WireGuard's performance without the manual key management headache.

As of NetBird v0.72 (June 2026), the platform also ships a built-in reverse proxy, putting it directly in competition with Tailscale Funnel for exposing internal services.

Prerequisites

  • Proxmox VE 8.x or later
  • A domain pointing to your Proxmox host (or a Cloudflare tunnel in front) β€” NetBird management API needs HTTPS with a valid cert for the mobile clients to trust it
  • A server or LXC with Docker and Docker Compose (the management plane runs as containers)
  • Ports open on your NetBird server: 443/tcp (management API + dashboard), 33073/tcp (signal server), 3478/udp and 49152-65535/udp (TURN relay)
  • Step 1: Create the LXC Container

    In the Proxmox shell, use the community script for a one-liner install:

    bash
    bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/netbird.sh)"

    The script creates an Ubuntu 22.04 LXC, installs Docker, and drops a docker-compose.yml in /opt/netbird. If you prefer manual control, create the LXC yourself β€” use Ubuntu 22.04, 2 vCPUs, 2GB RAM, 8GB disk.

    Critical: TUN device for unprivileged containers. NetBird's WireGuard kernel module needs /dev/net/tun. In your Proxmox host shell, add this to /etc/pve/lxc/.conf:

    conf
    lxc.cgroup2.devices.allow: c 10:200 rwm
    lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

    Then restart the container:

    bash
    pct restart <CTID>

    Verify inside the container:

    bash
    ls -la /dev/net/tun
    

    Should show: crw-rw-rw- 1 root root 10, 200 ...

    Step 2: Configure the Self-Hosted Management Stack

    Inside the LXC, run the NetBird setup script which generates a complete docker-compose.yml with Traefik, Let's Encrypt, the management API, signal server, and TURN relay:

    bash
    cd /opt/netbird
    export NETBIRD_DOMAIN="netbird.yourdomain.com"
    export NETBIRD_LETSENCRYPT_EMAIL="you@yourdomain.com"

    curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/setup.sh | bash

    This generates a setup.env and a fully configured docker-compose.yml. Review setup.env before continuing β€” the defaults are production-ready but you'll want to set NETBIRD_RELAY_AUTH_SECRET to something strong.

    Start the stack:

    bash
    docker compose up -d

    Check that all services came up:

    bash
    docker compose ps
    

    You should see: dashboard, management, signal, relay (coturn), traefik β€” all Up

    The dashboard will be live at https://netbird.yourdomain.com. On first load, you'll create the first admin user.

    Step 3: Install the NetBird Client on Each Peer

    On any Linux machine (including other Proxmox LXCs or VMs):

    bash
    curl -fsSL https://pkgs.netbird.io/install.sh | sh

    Then connect to your self-hosted instance instead of the public one:

    bash
    netbird up   --management-url https://netbird.yourdomain.com:443   --admin-url https://netbird.yourdomain.com:443

    You'll get a browser link to authenticate. Log in with your dashboard credentials and the device appears in the Peers list. Repeat for every machine you want in the mesh.

    On macOS or Windows, download the desktop client from netbird.io/download β€” in Settings, point it to your management URL before logging in. On iOS and Android, same pattern via the mobile app.

    Step 4: Configure ACLs (Network Policies)

    This is where NetBird beats Headscale hard. The dashboard has a full ACL editor β€” create groups, assign peers to groups, and write allow/deny policies between groups. Example policy to let your laptop reach only the home lab management VLAN:

    json
    {
      "rules": [
        {
          "name": "laptop-to-homelab",
          "action": "accept",
          "sources": ["group:laptops"],
          "destinations": ["group:homelab"],
          "protocol": "all"
        }
      ]
    }

    You can also define Routes β€” tell NetBird to advertise a subnet (e.g., 192.168.0.0/24) through a specific peer that acts as a router. This lets all your NetBird peers reach your home LAN without installing NetBird on every device.

    To enable subnet routing, mark a peer as a router in the dashboard, then on that peer:

    bash
    netbird routes add 192.168.0.0/24 --peer-id <PEER_ID>

    Step 5: Verify Connectivity and DNS

    NetBird registers each peer's hostname in its internal DNS resolver. Test from any connected peer:

    bash
    ping proxmox.netbird.cloud   # or whatever your domain suffix is
    netbird status

    The netbird status output shows all peers, their IPs (from the 100.64.x.x CGNAT range by default), and latency. Direct connections show P2P, relayed ones show relayed β€” P2P is almost always used once NAT traversal succeeds.

    For the management UI specifically, install the NetBird browser extension or access the dashboard directly from a peer on the mesh.

    Performance: NetBird vs Tailscale in Practice

    On my setup (Proxmox host on a Beelink GTi13 Ultra, laptop on WiFi 6, TURN relay on a $6/month Hetzner VPS), I see:

  • Direct P2P (same network or clean NAT): ~0.3ms latency, throughput near raw WireGuard (~600-900 Mbps)
  • Relayed (double-CGNAT or strict firewall): ~15–30ms, throughput ~400–600 Mbps depending on relay location
  • Compared to Tailscale on the same hardware: essentially identical on direct connections. Tailscale wins slightly on relay speed because their DERP relay infrastructure is globally distributed β€” your single self-hosted TURN is one location. If you have users across continents, run multiple TURN instances in different regions.

    Hardware You'll Want on Each Node

    A few products I use across this setup:

  • Beelink GTi13 Ultra Mini PC β€” runs the Proxmox host and NetBird management plane. Whisper-quiet, Intel i9-13900H, handles everything.
  • TP-Link TL-SG108E 8-Port Managed Switch β€” VLAN tagging for isolating the LAN segments NetBird routes advertise.
  • Raspberry Pi 5 (8GB) β€” lightweight always-on NetBird peer/router for the home network when the main server is off.
  • SanDisk Extreme Pro 128GB microSD β€” for the Pi running as a subnet router.
  • Crucial P3 Plus 500GB NVMe β€” fast boot drive for the Proxmox host.
  • Ubiquiti UniFi U6 Pro Access Point β€” WiFi 6 AP for reliable wireless peers.
  • APC Back-UPS 600VA UPS β€” keeps the Proxmox host and switch alive during brief power cuts; nothing worse than losing VPN access because the power flickered.
  • Anker USB-C 10Gbps Hub β€” handy for adding NVMe or extra NICs to the mini PC via Thunderbolt.
  • Caveats and Gotchas

    Cert renewal: Traefik handles Let's Encrypt renewal automatically, but your NetBird domain needs a valid cert or mobile clients will reject the management API. Make sure port 443 is reachable from the internet, or use Cloudflare DNS challenge instead of HTTP challenge.

    Upgrades: docker compose pull && docker compose up -d in /opt/netbird. NetBird releases fairly frequently (v0.72 in June 2026) β€” subscribe to their GitHub releases to stay current.

    Backup: The only stateful piece is the management database at /var/lib/docker/volumes/netbird_management_data. Back it up with your regular Proxmox backup job or a cron that copies it to your NAS.

    Mobile clients and custom management URL: If you're setting up the iOS or Android app, enter the management URL before logging in β€” there's a gear icon on the login screen. Easy to miss.

    Self-signed certs won't work for mobile: The iOS and Android NetBird clients validate TLS strictly. Use a real domain with Let's Encrypt or Cloudflare-proxied certs.

    Should You Switch from Tailscale or Headscale?

    If you're already on Headscale, the migration case for NetBird is strong β€” you get a native dashboard, proper TURN relay, and ACL management that doesn't require editing a config file. The operational overhead is similar.

    If you're on Tailscale and have a larger setup (multiple users, SSO, audit logs), Tailscale's polish is still ahead. NetBird's dashboard is good but Tailscale's UX remains the gold standard. That said, for a solo home lab operator who just wants their machines connected without cloud dependency, NetBird self-hosted is the better long-term choice.

    The real win is data sovereignty β€” your network topology, ACLs, and device keys never leave your infrastructure. For anything touching internal infrastructure or client work, that's worth the extra ten minutes of setup.

    ---

    Disclosure: This post contains affiliate links. If you purchase through these links, I may earn a small commission at no extra cost to you.

    πŸ“¬Weekly Newsletter

    Get the best home lab & AI content

    No spam. One email per week. Unsubscribe anytime.

    Share this article