Virgin Tailscale vs Chad NetBird
Ever since I entered the rank of homelabber, I have been a Tailscale enjoyer.
As most of you know Tailscale is a wireguard-based private mesh vpn network which can be used to link devices. For home use this is a fantastic way to access your services from anywhere without port-forwarding or even messing with firewall rules (for the most part), or to share services or devices with others without posting them on the public internet.
This is significantly more secure than port-forwarding and exposing your services (and ip) to the public web, and is more secure than using a better but still flawed tunneling service like that offered by Clownflare. Tailscale gives you a way to share specific devices or services to other users, be they on your same Tailscale network (tailnet), separate accounts, and even offers a tunnelling service to expose your service - but not your ip - publicly.
Tailscale really is a fantastic product which significantly improves the tech tinkering hobby we're all into. It is geared towards the enterprise but is free for personal use. Previously personal use was limited to a few users and up to 100 devices - which let's be honest is more than enough for any serious personal or small-business use-case. Those limits were recently increased to up to 6 users and UNLIMITED devices. Impressive. Talk about something I would never need to pay for.
But the question often comes up: how on earth is Tailscale able to offer this amount of product for free?
Tailscale
Facts:
- Tailscale is a for-profit Canadian company (standby for tariffs on Tailscale by Orange Boomer).
- Tailscale was founded in 2019 by former Google engineers (sus).
- Tailscale has been VC-funded since 2020.
- Tailscale is not Free Software.
- Tailscale is not primarily self-hosted.
- Tailscale is not anonymous.
- Tailscale requires cloud authentication provider (Google, Microsoft, github, etc) for account creation.
Tailscale is a Tech Company
I am not saying this is bad in and of itself. Tailscale was a small tech startup that resembles the so many others in this space in how it is founded, operated, and funded. Bitwarden is a similar company that comes to mind that is also beloved by many of us.
Tailscale will do what it needs to do to survive and be profitable. Right now that means they are offering an incredible amount of product to us to consoom for free so they can increase their user-base and brand recognition. They know that if we are enthusiastic about using their product at home then we will likewise be enthusiastic about their product in the workplace.
I don't fault them for this at all, it's a fantastic strategy. I have no problem with Tailscale being a for-profit company. NetBird also is. It is just important to remember when we consider where Tailscale could go in the future and more importantly the future revenue opportunities they could exploit in the future. This is especially true considering the obvious problem with Tailscale: it is proprietary.
Tailscale is neither Free Software nor Open Source
Tailscale's clients are all open source software licensed under the BSD-3 clause license. This is an acceptable, GPL-compatible license per GNU and FSF, but obviously not preferred to GPL variants for a number of reasons
Tailscale's back-end software, however, is proprietary. We don't exactly know what is running on their servers. As such we cannot call Tailscale Open Source as typically advertised. This is similar to Telegram.
Tailscale can be Self-Hosted, sort-of
Tailscale is compatible with a self-hosted option called Headscale, but this is not a one-for-one version of the Tailscale control server. It is basically a reverse-engineered Tailscale server, like the Nouveau drivers on GNU/Linux.
Headscale gives us a decent idea of how Tailscale servers are running. It is a couple versions behind in terms of features and is not officially a Tailscale project, though there are Tailscale employees who contribute to the project and Headscale is mentioned in Tailscale documentation. Tailscale isn't disallowing Headscale, which is good.
Headscale is Open Source, so it is an improvement. It is also something Tailscale could pull the plug on in the future.
Tailscale is not Anonymous
Details about Tailscale's anonymity/privacy can be found in this Tailscale blog post.
In short, your Tailnet is private in that only you can access it and your traffic is end-to-end encrypted. It is not anonymous in that the location of your devices and where they are communicating is known to Tailscale. And they do collect what they describe as necessary telemetry.
To be fair, this is exactly as I would have expected and is probably a decent trade-off this for certain devices/services I need remote access to. I appreciate Tailscale being straightforward about this.
That being said, I can't help but wonder what they could be doing with this data now or in the future, particularly when there is a greater need for "line go up" by the VC.
Tailscale also requires some kind of slop account for authentication, be it github, Google, Microsoft, Apple, etc. There is no ability to just have an email account with Tailscale and 2FA from an authenticator app of your choosing.
This was the first red flag I experienced with Tailscale, but something I could accept considering what I got in return. Which is generally how anyone continues to use these kinds of slop services:
- "I use github because everyone is on github and I get the most traction there"
- "I use google because the product and ui are so convenient"
- "I use apple so I can flex on the poors of the world. I also have a Tesla on lease."
NetBird
Facts:
-
Founded in 2022 to address the two major shortcomings of Tailscale
- Proprietary back-end
- Cannot be self-hosted
- For-profit German company.
- Outside-funded, probably VC, just to a far less degree (for now).
- Fully Open Source
- Primarily self-hosted
- Does not require cloud authentication providers
Also a Tech Company
NetBird is still a for-profit company. Any issues you might have with Tailscale for that reason you will also have with NetBird.
Also (likely) Not Anonymous
I have no reason to believe NetBird cannot see the same metadata that Tailscale can see. I haven't checked the source code, but that's the key difference - I can check the source code for their servers (control plane), assuming that is actually what their severs are running.
Also BSD-3 Clause Licensed.
The clients and server are licensed under the same license as the Tailscale clients.
Also Free for Personal Use
NetBird offers their service for free for personal use with up to 5 users and 100 devices. I wonder what pressured Tailscale to increase their personal-tier device limit?…
Key Differences
NetBird has always been fully open-source and primarily self-hosted. Historically NetBird's public servers lagged in features compared a self-hosted NetBird server.
This is the fundamental difference that drastically changes the long-term viability and acceptability of NetBird compared to Tailscale.
Regardless of feature parity or lack thereof, NetBird's model is much better than that of Tailscale. It is much more in-line with the various corporate GNU/Linux companies - Red Hat, Canonical, SUSE, etc. Now I am no fan of corporate GNU/Linux compared to community projects, but that is because of the behaviour of the companies themselves and not how they or their projects are structured. I am no fan of SystemD but it is hecking-based free software licensed under the GPL.
Feature Comparison
In my use of NetBird I've found the features are by-and-large the same. I would rate it somewhere around 90% feature parity. There are things NetBird does better than Tailscale, there are things Tailscale does better than NetBird.
For now I am not self-hosting NetBird and have not been using Headscale. These comparisons are based on cloud-provided NetBird and Tailscale which I assume most users are or will be using.
Performance
No difference in terms of speed or latency. NetBird put out a video demonstrating this, assuming the data are accurate.
The only thing I notice is my android client takes a few seconds to connect to NetBird, whereas it was pretty instant with Tailscale.
GNU/Linux Clients
Installation
The official method of installing both Tailscale and NetBird is by the classic curl | sudo sh method.
My favourite for security.
Distributions
Fortunately the Tailscale client is found in most distribution package managers so you can get around running arbitrary scripts as root. The Tailscale repository can be added via the extrepo (external repository) package in Debian and derivatives. NetBird additionally provides instructions for adding their repository to Ubuntu, and this works on any Debian-based distribution.
NetBird is in Alpine's Community repository, and an (of course) out-of-date package is in nix.
Recently the incredibly popular renaissance guix channel added NetBird. NetBird-ui is still a work-in-progress.
Init Systems
Tailscale officially supports SystemD but runit and openrc service files can be found on Gentoo, alpine, and artix. I had to roll my own sysvinit Tailscale service on Devuan.
NetBird supports openrc, sysvinit, and I assume runit. Big W for NetBird in this regard, not that service files are difficult to write (contrary to what the Big SystemD lobby might lead you to believe).
NetBird has a GUI program with system tray, Tailscale does not. Not a huge deal and is not something I care much about. I believe the GUI app is just a web wrapper anyway.
CLI
NetBird's status command only offers information about the device you are on, whereas Tailscale's status command provides information about all the clients on your tailnet. I prefer Tailscale here, but it is not a deal breaker.
Management
Basically feature parity for management via the web ui.
Both services allow you to pool devices/services into groups and set policies and routing rules based on group, device, and user. Essentially both have their own built-in firewalls that are easy to figure out.
NetBird has additional features and is more intuitive in my opinion (minding any recency bias). NetBird gives you a cool routing graph so you have a nice visual of allowed and disallowed routes on you mesh network. I provide a few more reasons why NetBird's management interface is better throughout this post.
DNS
Both offer the ability to customize DNS settings. You can use their own DNS servers or specify your own within the respective management interfaces.
Both services offer ip addresses in the 100.x.x.x range.
Both client services will overwrite /etc/resolv.conf/ with their own DNS values.
Tailscale has a feature called MagicDNS which can be used with their DNS servers.
This allows you use the machine name (e.g. alpine-vm) instead of the Tailscale ip (100.x.x.x).
NetBird also has this feature, it just isn't named anything.
Both services allow you to use your own domain name on the respective VPN mesh network. As of now on NetBird this is only available if self-hosting, but I anticipate that changing in the future. NetBird's is a bit round about. NetBird's Reverse Proxy is used for exposing services to the web like a tunnel and requires your own domain. You can limit that exposure to just your NetBird network if your control plane is self-hosted, whereas you cannot (as of now) if using NetBird's cloud servers.
Tailscale goes a step further and issues you a ts.net address for your tailnet which can be used to access each service with valid https certs via Let's Encrypt.
Further you can change this ts.net address to be a random pairing of words.
I cycled through a bunch of combos until I got two words that were short and easy to remember, and then accessed any of my services with https://servicename.word1-word2.ts.net.
There was a bit of setup with via Tailscale serve, but worked extremely well once set up.
This is probably the nicest feature you don't get with NetBird unless you self-host and purchase a domain (for now).
NetBird does allow you to access your devices with the FQDN devicename.NetBird.cloud, but cannot be done via https and still requires ports specification.
Tailscale also has the ability to completely turn off MagicDNS so that your service or machine is only getting DNS from your LAN or provider of your choosing.
Basically Tailscale will no longer overwrite /etc/resolv.conf.
This means you can still access the service or device from the Tailscale ip, but the device will not be able to access other devices on the tailnet since it has no way of looking up tailnet ip addresses.
This was really useful on my two proxmox hosts which often lost DNS due to Tailscale's overwriting of /etc/resolv.conf, and I basically made this the standard on all my physical servers.
I had zero DNS issues on vms or containers with Tailscale DNS.
NetBird does not have this option that I know of. BUT in my testing I have not had any DNS issues on any of my hosts.
For both Tailscale and NetBird I set custom DNS addresses to point to the mesh and LAN ip of my adguard instances, basically ensuring I am using my adguard instances wherever I am. NetBird takes this a step further in that you can set DNS servers on a per-group basis. So assuming I had DNS issues on my proxmox hosts, I would just set the proxmox group to use quad-9 or some other public DNS instead of or in addition to adguard to ensure I am maintaining DNS on these devices. These devices are (hopefully) are not reaching out to the web for anything other than updates anyway, so it doesn't really matter. Whereas I might always want to use DNS with ad-blocking and/or unbound on a laptop or desktop.
From what I could figure out, Tailscale only allows DNS servers to be set for the entire tailnet, which is why I disabled MagicDNS on certain problematic devices.
Exit Nodes
Both Tailscale and NetBird allow you to set up an exit node: a device through which mesh network traffic can pass through. For home users this gives you the ability to access your actual LAN from the outside, rather than just the devices on your LAN. You'll even get a LAN ip.
This is great for accessing devices which cannot have a NetBird/Tailscale client, or when you're at the devicemaxxing level and have > 100 clients and still want to access stuff remotely.
NetBird allows you to toggle the use of an exit node through their UI app. NetBird also allows you specify exit node routes, for instance you can establish a route to a specific device on your LAN, rather than your entire LAN. You can additionally have a group of exit nodes.
Tailscale does not have this amount of refinement and ease of setup (all through NetBird webgui), and to be honest I could never get exit nodes to properly work in Tailscale. It was literally point, click, and verify in NetBird.
Exposing Services to the Web
This is where NetBird starts to break away from Tailscale (or will in the future). NetBird has Reverse Proxy (beta) and authentication services built in to the control plane which basically turns NetBird potentially into a one-stop shop for hosting. In fact you could use your self-hosted NetBird control plane on a VPS to be the reverse proxy and authentication engine for services running on the same VPS.
For exposing something like a personal gaming server at home, this seems like a no-brainer short of using another service which specializes in this sort of stuff.
There are some caveats to this (e.g. requires Traefik, mixed opinions on that) and is in beta. Additionally I've seen some comments about very high CPU usage compared to similar services like Pangolin. But it is clear they are offering much more than a Clownflare Tunnel clone.
Tailscale offers a service called Tailscale Funnel which to nobody's surprise is a clone of Clownflare's Tunnel. It works as intended.
Conclusion
I don't hate Tailscale and it has worked perfectly fine for me for a long time. Tailscale hasn't wronged me from a user standpoint and I have no reason to believe they are doing anything nefarious, despite their servers being proprietary. If it were my only option I'd probably still use it until I get on the elite ygggggggggdrasil level.
But given the foundational benefits of NetBird, there is no reason for me to use Tailscale over it.
Additionally NetBird has tangible benefits over Tailscale:
- Management UI
- DNS settings
- Exit Nodes
- Exposing Services
But I still find Tailscale to be superior in the some areas:
- Device limit
- Device support (GNU/Linux distro availability)
- Client performance (startup time and cli)
- Tailnet domain name w/ TLS certs
- Maturity
Inertia is going to be the biggest driver here as swapping clients on each device is no small task particularly with the potential of downtime. This can be streamlined to an great with access keys on NetBird, but each device has to be added before ssh can be enabled (from my testing). This can of course all be automated via shell scripts or Ansible, but it another thing that can go awry and require development and troubleshooting.
Tailscale and NetBird can run in parallel, but I bet you can guess the main issue you'll have - DNS.
You need to set up a way for one service to start first, most easily done with service dependencies, or starting one on boot and another some time after boot via cron or timer.
I still had occasional DNS issues when running both in parallel (competing /etc/resolv.conf changes).
After only doing a bit of testing, I decided to the rip the bandaid off, enabled NetBird and disabled Tailscale on all devices, and hoped for the best. So far so good.
If you've been using Tailscale or have been resorting to less-secure means for accessing your devices or services, give NetBird a try! I will be giving NetBird a deep-dive over the coming months and will update the site with my findings.