Both projects answer the same question - how do I run a private mesh network without paying a company to hold the map - and they answer it in almost opposite ways. Choosing between them is not really a performance decision. It is a decision about which client software you are willing to depend on, and which failure you would rather explain to your colleagues.
The one-sentence version
Headscale replaces the Tailscale coordination server with one you run, keeping the official clients and the WireGuard data plane. Nebula replaces everything, with its own protocol, its own binary and a certificate authority you operate yourself.
Where the trust actually lives
This is the difference that outlasts every feature comparison.
In a Headscale network, a machine joins by authenticating to your control server. You own that server, so you own the decision - but the client is software maintained by Tailscale Inc., pointed at your server by overriding the login URL. That arrangement has held for years, and it is not contractual.
In a Nebula network, a machine joins because it holds a certificate signed by your certificate authority. You generate that CA, and it never has to leave the machine you generated it on. Nothing enrols without your signature. The cost is that certificate lifecycle - issuing, distributing, expiring, revoking - becomes your job from day one rather than a thing you grow into.
Neither model is safer in the abstract. One asks you to trust a client vendor's continued tolerance; the other asks you to be competent with a CA.

How each one finds its peers
Nebula uses lighthouses: nodes with a stable, reachable address whose job is to know where everyone is and introduce peers to each other. They are ordinary Nebula nodes with one flag set, they carry very little traffic, and you typically run two on cheap VPS instances.
Headscale plays the coordination role itself, distributing keys and the network map, with DERP relays for traffic that cannot establish a direct path. You can run your own DERP rather than using public ones.
The architectures rhyme. What differs is the operational shape: Nebula's lighthouse is a node in the mesh, Headscale's control plane is a service with a database behind it.
Firewall rules, and where they are enforced
Nebula puts a host firewall in the node's own configuration. Each host declares which inbound connections it accepts, expressed in terms of certificate groups rather than IP addresses. Enforcement is local, which means a compromised control plane cannot silently open a host.
Headscale expresses access control as Tailscale-compatible ACLs, defined centrally and pushed out. One file describes the whole network, which is far easier to audit and reason about - and which puts more weight on that file being right.
Centralised policy is more legible; distributed policy is harder to defeat from one place.
A practical way to choose
| If this is true of your fleet | Lean toward |
|---|---|
| Laptops and phones used by people who should not manage certificates | Headscale |
| Servers, containers and appliances you already configure declaratively | Nebula |
| You want MagicDNS, exit nodes and a familiar login flow | Headscale |
| You want zero dependency on any vendor's client roadmap | Nebula |
| Your instinct is that a compromised control plane must not open hosts | Nebula |
| Your instinct is that one auditable policy file beats many | Headscale |
What we would not claim
Throughput comparisons between the two circulate widely and mostly measure the machine they were run on. WireGuard commonly runs in the Linux kernel while Nebula's transport runs in userspace, which tends to favour WireGuard on a Linux server - but on saturated links, on other operating systems, or on modest CPUs, that advantage often vanishes into the noise. If throughput is genuinely your deciding factor, the only number worth having is the one you measure on your own path, with your own hardware, on the route your traffic actually takes.
★ Nuremberg GDPR datacenter · ✓ Dedicated IPv4 included · 200+ Mbps guaranteed
Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region→


